From a2849da20cc10db924c5d09172c753a67c8588d7 Mon Sep 17 00:00:00 2001
From: yoannchb-pro <71560747+yoannchb-pro@users.noreply.github.com>
Date: Wed, 30 Jul 2025 11:12:44 -0400
Subject: [PATCH] v1.1.4
---
CHANGELOG.md | 6 +
README.md | 4 +-
extension/MoodleGPT.js | 2 +-
extension/MoodleGPT.js.map | 2 +-
extension/manifest.json | 2 +-
extension/popup/popup.js | 2 +-
extension/popup/popup.js.map | 2 +-
package-lock.json | 827 ++++++++----------
package.json | 27 +-
src/background/core/create-question.ts | 2 +
src/background/core/get-response.ts | 4 +-
.../utils/{fixe-o1.ts => fixe-o.ts} | 4 +-
src/popup/gpt-version.ts | 4 +-
src/popup/version.ts | 2 +-
14 files changed, 384 insertions(+), 506 deletions(-)
rename src/background/utils/{fixe-o1.ts => fixe-o.ts} (76%)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d88e736..b0ff155 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# CHANGELOG
+## v1.1.4
+
+- Support for all `o` models
+- Removed `Clear my choice` in the api call
+- Code dependencies update
+
## v1.1.3
- Added `base url` and `max token` in config (by dmunozv04)
diff --git a/README.md b/README.md
index fd8dfe6..5b64838 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" >
-# MoodleGPT 1.1.3
+# MoodleGPT 1.1.4
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.3](#moodlegpt-113)
+- [MoodleGPT 1.1.4](#moodlegpt-114)
- [Chrome Webstore](#chrome-webstore)
- [Summary](#summary)
- [Disclaimer !](#disclaimer-)
diff --git a/extension/MoodleGPT.js b/extension/MoodleGPT.js
index c97496e..289e508 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,n,s){return new(n||(n=Promise))((function(r,o){function i(e){try{l(s.next(e))}catch(e){o(e)}}function a(e){try{l(s.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}l((s=s.apply(e,t||[])).next())}))}function n(e,t){const n=e.length>t.length?e.length:t.length;return 0===n?1:(n-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const n=[],s=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=s.length;++e){n.push([e]);for(let t=1;t<=r.length;++t)n[e][t]=0===e?t:Math.min(n[e-1][t]+1,n[e][t-1]+1,n[e-1][t-1]+(s[e-1]===r[t-1]?0:1))}return n[s.length][r.length]}(e,t))/n}function s(e,t){let s={element:null,similarity:0,value:null};for(const r of t){const t=n(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>s.similarity&&(s={element:r.element,value:r.value,similarity:t})}return s}"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,n,s){return t(this,void 0,void 0,(function*(){const t=n.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 s;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((n,s)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return s("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);n(e),r.remove()},i.onerror=e=>{s(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:s}),r}))}function l(e,n,s){return t(this,void 0,void 0,(function*(){const t={role:"user",content:yield a(e,n,s)};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 n=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=n.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=n.get("attempt"))&&void 0!==t?t:"",history:[]}}();return r=null!==o&&function(e,t){const n=["host","cmid","attempt"];for(const s of n)if(e[s]!==t[s])return!1;return!0}(o,l)?o:l,{messages:[i,...r.history,t],saveResponse(n){e.history&&(r.history.push(t),r.history.push({role:"assistant",content:n}),sessionStorage.moodleGPTHistory=JSON.stringify(r))}}}))}const c="RFC3986",u={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:e=>String(e)},h=Array.isArray,d=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),f=1024;function p(e,t){if(h(e)){const n=[];for(let s=0;sString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},y=Array.isArray,w=Array.prototype.push,b=function(e,t){w.apply(e,y(t)?t:[t])},_=Date.prototype.toISOString,v={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=f?o.slice(e,e+f):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]=d[s]:s<2048?n[n.length]=d[192|s>>6]+d[128|63&s]:s<55296||s>=57344?n[n.length]=d[224|s>>12]+d[128|s>>6&63]+d[128|63&s]:(e+=1,s=65536+((1023&s)<<10|1023&t.charCodeAt(e)),n[n.length]=d[240|s>>18]+d[128|s>>12&63]+d[128|s>>6&63]+d[128|63&s])}i+=n.join("")}return i},encodeValuesOnly:!1,format:c,formatter:u[c],indices:!1,serializeDate:e=>_.call(e),skipNulls:!1,strictNullHandling:!1};const x={};function S(e,t,n,s,r,o,i,a,l,c,u,h,d,f,m,g,w,_){let A=e,E=_,R=0,k=!1;for(;void 0!==(E=E.get(x))&&!k;){const t=E.get(e);if(R+=1,void 0!==t){if(t===R)throw new RangeError("Cyclic object value");k=!0}void 0===E.get(x)&&(R=0)}if("function"==typeof c?A=c(t,A):A instanceof Date?A=d?.(A):"comma"===n&&y(A)&&(A=p(A,(function(e){return e instanceof Date?d?.(e):e}))),null===A){if(o)return l&&!g?l(t,v.encoder,w,"key",f):t;A=""}if("string"==typeof(C=A)||"number"==typeof C||"boolean"==typeof C||"symbol"==typeof C||"bigint"==typeof C||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(A)){if(l){const e=g?t:l(t,v.encoder,w,"key",f);return[m?.(e)+"="+m?.(l(A,v.encoder,w,"value",f))]}return[m?.(t)+"="+m?.(String(A))]}var C;const P=[];if(void 0===A)return P;let I;if("comma"===n&&y(A))g&&l&&(A=p(A,l)),I=[{value:A.length>0?A.join(",")||null:void 0}];else if(y(c))I=c;else{const e=Object.keys(A);I=u?e.sort(u):e}const O=a?String(t).replace(/\./g,"%2E"):String(t),$=s&&y(A)&&1===A.length?O+"[]":O;if(r&&y(A)&&0===A.length)return $+"[]";for(let t=0;t0?f+d:""}const E="4.82.0";let R,k,C,P,I,O,$,T,j,q=!1;class M{constructor(e){this.body=e}get[Symbol.toStringTag](){return"MultipartBody"}}R||function(e,t={auto:!1}){if(q)throw new Error(`you must \`import 'openai/shims/${e.kind}'\` before importing anything else from openai`);if(R)throw new Error(`can't \`import 'openai/shims/${e.kind}'\` after \`import 'openai/shims/${R}'\``);q=t.auto,R=e.kind,k=e.fetch,C=e.FormData,P=e.File,I=e.ReadableStream,O=e.getMultipartRequestOptions,$=e.getDefaultAgent,T=e.fileFromPath,j=e.isFsReadStream}(function({manuallyImported:e}={}){const t=e?"You may need to use polyfills":"Add one of these imports before your first `import … from 'openai'`:\n- `import 'openai/shims/node'` (if you're running on Node)\n- `import 'openai/shims/web'` (otherwise)\n";let n,s,r,o;try{n=fetch,s=Request,r=Response,o=Headers}catch(e){throw new Error(`this environment is missing the following Web Fetch API type: ${e.message}. ${t}`)}return{kind:"web",fetch:n,Request:s,Response:r,Headers:o,FormData:"undefined"!=typeof FormData?FormData:class{constructor(){throw new Error(`file uploads aren't supported in this environment yet as 'FormData' is undefined. ${t}`)}},Blob:"undefined"!=typeof Blob?Blob:class{constructor(){throw new Error(`file uploads aren't supported in this environment yet as 'Blob' is undefined. ${t}`)}},File:"undefined"!=typeof File?File:class{constructor(){throw new Error(`file uploads aren't supported in this environment yet as 'File' is undefined. ${t}`)}},ReadableStream:"undefined"!=typeof ReadableStream?ReadableStream:class{constructor(){throw new Error(`streaming isn't supported in this environment yet as 'ReadableStream' is undefined. ${t}`)}},getMultipartRequestOptions:async(e,t)=>({...t,body:new M(e)}),getDefaultAgent:e=>{},fileFromPath:()=>{throw new Error("The `fileFromPath` function is only supported in Node. See the README for more details: https://www.github.com/openai/openai-node#file-uploads")},isFsReadStream:e=>!1}}(),{auto:!0});class N extends Error{}class L extends N{constructor(e,t,n,s){super(`${L.makeMessage(e,t,n)}`),this.status=e,this.headers=s,this.request_id=s?.["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 B({message:n,cause:qe(t)});const r=t?.error;return 400===e?new W(e,r,n,s):401===e?new U(e,r,n,s):403===e?new X(e,r,n,s):404===e?new H(e,r,n,s):409===e?new J(e,r,n,s):422===e?new V(e,r,n,s):429===e?new K(e,r,n,s):e>=500?new z(e,r,n,s):new L(e,r,n,s)}}class D extends L{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class B extends L{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class F extends B{constructor({message:e}={}){super({message:e??"Request timed out."})}}class W extends L{}class U extends L{}class X extends L{}class H extends L{}class J extends L{}class V extends L{}class K extends L{}class z extends L{}class Q extends N{constructor(){super("Could not parse response content as the length limit was reached")}}class G extends N{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class Y{constructor(){this.buffer=[],this.trailingCR=!1}decode(e){let t=this.decodeText(e);if(this.trailingCR&&(t="\r"+t,this.trailingCR=!1),t.endsWith("\r")&&(this.trailingCR=!0,t=t.slice(0,-1)),!t)return[];const n=Y.NEWLINE_CHARS.has(t[t.length-1]||"");let s=t.split(Y.NEWLINE_REGEXP);return n&&s.pop(),1!==s.length||n?(this.buffer.length>0&&(s=[this.buffer.join("")+s[0],...s.slice(1)],this.buffer=[]),n||(this.buffer=[s.pop()||""]),s):(this.buffer.push(s[0]),[])}decodeText(e){if(null==e)return"";if("string"==typeof e)return e;if("undefined"!=typeof Buffer){if(e instanceof Buffer)return e.toString();if(e instanceof Uint8Array)return Buffer.from(e).toString();throw new N(`Unexpected: received non-Uint8Array (${e.constructor.name}) stream chunk in an environment with a global "Buffer" defined, which this library assumes to be Node. Please report this error.`)}if("undefined"!=typeof TextDecoder){if(e instanceof Uint8Array||e instanceof ArrayBuffer)return this.textDecoder??(this.textDecoder=new TextDecoder("utf8")),this.textDecoder.decode(e);throw new N(`Unexpected: received non-Uint8Array/ArrayBuffer (${e.constructor.name}) in a web platform. Please report this error.`)}throw new N("Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.")}flush(){if(!this.buffer.length&&!this.trailingCR)return[];const e=[this.buffer.join("")];return this.buffer=[],this.trailingCR=!1,e}}function Z(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}}}Y.NEWLINE_CHARS=new Set(["\n","\r"]),Y.NEWLINE_REGEXP=/\r\n|[\n\r]/g;class ee{constructor(e,t){this.iterator=e,this.controller=t}static fromSSEResponse(e,t){let n=!1;return new ee((async function*(){if(n)throw new Error("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)throw t.abort(),new N("Attempted to iterate over a response with no body");const n=new ne,s=new Y,r=Z(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?(new TextEncoder).encode(n):n;let s,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(s=te(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(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null===n.event){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(e&&e.error)throw new L(void 0,e.error,void 0,void 0);yield e}else{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 L(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}s=!0}catch(e){if(e instanceof Error&&"AbortError"===e.name)return;throw e}finally{s||t.abort()}}),t)}static fromReadableStream(e,t){let n=!1;return new ee((async function*(){if(n)throw new Error("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 Y,n=Z(e);for await(const e of n)for(const n of t.decode(e))yield n;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(e instanceof Error&&"AbortError"===e.name)return;throw e}finally{s||t.abort()}}),t)}[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 ee((()=>s(e)),this.controller),new ee((()=>s(t)),this.controller)]}toReadableStream(){const e=this;let t;const n=new TextEncoder;return new I({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:r}=await t.next();if(r)return e.close();const o=n.encode(JSON.stringify(s)+"\n");e.enqueue(o)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}function te(e){for(let t=0;tnull!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob,re=e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&oe(e),oe=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 ie(e,t,n){if(e=await e,re(e))return e;if(se(e)){const s=await e.blob();t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()??"unknown_file");const r=oe(s)?[await s.arrayBuffer()]:[s];return new P(r,t,n)}const s=await async function(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(oe(e))t.push(await e.arrayBuffer());else{if(!le(e))throw new Error(`Unexpected data type: ${typeof e}; constructor: ${e?.constructor?.name}; props: ${function(e){const t=Object.getOwnPropertyNames(e);return`[${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`);for await(const n of e)t.push(n)}return t}(e);if(t||(t=function(e){return ae(e.name)||ae(e.filename)||ae(e.path)?.split(/[\\/]/).pop()}(e)??"unknown_file"),!n?.type){const e=s[0]?.type;"string"==typeof e&&(n={...n,type:e})}return new P(s,t,n)}const ae=e=>"string"==typeof e?e:"undefined"!=typeof Buffer&&e instanceof Buffer?String(e):void 0,le=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],ce=e=>e&&"object"==typeof e&&e.body&&"MultipartBody"===e[Symbol.toStringTag],ue=async e=>{const t=await he(e.body);return O(t,e)},he=async e=>{const t=new C;return await Promise.all(Object.entries(e||{}).map((([e,n])=>de(t,e,n)))),t},de=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((e=>re(e)||se(e)||j(e))(n)){const s=await ie(n);e.append(t,s)}else if(Array.isArray(n))await Promise.all(n.map((n=>de(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])=>de(e,`${t}[${n}]`,s))))}}};var fe,pe=function(e,t,n,s,r){if("m"===s)throw new TypeError("Private method is not writable");if("a"===s&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===s?r.call(e,n):r?r.value=n:t.set(e,n),n},me=function(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)};async function ge(e){const{response:t}=e;if(e.options.stream)return Fe("response",t.status,t.url,t.headers,t.body),e.options.__streamClass?e.options.__streamClass.fromSSEResponse(t,e.controller):ee.fromSSEResponse(t,e.controller);if(204===t.status)return null;if(e.options.__binaryResponse)return t;const n=t.headers.get("content-type");if(n?.includes("application/json")||n?.includes("application/vnd.api+json")){const e=await t.json();return Fe("response",t.status,t.url,t.headers,e),ye(e,t)}const s=await t.text();return Fe("response",t.status,t.url,t.headers,s),s}function ye(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 we extends Promise{constructor(e,t=ge){super((e=>{e(null)})),this.responsePromise=e,this.parseResponse=t}_thenUnwrap(e){return new we(this.responsePromise,(async t=>ye(e(await this.parseResponse(t),t),t.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(this.parseResponse)),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)}}class be{constructor({baseURL:e,maxRetries:t=2,timeout:n=6e5,httpAgent:s,fetch:r}){this.baseURL=e,this.maxRetries=je("maxRetries",t),this.timeout=je("timeout",n),this.httpAgent=s,this.fetch=r??k}authHeaders(e){return{}}defaultHeaders(e){return{Accept:"application/json","Content-Type":"application/json","User-Agent":this.getUserAgent(),...Pe(),...this.authHeaders(e)}}validateHeaders(e,t){}defaultIdempotencyKey(){return`stainless-node-retry-${We()}`}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((async n=>{const s=n&&oe(n?.body)?new DataView(await n.body.arrayBuffer()):n?.body instanceof DataView?n.body:n?.body instanceof ArrayBuffer?new DataView(n.body):n&&ArrayBuffer.isView(n?.body)?new DataView(n.body.buffer):n?.body;return{method:e,path:t,...n,body:s}})))}getAPIList(e,t,n){return this.requestAPIList(t,{method:"get",path:e,...n})}calculateContentLength(e){if("string"==typeof e){if("undefined"!=typeof Buffer)return Buffer.byteLength(e,"utf8").toString();if("undefined"!=typeof TextEncoder){return(new TextEncoder).encode(e).length.toString()}}else if(ArrayBuffer.isView(e))return e.byteLength.toString();return null}buildRequest(e,{retryCount:t=0}={}){const{method:n,path:s,query:r,headers:o={}}=e,i=ArrayBuffer.isView(e.body)||e.__binaryRequest&&"string"==typeof e.body?e.body:ce(e.body)?e.body.body:e.body?JSON.stringify(e.body,null,2):null,a=this.calculateContentLength(i),l=this.buildURL(s,r);"timeout"in e&&je("timeout",e.timeout);const c=e.timeout??this.timeout,u=e.httpAgent??this.httpAgent??$(l),h=c+1e3;"number"==typeof u?.options?.timeout&&h>(u.options.timeout??0)&&(u.options.timeout=h),this.idempotencyHeader&&"get"!==n&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),o[this.idempotencyHeader]=e.idempotencyKey);return{req:{method:n,...i&&{body:i},headers:this.buildHeaders({options:e,headers:o,contentLength:a,retryCount:t}),...u&&{agent:u},signal:e.signal??null},url:l,timeout:c}}buildHeaders({options:e,headers:t,contentLength:n,retryCount:s}){const r={};n&&(r["content-length"]=n);const o=this.defaultHeaders(e);return De(r,o),De(r,t),ce(e.body)&&"node"!==R&&delete r["content-type"],void 0===Ue(o,"x-stainless-retry-count")&&void 0===Ue(t,"x-stainless-retry-count")&&(r["x-stainless-retry-count"]=String(s)),this.validateHeaders(r,t),r}async prepareOptions(e){}async prepareRequest(e,{url:t,options:n}){}parseHeaders(e){return e?Symbol.iterator in e?Object.fromEntries(Array.from(e).map((e=>[...e]))):{...e}:{}}makeStatusError(e,t,n,s){return L.generate(e,t,n,s)}request(e,t=null){return new we(this.makeRequest(e,t))}async makeRequest(e,t){const n=await e,s=n.maxRetries??this.maxRetries;null==t&&(t=s),await this.prepareOptions(n);const{req:r,url:o,timeout:i}=this.buildRequest(n,{retryCount:s-t});if(await this.prepareRequest(r,{url:o,options:n}),Fe("request",o,n,r.headers),n.signal?.aborted)throw new D;const a=new AbortController,l=await this.fetchWithTimeout(o,r,i,a).catch(qe);if(l instanceof Error){if(n.signal?.aborted)throw new D;if(t)return this.retryRequest(n,t);if("AbortError"===l.name)throw new F;throw new B({cause:l})}const c=xe(l.headers);if(!l.ok){if(t&&this.shouldRetry(l)){return Fe(`response (error; ${`retrying, ${t} attempts remaining`})`,l.status,o,c),this.retryRequest(n,t,c)}const e=await l.text().catch((e=>qe(e).message)),s=Ie(e),r=s?void 0:e;Fe(`response (error; ${t?"(error; no more retries left)":"(error; not retryable)"})`,l.status,o,c,r);throw this.makeStatusError(l.status,s,r,c)}return{response:l,options:n,controller:a}}requestAPIList(e,t){const n=this.makeRequest(t,null);return new ve(this,n,e)}buildURL(e,t){const n=$e(e)?new URL(e):new URL(this.baseURL+(this.baseURL.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),s=this.defaultQuery();return Ne(s)||(t={...s,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(n.search=this.stringifyQuery(t)),n.toString()}stringifyQuery(e){return Object.entries(e).filter((([e,t])=>void 0!==t)).map((([e,t])=>{if("string"==typeof t||"number"==typeof t||"boolean"==typeof t)return`${encodeURIComponent(e)}=${encodeURIComponent(t)}`;if(null===t)return`${encodeURIComponent(e)}=`;throw new N(`Cannot stringify type ${typeof t}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)})).join("&")}async fetchWithTimeout(e,t,n,s){const{signal:r,...o}=t||{};r&&r.addEventListener("abort",(()=>s.abort()));const i=setTimeout((()=>s.abort()),n),a={signal:s.signal,...o};return a.method&&(a.method=a.method.toUpperCase()),this.fetch.call(void 0,e,a).finally((()=>{clearTimeout(i)}))}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){let s;const r=n?.["retry-after-ms"];if(r){const e=parseFloat(r);Number.isNaN(e)||(s=e)}const o=n?.["retry-after"];if(o&&!s){const e=parseFloat(o);s=Number.isNaN(e)?Date.parse(o)-Date.now():1e3*e}if(!(s&&0<=s&&s<6e4)){const n=e.maxRetries??this.maxRetries;s=this.calculateDefaultRetryTimeoutMillis(t,n)}return await Te(s),this.makeRequest(e,t-1)}calculateDefaultRetryTimeoutMillis(e,t){const n=t-e;return Math.min(.5*Math.pow(2,n),8)*(1-.25*Math.random())*1e3}getUserAgent(){return`${this.constructor.name}/JS ${E}`}}class _e{constructor(e,t,n,s){fe.set(this,void 0),pe(this,fe,e,"f"),this.options=s,this.response=t,this.body=n}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageInfo()}async getNextPage(){const e=this.nextPageInfo();if(!e)throw new N("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");const t={...this.options};if("params"in e&&"object"==typeof t.query)t.query={...t.query,...e.params};else if("url"in e){const n=[...Object.entries(t.query||{}),...e.url.searchParams.entries()];for(const[t,s]of n)e.url.searchParams.set(t,s);t.query=void 0,t.path=e.url.toString()}return await me(this,fe,"f").requestAPIList(this.constructor,t)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(fe=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class ve extends we{constructor(e,t,n){super(t,(async t=>new n(e,t.response,await ge(t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}const xe=e=>new Proxy(Object.fromEntries(e.entries()),{get(e,t){const n=t.toString();return e[n.toLowerCase()]||e[n]}}),Se={method:!0,path:!0,query:!0,body:!0,headers:!0,maxRetries:!0,stream:!0,timeout:!0,httpAgent:!0,signal:!0,idempotencyKey:!0,__binaryRequest:!0,__binaryResponse:!0,__streamClass:!0},Ae=e=>"object"==typeof e&&null!==e&&!Ne(e)&&Object.keys(e).every((e=>Le(Se,e))),Ee=()=>{if("undefined"!=typeof Deno&&null!=Deno.build)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":E,"X-Stainless-OS":ke(Deno.build.os),"X-Stainless-Arch":Re(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":E,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":process.version};if("[object process]"===Object.prototype.toString.call("undefined"!=typeof process?process:0))return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":E,"X-Stainless-OS":ke(process.platform),"X-Stainless-Arch":Re(process.arch),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":process.version};const e=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 e?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":E,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${e.browser}`,"X-Stainless-Runtime-Version":e.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":E,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const Re=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",ke=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 Ce;const Pe=()=>Ce??(Ce=Ee()),Ie=e=>{try{return JSON.parse(e)}catch(e){return}},Oe=/^[a-z][a-z0-9+.-]*:/i,$e=e=>Oe.test(e),Te=e=>new Promise((t=>setTimeout(t,e))),je=(e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new N(`${e} must be an integer`);if(t<0)throw new N(`${e} must be a positive integer`);return t},qe=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e)try{return new Error(JSON.stringify(e))}catch{}return new Error(e)},Me=e=>"undefined"!=typeof process?process.env?.[e]?.trim()??void 0:"undefined"!=typeof Deno?Deno.env?.get?.(e)?.trim():void 0;function Ne(e){if(!e)return!0;for(const t in e)return!1;return!0}function Le(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function De(e,t){for(const n in t){if(!Le(t,n))continue;const s=n.toLowerCase();if(!s)continue;const r=t[n];null===r?delete e[s]:void 0!==r&&(e[s]=r)}}const Be=new Set(["authorization","api-key"]);function Fe(e,...t){if("undefined"!=typeof process&&"true"===process?.env?.DEBUG){const n=t.map((e=>{if(!e)return e;if(e.headers){const t={...e,headers:{...e.headers}};for(const n in e.headers)Be.has(n.toLowerCase())&&(t.headers[n]="REDACTED");return t}let t=null;for(const n in e)Be.has(n.toLowerCase())&&(t??(t={...e}),t[n]="REDACTED");return t??e}));console.log(`OpenAI:DEBUG:${e}`,...n)}}const We=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})),Ue=(e,t)=>{const n=t.toLowerCase();if((e=>"function"==typeof e?.get)(e)){const s=t[0]?.toUpperCase()+t.substring(1).replace(/([^\w])(\w)/g,((e,t,n)=>t+n.toUpperCase()));for(const r of[t,n,t.toUpperCase(),s]){const t=e.get(r);if(t)return t}}for(const[s,r]of Object.entries(e))if(s.toLowerCase()===n)return Array.isArray(r)?(r.length<=1||console.warn(`Received ${r.length} entries for the ${t} header, using the first entry.`),r[0]):r};function Xe(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}class He extends _e{constructor(e,t,n,s){super(e,t,n,s),this.data=n.data||[],this.object=n.object}getPaginatedItems(){return this.data??[]}nextPageParams(){return null}nextPageInfo(){return null}}class Je extends _e{constructor(e,t,n,s){super(e,t,n,s),this.data=n.data||[]}getPaginatedItems(){return this.data??[]}nextPageParams(){const e=this.nextPageInfo();if(!e)return null;if("params"in e)return e.params;const t=Object.fromEntries(e.url.searchParams);return Object.keys(t).length?t:null}nextPageInfo(){const e=this.getPaginatedItems();if(!e.length)return null;const t=e[e.length-1]?.id;return t?{params:{after:t}}:null}}class Ve{constructor(e){this._client=e}}let Ke=class extends Ve{create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}},ze=class extends Ve{constructor(){super(...arguments),this.completions=new Ke(this._client)}};ze.Completions=Ke;class Qe extends Ve{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:{Accept:"application/octet-stream",...t?.headers},__binaryResponse:!0})}}class Ge extends Ve{create(e,t){return this._client.post("/audio/transcriptions",ue({body:e,...t}))}}class Ye extends Ve{create(e,t){return this._client.post("/audio/translations",ue({body:e,...t}))}}class Ze extends Ve{constructor(){super(...arguments),this.transcriptions=new Ge(this._client),this.translations=new Ye(this._client),this.speech=new Qe(this._client)}}Ze.Transcriptions=Ge,Ze.Translations=Ye,Ze.Speech=Qe;class et extends Ve{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(`/batches/${e}`,t)}list(e={},t){return Ae(e)?this.list({},e):this._client.getAPIList("/batches",tt,{query:e,...t})}cancel(e,t){return this._client.post(`/batches/${e}/cancel`,t)}}class tt extends Je{}et.BatchesPage=tt;class nt extends Ve{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}retrieve(e,t){return this._client.get(`/assistants/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}update(e,t,n){return this._client.post(`/assistants/${e}`,{body:t,...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}list(e={},t){return Ae(e)?this.list({},e):this._client.getAPIList("/assistants",st,{query:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}del(e,t){return this._client.delete(`/assistants/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}}class st extends Je{}function rt(e){return"function"==typeof e.parse}nt.AssistantsPage=st;const ot=e=>"assistant"===e?.role,it=e=>"function"===e?.role,at=e=>"tool"===e?.role;var lt,ct,ut,ht,dt,ft,pt,mt,gt,yt,wt,bt,_t,vt=function(e,t,n,s,r){if("m"===s)throw new TypeError("Private method is not writable");if("a"===s&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===s?r.call(e,n):r?r.value=n:t.set(e,n),n},xt=function(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)};class St{constructor(){lt.add(this),this.controller=new AbortController,ct.set(this,void 0),ut.set(this,(()=>{})),ht.set(this,(()=>{})),dt.set(this,void 0),ft.set(this,(()=>{})),pt.set(this,(()=>{})),mt.set(this,{}),gt.set(this,!1),yt.set(this,!1),wt.set(this,!1),bt.set(this,!1),vt(this,ct,new Promise(((e,t)=>{vt(this,ut,e,"f"),vt(this,ht,t,"f")})),"f"),vt(this,dt,new Promise(((e,t)=>{vt(this,ft,e,"f"),vt(this,pt,t,"f")})),"f"),xt(this,ct,"f").catch((()=>{})),xt(this,dt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),xt(this,lt,"m",_t).bind(this))}),0)}_connected(){this.ended||(xt(this,ut,"f").call(this),this._emit("connect"))}get ended(){return xt(this,gt,"f")}get errored(){return xt(this,yt,"f")}get aborted(){return xt(this,wt,"f")}abort(){this.controller.abort()}on(e,t){return(xt(this,mt,"f")[e]||(xt(this,mt,"f")[e]=[])).push({listener:t}),this}off(e,t){const n=xt(this,mt,"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(xt(this,mt,"f")[e]||(xt(this,mt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,n)=>{vt(this,bt,!0,"f"),"error"!==e&&this.once("error",n),this.once(e,t)}))}async done(){vt(this,bt,!0,"f"),await xt(this,dt,"f")}_emit(e,...t){if(xt(this,gt,"f"))return;"end"===e&&(vt(this,gt,!0,"f"),xt(this,ft,"f").call(this));const n=xt(this,mt,"f")[e];if(n&&(xt(this,mt,"f")[e]=n.filter((e=>!e.once)),n.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return xt(this,bt,"f")||n?.length||Promise.reject(e),xt(this,ht,"f").call(this,e),xt(this,pt,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];xt(this,bt,"f")||n?.length||Promise.reject(e),xt(this,ht,"f").call(this,e),xt(this,pt,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function At(e){return"auto-parseable-response-format"===e?.$brand}function Et(e){return"auto-parseable-tool"===e?.$brand}function Rt(e,t){const n=e.choices.map((e=>{if("length"===e.finish_reason)throw new Q;if("content_filter"===e.finish_reason)throw new G;return{...e,message:{...e.message,tool_calls:e.message.tool_calls?.map((e=>function(e,t){const n=e.tools?.find((e=>e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:Et(n)?n.$parseRaw(t.function.arguments):n?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??[],parsed:e.message.content&&!e.message.refusal?kt(t,e.message.content):null}}}));return{...e,choices:n}}function kt(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 Ct(e,t){if(!e)return!1;const n=e.tools?.find((e=>e.function?.name===t.function.name));return Et(n)||n?.function.strict||!1}function Pt(e){return!!At(e.response_format)||(e.tools?.some((e=>Et(e)||"function"===e.type&&!0===e.function.strict))??!1)}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,bt=new WeakMap,lt=new WeakSet,_t=function(e){if(vt(this,yt,!0,"f"),e instanceof Error&&"AbortError"===e.name&&(e=new D),e instanceof D)return vt(this,wt,!0,"f"),this._emit("abort",e);if(e instanceof N)return this._emit("error",e);if(e instanceof Error){const t=new N(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new N(String(e)))};var It,Ot,$t,Tt,jt,qt,Mt,Nt,Lt=function(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)};const Dt=10;class Bt extends St{constructor(){super(...arguments),It.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)||at(e))&&e.content)this._emit("functionCallResult",e.content);else if(ot(e)&&e.function_call)this._emit("functionCall",e.function_call);else if(ot(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new N("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),Lt(this,It,"m",Ot).call(this)}async finalMessage(){return await this.done(),Lt(this,It,"m",$t).call(this)}async finalFunctionCall(){return await this.done(),Lt(this,It,"m",Tt).call(this)}async finalFunctionCallResult(){return await this.done(),Lt(this,It,"m",jt).call(this)}async totalUsage(){return await this.done(),Lt(this,It,"m",qt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=Lt(this,It,"m",$t).call(this);t&&this._emit("finalMessage",t);const n=Lt(this,It,"m",Ot).call(this);n&&this._emit("finalContent",n);const s=Lt(this,It,"m",Tt).call(this);s&&this._emit("finalFunctionCall",s);const r=Lt(this,It,"m",jt).call(this);null!=r&&this._emit("finalFunctionCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",Lt(this,It,"m",qt).call(this))}async _createChatCompletion(e,t,n){const s=n?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),Lt(this,It,"m",Mt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...n,signal:this.controller.signal});return this._connected(),this._addChatCompletion(Rt(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 _runFunctions(e,t,n){const s="function",{function_call:r="auto",stream:o,...i}=t,a="string"!=typeof r&&r?.name,{maxChatCompletions:l=Dt}=n||{},c={};for(const e of t.functions)c[e.name||e.function.name]=e;const u=t.functions.map((e=>({name:e.name||e.function.name,parameters:e.parameters,description:e.description})));for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e.name))).join(", ")}. Please try again`;this._addMessage({role:s,name:l,content:e});continue}if(a&&a!==l){const e=`Invalid function_call: ${JSON.stringify(l)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:s,name:l,content:e});continue}let f;try{f=rt(d)?await d.parse(h):h}catch(e){this._addMessage({role:s,name:l,content:e instanceof Error?e.message:String(e)});continue}const p=await d.function(f,this),m=Lt(this,It,"m",Nt).call(this,p);if(this._addMessage({role:s,name:l,content:m}),a)return}}async _runTools(e,t,n){const s="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&r?.function?.name,{maxChatCompletions:l=Dt}=n||{},c=t.tools.map((e=>{if(Et(e)){if(!e.$callback)throw new N("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 h="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=rt(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=Lt(this,It,"m",Nt).call(this,l);if(this._addMessage({role:s,tool_call_id:t,content:c}),a)return}}}}It=new WeakSet,Ot=function(){return Lt(this,It,"m",$t).call(this).content??null},$t=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ot(t)){const{function_call:e,...n}=t,s={...n,content:t.content??null,refusal:t.refusal??null};return e&&(s.function_call=e),s}}throw new N("stream ended without producing a ChatCompletionMessage with role=assistant")},Tt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ot(t)&&t?.function_call)return t.function_call;if(ot(t)&&t?.tool_calls?.length)return t.tool_calls.at(-1)?.function}},jt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(it(t)&&null!=t.content)return t.content;if(at(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},Mt=function(e){if(null!=e.n&&e.n>1)throw new N("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Nt=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class Ft extends Bt{static runFunctions(e,t,n){const s=new Ft,r={...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"runFunctions"}};return s._run((()=>s._runFunctions(e,t,r))),s}static runTools(e,t,n){const s=new Ft,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),ot(e)&&e.content&&this._emit("content",e.content)}}const Wt=1,Ut=2,Xt=4,Ht=8,Jt=16,Vt=32,Kt=64,zt=128,Qt=256,Gt=511;class Yt extends Error{}class Zt extends Error{}const en=(e,t)=>{const n=e.length;let s=0;const r=e=>{throw new Yt(`${e} at position ${s}`)},o=e=>{throw new Zt(`${e} at position ${s}`)},i=()=>(h(),s>=n&&r("Unexpected end of input"),'"'===e[s]?a():"{"===e[s]?l():"["===e[s]?c():"null"===e.substring(s,s+4)||Jt&t&&n-s<4&&"null".startsWith(e.substring(s))?(s+=4,null):"true"===e.substring(s,s+4)||Vt&t&&n-s<4&&"true".startsWith(e.substring(s))?(s+=4,!0):"false"===e.substring(s,s+5)||Vt&t&&n-s<5&&"false".startsWith(e.substring(s))?(s+=5,!1):"Infinity"===e.substring(s,s+8)||zt&t&&n-s<8&&"Infinity".startsWith(e.substring(s))?(s+=8,1/0):"-Infinity"===e.substring(s,s+9)||Qt&t&&1{const i=s;let a=!1;for(s++;s{s++,h();const o={};try{for(;"}"!==e[s];){if(h(),s>=n&&Ht&t)return o;const r=a();h(),s++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Ht&t)return o;throw e}h(),","===e[s]&&s++}}catch(e){if(Ht&t)return o;r("Expected '}' at end of object")}return s++,o},c=()=>{s++;const n=[];try{for(;"]"!==e[s];)n.push(i()),h(),","===e[s]&&s++}catch(e){if(Xt&t)return n;r("Expected ']' at end of array")}return s++,n},u=()=>{if(0===s){"-"===e&&Ut&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(n){if(Ut&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||Ut&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,s))}catch(n){"-"===e.substring(i,s)&&Ut&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;sfunction(e,t=Gt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return en(e.trim(),t)}(e,Gt^Ut);var nn,sn,rn,on,an,ln,cn,un,hn,dn,fn,pn,mn=function(e,t,n,s,r){if("m"===s)throw new TypeError("Private method is not writable");if("a"===s&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===s?r.call(e,n):r?r.value=n:t.set(e,n),n},gn=function(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)};class yn extends Bt{constructor(e){super(),nn.add(this),sn.set(this,void 0),rn.set(this,void 0),on.set(this,void 0),mn(this,sn,e,"f"),mn(this,rn,[],"f")}get currentChatCompletionSnapshot(){return gn(this,on,"f")}static fromReadableStream(e){const t=new yn(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,n){const s=new yn(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()))),gn(this,nn,"m",an).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)gn(this,nn,"m",cn).call(this,e);if(r.controller.signal?.aborted)throw new D;return this._addChatCompletion(gn(this,nn,"m",dn).call(this))}async _fromReadableStream(e,t){const n=t?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),gn(this,nn,"m",an).call(this),this._connected();const s=ee.fromReadableStream(e,this.controller);let r;for await(const e of s)r&&r!==e.id&&this._addChatCompletion(gn(this,nn,"m",dn).call(this)),gn(this,nn,"m",cn).call(this,e),r=e.id;if(s.controller.signal?.aborted)throw new D;return this._addChatCompletion(gn(this,nn,"m",dn).call(this))}[(sn=new WeakMap,rn=new WeakMap,on=new WeakMap,nn=new WeakSet,an=function(){this.ended||mn(this,on,void 0,"f")},ln=function(e){let t=gn(this,rn,"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},gn(this,rn,"f")[e.index]=t,t)},cn=function(e){if(this.ended)return;const t=gn(this,nn,"m",pn).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=gn(this,nn,"m",ln).call(this,e);e.finish_reason&&(gn(this,nn,"m",hn).call(this,e),null!=s.current_tool_call_index&&gn(this,nn,"m",un).call(this,e,s.current_tool_call_index));for(const t of n.delta.tool_calls??[])s.current_tool_call_index!==t.index&&(gn(this,nn,"m",hn).call(this,e),null!=s.current_tool_call_index&&gn(this,nn,"m",un).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??""}))}}},un=function(e,t){if(gn(this,nn,"m",ln).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=gn(this,sn,"f")?.tools?.find((e=>"function"===e.type&&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:Et(e)?e.$parseRaw(n.function.arguments):e?.function.strict?JSON.parse(n.function.arguments):null})}else n.type},hn=function(e){const t=gn(this,nn,"m",ln).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const n=gn(this,nn,"m",fn).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}))},dn=function(){if(this.ended)throw new N("stream has ended, this shouldn't happen");const e=gn(this,on,"f");if(!e)throw new N("request ended without sending any chunks");return mn(this,on,void 0,"f"),mn(this,rn,[],"f"),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 N(`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 N(`missing role for choice ${s}`);if(a){const{arguments:e,name:l}=a;if(null==e)throw new N(`missing function_call.arguments for choice ${s}`);if(!l)throw new N(`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 N(`missing choices[${s}].tool_calls[${n}].id\n${wn(e)}`);if(null==o)throw new N(`missing choices[${s}].tool_calls[${n}].type\n${wn(e)}`);if(null==c)throw new N(`missing choices[${s}].tool_calls[${n}].function.name\n${wn(e)}`);if(null==l)throw new N(`missing choices[${s}].tool_calls[${n}].function.arguments\n${wn(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&&Pt(t)?Rt(e,t):{...e,choices:e.choices.map((e=>({...e,message:{...e.message,parsed:null,tool_calls:e.message.tool_calls??[]}})))}}(l,t)}(e,gn(this,sn,"f"))},fn=function(){const e=gn(this,sn,"f")?.response_format;return At(e)?e:null},pn=function(e){var t,n,s,r;let o=gn(this,on,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=mn(this,on,{...a,choices:[]},"f");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,gn(this,sn,"f")&&Pt(gn(this,sn,"f")))){if("length"===a)throw new Q;if("content_filter"===a)throw new G}if(Object.assign(e,u),!i)continue;const{content:h,refusal:d,function_call:f,role:p,tool_calls:m,...g}=i;if(Object.assign(e.message,g),d&&(e.message.refusal=(e.message.refusal||"")+d),p&&(e.message.role=p),f&&(e.message.function_call?(f.name&&(e.message.function_call.name=f.name),f.arguments&&((s=e.message.function_call).arguments??(s.arguments=""),e.message.function_call.arguments+=f.arguments)):e.message.function_call=f),h&&(e.message.content=(e.message.content||"")+h,!e.message.refusal&&gn(this,nn,"m",fn).call(this)&&(e.message.parsed=tn(e.message.content))),m){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:n,type:s,function:o,...i}of m){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,Ct(gn(this,sn,"f"),a)&&(a.function.parsed_arguments=tn(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 ee(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function wn(e){return JSON.stringify(e)}class bn extends yn{static fromReadableStream(e){const t=new bn(null);return t._run((()=>t._fromReadableStream(e))),t}static runFunctions(e,t,n){const s=new bn(null),r={...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"runFunctions"}};return s._run((()=>s._runFunctions(e,t,r))),s}static runTools(e,t,n){const s=new bn(t),r={...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"runTools"}};return s._run((()=>s._runTools(e,t,r))),s}}let _n=class extends Ve{parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new N(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new N(`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":"beta.chat.completions.parse"}})._thenUnwrap((t=>Rt(t,e)))}runFunctions(e,t){return e.stream?bn.runFunctions(this._client,e,t):Ft.runFunctions(this._client,e,t)}runTools(e,t){return e.stream?bn.runTools(this._client,e,t):Ft.runTools(this._client,e,t)}stream(e,t){return yn.createChatCompletion(this._client,e,t)}};class vn extends Ve{constructor(){super(...arguments),this.completions=new _n(this._client)}}!function(e){e.Completions=_n}(vn||(vn={}));class xn extends Ve{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}}class Sn extends Ve{constructor(){super(...arguments),this.sessions=new xn(this._client)}}Sn.Sessions=xn;var An,En,Rn,kn,Cn,Pn,In,On,$n,Tn,jn,qn,Mn,Nn,Ln,Dn,Bn,Fn,Wn,Un,Xn,Hn,Jn=function(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)},Vn=function(e,t,n,s,r){if("m"===s)throw new TypeError("Private method is not writable");if("a"===s&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===s?r.call(e,n):r?r.value=n:t.set(e,n),n};class Kn extends St{constructor(){super(...arguments),An.add(this),En.set(this,[]),Rn.set(this,{}),kn.set(this,{}),Cn.set(this,void 0),Pn.set(this,void 0),In.set(this,void 0),On.set(this,void 0),$n.set(this,void 0),Tn.set(this,void 0),jn.set(this,void 0),qn.set(this,void 0),Mn.set(this,void 0)}[(En=new WeakMap,Rn=new WeakMap,kn=new WeakMap,Cn=new WeakMap,Pn=new WeakMap,In=new WeakMap,On=new WeakMap,$n=new WeakMap,Tn=new WeakMap,jn=new WeakMap,qn=new WeakMap,Mn=new WeakMap,An=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 Kn;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=ee.fromReadableStream(e,this.controller);for await(const e of s)Jn(this,An,"m",Nn).call(this,e);if(s.controller.signal?.aborted)throw new D;return this._addRun(Jn(this,An,"m",Ln).call(this))}toReadableStream(){return new ee(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,n,s,r){const o=new Kn;return o._run((()=>o._runToolAssistantStream(e,t,n,s,{...r,headers:{...r?.headers,"X-Stainless-Helper-Method":"stream"}}))),o}async _createToolAssistantStream(e,t,n,s,r){const o=r?.signal;o&&(o.aborted&&this.controller.abort(),o.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.submitToolOutputs(t,n,i,{...r,signal:this.controller.signal});this._connected();for await(const e of a)Jn(this,An,"m",Nn).call(this,e);if(a.controller.signal?.aborted)throw new D;return this._addRun(Jn(this,An,"m",Ln).call(this))}static createThreadAssistantStream(e,t,n){const s=new Kn;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 Kn;return r._run((()=>r._runAssistantStream(e,t,n,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return Jn(this,jn,"f")}currentRun(){return Jn(this,qn,"f")}currentMessageSnapshot(){return Jn(this,Cn,"f")}currentRunStepSnapshot(){return Jn(this,Mn,"f")}async finalRunSteps(){return await this.done(),Object.values(Jn(this,Rn,"f"))}async finalMessages(){return await this.done(),Object.values(Jn(this,kn,"f"))}async finalRun(){if(await this.done(),!Jn(this,Pn,"f"))throw Error("Final run was not received.");return Jn(this,Pn,"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)Jn(this,An,"m",Nn).call(this,e);if(o.controller.signal?.aborted)throw new D;return this._addRun(Jn(this,An,"m",Ln).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)Jn(this,An,"m",Nn).call(this,e);if(i.controller.signal?.aborted)throw new D;return this._addRun(Jn(this,An,"m",Ln).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(!Xe(t)||!Xe(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(!Xe(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,r){return await this._createToolAssistantStream(n,e,t,s,r)}}Nn=function(e){if(!this.ended)switch(Vn(this,jn,e,"f"),Jn(this,An,"m",Fn).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.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":Jn(this,An,"m",Hn).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":Jn(this,An,"m",Bn).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":Jn(this,An,"m",Dn).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Ln=function(){if(this.ended)throw new N("stream has ended, this shouldn't happen");if(!Jn(this,Pn,"f"))throw Error("Final run has not been received");return Jn(this,Pn,"f")},Dn=function(e){const[t,n]=Jn(this,An,"m",Un).call(this,e,Jn(this,Cn,"f"));Vn(this,Cn,t,"f"),Jn(this,kn,"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!=Jn(this,In,"f")){if(Jn(this,On,"f"))switch(Jn(this,On,"f").type){case"text":this._emit("textDone",Jn(this,On,"f").text,Jn(this,Cn,"f"));break;case"image_file":this._emit("imageFileDone",Jn(this,On,"f").image_file,Jn(this,Cn,"f"))}Vn(this,In,n.index,"f")}Vn(this,On,t.content[n.index],"f")}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==Jn(this,In,"f")){const t=e.data.content[Jn(this,In,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,Jn(this,Cn,"f"));break;case"text":this._emit("textDone",t.text,Jn(this,Cn,"f"))}}Jn(this,Cn,"f")&&this._emit("messageDone",e.data),Vn(this,Cn,void 0,"f")}},Bn=function(e){const t=Jn(this,An,"m",Wn).call(this,e);switch(Vn(this,Mn,t,"f"),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==Jn(this,$n,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(Jn(this,Tn,"f")&&this._emit("toolCallDone",Jn(this,Tn,"f")),Vn(this,$n,e.index,"f"),Vn(this,Tn,t.step_details.tool_calls[e.index],"f"),Jn(this,Tn,"f")&&this._emit("toolCallCreated",Jn(this,Tn,"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":Vn(this,Mn,void 0,"f");"tool_calls"==e.data.step_details.type&&Jn(this,Tn,"f")&&(this._emit("toolCallDone",Jn(this,Tn,"f")),Vn(this,Tn,void 0,"f")),this._emit("runStepDone",e.data,t)}},Fn=function(e){Jn(this,En,"f").push(e),this._emit("event",e)},Wn=function(e){switch(e.event){case"thread.run.step.created":return Jn(this,Rn,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=Jn(this,Rn,"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=Kn.accumulateDelta(t,n.delta);Jn(this,Rn,"f")[e.data.id]=s}return Jn(this,Rn,"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":Jn(this,Rn,"f")[e.data.id]=e.data}if(Jn(this,Rn,"f")[e.data.id])return Jn(this,Rn,"f")[e.data.id];throw new Error("No snapshot available")},Un=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]=Jn(this,An,"m",Xn).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")},Xn=function(e,t){return Kn.accumulateDelta(t,e)},Hn=function(e){switch(Vn(this,qn,e.data,"f"),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":Vn(this,Pn,e.data,"f"),Jn(this,Tn,"f")&&(this._emit("toolCallDone",Jn(this,Tn,"f")),Vn(this,Tn,void 0,"f"))}};class zn extends Ve{create(e,t,n){return this._client.post(`/threads/${e}/messages`,{body:t,...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}retrieve(e,t,n){return this._client.get(`/threads/${e}/messages/${t}`,{...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}update(e,t,n,s){return this._client.post(`/threads/${e}/messages/${t}`,{body:n,...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}list(e,t={},n){return Ae(t)?this.list(e,{},t):this._client.getAPIList(`/threads/${e}/messages`,Qn,{query:t,...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}del(e,t,n){return this._client.delete(`/threads/${e}/messages/${t}`,{...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}}class Qn extends Je{}zn.MessagesPage=Qn;class Gn extends Ve{retrieve(e,t,n,s={},r){return Ae(s)?this.retrieve(e,t,n,{},s):this._client.get(`/threads/${e}/runs/${t}/steps/${n}`,{query:s,...r,headers:{"OpenAI-Beta":"assistants=v2",...r?.headers}})}list(e,t,n={},s){return Ae(n)?this.list(e,t,{},n):this._client.getAPIList(`/threads/${e}/runs/${t}/steps`,Yn,{query:n,...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}}class Yn extends Je{}Gn.RunStepsPage=Yn;class Zn extends Ve{constructor(){super(...arguments),this.steps=new Gn(this._client)}create(e,t,n){const{include:s,...r}=t;return this._client.post(`/threads/${e}/runs`,{query:{include:s},body:r,...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers},stream:t.stream??!1})}retrieve(e,t,n){return this._client.get(`/threads/${e}/runs/${t}`,{...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}update(e,t,n,s){return this._client.post(`/threads/${e}/runs/${t}`,{body:n,...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}list(e,t={},n){return Ae(t)?this.list(e,{},t):this._client.getAPIList(`/threads/${e}/runs`,es,{query:t,...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}cancel(e,t,n){return this._client.post(`/threads/${e}/runs/${t}/cancel`,{...n,headers:{"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)}createAndStream(e,t,n){return Kn.createAssistantStream(e,this._client.beta.threads.runs,t,n)}async poll(e,t,n){const s={...n?.headers,"X-Stainless-Poll-Helper":"true"};for(n?.pollIntervalMs&&(s["X-Stainless-Custom-Poll-Interval"]=n.pollIntervalMs.toString());;){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 Te(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,n){return Kn.createAssistantStream(e,this._client.beta.threads.runs,t,n)}submitToolOutputs(e,t,n,s){return this._client.post(`/threads/${e}/runs/${t}/submit_tool_outputs`,{body:n,...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers},stream:n.stream??!1})}async submitToolOutputsAndPoll(e,t,n,s){const r=await this.submitToolOutputs(e,t,n,s);return await this.poll(e,r.id,s)}submitToolOutputsStream(e,t,n,s){return Kn.createToolAssistantStream(e,t,this._client.beta.threads.runs,n,s)}}class es extends Je{}Zn.RunsPage=es,Zn.Steps=Gn,Zn.RunStepsPage=Yn;class ts extends Ve{constructor(){super(...arguments),this.runs=new Zn(this._client),this.messages=new zn(this._client)}create(e={},t){return Ae(e)?this.create({},e):this._client.post("/threads",{body:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}retrieve(e,t){return this._client.get(`/threads/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}update(e,t,n){return this._client.post(`/threads/${e}`,{body:t,...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}del(e,t){return this._client.delete(`/threads/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:{"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.thread_id,n.id,t)}createAndRunStream(e,t){return Kn.createThreadAssistantStream(e,this._client.beta.threads,t)}}ts.Runs=Zn,ts.RunsPage=es,ts.Messages=zn,ts.MessagesPage=Qn;let ns=class extends Ve{create(e,t,n){return this._client.post(`/vector_stores/${e}/files`,{body:t,...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}retrieve(e,t,n){return this._client.get(`/vector_stores/${e}/files/${t}`,{...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}list(e,t={},n){return Ae(t)?this.list(e,{},t):this._client.getAPIList(`/vector_stores/${e}/files`,ss,{query:t,...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}del(e,t,n){return this._client.delete(`/vector_stores/${e}/files/${t}`,{...n,headers:{"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={...n?.headers,"X-Stainless-Poll-Helper":"true"};for(n?.pollIntervalMs&&(s["X-Stainless-Custom-Poll-Interval"]=n.pollIntervalMs.toString());;){const r=await this.retrieve(e,t,{...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 Te(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)}};class ss extends Je{}ns.VectorStoreFilesPage=ss;class rs extends Ve{create(e,t,n){return this._client.post(`/vector_stores/${e}/file_batches`,{body:t,...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}retrieve(e,t,n){return this._client.get(`/vector_stores/${e}/file_batches/${t}`,{...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}cancel(e,t,n){return this._client.post(`/vector_stores/${e}/file_batches/${t}/cancel`,{...n,headers:{"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={},s){return Ae(n)?this.listFiles(e,t,{},n):this._client.getAPIList(`/vector_stores/${e}/file_batches/${t}/files`,ss,{query:n,...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}async poll(e,t,n){const s={...n?.headers,"X-Stainless-Poll-Helper":"true"};for(n?.pollIntervalMs&&(s["X-Stainless-Custom-Poll-Interval"]=n.pollIntervalMs.toString());;){const{data:r,response:o}=await this.retrieve(e,t,{...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 Te(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 os extends Ve{constructor(){super(...arguments),this.files=new ns(this._client),this.fileBatches=new rs(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}retrieve(e,t){return this._client.get(`/vector_stores/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}update(e,t,n){return this._client.post(`/vector_stores/${e}`,{body:t,...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}list(e={},t){return Ae(e)?this.list({},e):this._client.getAPIList("/vector_stores",is,{query:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}del(e,t){return this._client.delete(`/vector_stores/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}}class is extends Je{}os.VectorStoresPage=is,os.Files=ns,os.VectorStoreFilesPage=ss,os.FileBatches=rs;class as extends Ve{constructor(){super(...arguments),this.realtime=new Sn(this._client),this.vectorStores=new os(this._client),this.chat=new vn(this._client),this.assistants=new nt(this._client),this.threads=new ts(this._client)}}as.Realtime=Sn,as.VectorStores=os,as.VectorStoresPage=is,as.Assistants=nt,as.AssistantsPage=st,as.Threads=ts;class ls extends Ve{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class cs extends Ve{create(e,t){return this._client.post("/embeddings",{body:e,...t})}}class us extends Ve{create(e,t){return this._client.post("/files",ue({body:e,...t}))}retrieve(e,t){return this._client.get(`/files/${e}`,t)}list(e={},t){return Ae(e)?this.list({},e):this._client.getAPIList("/files",hs,{query:e,...t})}del(e,t){return this._client.delete(`/files/${e}`,t)}content(e,t){return this._client.get(`/files/${e}/content`,{...t,headers:{Accept:"application/binary",...t?.headers},__binaryResponse:!0})}retrieveContent(e,t){return this._client.get(`/files/${e}/content`,t)}async waitForProcessing(e,{pollInterval:t=5e3,maxWait:n=18e5}={}){const s=new Set(["processed","error","deleted"]),r=Date.now();let o=await this.retrieve(e);for(;!o.status||!s.has(o.status);)if(await Te(t),o=await this.retrieve(e),Date.now()-r>n)throw new F({message:`Giving up on waiting for file ${e} to finish processing after ${n} milliseconds.`});return o}}class hs extends Je{}us.FileObjectsPage=hs;class ds extends Ve{list(e,t={},n){return Ae(t)?this.list(e,{},t):this._client.getAPIList(`/fine_tuning/jobs/${e}/checkpoints`,fs,{query:t,...n})}}class fs extends Je{}ds.FineTuningJobCheckpointsPage=fs;class ps extends Ve{constructor(){super(...arguments),this.checkpoints=new ds(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(`/fine_tuning/jobs/${e}`,t)}list(e={},t){return Ae(e)?this.list({},e):this._client.getAPIList("/fine_tuning/jobs",ms,{query:e,...t})}cancel(e,t){return this._client.post(`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},n){return Ae(t)?this.listEvents(e,{},t):this._client.getAPIList(`/fine_tuning/jobs/${e}/events`,gs,{query:t,...n})}}class ms extends Je{}class gs extends Je{}ps.FineTuningJobsPage=ms,ps.FineTuningJobEventsPage=gs,ps.Checkpoints=ds,ps.FineTuningJobCheckpointsPage=fs;class ys extends Ve{constructor(){super(...arguments),this.jobs=new ps(this._client)}}ys.Jobs=ps,ys.FineTuningJobsPage=ms,ys.FineTuningJobEventsPage=gs;class ws extends Ve{createVariation(e,t){return this._client.post("/images/variations",ue({body:e,...t}))}edit(e,t){return this._client.post("/images/edits",ue({body:e,...t}))}generate(e,t){return this._client.post("/images/generations",{body:e,...t})}}class bs extends Ve{retrieve(e,t){return this._client.get(`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",_s,e)}del(e,t){return this._client.delete(`/models/${e}`,t)}}class _s extends He{}bs.ModelsPage=_s;class vs extends Ve{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class xs extends Ve{create(e,t,n){return this._client.post(`/uploads/${e}/parts`,ue({body:t,...n}))}}class Ss extends Ve{constructor(){super(...arguments),this.parts=new xs(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(`/uploads/${e}/cancel`,t)}complete(e,t,n){return this._client.post(`/uploads/${e}/complete`,{body:t,...n})}}var As;Ss.Parts=xs;class Es extends be{constructor({baseURL:e=Me("OPENAI_BASE_URL"),apiKey:t=Me("OPENAI_API_KEY"),organization:n=Me("OPENAI_ORG_ID")??null,project:s=Me("OPENAI_PROJECT_ID")??null,...r}={}){if(void 0===t)throw new N("The OPENAI_API_KEY environment variable is missing or empty; either provide it, or instantiate the OpenAI client with an apiKey option, like new OpenAI({ apiKey: 'My API Key' }).");const o={apiKey:t,organization:n,project:s,...r,baseURL:e||"https://api.openai.com/v1"};if(!o.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new N("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");super({baseURL:o.baseURL,timeout:o.timeout??6e5,httpAgent:o.httpAgent,maxRetries:o.maxRetries,fetch:o.fetch}),this.completions=new ls(this),this.chat=new ze(this),this.embeddings=new cs(this),this.files=new us(this),this.images=new ws(this),this.audio=new Ze(this),this.moderations=new vs(this),this.models=new bs(this),this.fineTuning=new ys(this),this.beta=new as(this),this.batches=new et(this),this.uploads=new Ss(this),this._options=o,this.apiKey=t,this.organization=n,this.project=s}defaultQuery(){return this._options.defaultQuery}defaultHeaders(e){return{...super.defaultHeaders(e),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project,...this._options.defaultHeaders}}authHeaders(e){return{Authorization:`Bearer ${this.apiKey}`}}stringifyQuery(e){return A(e,{arrayFormat:"brackets"})}}function Rs(e){const t=[],n=Array.from(e.querySelectorAll("tr")),s=[];n.map((e=>{const n=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var n;const r=null===(n=e.textContent)||void 0===n?void 0:n.trim();return s[t]=Math.max(s[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(n)}));const r=t[0].length,o=s.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(s[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function ks(t,n){t.title&&e("Copied to clipboard"),navigator.clipboard.writeText(n.response)}function Cs(e,t,n){const s=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(s))return!1;if(e.typing){let e=0;const t=function(r){if(r.preventDefault(),"Backspace"===r.key||e>=n.response.length)return void s.removeEventListener("keydown",t);s.textContent=n.response.slice(0,++e),s.focus();const o=document.createRange();o.selectNodeContents(s),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};s.addEventListener("keydown",t)}else s.textContent=n.response;return!0}function Ps(e,t,n){var s,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(s=n.normalizedResponse.match(/\d+([,.]\d+)?/gi))||void 0===s?void 0:s[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(n){n.preventDefault(),"Backspace"===n.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 Is(e,t,n){const i=null==t?void 0:t[0];if(!i||"radio"!==i.type)return!1;const a=Array.from(t).map((e=>{var t,n;return{element:e,value:o(null!==(n=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==n?n:"")}})).filter((e=>""!==e.value)),l=s(n.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 Os(e,t,n){const i=null==t?void 0:t[0];if(!i||"checkbox"!==i.type)return!1;const a=n.normalizedResponse.split("\n"),l=Array.from(t).map((e=>{var t,n;return{element:e,value:o(null!==(n=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==n?n:"")}})).filter((e=>""!==e.value)),c=new Set;for(const t of a){const n=s(t,l);e.logs&&n.value&&r.bestAnswer(n.value,n.similarity),c.add(n.element)}for(const t of l.map((e=>e.element))){const n=t.checked&&!c.has(t)||!t.checked&&c.has(t),s=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",s,{once:!0}):s()}return!0}function $s(e,t,n){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const i=n.normalizedResponse.split("\n");e.logs&&r.array(i);for(let n=0;n{var t;return{element:e,value:o(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),c=s(i[n],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 Ts(e,t,n){const s=t[0];if(1!==t.length||"TEXTAREA"!==s.tagName&&"text"!==s.type)return!1;if(e.typing){let e=0;const t=function(r){r.preventDefault(),"Backspace"===r.key||e>=n.response.length?s.removeEventListener("keydown",t):s.value=n.response.slice(0,++e)};s.addEventListener("keydown",t)}else s.value=n.response;return!0}function js(e,t,n){const s=t[0];if(!s.classList.contains("qtype_essay_editor"))return!1;const r=s.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(s){if(s.preventDefault(),"Backspace"===s.key||e>=n.response.length)return void r.contentWindow.removeEventListener("keydown",t);const i=document.createTextNode(n.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+=n.response;return!0}function qs(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const n=function(e){let t=e.innerText;const n=e.querySelectorAll(".accesshide");for(const e of n)t=t.replace(e.innerText,"");const s=e.querySelector(".qtype_essay_editor");s&&(t=t.replace(s.innerText,""));const r=e.querySelectorAll(".qtext table");for(const e of r)t=t.replace(e.innerText,"\n"+Rs(e)+"\n");return o(t,!1)}(e.form),s=e.form.querySelectorAll(e.inputQuery),i=yield function(e,n,s){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),2e4),a=yield l(e,n,s),c=new Es({apiKey:e.apiKey,baseURL:e.baseURL,dangerouslyAllowBrowser:!0}),u=yield c.chat.completions.create(function(e,t){if(!e.startsWith("o1")&&!e.startsWith("o3"))return t;t.max_tokens&&(t.max_completion_tokens=t.max_tokens,delete t.max_tokens),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,temperature:.1,top_p:.6,presence_penalty:0,max_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:s,response:h,normalizedResponse:o(h)}}))}(e.config,e.questionElement,n).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(n),r.response(i)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),ks(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 n=e.questionElement;e.removeListener();const s=null!==(t=n.innerHTML)&&void 0!==t?t:"";n.innerHTML=e.gptAnswer.response,n.style.whiteSpace="pre-wrap",n.addEventListener("click",(function(){const t=n.innerHTML===e.gptAnswer.response;n.style.whiteSpace=t?"initial":"pre-wrap",n.innerHTML=t?s:e.gptAnswer.response}))}({gptAnswer:i,questionElement:e.questionElement,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[js,Cs,Ts,Ps,$s,Is,Os];for(const n of t)if(n(e.config,e.inputList,e.gptAnswer))return;ks(e.config,e.gptAnswer)}({config:e.config,gptAnswer:i,inputList:s,questionElement:e.questionElement,removeListener:e.removeListener})}}))}As=Es,Es.OpenAI=As,Es.DEFAULT_TIMEOUT=6e5,Es.OpenAIError=N,Es.APIError=L,Es.APIConnectionError=B,Es.APIConnectionTimeoutError=F,Es.APIUserAbortError=D,Es.NotFoundError=H,Es.ConflictError=J,Es.RateLimitError=K,Es.BadRequestError=W,Es.AuthenticationError=U,Es.InternalServerError=z,Es.PermissionDeniedError=X,Es.UnprocessableEntityError=V,Es.toFile=ie,Es.fileFromPath=T,Es.Completions=ls,Es.Chat=ze,Es.Embeddings=cs,Es.Files=us,Es.FileObjectsPage=hs,Es.Images=ws,Es.Audio=Ze,Es.Moderations=vs,Es.Models=bs,Es.ModelsPage=_s,Es.FineTuning=ys,Es.Beta=as,Es.Batches=et,Es.BatchesPage=tt,Es.Uploads=Ss;const Ms=[],Ns=[];function Ls(e){const t=Ns.findIndex((t=>t.element===e));if(-1!==t){const e=Ns.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function Ds(t){if(console.log("Setting up MoodleGPT..."),Ns.length>0){for(const e of Ns)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(Ns.length=0)}const n=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor",s=document.querySelectorAll(".formulation");for(const e of s){const s=e.querySelector(".qtext");if(null===s)continue;t.cursor&&(s.style.cursor="pointer");const r=qs.bind(null,{config:t,questionElement:s,form:e,inputQuery:n,removeListener:()=>Ls(s)});Ns.push({element:s,fn:r}),s.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){Ms.push(t.key),Ms.length>e.code.length&&Ms.shift(),Ms.join("")===e.code&&(Ms.length=0,Ds(e))}))}(t):Ds(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{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 null!=e&&"object"==typeof e&&!Array.isArray(e)}const L=e=>new Promise((t=>setTimeout(t,e))),q="5.11.0";const j=()=>{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":q,"X-Stainless-OS":N(Deno.build.os),"X-Stainless-Arch":M(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":q,"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":q,"X-Stainless-OS":N(globalThis.process.platform??"unknown"),"X-Stainless-Arch":M(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":q,"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":q,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const M=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",N=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 D;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 B(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 U(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 F=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),H="RFC3986",X=e=>String(e),J={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:X};let K=(e,t)=>(K=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),K(e,t));const z=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),V=1024;function G(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)},Y=function(e,t){Array.prototype.push.apply(e,C(t)?t:[t])};let Z;const ee={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=V?o.slice(e,e+V):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]=z[n]:n<2048?s[s.length]=z[192|n>>6]+z[128|63&n]:n<55296||n>=57344?s[s.length]=z[224|n>>12]+z[128|n>>6&63]+z[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=z[240|n>>18]+z[128|n>>12&63]+z[128|n>>6&63]+z[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:H,formatter:X,indices:!1,serializeDate:e=>(Z??(Z=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const te={};function se(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(te))&&!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(te)&&(b=0)}if("function"==typeof c?w=c(t,w):w instanceof Date?w=d?.(w):"comma"===s&&C(w)&&(w=G(w,(function(e){return e instanceof Date?d?.(e):e}))),null===w){if(o)return l&&!m?l(t,ee.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,ee.encoder,g,"key",f);return[p?.(e)+"="+p?.(l(w,ee.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=G(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 re,oe;function ie(e){let t;return(re??(t=new globalThis.TextEncoder,re=t.encode.bind(t)))(e)}function ae(e){let t;return(oe??(t=new globalThis.TextDecoder,oe=t.decode.bind(t)))(e)}var le,ce;class ue{constructor(){le.set(this,void 0),ce.set(this,void 0),c(this,le,new Uint8Array),c(this,ce,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?ie(e):e;c(this,le,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,le,"f"),t]));const s=[];let n;for(;null!=(n=he(u(this,le,"f"),u(this,ce,"f")));){if(n.carriage&&null==u(this,ce,"f")){c(this,ce,n.index);continue}if(null!=u(this,ce,"f")&&(n.index!==u(this,ce,"f")+1||n.carriage)){s.push(ae(u(this,le,"f").subarray(0,u(this,ce,"f")-1))),c(this,le,u(this,le,"f").subarray(u(this,ce,"f"))),c(this,ce,null);continue}const e=null!==u(this,ce,"f")?n.preceding-1:n.preceding,t=ae(u(this,le,"f").subarray(0,e));s.push(t),c(this,le,u(this,le,"f").subarray(n.index)),c(this,ce,null)}return s}flush(){return u(this,le,"f").length?this.decode("\n"):[]}}function he(e,t){for(let s=t??0;s{var n,r;if(e)return n=fe,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(fe))}`)};function me(){}function ge(e,t,s){return!t||fe[e]>fe[s]?me:t[e].bind(t)}const ye={error:me,warn:me,info:me,debug:me};let we=new WeakMap;function _e(e){const t=e.logger,s=e.logLevel??"off";if(!t)return ye;const n=we.get(t);if(n&&n[0]===s)return n[1];const r={error:ge("error",t,s),warn:ge("warn",t,s),info:ge("info",t,s),debug:ge("debug",t,s)};return we.set(t,[s,r]),r}const be=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 ve,xe,Se;class Ae{constructor(e,t,s){this.iterator=e,ve.set(this,void 0),this.controller=t,c(this,ve,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?_e(s):console;return new Ae((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 $e,n=new ue,r=U(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?ie(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=de(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 Ae((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 ue,s=U(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)}[(ve=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 Ae((()=>n(e)),this.controller,u(this,ve,"f")),new Ae((()=>n(t)),this.controller,u(this,ve,"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=ie(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class $e{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 ke(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):Ae.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 Re(await s.json(),s)}return await s.text()})();return _e(e).debug(`[${n}] response parsed`,be({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Re(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 Oe extends Promise{constructor(e,t,s=ke){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,xe.set(this,void 0),c(this,xe,e)}_thenUnwrap(e){return new Oe(u(this,xe,"f"),this.responsePromise,(async(t,s)=>Re(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,xe,"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)}}xe=new WeakMap;class Ie{constructor(e,t,s,n){Se.set(this,void 0),c(this,Se,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,Se,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Se=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ee extends Oe{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await ke(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class Ce extends Ie{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 Te extends Ie{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:{...(s=this.options.query,"object"!=typeof s?{}:s??{}),after:t}}:null;var s}}const Pe=()=>{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 Le(e,t,s){return Pe(),new File(e,t??"unknown_file",s)}function qe(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 je=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],Me=async(e,t)=>({...e,body:await De(e.body,t)}),Ne=new WeakMap;const De=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Ne.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 Ne.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])=>We(s,e,t)))),s},We=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,Le([await s.blob()],qe(s)));else if(je(s))e.append(t,Le([await new Response(B(s)).blob()],qe(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,qe(s));else if(Array.isArray(s))await Promise.all(s.map((s=>We(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])=>We(e,`${t}[${s}]`,n))))}}},Be=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 Ue(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Be(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!je(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 Ue(s))}return t}class Fe{constructor(e){this._client=e}}function He(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Xe=Object.freeze(Object.create(null)),Je=(e=He)=>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??Xe)??Xe)?.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},Ke=Je(He);let ze=class extends Fe{list(e,t={},s){return this._client.getAPIList(Ke`/chat/completions/${e}/messages`,Te,{query:t,...s})}};function Ve(e){return"function"==typeof e.parse}const Ge=e=>"assistant"===e?.role,Qe=e=>"tool"===e?.role;var Ye,Ze,et,tt,st,nt,rt,ot,it,at,lt,ct,ut,ht,dt,ft,pt,mt,gt,yt,wt;class _t{constructor(){Ye.add(this),this.controller=new AbortController,Ze.set(this,void 0),et.set(this,(()=>{})),tt.set(this,(()=>{})),st.set(this,void 0),nt.set(this,(()=>{})),rt.set(this,(()=>{})),ot.set(this,{}),it.set(this,!1),at.set(this,!1),lt.set(this,!1),ct.set(this,!1),c(this,Ze,new Promise(((e,t)=>{c(this,et,e),c(this,tt,t)}))),c(this,st,new Promise(((e,t)=>{c(this,nt,e),c(this,rt,t)}))),u(this,Ze,"f").catch((()=>{})),u(this,st,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),u(this,Ye,"m",ut).bind(this))}),0)}_connected(){this.ended||(u(this,et,"f").call(this),this._emit("connect"))}get ended(){return u(this,it,"f")}get errored(){return u(this,at,"f")}get aborted(){return u(this,lt,"f")}abort(){this.controller.abort()}on(e,t){return(u(this,ot,"f")[e]||(u(this,ot,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=u(this,ot,"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,ot,"f")[e]||(u(this,ot,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{c(this,ct,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){c(this,ct,!0),await u(this,st,"f")}_emit(e,...t){if(u(this,it,"f"))return;"end"===e&&(c(this,it,!0),u(this,nt,"f").call(this));const s=u(this,ot,"f")[e];if(s&&(u(this,ot,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return u(this,ct,"f")||s?.length||Promise.reject(e),u(this,tt,"f").call(this,e),u(this,rt,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];u(this,ct,"f")||s?.length||Promise.reject(e),u(this,tt,"f").call(this,e),u(this,rt,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function bt(e){return"auto-parseable-response-format"===e?.$brand}function vt(e){return"auto-parseable-tool"===e?.$brand}function xt(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{...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=>e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:vt(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?St(t,e.message.content):null}}}));return{...e,choices:s}}function St(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)return!1;const s=e.tools?.find((e=>e.function?.name===t.function.name));return vt(s)||s?.function.strict||!1}function $t(e){return!!bt(e.response_format)||(e.tools?.some((e=>vt(e)||"function"===e.type&&!0===e.function.strict))??!1)}Ze=new WeakMap,et=new WeakMap,tt=new WeakMap,st=new WeakMap,nt=new WeakMap,rt=new WeakMap,ot=new WeakMap,it=new WeakMap,at=new WeakMap,lt=new WeakMap,ct=new WeakMap,Ye=new WeakSet,ut=function(e){if(c(this,at,!0),e instanceof Error&&"AbortError"===e.name&&(e=new g),e instanceof g)return c(this,lt,!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 kt=10;class Rt extends _t{constructor(){super(...arguments),ht.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),Qe(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(Ge(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,ht,"m",dt).call(this)}async finalMessage(){return await this.done(),u(this,ht,"m",ft).call(this)}async finalFunctionToolCall(){return await this.done(),u(this,ht,"m",pt).call(this)}async finalFunctionToolCallResult(){return await this.done(),u(this,ht,"m",mt).call(this)}async totalUsage(){return await this.done(),u(this,ht,"m",gt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=u(this,ht,"m",ft).call(this);t&&this._emit("finalMessage",t);const s=u(this,ht,"m",dt).call(this);s&&this._emit("finalContent",s);const n=u(this,ht,"m",pt).call(this);n&&this._emit("finalFunctionToolCall",n);const r=u(this,ht,"m",mt).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",u(this,ht,"m",gt).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,ht,"m",yt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(xt(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&&r?.function?.name,{maxChatCompletions:l=kt}=s||{},c=t.tools.map((e=>{if(vt(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=Ve(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,ht,"m",wt).call(this,l);if(this._addMessage({role:n,tool_call_id:t,content:c}),a)return}}}}ht=new WeakSet,dt=function(){return u(this,ht,"m",ft).call(this).content??null},ft=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(Ge(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new p("stream ended without producing a ChatCompletionMessage with role=assistant")},pt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(Ge(t)&&t?.tool_calls?.length)return t.tool_calls.at(-1)?.function}},mt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(Qe(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}},gt=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},yt=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.")},wt=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class Ot extends Rt{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),Ge(e)&&e.content&&this._emit("content",e.content)}}const It=1,Et=2,Ct=4,Tt=8,Pt=16,Lt=32,qt=64,jt=128,Mt=256,Nt=511;class Dt extends Error{}class Wt extends Error{}const Bt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Dt(`${e} at position ${n}`)},o=e=>{throw new Wt(`${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)||Pt&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Lt&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Lt&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&&Tt&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(Tt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Tt&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(Ct&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Et&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Et&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||Et&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Et&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=Nt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return Bt(e.trim(),t)}(e,Nt^Et);var Ft,Ht,Xt,Jt,Kt,zt,Vt,Gt,Qt,Yt,Zt,es;class ts extends Rt{constructor(e){super(),Ft.add(this),Ht.set(this,void 0),Xt.set(this,void 0),Jt.set(this,void 0),c(this,Ht,e),c(this,Xt,[])}get currentChatCompletionSnapshot(){return u(this,Jt,"f")}static fromReadableStream(e){const t=new ts(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new ts(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,Ft,"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)u(this,Ft,"m",Vt).call(this,e);if(r.controller.signal?.aborted)throw new g;return this._addChatCompletion(u(this,Ft,"m",Yt).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),u(this,Ft,"m",Kt).call(this),this._connected();const n=Ae.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(u(this,Ft,"m",Yt).call(this)),u(this,Ft,"m",Vt).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new g;return this._addChatCompletion(u(this,Ft,"m",Yt).call(this))}[(Ht=new WeakMap,Xt=new WeakMap,Jt=new WeakMap,Ft=new WeakSet,Kt=function(){this.ended||c(this,Jt,void 0)},zt=function(e){let t=u(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},u(this,Xt,"f")[e.index]=t,t)},Vt=function(e){if(this.ended)return;const t=u(this,Ft,"m",es).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,Ft,"m",zt).call(this,e);e.finish_reason&&(u(this,Ft,"m",Qt).call(this,e),null!=n.current_tool_call_index&&u(this,Ft,"m",Gt).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,Ft,"m",Qt).call(this,e),null!=n.current_tool_call_index&&u(this,Ft,"m",Gt).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??""}))}}},Gt=function(e,t){if(u(this,Ft,"m",zt).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,Ht,"f")?.tools?.find((e=>"function"===e.type&&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:vt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},Qt=function(e){const t=u(this,Ft,"m",zt).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=u(this,Ft,"m",Zt).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}))},Yt=function(){if(this.ended)throw new p("stream has ended, this shouldn't happen");const e=u(this,Jt,"f");if(!e)throw new p("request ended without sending any chunks");return c(this,Jt,void 0),c(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 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${ss(e)}`);if(null==o)throw new p(`missing choices[${n}].tool_calls[${s}].type\n${ss(e)}`);if(null==c)throw new p(`missing choices[${n}].tool_calls[${s}].function.name\n${ss(e)}`);if(null==l)throw new p(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ss(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&&$t(t)?xt(e,t):{...e,choices:e.choices.map((e=>({...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(l,t)}(e,u(this,Ht,"f"))},Zt=function(){const e=u(this,Ht,"f")?.response_format;return bt(e)?e:null},es=function(e){var t,s,n,r;let o=u(this,Jt,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=c(this,Jt,{...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,Ht,"f")&&$t(u(this,Ht,"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,Ft,"m",Zt).call(this)&&(e.message.parsed=Ut(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(u(this,Ht,"f"),a)&&(a.function.parsed_arguments=Ut(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 Ae(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ss(e){return JSON.stringify(e)}class ns extends ts{static fromReadableStream(e){const t=new ns(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new ns(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let rs=class extends Fe{constructor(){super(...arguments),this.messages=new ze(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(Ke`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(Ke`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Te,{query:e,...t})}delete(e,t){return this._client.delete(Ke`/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=>xt(t,e)))}runTools(e,t){return e.stream?ns.runTools(this._client,e,t):Ot.runTools(this._client,e,t)}stream(e,t){return ts.createChatCompletion(this._client,e,t)}};rs.Messages=ze;class os extends Fe{constructor(){super(...arguments),this.completions=new rs(this._client)}}os.Completions=rs;const is=Symbol("brand.privateNullableHeaders");function*as(e){if(!e)return;if(is 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 ls=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of as(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{[is]:!0,values:t,nulls:s}};class cs extends Fe{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ls([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class us extends Fe{create(e,t){return this._client.post("/audio/transcriptions",Me({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class hs extends Fe{create(e,t){return this._client.post("/audio/translations",Me({body:e,...t,__metadata:{model:e.model}},this._client))}}class ds extends Fe{constructor(){super(...arguments),this.transcriptions=new us(this._client),this.translations=new hs(this._client),this.speech=new cs(this._client)}}ds.Transcriptions=us,ds.Translations=hs,ds.Speech=cs;class fs extends Fe{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Ke`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Te,{query:e,...t})}cancel(e,t){return this._client.post(Ke`/batches/${e}/cancel`,t)}}class ps extends Fe{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ls([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Ke`/assistants/${e}`,{...t,headers:ls([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Ke`/assistants/${e}`,{body:t,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Te,{query:e,...t,headers:ls([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Ke`/assistants/${e}`,{...t,headers:ls([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class ms extends Fe{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ls([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class gs extends Fe{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ls([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class ys extends Fe{constructor(){super(...arguments),this.sessions=new ms(this._client),this.transcriptionSessions=new gs(this._client)}}ys.Sessions=ms,ys.TranscriptionSessions=gs;class ws extends Fe{create(e,t,s){return this._client.post(Ke`/threads/${e}/messages`,{body:t,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Ke`/threads/${n}/messages/${e}`,{...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Ke`/threads/${n}/messages/${e}`,{body:r,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Ke`/threads/${e}/messages`,Te,{query:t,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(Ke`/threads/${n}/messages/${e}`,{...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class _s extends Fe{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(Ke`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(Ke`/threads/${n}/runs/${e}/steps`,Te,{query:r,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const bs=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 vs,xs,Ss,As,$s,ks,Rs,Os,Is,Es,Cs,Ts,Ps,Ls,qs,js,Ms,Ns,Ds,Ws,Bs,Us,Fs;class Hs extends _t{constructor(){super(...arguments),vs.add(this),Ss.set(this,[]),As.set(this,{}),$s.set(this,{}),ks.set(this,void 0),Rs.set(this,void 0),Os.set(this,void 0),Is.set(this,void 0),Es.set(this,void 0),Cs.set(this,void 0),Ts.set(this,void 0),Ps.set(this,void 0),Ls.set(this,void 0)}[(Ss=new WeakMap,As=new WeakMap,$s=new WeakMap,ks=new WeakMap,Rs=new WeakMap,Os=new WeakMap,Is=new WeakMap,Es=new WeakMap,Cs=new WeakMap,Ts=new WeakMap,Ps=new WeakMap,Ls=new WeakMap,vs=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 xs;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=Ae.fromReadableStream(e,this.controller);for await(const e of n)u(this,vs,"m",qs).call(this,e);if(n.controller.signal?.aborted)throw new g;return this._addRun(u(this,vs,"m",js).call(this))}toReadableStream(){return new Ae(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new xs;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,vs,"m",qs).call(this,e);if(i.controller.signal?.aborted)throw new g;return this._addRun(u(this,vs,"m",js).call(this))}static createThreadAssistantStream(e,t,s){const n=new xs;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 xs;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return u(this,Ts,"f")}currentRun(){return u(this,Ps,"f")}currentMessageSnapshot(){return u(this,ks,"f")}currentRunStepSnapshot(){return u(this,Ls,"f")}async finalRunSteps(){return await this.done(),Object.values(u(this,As,"f"))}async finalMessages(){return await this.done(),Object.values(u(this,$s,"f"))}async finalRun(){if(await this.done(),!u(this,Rs,"f"))throw Error("Final run was not received.");return u(this,Rs,"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,vs,"m",qs).call(this,e);if(o.controller.signal?.aborted)throw new g;return this._addRun(u(this,vs,"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 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,vs,"m",qs).call(this,e);if(i.controller.signal?.aborted)throw new g;return this._addRun(u(this,vs,"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(!P(t)||!P(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(!P(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)}}xs=Hs,qs=function(e){if(!this.ended)switch(c(this,Ts,e),u(this,vs,"m",Ds).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,vs,"m",Fs).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,vs,"m",Ns).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,vs,"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 p("stream has ended, this shouldn't happen");if(!u(this,Rs,"f"))throw Error("Final run has not been received");return u(this,Rs,"f")},Ms=function(e){const[t,s]=u(this,vs,"m",Bs).call(this,e,u(this,ks,"f"));c(this,ks,t),u(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!=u(this,Os,"f")){if(u(this,Is,"f"))switch(u(this,Is,"f").type){case"text":this._emit("textDone",u(this,Is,"f").text,u(this,ks,"f"));break;case"image_file":this._emit("imageFileDone",u(this,Is,"f").image_file,u(this,ks,"f"))}c(this,Os,s.index)}c(this,Is,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==u(this,Os,"f")){const t=e.data.content[u(this,Os,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,u(this,ks,"f"));break;case"text":this._emit("textDone",t.text,u(this,ks,"f"))}}u(this,ks,"f")&&this._emit("messageDone",e.data),c(this,ks,void 0)}},Ns=function(e){const t=u(this,vs,"m",Ws).call(this,e);switch(c(this,Ls,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,Es,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(u(this,Cs,"f")&&this._emit("toolCallDone",u(this,Cs,"f")),c(this,Es,e.index),c(this,Cs,t.step_details.tool_calls[e.index]),u(this,Cs,"f")&&this._emit("toolCallCreated",u(this,Cs,"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,Ls,void 0);"tool_calls"==e.data.step_details.type&&u(this,Cs,"f")&&(this._emit("toolCallDone",u(this,Cs,"f")),c(this,Cs,void 0)),this._emit("runStepDone",e.data,t)}},Ds=function(e){u(this,Ss,"f").push(e),this._emit("event",e)},Ws=function(e){switch(e.event){case"thread.run.step.created":return u(this,As,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=u(this,As,"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=xs.accumulateDelta(t,s.delta);u(this,As,"f")[e.data.id]=n}return u(this,As,"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,As,"f")[e.data.id]=e.data}if(u(this,As,"f")[e.data.id])return u(this,As,"f")[e.data.id];throw new Error("No snapshot available")},Bs=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,vs,"m",Us).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")},Us=function(e,t){return xs.accumulateDelta(t,e)},Fs=function(e){switch(c(this,Ps,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,Rs,e.data),u(this,Cs,"f")&&(this._emit("toolCallDone",u(this,Cs,"f")),c(this,Cs,void 0))}};let Xs=class extends Fe{constructor(){super(...arguments),this.steps=new _s(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(Ke`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Ke`/threads/${n}/runs/${e}`,{...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Ke`/threads/${n}/runs/${e}`,{body:r,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Ke`/threads/${e}/runs`,Te,{query:t,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(Ke`/threads/${n}/runs/${e}/cancel`,{...s,headers:ls([{"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 Hs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ls([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 Hs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Ke`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ls([{"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 Hs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};Xs.Steps=_s;class Js extends Fe{constructor(){super(...arguments),this.runs=new Xs(this._client),this.messages=new ws(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ls([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Ke`/threads/${e}`,{...t,headers:ls([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Ke`/threads/${e}`,{body:t,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(Ke`/threads/${e}`,{...t,headers:ls([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ls([{"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 Hs.createThreadAssistantStream(e,this._client.beta.threads,t)}}Js.Runs=Xs,Js.Messages=ws;class Ks extends Fe{constructor(){super(...arguments),this.realtime=new ys(this._client),this.assistants=new ps(this._client),this.threads=new Js(this._client)}}Ks.Realtime=ys,Ks.Assistants=ps,Ks.Threads=Js;class zs extends Fe{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class Vs extends Fe{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Ke`/containers/${n}/files/${e}/content`,{...s,headers:ls([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let Gs=class extends Fe{constructor(){super(...arguments),this.content=new Vs(this._client)}create(e,t,s){return this._client.post(Ke`/containers/${e}/files`,Me({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Ke`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(Ke`/containers/${e}/files`,Te,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(Ke`/containers/${n}/files/${e}`,{...s,headers:ls([{Accept:"*/*"},s?.headers])})}};Gs.Content=Vs;class Qs extends Fe{constructor(){super(...arguments),this.files=new Gs(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(Ke`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Te,{query:e,...t})}delete(e,t){return this._client.delete(Ke`/containers/${e}`,{...t,headers:ls([{Accept:"*/*"},t?.headers])})}}Qs.Files=Gs;class Ys extends Fe{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 w({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class nn extends Fe{}let rn=class extends Fe{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 on extends Fe{constructor(){super(...arguments),this.graders=new rn(this._client)}}on.Graders=rn;class an extends Fe{create(e,t,s){return this._client.getAPIList(Ke`/fine_tuning/checkpoints/${e}/permissions`,Ce,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(Ke`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(Ke`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let ln=class extends Fe{constructor(){super(...arguments),this.permissions=new an(this._client)}};ln.Permissions=an;class cn extends Fe{list(e,t={},s){return this._client.getAPIList(Ke`/fine_tuning/jobs/${e}/checkpoints`,Te,{query:t,...s})}}class un extends Fe{constructor(){super(...arguments),this.checkpoints=new cn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(Ke`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Te,{query:e,...t})}cancel(e,t){return this._client.post(Ke`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(Ke`/fine_tuning/jobs/${e}/events`,Te,{query:t,...s})}pause(e,t){return this._client.post(Ke`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(Ke`/fine_tuning/jobs/${e}/resume`,t)}}un.Checkpoints=cn;class hn extends Fe{constructor(){super(...arguments),this.methods=new nn(this._client),this.jobs=new un(this._client),this.checkpoints=new ln(this._client),this.alpha=new on(this._client)}}hn.Methods=nn,hn.Jobs=un,hn.Checkpoints=ln,hn.Alpha=on;class dn extends Fe{}class fn extends Fe{constructor(){super(...arguments),this.graderModels=new dn(this._client)}}fn.GraderModels=dn;class pn extends Fe{createVariation(e,t){return this._client.post("/images/variations",Me({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",Me({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 mn extends Fe{retrieve(e,t){return this._client.get(Ke`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",Ce,e)}delete(e,t){return this._client.delete(Ke`/models/${e}`,t)}}class gn extends Fe{create(e,t){return this._client.post("/moderations",{body:e,...t})}}function yn(e,t){return t&&function(e){if(bt(e.text?.format))return!0;return!1}(t)?wn(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 wn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:bn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:_n(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||vn(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 _n(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 bn(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 vn(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 xn,Sn,An,$n,kn,Rn,On,In;class En extends _t{constructor(e){super(),xn.add(this),Sn.set(this,void 0),An.set(this,void 0),$n.set(this,void 0),c(this,Sn,e)}static createResponse(e,t,s){const n=new En(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,xn,"m",kn).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,xn,"m",Rn).call(this,e,o);if(r.controller.signal?.aborted)throw new g;return u(this,xn,"m",On).call(this)}[(Sn=new WeakMap,An=new WeakMap,$n=new WeakMap,xn=new WeakSet,kn=function(){this.ended||c(this,An,void 0)},Rn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=u(this,xn,"m",In).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)}},On=function(){if(this.ended)throw new p("stream has ended, this shouldn't happen");const e=u(this,An,"f");if(!e)throw new p("request ended without sending any events");c(this,An,void 0);const t=function(e,t){return yn(e,t)}(e,u(this,Sn,"f"));return c(this,$n,t),t},In=function(e){let t=u(this,An,"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,An,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}`);"message"===s.type&&s.content.push(e.part);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.completed":c(this,An,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,$n,"f");if(!e)throw new p("stream ended without producing a ChatCompletion");return e}}class Cn extends Fe{list(e,t={},s){return this._client.getAPIList(Ke`/responses/${e}/input_items`,Te,{query:t,...s})}}class Tn extends Fe{constructor(){super(...arguments),this.inputItems=new Cn(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&&vn(e),e)))}retrieve(e,t={},s){return this._client.get(Ke`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&vn(e),e)))}delete(e,t){return this._client.delete(Ke`/responses/${e}`,{...t,headers:ls([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>wn(t,e)))}stream(e,t){return En.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(Ke`/responses/${e}/cancel`,t)}}Tn.InputItems=Cn;class Pn extends Fe{create(e,t,s){return this._client.post(Ke`/uploads/${e}/parts`,Me({body:t,...s},this._client))}}class Ln extends Fe{constructor(){super(...arguments),this.parts=new Pn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(Ke`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(Ke`/uploads/${e}/complete`,{body:t,...s})}}Ln.Parts=Pn;class qn extends Fe{create(e,t,s){return this._client.post(Ke`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Ke`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(Ke`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ls([{"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(Ke`/vector_stores/${n}/file_batches/${e}/files`,Te,{query:r,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ls([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 jn extends Fe{create(e,t,s){return this._client.post(Ke`/vector_stores/${e}/files`,{body:t,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Ke`/vector_stores/${n}/files/${e}`,{...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(Ke`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Ke`/vector_stores/${e}/files`,Te,{query:t,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(Ke`/vector_stores/${n}/files/${e}`,{...s,headers:ls([{"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=ls([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(Ke`/vector_stores/${n}/files/${e}/content`,Ce,{...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Mn extends Fe{constructor(){super(...arguments),this.files=new jn(this._client),this.fileBatches=new qn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ls([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Ke`/vector_stores/${e}`,{...t,headers:ls([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Ke`/vector_stores/${e}`,{body:t,...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Te,{query:e,...t,headers:ls([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Ke`/vector_stores/${e}`,{...t,headers:ls([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(Ke`/vector_stores/${e}/search`,Ce,{body:t,method:"post",...s,headers:ls([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Nn,Dn,Wn,Bn,Un,Fn,Hn;Mn.Files=jn,Mn.FileBatches=qn;class Xn extends Fe{constructor(){super(...arguments),Nn.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,Nn,"m",Dn).call(this,s);const r=ls([t]).values,o=u(this,Nn,"m",Wn).call(this,r,"webhook-signature"),i=u(this,Nn,"m",Wn).call(this,r,"webhook-timestamp"),a=u(this,Nn,"m",Wn).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")}}Nn=new WeakSet,Dn=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")},Wn=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 Jn{constructor({baseURL:e=bs("OPENAI_BASE_URL"),apiKey:t=bs("OPENAI_API_KEY"),organization:s=bs("OPENAI_ORG_ID")??null,project:n=bs("OPENAI_PROJECT_ID")??null,webhookSecret:r=bs("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(Bn.add(this),Fn.set(this,void 0),this.completions=new zs(this),this.chat=new os(this),this.embeddings=new Ys(this),this.files=new sn(this),this.images=new pn(this),this.audio=new ds(this),this.moderations=new gn(this),this.models=new mn(this),this.fineTuning=new hn(this),this.graders=new fn(this),this.vectorStores=new Mn(this),this.webhooks=new Xn(this),this.beta=new Ks(this),this.batches=new fs(this),this.uploads=new Ln(this),this.responses=new Tn(this),this.evals=new tn(this),this.containers=new Qs(this),void 0===t)throw new p("The OPENAI_API_KEY environment variable is missing or empty; either provide it, or instantiate the OpenAI client with an apiKey option, like new OpenAI({ apiKey: 'My API Key' }).");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??Un.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=pe(i.logLevel,"ClientOptions.logLevel",this)??pe(bs("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,Fn,F),this._options=i,this.apiKey=t,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 ls([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return ne(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${q}`}defaultIdempotencyKey(){return`stainless-node-retry-${h()}`}makeStatusError(e,t,s,n){return m.generate(e,t,s,n)}buildURL(e,t,s){const n=!u(this,Bn,"m",Hn).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){}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 Oe(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(_e(this).debug(`[${l}] sending request`,be({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 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 _e(this).info(`[${l}] connection ${r?"timed out":"failed"} - ${e}`),_e(this).debug(`[${l}] connection ${r?"timed out":"failed"} (${e})`,be({retryOfRequestLogID:s,url:i,durationMs:m-u,message:p.message})),this.retryRequest(n,t,s??l);if(_e(this).info(`[${l}] connection ${r?"timed out":"failed"} - error; no more retries left`),_e(this).debug(`[${l}] connection ${r?"timed out":"failed"} (error; no more retries left)`,be({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),_e(this).info(`${_} - ${e}`),_e(this).debug(`[${l}] response error (${e})`,be({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";_e(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;_e(this).debug(`[${l}] response error (${r})`,be({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 _e(this).info(_),_e(this).debug(`[${l}] response start`,be({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 Ee(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=ls([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))}:{},...D??(D=j()),"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=ls([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||e instanceof 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:B(e)}:u(this,Fn,"f").call(this,{body:e,headers:s})}}function Kn(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 zn(t,s){t.title&&e("Copied to clipboard"),navigator.clipboard.writeText(s.response)}function Vn(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 Gn(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 Qn(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 Yn(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 Zn(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 er(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 tr(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 sr(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"+Kn(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 Jn({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.max_tokens&&(t.max_completion_tokens=t.max_tokens,delete t.max_tokens),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,temperature:.1,top_p:.6,presence_penalty:0,max_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(),zn(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=[tr,Vn,er,Gn,Zn,Qn,Yn];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;zn(e.config,e.gptAnswer)}({config:e.config,gptAnswer:i,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}Un=Jn,Fn=new WeakMap,Bn=new WeakSet,Hn=function(){return"https://api.openai.com/v1"!==this.baseURL},Jn.OpenAI=Un,Jn.DEFAULT_TIMEOUT=6e5,Jn.OpenAIError=p,Jn.APIError=m,Jn.APIConnectionError=y,Jn.APIConnectionTimeoutError=w,Jn.APIUserAbortError=g,Jn.NotFoundError=x,Jn.ConflictError=S,Jn.RateLimitError=$,Jn.BadRequestError=_,Jn.AuthenticationError=b,Jn.InternalServerError=k,Jn.PermissionDeniedError=v,Jn.UnprocessableEntityError=A,Jn.InvalidWebhookSignatureError=I,Jn.toFile=async function(e,t,s){if(Pe(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Be(e))(e=await e))return e instanceof File?e:Le([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()),Le(await Ue(n),t,s)}const n=await Ue(e);if(t||(t=qe(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Le(n,t,s)},Jn.Completions=zs,Jn.Chat=os,Jn.Embeddings=Ys,Jn.Files=sn,Jn.Images=pn,Jn.Audio=ds,Jn.Moderations=gn,Jn.Models=mn,Jn.FineTuning=hn,Jn.Graders=fn,Jn.VectorStores=Mn,Jn.Webhooks=Xn,Jn.Beta=Ks,Jn.Batches=fs,Jn.Uploads=Ln,Jn.Responses=Tn,Jn.Evals=tn,Jn.Containers=Qs;const nr=[],rr=[];function or(e){const t=rr.findIndex((t=>t.element===e));if(-1!==t){const e=rr.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function ir(t){if(rr.length>0){for(const e of rr)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(rr.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=sr.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>or(n)});rr.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){nr.push(t.key),nr.length>e.code.length&&nr.shift(),nr.join("")===e.code&&(nr.length=0,ir(e))}))}(t):ir(t)}))}));
//# sourceMappingURL=MoodleGPT.js.map
diff --git a/extension/MoodleGPT.js.map b/extension/MoodleGPT.js.map
index 45a1023..a94d222 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/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/version.mjs","../node_modules/openai/_shims/registry.mjs","../node_modules/openai/_shims/MultipartBody.mjs","../node_modules/openai/_shims/index.mjs","../node_modules/openai/_shims/web-runtime.mjs","../node_modules/openai/error.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/stream-utils.mjs","../node_modules/openai/streaming.mjs","../node_modules/openai/uploads.mjs","../node_modules/openai/core.mjs","../node_modules/openai/pagination.mjs","../node_modules/openai/resource.mjs","../node_modules/openai/resources/chat/completions.mjs","../node_modules/openai/resources/chat/chat.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/lib/RunnableFunction.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.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/beta/chat/completions.mjs","../node_modules/openai/resources/beta/chat/chat.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/vector-stores/files.mjs","../node_modules/openai/resources/beta/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/beta/vector-stores/vector-stores.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/files.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/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/index.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-o1.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,"export const default_format = 'RFC3986';\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: (v) => String(v),\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nconst has = Object.prototype.hasOwnProperty;\nconst is_array = Array.isArray;\nconst hex_table = (() => {\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 (is_array(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 (is_array(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) ||\n !has.call(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 (is_array(target) && !is_array(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (is_array(target) && is_array(source)) {\n source.forEach(function (item, i) {\n if (has.call(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.call(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 (is_array(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 } from \"./utils.mjs\";\nimport { default_format, formatters } from \"./formats.mjs\";\nconst has = Object.prototype.hasOwnProperty;\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 is_array = Array.isArray;\nconst push = Array.prototype.push;\nconst push_to_array = function (arr, value_or_array) {\n push.apply(arr, is_array(value_or_array) ? value_or_array : [value_or_array]);\n};\nconst to_ISO = Date.prototype.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: formatters[default_format],\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return to_ISO.call(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' && is_array(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' && is_array(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 (is_array(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 && is_array(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && is_array(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 = is_array(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 && is_array(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.call(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' || is_array(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 (is_array(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 const VERSION = '4.82.0'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","export let auto = false;\nexport let kind = undefined;\nexport let fetch = undefined;\nexport let Request = undefined;\nexport let Response = undefined;\nexport let Headers = undefined;\nexport let FormData = undefined;\nexport let Blob = undefined;\nexport let File = undefined;\nexport let ReadableStream = undefined;\nexport let getMultipartRequestOptions = undefined;\nexport let getDefaultAgent = undefined;\nexport let fileFromPath = undefined;\nexport let isFsReadStream = undefined;\nexport function setShims(shims, options = { auto: false }) {\n if (auto) {\n throw new Error(`you must \\`import 'openai/shims/${shims.kind}'\\` before importing anything else from openai`);\n }\n if (kind) {\n throw new Error(`can't \\`import 'openai/shims/${shims.kind}'\\` after \\`import 'openai/shims/${kind}'\\``);\n }\n auto = options.auto;\n kind = shims.kind;\n fetch = shims.fetch;\n Request = shims.Request;\n Response = shims.Response;\n Headers = shims.Headers;\n FormData = shims.FormData;\n Blob = shims.Blob;\n File = shims.File;\n ReadableStream = shims.ReadableStream;\n getMultipartRequestOptions = shims.getMultipartRequestOptions;\n getDefaultAgent = shims.getDefaultAgent;\n fileFromPath = shims.fileFromPath;\n isFsReadStream = shims.isFsReadStream;\n}\n//# sourceMappingURL=registry.mjs.map","/**\n * Disclaimer: modules in _shims aren't intended to be imported by SDK users.\n */\nexport class MultipartBody {\n constructor(body) {\n this.body = body;\n }\n get [Symbol.toStringTag]() {\n return 'MultipartBody';\n }\n}\n//# sourceMappingURL=MultipartBody.mjs.map","/**\n * Disclaimer: modules in _shims aren't intended to be imported by SDK users.\n */\nimport * as shims from './registry.mjs';\nimport * as auto from 'openai/_shims/auto/runtime';\nif (!shims.kind) shims.setShims(auto.getRuntime(), { auto: true });\nexport * from './registry.mjs';\n","import { MultipartBody } from \"./MultipartBody.mjs\";\nexport function getRuntime({ manuallyImported } = {}) {\n const recommendation = manuallyImported ?\n `You may need to use polyfills`\n : `Add one of these imports before your first \\`import … from 'openai'\\`:\n- \\`import 'openai/shims/node'\\` (if you're running on Node)\n- \\`import 'openai/shims/web'\\` (otherwise)\n`;\n let _fetch, _Request, _Response, _Headers;\n try {\n // @ts-ignore\n _fetch = fetch;\n // @ts-ignore\n _Request = Request;\n // @ts-ignore\n _Response = Response;\n // @ts-ignore\n _Headers = Headers;\n }\n catch (error) {\n throw new Error(`this environment is missing the following Web Fetch API type: ${error.message}. ${recommendation}`);\n }\n return {\n kind: 'web',\n fetch: _fetch,\n Request: _Request,\n Response: _Response,\n Headers: _Headers,\n FormData: \n // @ts-ignore\n typeof FormData !== 'undefined' ? FormData : (class FormData {\n // @ts-ignore\n constructor() {\n throw new Error(`file uploads aren't supported in this environment yet as 'FormData' is undefined. ${recommendation}`);\n }\n }),\n Blob: typeof Blob !== 'undefined' ? Blob : (class Blob {\n constructor() {\n throw new Error(`file uploads aren't supported in this environment yet as 'Blob' is undefined. ${recommendation}`);\n }\n }),\n File: \n // @ts-ignore\n typeof File !== 'undefined' ? File : (class File {\n // @ts-ignore\n constructor() {\n throw new Error(`file uploads aren't supported in this environment yet as 'File' is undefined. ${recommendation}`);\n }\n }),\n ReadableStream: \n // @ts-ignore\n typeof ReadableStream !== 'undefined' ? ReadableStream : (class ReadableStream {\n // @ts-ignore\n constructor() {\n throw new Error(`streaming isn't supported in this environment yet as 'ReadableStream' is undefined. ${recommendation}`);\n }\n }),\n getMultipartRequestOptions: async (\n // @ts-ignore\n form, opts) => ({\n ...opts,\n body: new MultipartBody(form),\n }),\n getDefaultAgent: (url) => undefined,\n fileFromPath: () => {\n throw new Error('The `fileFromPath` function is only supported in Node. See the README for more details: https://www.github.com/openai/openai-node#file-uploads');\n },\n isFsReadStream: (value) => false,\n };\n}\n//# sourceMappingURL=web-runtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"./core.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.request_id = headers?.['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}\n//# sourceMappingURL=error.mjs.map","import { OpenAIError } from \"../../error.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 this.buffer = [];\n this.trailingCR = false;\n }\n decode(chunk) {\n let text = this.decodeText(chunk);\n if (this.trailingCR) {\n text = '\\r' + text;\n this.trailingCR = false;\n }\n if (text.endsWith('\\r')) {\n this.trailingCR = true;\n text = text.slice(0, -1);\n }\n if (!text) {\n return [];\n }\n const trailingNewline = LineDecoder.NEWLINE_CHARS.has(text[text.length - 1] || '');\n let lines = text.split(LineDecoder.NEWLINE_REGEXP);\n // if there is a trailing new line then the last entry will be an empty\n // string which we don't care about\n if (trailingNewline) {\n lines.pop();\n }\n if (lines.length === 1 && !trailingNewline) {\n this.buffer.push(lines[0]);\n return [];\n }\n if (this.buffer.length > 0) {\n lines = [this.buffer.join('') + lines[0], ...lines.slice(1)];\n this.buffer = [];\n }\n if (!trailingNewline) {\n this.buffer = [lines.pop() || ''];\n }\n return lines;\n }\n decodeText(bytes) {\n if (bytes == null)\n return '';\n if (typeof bytes === 'string')\n return bytes;\n // Node:\n if (typeof Buffer !== 'undefined') {\n if (bytes instanceof Buffer) {\n return bytes.toString();\n }\n if (bytes instanceof Uint8Array) {\n return Buffer.from(bytes).toString();\n }\n throw new OpenAIError(`Unexpected: received non-Uint8Array (${bytes.constructor.name}) stream chunk in an environment with a global \"Buffer\" defined, which this library assumes to be Node. Please report this error.`);\n }\n // Browser\n if (typeof TextDecoder !== 'undefined') {\n if (bytes instanceof Uint8Array || bytes instanceof ArrayBuffer) {\n this.textDecoder ?? (this.textDecoder = new TextDecoder('utf8'));\n return this.textDecoder.decode(bytes);\n }\n throw new OpenAIError(`Unexpected: received non-Uint8Array/ArrayBuffer (${bytes.constructor.name}) in a web platform. Please report this error.`);\n }\n throw new OpenAIError(`Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.`);\n }\n flush() {\n if (!this.buffer.length && !this.trailingCR) {\n return [];\n }\n const lines = [this.buffer.join('')];\n this.buffer = [];\n this.trailingCR = false;\n return lines;\n }\n}\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n//# sourceMappingURL=line.mjs.map","/**\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//# sourceMappingURL=stream-utils.mjs.map","import { ReadableStream } from \"./_shims/index.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { LineDecoder } from \"./internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"./internal/stream-utils.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller) {\n this.iterator = iterator;\n this.controller = controller;\n }\n static fromSSEResponse(response, controller) {\n let consumed = false;\n async function* iterator() {\n if (consumed) {\n throw new Error('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) {\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 if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, undefined);\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 (e instanceof Error && e.name === 'AbortError')\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);\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) {\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 Error('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 (e instanceof Error && e.name === 'AbortError')\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);\n }\n [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),\n new Stream(() => teeIterator(right), this.controller),\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 const encoder = new TextEncoder();\n return new ReadableStream({\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 = encoder.encode(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 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' ? new TextEncoder().encode(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}\nfunction 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 - 2; 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}\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}\n/** This is an internal helper function that's just used for testing */\nexport function _decodeChunks(chunks) {\n const decoder = new LineDecoder();\n const lines = [];\n for (const chunk of chunks) {\n lines.push(...decoder.decode(chunk));\n }\n return lines;\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","import { FormData, File, getMultipartRequestOptions, isFsReadStream, } from \"./_shims/index.mjs\";\nexport { fileFromPath } from \"./_shims/index.mjs\";\nexport const isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\nexport const isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\n/**\n * The BlobLike type omits arrayBuffer() because @types/node-fetch@^2.6.4 lacks it; but this check\n * adds the arrayBuffer() method type because it is available and used at runtime\n */\nexport const 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';\nexport const isUploadable = (value) => {\n return isFileLike(value) || isResponseLike(value) || isFsReadStream(value);\n};\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 // 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 return value;\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop() ?? 'unknown_file');\n // we need to convert the `Blob` into an array buffer because the `Blob` class\n // that `node-fetch` defines is incompatible with the web standard which results\n // in `new File` interpreting it as a string instead of binary data.\n const data = isBlobLike(blob) ? [(await blob.arrayBuffer())] : [blob];\n return new File(data, name, options);\n }\n const bits = await getBytes(value);\n name || (name = getName(value) ?? 'unknown_file');\n if (!options?.type) {\n const type = bits[0]?.type;\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return new File(bits, 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(await value.arrayBuffer());\n }\n else if (isAsyncIterableIterator(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(chunk); // TODO, consider validating?\n }\n }\n else {\n throw new Error(`Unexpected data type: ${typeof value}; constructor: ${value?.constructor\n ?.name}; props: ${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n const props = Object.getOwnPropertyNames(value);\n return `[${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\nfunction getName(value) {\n return (getStringFromMaybeBuffer(value.name) ||\n getStringFromMaybeBuffer(value.filename) ||\n // For fs.ReadStream\n getStringFromMaybeBuffer(value.path)?.split(/[\\\\/]/).pop());\n}\nconst getStringFromMaybeBuffer = (x) => {\n if (typeof x === 'string')\n return x;\n if (typeof Buffer !== 'undefined' && x instanceof Buffer)\n return String(x);\n return undefined;\n};\nconst isAsyncIterableIterator = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\nexport const isMultipartBody = (body) => body && typeof body === 'object' && body.body && body[Symbol.toStringTag] === 'MultipartBody';\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) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n const form = await createForm(opts.body);\n return getMultipartRequestOptions(form, opts);\n};\nexport const multipartFormRequestOptions = async (opts) => {\n const form = await createForm(opts.body);\n return getMultipartRequestOptions(form, opts);\n};\nexport const createForm = async (body) => {\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\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 (isUploadable(value)) {\n const file = await toFile(value);\n form.append(key, file);\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","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _AbstractPage_client;\nimport { VERSION } from \"./version.mjs\";\nimport { Stream } from \"./streaming.mjs\";\nimport { OpenAIError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, } from \"./error.mjs\";\nimport { kind as shimsKind, getDefaultAgent, fetch, } from \"./_shims/index.mjs\";\nimport { isBlobLike, isMultipartBody } from \"./uploads.mjs\";\nexport { maybeMultipartFormRequestOptions, multipartFormRequestOptions, createForm, } from \"./uploads.mjs\";\nasync function defaultParseResponse(props) {\n const { response } = props;\n if (props.options.stream) {\n 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);\n }\n return Stream.fromSSEResponse(response, props.controller);\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 isJSON = contentType?.includes('application/json') || contentType?.includes('application/vnd.api+json');\n if (isJSON) {\n const json = await response.json();\n debug('response', response.status, response.url, response.headers, json);\n return _addRequestID(json, response);\n }\n const text = await response.text();\n debug('response', response.status, response.url, response.headers, text);\n // TODO handle blob, arraybuffer, other content types, etc.\n return text;\n}\nfunction _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/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(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 }\n _thenUnwrap(transform) {\n return new APIPromise(this.responsePromise, async (props) => _addRequestID(transform(await this.parseResponse(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\"` if you can,\n * or add one of these imports before your first `import … from 'openai'`:\n * - `import 'openai/shims/node'` (if you're running on Node)\n * - `import 'openai/shims/web'` (otherwise)\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 *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` if you can,\n * or add one of these imports before your first `import … from 'openai'`:\n * - `import 'openai/shims/node'` (if you're running on Node)\n * - `import 'openai/shims/web'` (otherwise)\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(this.parseResponse);\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}\nexport class APIClient {\n constructor({ baseURL, maxRetries = 2, timeout = 600000, // 10 minutes\n httpAgent, fetch: overriddenFetch, }) {\n this.baseURL = baseURL;\n this.maxRetries = validatePositiveInteger('maxRetries', maxRetries);\n this.timeout = validatePositiveInteger('timeout', timeout);\n this.httpAgent = httpAgent;\n this.fetch = overriddenFetch ?? fetch;\n }\n authHeaders(opts) {\n return {};\n }\n /**\n * Override this to add your own default headers, for example:\n *\n * {\n * ...super.defaultHeaders(),\n * Authorization: 'Bearer 123',\n * }\n */\n defaultHeaders(opts) {\n return {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'User-Agent': this.getUserAgent(),\n ...getPlatformHeaders(),\n ...this.authHeaders(opts),\n };\n }\n /**\n * Override this to add your own headers validation:\n */\n validateHeaders(headers, customHeaders) { }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\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(async (opts) => {\n const body = opts && isBlobLike(opts?.body) ? new DataView(await opts.body.arrayBuffer())\n : opts?.body instanceof DataView ? opts.body\n : opts?.body instanceof ArrayBuffer ? new DataView(opts.body)\n : opts && ArrayBuffer.isView(opts?.body) ? new DataView(opts.body.buffer)\n : opts?.body;\n return { method, path, ...opts, body };\n }));\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n calculateContentLength(body) {\n if (typeof body === 'string') {\n if (typeof Buffer !== 'undefined') {\n return Buffer.byteLength(body, 'utf8').toString();\n }\n if (typeof TextEncoder !== 'undefined') {\n const encoder = new TextEncoder();\n const encoded = encoder.encode(body);\n return encoded.length.toString();\n }\n }\n else if (ArrayBuffer.isView(body)) {\n return body.byteLength.toString();\n }\n return null;\n }\n buildRequest(options, { retryCount = 0 } = {}) {\n const { method, path, query, headers: headers = {} } = options;\n const body = ArrayBuffer.isView(options.body) || (options.__binaryRequest && typeof options.body === 'string') ?\n options.body\n : isMultipartBody(options.body) ? options.body.body\n : options.body ? JSON.stringify(options.body, null, 2)\n : null;\n const contentLength = this.calculateContentLength(body);\n const url = this.buildURL(path, query);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n const timeout = options.timeout ?? this.timeout;\n const httpAgent = options.httpAgent ?? this.httpAgent ?? getDefaultAgent(url);\n const minAgentTimeout = timeout + 1000;\n if (typeof httpAgent?.options?.timeout === 'number' &&\n minAgentTimeout > (httpAgent.options.timeout ?? 0)) {\n // Allow any given request to bump our agent active socket timeout.\n // This may seem strange, but leaking active sockets should be rare and not particularly problematic,\n // and without mutating agent we would need to create more of them.\n // This tradeoff optimizes for performance.\n httpAgent.options.timeout = minAgentTimeout;\n }\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n headers[this.idempotencyHeader] = options.idempotencyKey;\n }\n const reqHeaders = this.buildHeaders({ options, headers, contentLength, retryCount });\n const req = {\n method,\n ...(body && { body: body }),\n headers: reqHeaders,\n ...(httpAgent && { agent: httpAgent }),\n // @ts-ignore node-fetch uses a custom AbortSignal type that is\n // not compatible with standard web types\n signal: options.signal ?? null,\n };\n return { req, url, timeout };\n }\n buildHeaders({ options, headers, contentLength, retryCount, }) {\n const reqHeaders = {};\n if (contentLength) {\n reqHeaders['content-length'] = contentLength;\n }\n const defaultHeaders = this.defaultHeaders(options);\n applyHeadersMut(reqHeaders, defaultHeaders);\n applyHeadersMut(reqHeaders, headers);\n // let builtin fetch set the Content-Type for multipart bodies\n if (isMultipartBody(options.body) && shimsKind !== 'node') {\n delete reqHeaders['content-type'];\n }\n // Don't set the retry count header if it was already set or removed through default headers or by the\n // caller. We check `defaultHeaders` and `headers`, which can contain nulls, instead of `reqHeaders` to\n // account for the removal case.\n if (getHeader(defaultHeaders, 'x-stainless-retry-count') === undefined &&\n getHeader(headers, 'x-stainless-retry-count') === undefined) {\n reqHeaders['x-stainless-retry-count'] = String(retryCount);\n }\n this.validateHeaders(reqHeaders, headers);\n return reqHeaders;\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) { }\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 parseHeaders(headers) {\n return (!headers ? {}\n : Symbol.iterator in headers ?\n Object.fromEntries(Array.from(headers).map((header) => [...header]))\n : { ...headers });\n }\n makeStatusError(status, error, message, headers) {\n return APIError.generate(status, error, message, headers);\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this.makeRequest(options, remainingRetries));\n }\n async makeRequest(optionsInput, retriesRemaining) {\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 } = this.buildRequest(options, { retryCount: maxRetries - retriesRemaining });\n await this.prepareRequest(req, { url, options });\n debug('request', url, options, req.headers);\n if (options.signal?.aborted) {\n throw new APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n if (response instanceof Error) {\n if (options.signal?.aborted) {\n throw new APIUserAbortError();\n }\n if (retriesRemaining) {\n return this.retryRequest(options, retriesRemaining);\n }\n if (response.name === 'AbortError') {\n throw new APIConnectionTimeoutError();\n }\n throw new APIConnectionError({ cause: response });\n }\n const responseHeaders = createResponseHeaders(response.headers);\n if (!response.ok) {\n if (retriesRemaining && this.shouldRetry(response)) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n debug(`response (error; ${retryMessage})`, response.status, url, responseHeaders);\n return this.retryRequest(options, retriesRemaining, responseHeaders);\n }\n const errText = await response.text().catch((e) => castToError(e).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n const retryMessage = retriesRemaining ? `(error; no more retries left)` : `(error; not retryable)`;\n debug(`response (error; ${retryMessage})`, response.status, url, responseHeaders, errMessage);\n const err = this.makeStatusError(response.status, errJSON, errMessage, responseHeaders);\n throw err;\n }\n return { response, options, controller };\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null);\n return new PagePromise(this, request, Page);\n }\n buildURL(path, query) {\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(this.baseURL + (this.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 stringifyQuery(query) {\n return Object.entries(query)\n .filter(([_, value]) => typeof value !== 'undefined')\n .map(([key, value]) => {\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n }\n if (value === null) {\n return `${encodeURIComponent(key)}=`;\n }\n throw new OpenAIError(`Cannot stringify type ${typeof value}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`);\n })\n .join('&');\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const fetchOptions = {\n signal: controller.signal,\n ...options,\n };\n if (fetchOptions.method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = fetchOptions.method.toUpperCase();\n }\n return (\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n this.fetch.call(undefined, url, fetchOptions).finally(() => {\n clearTimeout(timeout);\n }));\n }\n 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, 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?.['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?.['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);\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 getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n}\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.nextPageInfo() != null;\n }\n async getNextPage() {\n const nextInfo = this.nextPageInfo();\n if (!nextInfo) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n const nextOptions = { ...this.options };\n if ('params' in nextInfo && typeof nextOptions.query === 'object') {\n nextOptions.query = { ...nextOptions.query, ...nextInfo.params };\n }\n else if ('url' in nextInfo) {\n const params = [...Object.entries(nextOptions.query || {}), ...nextInfo.url.searchParams.entries()];\n for (const [key, value] of params) {\n nextInfo.url.searchParams.set(key, value);\n }\n nextOptions.query = undefined;\n nextOptions.path = nextInfo.url.toString();\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\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(request, async (props) => new Page(client, props.response, await defaultParseResponse(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}\nexport const createResponseHeaders = (headers) => {\n return new Proxy(Object.fromEntries(\n // @ts-ignore\n headers.entries()), {\n get(target, name) {\n const key = name.toString();\n return target[key.toLowerCase()] || target[key];\n },\n });\n};\n// This is required so that we can determine if a given object matches the RequestOptions\n// type at runtime. While this requires duplication, it is enforced by the TypeScript\n// compiler such that any missing / extraneous keys will cause an error.\nconst requestOptionsKeys = {\n method: true,\n path: true,\n query: true,\n body: true,\n headers: true,\n maxRetries: true,\n stream: true,\n timeout: true,\n httpAgent: true,\n signal: true,\n idempotencyKey: true,\n __binaryRequest: true,\n __binaryResponse: true,\n __streamClass: true,\n};\nexport const isRequestOptions = (obj) => {\n return (typeof obj === 'object' &&\n obj !== null &&\n !isEmptyObj(obj) &&\n Object.keys(obj).every((k) => hasOwn(requestOptionsKeys, k)));\n};\nconst getPlatformProperties = () => {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\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': process.version,\n };\n }\n // Check if Node.js\n if (Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(process.platform),\n 'X-Stainless-Arch': normalizeArch(process.arch),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': process.version,\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;\nconst getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nconst isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\nconst 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 castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\nexport const ensurePresent = (value) => {\n if (value == null)\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n return value;\n};\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 process !== 'undefined') {\n return process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof Deno !== 'undefined') {\n return Deno.env?.get?.(env)?.trim();\n }\n return undefined;\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 === undefined) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value === undefined) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value === undefined) {\n return undefined;\n }\n return coerceBoolean(value);\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}\n/**\n * Copies headers from \"newHeaders\" onto \"targetHeaders\",\n * using lower-case for all properties,\n * ignoring any keys with undefined values,\n * and deleting any keys with null values.\n */\nfunction applyHeadersMut(targetHeaders, newHeaders) {\n for (const k in newHeaders) {\n if (!hasOwn(newHeaders, k))\n continue;\n const lowerKey = k.toLowerCase();\n if (!lowerKey)\n continue;\n const val = newHeaders[k];\n if (val === null) {\n delete targetHeaders[lowerKey];\n }\n else if (val !== undefined) {\n targetHeaders[lowerKey] = val;\n }\n }\n}\nconst SENSITIVE_HEADERS = new Set(['authorization', 'api-key']);\nexport function debug(action, ...args) {\n if (typeof process !== 'undefined' && process?.env?.['DEBUG'] === 'true') {\n const modifiedArgs = args.map((arg) => {\n if (!arg) {\n return arg;\n }\n // Check for sensitive headers in request body 'headers' object\n if (arg['headers']) {\n // clone so we don't mutate\n const modifiedArg = { ...arg, headers: { ...arg['headers'] } };\n for (const header in arg['headers']) {\n if (SENSITIVE_HEADERS.has(header.toLowerCase())) {\n modifiedArg['headers'][header] = 'REDACTED';\n }\n }\n return modifiedArg;\n }\n let modifiedArg = null;\n // Check for sensitive headers in headers object\n for (const header in arg) {\n if (SENSITIVE_HEADERS.has(header.toLowerCase())) {\n // avoid making a copy until we need to\n modifiedArg ?? (modifiedArg = { ...arg });\n modifiedArg[header] = 'REDACTED';\n }\n }\n return modifiedArg ?? arg;\n });\n console.log(`OpenAI:DEBUG:${action}`, ...modifiedArgs);\n }\n}\n/**\n * https://stackoverflow.com/a/2117523\n */\nconst uuid4 = () => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\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};\nexport const isHeadersProtocol = (headers) => {\n return typeof headers?.get === 'function';\n};\nexport const getRequiredHeader = (headers, header) => {\n const foundHeader = getHeader(headers, header);\n if (foundHeader === undefined) {\n throw new Error(`Could not find ${header} header`);\n }\n return foundHeader;\n};\nexport const getHeader = (headers, header) => {\n const lowerCasedHeader = header.toLowerCase();\n if (isHeadersProtocol(headers)) {\n // to deal with the case where the header looks like Stainless-Event-Id\n const intercapsHeader = header[0]?.toUpperCase() +\n header.substring(1).replace(/([^\\w])(\\w)/g, (_m, g1, g2) => g1 + g2.toUpperCase());\n for (const key of [header, lowerCasedHeader, header.toUpperCase(), intercapsHeader]) {\n const value = headers.get(key);\n if (value) {\n return value;\n }\n }\n }\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() === lowerCasedHeader) {\n if (Array.isArray(value)) {\n if (value.length <= 1)\n return value[0];\n console.warn(`Received ${value.length} entries for the ${header} header, using the first entry.`);\n return value[0];\n }\n return value;\n }\n }\n return undefined;\n};\n/**\n * Encodes a string to Base64 format.\n */\nexport const toBase64 = (str) => {\n if (!str)\n return '';\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(str).toString('base64');\n }\n if (typeof btoa !== 'undefined') {\n return btoa(str);\n }\n throw new OpenAIError('Cannot generate b64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\n//# sourceMappingURL=core.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { AbstractPage } from \"./core.mjs\";\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 // @deprecated Please use `nextPageInfo()` instead\n /**\n * This page represents a response that isn't actually paginated at the API level\n * so there will never be any next page params.\n */\n nextPageParams() {\n return null;\n }\n nextPageInfo() {\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 }\n getPaginatedItems() {\n return this.data ?? [];\n }\n // @deprecated Please use `nextPageInfo()` instead\n nextPageParams() {\n const info = this.nextPageInfo();\n if (!info)\n return null;\n if ('params' in info)\n return info.params;\n const params = Object.fromEntries(info.url.searchParams);\n if (!Object.keys(params).length)\n return null;\n return params;\n }\n nextPageInfo() {\n const data = this.getPaginatedItems();\n if (!data.length) {\n return null;\n }\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return { params: { after: id } };\n }\n}\n//# sourceMappingURL=pagination.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","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/chat/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 \"../../resource.mjs\";\nimport * as CompletionsAPI from \"./completions.mjs\";\nimport { Completions, } from \"./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 { APIResource } from \"../../resource.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: { 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 \"../../resource.mjs\";\nimport * as Core from \"../../core.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', Core.multipartFormRequestOptions({ body, ...options }));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../resource.mjs\";\nimport * as Core from \"../../core.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', Core.multipartFormRequestOptions({ body, ...options }));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../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 \"../resource.mjs\";\nimport { isRequestOptions } from \"../core.mjs\";\nimport { CursorPage } from \"../pagination.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(`/batches/${batchId}`, options);\n }\n list(query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list({}, query);\n }\n return this._client.getAPIList('/batches', BatchesPage, { 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(`/batches/${batchId}/cancel`, options);\n }\n}\nexport class BatchesPage extends CursorPage {\n}\nBatches.BatchesPage = BatchesPage;\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../resource.mjs\";\nimport { isRequestOptions } from \"../../core.mjs\";\nimport { CursorPage } from \"../../pagination.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Retrieves an assistant.\n */\n retrieve(assistantId, options) {\n return this._client.get(`/assistants/${assistantId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Modifies an assistant.\n */\n update(assistantId, body, options) {\n return this._client.post(`/assistants/${assistantId}`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n list(query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list({}, query);\n }\n return this._client.getAPIList('/assistants', AssistantsPage, {\n query,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Delete an assistant.\n */\n del(assistantId, options) {\n return this._client.delete(`/assistants/${assistantId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n}\nexport class AssistantsPage extends CursorPage {\n}\nAssistants.AssistantsPage = AssistantsPage;\n//# sourceMappingURL=assistants.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 *\n * @deprecated - please use ParsingToolFunction instead.\n */\nexport class ParsingFunction {\n constructor(input) {\n this.function = input.function;\n this.parse = input.parse;\n this.parameters = input.parameters;\n this.description = input.description;\n this.name = input.name;\n }\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","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isFunctionMessage = (message) => {\n return message?.role === 'function';\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 __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _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 { 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","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\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 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 ...choice,\n message: { ...choice.message, parsed: null, tool_calls: choice.message.tool_calls ?? [] },\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 return {\n ...choice,\n message: {\n ...choice.message,\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? [],\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) => inputTool.function?.name === toolCall.function.name);\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) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => inputTool.function?.name === toolCall.function.name);\n return 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 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","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionCall, _AbstractChatCompletionRunner_getFinalFunctionCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { OpenAIError } from \"../error.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nimport { isAssistantMessage, isFunctionMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.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 ((isFunctionMessage(message) || 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('functionCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.function_call) {\n this._emit('functionCall', message.function_call);\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('functionCall', 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 finalFunctionCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionCall).call(this);\n }\n async finalFunctionCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionCallResult).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_getFinalFunctionCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionCallResult', 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 _runFunctions(client, params, options) {\n const role = 'function';\n const { function_call = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof function_call !== 'string' && function_call?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n const functionsByName = {};\n for (const f of params.functions) {\n functionsByName[f.name || f.function.name] = f;\n }\n const functions = params.functions.map((f) => ({\n name: f.name || f.function.name,\n parameters: f.parameters,\n description: f.description,\n }));\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 function_call,\n functions,\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.function_call)\n return;\n const { name, arguments: args } = message.function_call;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid function_call: ${JSON.stringify(name)}. Available options are: ${functions\n .map((f) => JSON.stringify(f.name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, name, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid function_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, name, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n this._addMessage({\n role,\n name,\n content: error instanceof Error ? error.message : String(error),\n });\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, name, content });\n if (singleFunctionToCall)\n return;\n }\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?.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 const { function_call, ...rest } = message;\n // TODO: support audio here\n const ret = {\n ...rest,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n if (function_call) {\n ret.function_call = function_call;\n }\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionCall = function _AbstractChatCompletionRunner_getFinalFunctionCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.function_call) {\n return message.function_call;\n }\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionCallResult = function _AbstractChatCompletionRunner_getFinalFunctionCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isFunctionMessage(message) && message.content != null) {\n return message.content;\n }\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","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n /** @deprecated - please use `runTools` instead. */\n static runFunctions(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runFunctions' },\n };\n runner._run(() => runner._runFunctions(client, params, opts));\n return runner;\n }\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 __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _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 { OpenAIError, APIUserAbortError, LengthFinishReasonError, ContentFilterFinishReasonError, } from \"../error.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.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) => tool.type === 'function' && tool.function.name === toolCallSnapshot.function.name);\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 /** @deprecated - please use `runTools` instead. */\n static runFunctions(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(null);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runFunctions' },\n };\n runner._run(() => runner._runFunctions(client, params, opts));\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 \"../../../resource.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 { ChatCompletionStreamingRunner, } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingFunction, ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner, } from \"../../../lib/ChatCompletionRunner.mjs\";\nexport class Completions extends APIResource {\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': 'beta.chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runFunctions(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runFunctions(this._client, body, options);\n }\n return ChatCompletionRunner.runFunctions(this._client, body, options);\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}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.mjs\";\nimport * as CompletionsAPI from \"./completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\n(function (Chat) {\n Chat.Completions = CompletionsAPI.Completions;\n})(Chat || (Chat = {}));\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.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 create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: { '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 \"../../../resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\n//# sourceMappingURL=realtime.mjs.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _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;\nimport * as Core from \"../core.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.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 AssistantStream();\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(threadId, runId, runs, params, options) {\n const runner = new AssistantStream();\n runner._run(() => runner._runToolAssistantStream(threadId, runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, threadId, 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(threadId, 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 AssistantStream();\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 AssistantStream();\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 (Core.isObj(accValue) && Core.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 (!Core.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(threadId, runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, threadId, runId, params, options);\n }\n}\n_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.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 }\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 = AssistantStream.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 AssistantStream.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 __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};\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../core.mjs\";\nimport { CursorPage } from \"../../../pagination.mjs\";\nexport class Messages extends APIResource {\n /**\n * Create a message.\n */\n create(threadId, body, options) {\n return this._client.post(`/threads/${threadId}/messages`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Retrieve a message.\n */\n retrieve(threadId, messageId, options) {\n return this._client.get(`/threads/${threadId}/messages/${messageId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Modifies a message.\n */\n update(threadId, messageId, body, options) {\n return this._client.post(`/threads/${threadId}/messages/${messageId}`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n list(threadId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list(threadId, {}, query);\n }\n return this._client.getAPIList(`/threads/${threadId}/messages`, MessagesPage, {\n query,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Deletes a message.\n */\n del(threadId, messageId, options) {\n return this._client.delete(`/threads/${threadId}/messages/${messageId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n}\nexport class MessagesPage extends CursorPage {\n}\nMessages.MessagesPage = MessagesPage;\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../../core.mjs\";\nimport { CursorPage } from \"../../../../pagination.mjs\";\nexport class Steps extends APIResource {\n retrieve(threadId, runId, stepId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.retrieve(threadId, runId, stepId, {}, query);\n }\n return this._client.get(`/threads/${threadId}/runs/${runId}/steps/${stepId}`, {\n query,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n list(threadId, runId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list(threadId, runId, {}, query);\n }\n return this._client.getAPIList(`/threads/${threadId}/runs/${runId}/steps`, RunStepsPage, {\n query,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n}\nexport class RunStepsPage extends CursorPage {\n}\nSteps.RunStepsPage = RunStepsPage;\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../../core.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../core.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { RunStepsPage, Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../pagination.mjs\";\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(`/threads/${threadId}/runs`, {\n query: { include },\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n */\n retrieve(threadId, runId, options) {\n return this._client.get(`/threads/${threadId}/runs/${runId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Modifies a run.\n */\n update(threadId, runId, body, options) {\n return this._client.post(`/threads/${threadId}/runs/${runId}`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n list(threadId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list(threadId, {}, query);\n }\n return this._client.getAPIList(`/threads/${threadId}/runs`, RunsPage, {\n query,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n */\n cancel(threadId, runId, options) {\n return this._client.post(`/threads/${threadId}/runs/${runId}/cancel`, {\n ...options,\n headers: { '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(threadId, run.id, 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(threadId, runId, options) {\n const headers = { ...options?.headers, 'X-Stainless-Poll-Helper': 'true' };\n if (options?.pollIntervalMs) {\n headers['X-Stainless-Custom-Poll-Interval'] = options.pollIntervalMs.toString();\n }\n while (true) {\n const { data: run, response } = await this.retrieve(threadId, runId, {\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(threadId, runId, body, options) {\n return this._client.post(`/threads/${threadId}/runs/${runId}/submit_tool_outputs`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n stream: body.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(threadId, runId, body, options) {\n const run = await this.submitToolOutputs(threadId, runId, body, options);\n return await this.poll(threadId, run.id, 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(threadId, runId, body, options) {\n return AssistantStream.createToolAssistantStream(threadId, runId, this._client.beta.threads.runs, body, options);\n }\n}\nexport class RunsPage extends CursorPage {\n}\nRuns.RunsPage = RunsPage;\nRuns.Steps = Steps;\nRuns.RunStepsPage = RunStepsPage;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../core.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, MessagesPage, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, RunsPage, } from \"./runs/runs.mjs\";\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 create(body = {}, options) {\n if (isRequestOptions(body)) {\n return this.create({}, body);\n }\n return this._client.post('/threads', {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Retrieves a thread.\n */\n retrieve(threadId, options) {\n return this._client.get(`/threads/${threadId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Modifies a thread.\n */\n update(threadId, body, options) {\n return this._client.post(`/threads/${threadId}`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Delete a thread.\n */\n del(threadId, options) {\n return this._client.delete(`/threads/${threadId}`, {\n ...options,\n headers: { '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: { '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.thread_id, run.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.RunsPage = RunsPage;\nThreads.Messages = Messages;\nThreads.MessagesPage = MessagesPage;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.mjs\";\nimport { sleep, isRequestOptions } from \"../../../core.mjs\";\nimport { CursorPage } from \"../../../pagination.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(`/vector_stores/${vectorStoreId}/files`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(vectorStoreId, fileId, options) {\n return this._client.get(`/vector_stores/${vectorStoreId}/files/${fileId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n list(vectorStoreId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list(vectorStoreId, {}, query);\n }\n return this._client.getAPIList(`/vector_stores/${vectorStoreId}/files`, VectorStoreFilesPage, {\n query,\n ...options,\n headers: { '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 del(vectorStoreId, fileId, options) {\n return this._client.delete(`/vector_stores/${vectorStoreId}/files/${fileId}`, {\n ...options,\n headers: { '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 = { ...options?.headers, 'X-Stainless-Poll-Helper': 'true' };\n if (options?.pollIntervalMs) {\n headers['X-Stainless-Custom-Poll-Interval'] = options.pollIntervalMs.toString();\n }\n while (true) {\n const fileResponse = await this.retrieve(vectorStoreId, fileId, {\n ...options,\n headers,\n }).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}\nexport class VectorStoreFilesPage extends CursorPage {\n}\nFiles.VectorStoreFilesPage = VectorStoreFilesPage;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../core.mjs\";\nimport { sleep } from \"../../../core.mjs\";\nimport { allSettledWithThrow } from \"../../../lib/Util.mjs\";\nimport { VectorStoreFilesPage } from \"./files.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(`/vector_stores/${vectorStoreId}/file_batches`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(vectorStoreId, batchId, options) {\n return this._client.get(`/vector_stores/${vectorStoreId}/file_batches/${batchId}`, {\n ...options,\n headers: { '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(vectorStoreId, batchId, options) {\n return this._client.post(`/vector_stores/${vectorStoreId}/file_batches/${batchId}/cancel`, {\n ...options,\n headers: { '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 listFiles(vectorStoreId, batchId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.listFiles(vectorStoreId, batchId, {}, query);\n }\n return this._client.getAPIList(`/vector_stores/${vectorStoreId}/file_batches/${batchId}/files`, VectorStoreFilesPage, { query, ...options, headers: { '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 = { ...options?.headers, 'X-Stainless-Poll-Helper': 'true' };\n if (options?.pollIntervalMs) {\n headers['X-Stainless-Custom-Poll-Interval'] = options.pollIntervalMs.toString();\n }\n while (true) {\n const { data: batch, response } = await this.retrieve(vectorStoreId, batchId, {\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}\nexport { VectorStoreFilesPage };\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 \"../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../core.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, VectorStoreFilesPage, } from \"./files.mjs\";\nimport { CursorPage } from \"../../../pagination.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: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreId, options) {\n return this._client.get(`/vector_stores/${vectorStoreId}`, {\n ...options,\n headers: { '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(`/vector_stores/${vectorStoreId}`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n list(query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list({}, query);\n }\n return this._client.getAPIList('/vector_stores', VectorStoresPage, {\n query,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Delete a vector store.\n */\n del(vectorStoreId, options) {\n return this._client.delete(`/vector_stores/${vectorStoreId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n}\nexport class VectorStoresPage extends CursorPage {\n}\nVectorStores.VectorStoresPage = VectorStoresPage;\nVectorStores.Files = Files;\nVectorStores.VectorStoreFilesPage = VectorStoreFilesPage;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport * as ChatAPI from \"./chat/chat.mjs\";\nimport { Assistants, AssistantsPage, } 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\";\nimport * as VectorStoresAPI from \"./vector-stores/vector-stores.mjs\";\nimport { VectorStores, VectorStoresPage, } from \"./vector-stores/vector-stores.mjs\";\nimport { Chat } from \"./chat/chat.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.vectorStores = new VectorStoresAPI.VectorStores(this._client);\n this.chat = new ChatAPI.Chat(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.VectorStores = VectorStores;\nBeta.VectorStoresPage = VectorStoresPage;\nBeta.Assistants = Assistants;\nBeta.AssistantsPage = AssistantsPage;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../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 \"../resource.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n */\n create(body, options) {\n return this._client.post('/embeddings', { body, ...options });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../resource.mjs\";\nimport { isRequestOptions } from \"../core.mjs\";\nimport { sleep } from \"../core.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport * as Core from \"../core.mjs\";\nimport { CursorPage } from \"../pagination.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 100 GB.\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', Core.multipartFormRequestOptions({ body, ...options }));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileId, options) {\n return this._client.get(`/files/${fileId}`, options);\n }\n list(query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list({}, query);\n }\n return this._client.getAPIList('/files', FileObjectsPage, { query, ...options });\n }\n /**\n * Delete a file.\n */\n del(fileId, options) {\n return this._client.delete(`/files/${fileId}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileId, options) {\n return this._client.get(`/files/${fileId}/content`, {\n ...options,\n headers: { Accept: 'application/binary', ...options?.headers },\n __binaryResponse: true,\n });\n }\n /**\n * Returns the contents of the specified file.\n *\n * @deprecated The `.content()` method should be used instead\n */\n retrieveContent(fileId, options) {\n return this._client.get(`/files/${fileId}/content`, options);\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}\nexport class FileObjectsPage extends CursorPage {\n}\nFiles.FileObjectsPage = FileObjectsPage;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../core.mjs\";\nimport { CursorPage } from \"../../../pagination.mjs\";\nexport class Checkpoints extends APIResource {\n list(fineTuningJobId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list(fineTuningJobId, {}, query);\n }\n return this._client.getAPIList(`/fine_tuning/jobs/${fineTuningJobId}/checkpoints`, FineTuningJobCheckpointsPage, { query, ...options });\n }\n}\nexport class FineTuningJobCheckpointsPage extends CursorPage {\n}\nCheckpoints.FineTuningJobCheckpointsPage = FineTuningJobCheckpointsPage;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../core.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, FineTuningJobCheckpointsPage, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../pagination.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/fine-tuning)\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/fine-tuning)\n */\n retrieve(fineTuningJobId, options) {\n return this._client.get(`/fine_tuning/jobs/${fineTuningJobId}`, options);\n }\n list(query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list({}, query);\n }\n return this._client.getAPIList('/fine_tuning/jobs', FineTuningJobsPage, { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n */\n cancel(fineTuningJobId, options) {\n return this._client.post(`/fine_tuning/jobs/${fineTuningJobId}/cancel`, options);\n }\n listEvents(fineTuningJobId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.listEvents(fineTuningJobId, {}, query);\n }\n return this._client.getAPIList(`/fine_tuning/jobs/${fineTuningJobId}/events`, FineTuningJobEventsPage, {\n query,\n ...options,\n });\n }\n}\nexport class FineTuningJobsPage extends CursorPage {\n}\nexport class FineTuningJobEventsPage extends CursorPage {\n}\nJobs.FineTuningJobsPage = FineTuningJobsPage;\nJobs.FineTuningJobEventsPage = FineTuningJobEventsPage;\nJobs.Checkpoints = Checkpoints;\nJobs.FineTuningJobCheckpointsPage = FineTuningJobCheckpointsPage;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../resource.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { FineTuningJobEventsPage, FineTuningJobsPage, Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.jobs = new JobsAPI.Jobs(this._client);\n }\n}\nFineTuning.Jobs = Jobs;\nFineTuning.FineTuningJobsPage = FineTuningJobsPage;\nFineTuning.FineTuningJobEventsPage = FineTuningJobEventsPage;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../resource.mjs\";\nimport * as Core from \"../core.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image.\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', Core.multipartFormRequestOptions({ body, ...options }));\n }\n /**\n * Creates an edited or extended image given an original image and a prompt.\n */\n edit(body, options) {\n return this._client.post('/images/edits', Core.multipartFormRequestOptions({ body, ...options }));\n }\n /**\n * Creates an image given a prompt.\n */\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../resource.mjs\";\nimport { Page } from \"../pagination.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(`/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', ModelsPage, 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 del(model, options) {\n return this._client.delete(`/models/${model}`, options);\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class ModelsPage extends Page {\n}\nModels.ModelsPage = ModelsPage;\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../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 \"../../resource.mjs\";\nimport * as Core from \"../../core.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(`/uploads/${uploadId}/parts`, Core.multipartFormRequestOptions({ body, ...options }));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.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`s, the correct `mime_type` must be specified. Please refer\n * to documentation for the supported MIME types for your use case:\n *\n * - [Assistants](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(`/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(`/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.\nvar _a;\nimport * as qs from \"./internal/qs/index.mjs\";\nimport * as Core from \"./core.mjs\";\nimport * as Errors from \"./error.mjs\";\nimport * as Pagination from \"./pagination.mjs\";\nimport * as Uploads from \"./uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { Batches, BatchesPage, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { FileObjectsPage, Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models, ModelsPage } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI extends Core.APIClient {\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} [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 {number} [opts.httpAgent] - An HTTP agent used to manage HTTP(s) connections.\n * @param {Core.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 {Core.Headers} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Core.DefaultQuery} 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 = Core.readEnv('OPENAI_BASE_URL'), apiKey = Core.readEnv('OPENAI_API_KEY'), organization = Core.readEnv('OPENAI_ORG_ID') ?? null, project = Core.readEnv('OPENAI_PROJECT_ID') ?? null, ...opts } = {}) {\n if (apiKey === undefined) {\n throw new Errors.OpenAIError(\"The OPENAI_API_KEY environment variable is missing or empty; either provide it, or instantiate the OpenAI client with an apiKey option, like new OpenAI({ apiKey: 'My API Key' }).\");\n }\n const options = {\n apiKey,\n organization,\n project,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && Core.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 super({\n baseURL: options.baseURL,\n timeout: options.timeout ?? 600000 /* 10 minutes */,\n httpAgent: options.httpAgent,\n maxRetries: options.maxRetries,\n fetch: options.fetch,\n });\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.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this._options = options;\n this.apiKey = apiKey;\n this.organization = organization;\n this.project = project;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n defaultHeaders(opts) {\n return {\n ...super.defaultHeaders(opts),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n ...this._options.defaultHeaders,\n };\n }\n authHeaders(opts) {\n return { Authorization: `Bearer ${this.apiKey}` };\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n}\n_a = OpenAI;\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.toFile = Uploads.toFile;\nOpenAI.fileFromPath = Uploads.fileFromPath;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.FileObjectsPage = FileObjectsPage;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.ModelsPage = ModelsPage;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.BatchesPage = BatchesPage;\nOpenAI.Uploads = UploadsAPIUploads;\n/** API Client for interfacing with the Azure OpenAI API. */\nexport class AzureOpenAI extends OpenAI {\n /**\n * API Client for interfacing with the Azure OpenAI API.\n *\n * @param {string | undefined} [opts.apiVersion=process.env['OPENAI_API_VERSION'] ?? undefined]\n * @param {string | undefined} [opts.endpoint=process.env['AZURE_OPENAI_ENDPOINT'] ?? undefined] - Your Azure endpoint, including the resource, e.g. `https://example-resource.azure.openai.com/`\n * @param {string | undefined} [opts.apiKey=process.env['AZURE_OPENAI_API_KEY'] ?? undefined]\n * @param {string | undefined} opts.deployment - A model deployment, if given, sets the base client URL to include `/deployments/{deployment}`.\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL']] - Sets the base URL for the API, e.g. `https://example-resource.azure.openai.com/openai/`.\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 {number} [opts.httpAgent] - An HTTP agent used to manage HTTP(s) connections.\n * @param {Core.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 {Core.Headers} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Core.DefaultQuery} 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 = Core.readEnv('OPENAI_BASE_URL'), apiKey = Core.readEnv('AZURE_OPENAI_API_KEY'), apiVersion = Core.readEnv('OPENAI_API_VERSION'), endpoint, deployment, azureADTokenProvider, dangerouslyAllowBrowser, ...opts } = {}) {\n if (!apiVersion) {\n throw new Errors.OpenAIError(\"The OPENAI_API_VERSION environment variable is missing or empty; either provide it, or instantiate the AzureOpenAI client with an apiVersion option, like new AzureOpenAI({ apiVersion: 'My API Version' }).\");\n }\n if (typeof azureADTokenProvider === 'function') {\n dangerouslyAllowBrowser = true;\n }\n if (!azureADTokenProvider && !apiKey) {\n throw new Errors.OpenAIError('Missing credentials. Please pass one of `apiKey` and `azureADTokenProvider`, or set the `AZURE_OPENAI_API_KEY` environment variable.');\n }\n if (azureADTokenProvider && apiKey) {\n throw new Errors.OpenAIError('The `apiKey` and `azureADTokenProvider` arguments are mutually exclusive; only one can be passed at a time.');\n }\n // define a sentinel value to avoid any typing issues\n apiKey ?? (apiKey = API_KEY_SENTINEL);\n opts.defaultQuery = { ...opts.defaultQuery, 'api-version': apiVersion };\n if (!baseURL) {\n if (!endpoint) {\n endpoint = process.env['AZURE_OPENAI_ENDPOINT'];\n }\n if (!endpoint) {\n throw new Errors.OpenAIError('Must provide one of the `baseURL` or `endpoint` arguments, or the `AZURE_OPENAI_ENDPOINT` environment variable');\n }\n baseURL = `${endpoint}/openai`;\n }\n else {\n if (endpoint) {\n throw new Errors.OpenAIError('baseURL and endpoint are mutually exclusive');\n }\n }\n super({\n apiKey,\n baseURL,\n ...opts,\n ...(dangerouslyAllowBrowser !== undefined ? { dangerouslyAllowBrowser } : {}),\n });\n this.apiVersion = '';\n this._azureADTokenProvider = azureADTokenProvider;\n this.apiVersion = apiVersion;\n this.deploymentName = deployment;\n }\n buildRequest(options, props = {}) {\n if (_deployments_endpoints.has(options.path) && options.method === 'post' && options.body !== undefined) {\n if (!Core.isObj(options.body)) {\n throw new Error('Expected request body to be an object');\n }\n const model = this.deploymentName || options.body['model'];\n if (model !== undefined && !this.baseURL.includes('/deployments')) {\n options.path = `/deployments/${model}${options.path}`;\n }\n }\n return super.buildRequest(options, props);\n }\n async _getAzureADToken() {\n if (typeof this._azureADTokenProvider === 'function') {\n const token = await this._azureADTokenProvider();\n if (!token || typeof token !== 'string') {\n throw new Errors.OpenAIError(`Expected 'azureADTokenProvider' argument to return a string but it returned ${token}`);\n }\n return token;\n }\n return undefined;\n }\n authHeaders(opts) {\n return {};\n }\n async prepareOptions(opts) {\n /**\n * The user should provide a bearer token provider if they want\n * to use Azure AD authentication. The user shouldn't set the\n * Authorization header manually because the header is overwritten\n * with the Azure AD token if a bearer token provider is provided.\n */\n if (opts.headers?.['api-key']) {\n return super.prepareOptions(opts);\n }\n const token = await this._getAzureADToken();\n opts.headers ?? (opts.headers = {});\n if (token) {\n opts.headers['Authorization'] = `Bearer ${token}`;\n }\n else if (this.apiKey !== API_KEY_SENTINEL) {\n opts.headers['api-key'] = this.apiKey;\n }\n else {\n throw new Errors.OpenAIError('Unable to handle auth');\n }\n return super.prepareOptions(opts);\n }\n}\nconst _deployments_endpoints = new Set([\n '/completions',\n '/chat/completions',\n '/embeddings',\n '/audio/transcriptions',\n '/audio/translations',\n '/audio/speech',\n '/images/generations',\n]);\nconst API_KEY_SENTINEL = '';\nexport { toFile, fileFromPath } from \"./uploads.mjs\";\nexport { OpenAIError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, NotFoundError, ConflictError, RateLimitError, BadRequestError, AuthenticationError, InternalServerError, PermissionDeniedError, UnprocessableEntityError, } from \"./error.mjs\";\nexport default OpenAI;\n//# sourceMappingURL=index.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","undefined","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","default_format","formatters","RFC1738","v","String","RFC3986","is_array","isArray","hex_table","toString","toUpperCase","limit","maybe_map","val","fn","mapped","has","Object","prototype","hasOwnProperty","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","to_ISO","Date","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","Symbol","call","escape","$0","parseInt","slice","out","segment","c","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","constructor","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","set","valueSideChannel","WeakMap","opts","options","TypeError","normalize_stringify_options","joined","VERSION","kind","fetch","FormData","File","ReadableStream","getMultipartRequestOptions","getDefaultAgent","fileFromPath","isFsReadStream","auto","MultipartBody","body","this","toStringTag","shims.kind","shims","Error","shims.setShims","manuallyImported","recommendation","_fetch","_Request","_Response","_Headers","Request","Response","Headers","Blob","async","form","auto.getRuntime","OpenAIError","APIError","headers","super","makeMessage","request_id","data","code","param","msg","generate","errorResponse","APIConnectionError","cause","castToError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","LineDecoder","buffer","trailingCR","decode","chunk","decodeText","endsWith","trailingNewline","NEWLINE_CHARS","lines","split","NEWLINE_REGEXP","pop","bytes","Buffer","Uint8Array","name","TextDecoder","ArrayBuffer","textDecoder","flush","ReadableStreamToAsyncIterable","stream","asyncIterator","reader","getReader","read","releaseLock","cancelPromise","cancel","Set","Stream","iterator","controller","fromSSEResponse","consumed","sse","abort","sseDecoder","SSEDecoder","lineDecoder","iter","sseChunk","binaryChunk","TextEncoder","patternIndex","newData","findDoubleNewlineIndex","iterSSEChunks","line","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","start","pull","ctrl","close","enqueue","return","chunks","substring","fieldname","_","index","indexOf","partition","isResponseLike","blob","isFileLike","lastModified","isBlobLike","size","arrayBuffer","toFile","URL","pathname","bits","parts","isView","isAsyncIterableIterator","props","getOwnPropertyNames","p","propsForError","getBytes","getStringFromMaybeBuffer","filename","path","getName","x","isMultipartBody","multipartFormRequestOptions","createForm","all","entries","addFormValue","append","isUploadable","file","entry","prop","_AbstractPage_client","__classPrivateFieldSet","receiver","state","f","__classPrivateFieldGet","defaultParseResponse","debug","__streamClass","__binaryResponse","contentType","includes","json","_addRequestID","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","withResponse","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","APIClient","baseURL","maxRetries","timeout","httpAgent","overriddenFetch","validatePositiveInteger","authHeaders","defaultHeaders","Accept","getUserAgent","getPlatformHeaders","validateHeaders","customHeaders","defaultIdempotencyKey","uuid4","methodRequest","post","patch","put","method","request","DataView","getAPIList","Page","requestAPIList","calculateContentLength","byteLength","buildRequest","retryCount","query","__binaryRequest","contentLength","buildURL","minAgentTimeout","idempotencyHeader","idempotencyKey","req","buildHeaders","agent","signal","reqHeaders","applyHeadersMut","shimsKind","getHeader","prepareOptions","prepareRequest","parseHeaders","fromEntries","header","makeStatusError","remainingRetries","makeRequest","optionsInput","retriesRemaining","aborted","AbortController","fetchWithTimeout","retryRequest","responseHeaders","createResponseHeaders","ok","shouldRetry","errText","errJSON","safeJSON","errMessage","PagePromise","isAbsoluteURL","defaultQuery","isEmptyObj","stringifyQuery","encodeURIComponent","init","ms","addEventListener","fetchOptions","clearTimeout","shouldRetryHeader","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","isNaN","retryAfterHeader","timeoutSeconds","now","calculateDefaultRetryTimeoutMillis","sleep","numRetries","pow","random","AbstractPage","client","hasNextPage","getPaginatedItems","nextPageInfo","getNextPage","nextInfo","nextOptions","params","searchParams","iterPages","page","item","Proxy","target","requestOptionsKeys","isRequestOptions","every","k","hasOwn","getPlatformProperties","Deno","build","normalizePlatform","os","normalizeArch","arch","deno","EdgeRuntime","process","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","startsWithSchemeRegexp","test","n","isInteger","readEnv","env","_k","targetHeaders","newHeaders","lowerKey","SENSITIVE_HEADERS","action","args","modifiedArgs","arg","modifiedArg","r","lowerCasedHeader","isHeadersProtocol","intercapsHeader","_m","g1","g2","warn","isObj","nextPageParams","CursorPage","info","id","after","APIResource","_client","create","arguments","completions","CompletionsAPI.Completions","Chat$1","Completions","Speech","Transcriptions","Core.multipartFormRequestOptions","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","retrieve","batchId","list","BatchesPage","Assistants","assistantId","update","AssistantsPage","del","delete","isRunnableFunctionWithParse","isAssistantMessage","isFunctionMessage","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","EventStream","add","_run","executor","_emitFinal","_emit","bind","_connected","ended","errored","on","listener","off","listeners","findIndex","l","splice","once","emitted","forEach","isAutoParsableResponseFormat","response_format","isAutoParsableTool","tool","parseChatCompletion","completion","choices","choice","finish_reason","tool_calls","toolCall","inputTool","tools","find","function","parsed_arguments","$parseRaw","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","WeakSet","openAIError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionCall","_AbstractChatCompletionRunner_getFinalFunctionCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","function_call","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionCall","finalFunctionCallResult","totalUsage","allChatCompletions","usage","_createChatCompletion","chat","_runChatCompletion","_runFunctions","restParams","singleFunctionToCall","maxChatCompletions","functionsByName","functions","parameters","description","rawContent","_runTools","tool_choice","inputTools","$callback","tool_call_id","rest","ret","at","y","total","completion_tokens","prompt_tokens","total_tokens","ChatCompletionRunner","runFunctions","runner","runTools","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","choiceRest","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_c","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","validateInputTools","Chat","Sessions","Realtime","sessions","SessionsAPI.Sessions","_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","threadId","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","acc","deltaValue","accValue","Core.isObj","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","Messages","messageId","MessagesPage","Steps","stepId","RunStepsPage","Runs","steps","StepsAPI.Steps","include","RunsPage","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","submitToolOutputsAndPoll","submitToolOutputsStream","Threads","RunsAPI.Runs","MessagesAPI.Messages","createAndRunPoll","thread_id","createAndRunStream","vectorStoreId","fileId","VectorStoreFilesPage","fileResponse","upload","fileInfo","files","purpose","file_id","uploadAndPoll","Files$1","FileBatches","batch","listFiles","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","promises","results","allSettledWithThrow","file_ids","VectorStores","FilesAPI.Files","fileBatches","FileBatchesAPI.FileBatches","VectorStoresPage","Files","Beta","realtime","RealtimeAPI.Realtime","vectorStores","VectorStoresAPI.VectorStores","ChatAPI.Chat","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Embeddings","FileObjectsPage","retrieveContent","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","Checkpoints","fineTuningJobId","FineTuningJobCheckpointsPage","Jobs","checkpoints","CheckpointsAPI.Checkpoints","FineTuningJobsPage","listEvents","FineTuningJobEventsPage","FineTuning","jobs","JobsAPI.Jobs","Images","createVariation","edit","Models","ModelsPage","Moderations","Parts","uploadId","Uploads","PartsAPI.Parts","complete","OpenAI","Core.APIClient","Core.readEnv","apiKey","organization","project","Errors.OpenAIError","dangerouslyAllowBrowser","window","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.Beta","batches","API.Batches","uploads","API.Uploads","_options","Authorization","qs.stringify","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","textContent","max","headerLineLength","lineSeparationSize","reduce","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","handleSelect","tagName","opt","correctOption","currentSelect","closest","selected","handleTextbox","handleAtto","classList","contains","iframe","querySelector","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","reply","cursor","style","questionContainer","innerText","accesshideElements","useless","attoText","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","contentHandler","max_tokens","max_completion_tokens","temperature","top_p","fixeO1","presence_penalty","maxTokens","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","questionBackup","innerHTML","whiteSpace","contentIsResponse","questionToAnswerMode","handlers","handler","autoCompleteMode","DEFAULT_TIMEOUT","Errors.APIError","Errors.APIConnectionError","Errors.APIConnectionTimeoutError","Errors.APIUserAbortError","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Uploads.toFile","Uploads.fileFromPath","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]}
\ 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/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/RunnableFunction.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/parser.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/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/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 === undefined) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value === undefined) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value === undefined) {\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.11.0'; // 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}\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","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","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 { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.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?.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.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","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\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 ...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 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 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) => inputTool.function?.name === toolCall.function.name);\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) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => inputTool.function?.name === toolCall.function.name);\n return 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 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","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 { OpenAIError, APIUserAbortError, LengthFinishReasonError, ContentFilterFinishReasonError, } from \"../error.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.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) => tool.type === 'function' && tool.function.name === toolCallSnapshot.function.name);\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\";\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 { 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 100 GB.\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","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 if (output.type === 'message') {\n output.content.push(event.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.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 { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.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.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError(\"The OPENAI_API_KEY environment variable is missing or empty; either provide it, or instantiate the OpenAI client with an apiKey option, like new OpenAI({ apiKey: 'My API Key' }).\");\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 = apiKey;\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 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 /**\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 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 body instanceof 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.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","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","x","after","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","isRunnableFunctionWithParse","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","isAutoParsableResponseFormat","response_format","isAutoParsableTool","tool","parseChatCompletion","completion","choices","choice","finish_reason","tool_calls","toolCall","inputTool","tools","find","function","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","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","Realtime","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","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","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","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","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","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","cursor","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","contentHandler","max_tokens","max_completion_tokens","temperature","top_p","fixeO","presence_penalty","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]}
\ No newline at end of file
diff --git a/extension/manifest.json b/extension/manifest.json
index 0c8b8c6..7eb228a 100644
--- a/extension/manifest.json
+++ b/extension/manifest.json
@@ -1,7 +1,7 @@
{
"manifest_version": 3,
"name": "MoodleGPT",
- "version": "1.1.3",
+ "version": "1.1.4",
"description": "Hidden chat-gpt for your moodle quiz",
"permissions": ["storage"],
"action": {
diff --git a/extension/popup/popup.js b/extension/popup/popup.js
index abacef5..01327eb 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 a(e){try{l(n.next(e))}catch(e){o(e)}}function i(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(a,i)}l((n=n.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const r="RFC3986",o={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:e=>String(e)},a=Array.isArray,i=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),l=1024;function c(e,t){if(a(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},d=Array.isArray,f=Array.prototype.push,p=function(e,t){f.apply(e,d(t)?t:[t])},m=Date.prototype.toISOString,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 a="";for(let e=0;e=l?o.slice(e,e+l):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]=i[n]:n<2048?s[s.length]=i[192|n>>6]+i[128|63&n]:n<55296||n>=57344?s[s.length]=i[224|n>>12]+i[128|n>>6&63]+i[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=i[240|n>>18]+i[128|n>>12&63]+i[128|n>>6&63]+i[128|63&n])}a+=s.join("")}return a},encodeValuesOnly:!1,format:r,formatter:o[r],indices:!1,serializeDate:e=>m.call(e),skipNulls:!1,strictNullHandling:!1};const y={};function w(e,t,s,n,r,o,a,i,l,u,h,f,m,b,_,v,x,S){let A=e,E=S,R=0,I=!1;for(;void 0!==(E=E.get(y))&&!I;){const t=E.get(e);if(R+=1,void 0!==t){if(t===R)throw new RangeError("Cyclic object value");I=!0}void 0===E.get(y)&&(R=0)}if("function"==typeof u?A=u(t,A):A instanceof Date?A=m?.(A):"comma"===s&&d(A)&&(A=c(A,(function(e){return e instanceof Date?m?.(e):e}))),null===A){if(o)return l&&!v?l(t,g.encoder,x,"key",b):t;A=""}if("string"==typeof(P=A)||"number"==typeof P||"boolean"==typeof P||"symbol"==typeof P||"bigint"==typeof P||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(A)){if(l){const e=v?t:l(t,g.encoder,x,"key",b);return[_?.(e)+"="+_?.(l(A,g.encoder,x,"value",b))]}return[_?.(t)+"="+_?.(String(A))]}var P;const C=[];if(void 0===A)return C;let k;if("comma"===s&&d(A))v&&l&&(A=c(A,l)),k=[{value:A.length>0?A.join(",")||null:void 0}];else if(d(u))k=u;else{const e=Object.keys(A);k=h?e.sort(h):e}const $=i?String(t).replace(/\./g,"%2E"):String(t),O=n&&d(A)&&1===A.length?$+"[]":$;if(r&&d(A)&&0===A.length)return O+"[]";for(let t=0;t0?b+y:""}const _="4.82.0";let v,x,S,A,E,R,I,P,C,k=!1;class ${constructor(e){this.body=e}get[Symbol.toStringTag](){return"MultipartBody"}}v||function(e,t={auto:!1}){if(k)throw new Error(`you must \`import 'openai/shims/${e.kind}'\` before importing anything else from openai`);if(v)throw new Error(`can't \`import 'openai/shims/${e.kind}'\` after \`import 'openai/shims/${v}'\``);k=t.auto,v=e.kind,x=e.fetch,S=e.FormData,A=e.File,E=e.ReadableStream,R=e.getMultipartRequestOptions,I=e.getDefaultAgent,P=e.fileFromPath,C=e.isFsReadStream}(function({manuallyImported:e}={}){const t=e?"You may need to use polyfills":"Add one of these imports before your first `import … from 'openai'`:\n- `import 'openai/shims/node'` (if you're running on Node)\n- `import 'openai/shims/web'` (otherwise)\n";let s,n,r,o;try{s=fetch,n=Request,r=Response,o=Headers}catch(e){throw new Error(`this environment is missing the following Web Fetch API type: ${e.message}. ${t}`)}return{kind:"web",fetch:s,Request:n,Response:r,Headers:o,FormData:"undefined"!=typeof FormData?FormData:class{constructor(){throw new Error(`file uploads aren't supported in this environment yet as 'FormData' is undefined. ${t}`)}},Blob:"undefined"!=typeof Blob?Blob:class{constructor(){throw new Error(`file uploads aren't supported in this environment yet as 'Blob' is undefined. ${t}`)}},File:"undefined"!=typeof File?File:class{constructor(){throw new Error(`file uploads aren't supported in this environment yet as 'File' is undefined. ${t}`)}},ReadableStream:"undefined"!=typeof ReadableStream?ReadableStream:class{constructor(){throw new Error(`streaming isn't supported in this environment yet as 'ReadableStream' is undefined. ${t}`)}},getMultipartRequestOptions:async(e,t)=>({...t,body:new $(e)}),getDefaultAgent:e=>{},fileFromPath:()=>{throw new Error("The `fileFromPath` function is only supported in Node. See the README for more details: https://www.github.com/openai/openai-node#file-uploads")},isFsReadStream:e=>!1}}(),{auto:!0});class O extends Error{}class T extends O{constructor(e,t,s,n){super(`${T.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.request_id=n?.["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 M({message:s,cause:ke(t)});const r=t?.error;return 400===e?new q(e,r,s,n):401===e?new D(e,r,s,n):403===e?new B(e,r,s,n):404===e?new L(e,r,s,n):409===e?new F(e,r,s,n):422===e?new W(e,r,s,n):429===e?new U(e,r,s,n):e>=500?new X(e,r,s,n):new T(e,r,s,n)}}class j extends T{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class M extends T{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class N extends M{constructor({message:e}={}){super({message:e??"Request timed out."})}}class q extends T{}class D extends T{}class B extends T{}class L extends T{}class F extends T{}class W extends T{}class U extends T{}class X extends T{}class J extends O{constructor(){super("Could not parse response content as the length limit was reached")}}class H extends O{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class V{constructor(){this.buffer=[],this.trailingCR=!1}decode(e){let t=this.decodeText(e);if(this.trailingCR&&(t="\r"+t,this.trailingCR=!1),t.endsWith("\r")&&(this.trailingCR=!0,t=t.slice(0,-1)),!t)return[];const s=V.NEWLINE_CHARS.has(t[t.length-1]||"");let n=t.split(V.NEWLINE_REGEXP);return s&&n.pop(),1!==n.length||s?(this.buffer.length>0&&(n=[this.buffer.join("")+n[0],...n.slice(1)],this.buffer=[]),s||(this.buffer=[n.pop()||""]),n):(this.buffer.push(n[0]),[])}decodeText(e){if(null==e)return"";if("string"==typeof e)return e;if("undefined"!=typeof Buffer){if(e instanceof Buffer)return e.toString();if(e instanceof Uint8Array)return Buffer.from(e).toString();throw new O(`Unexpected: received non-Uint8Array (${e.constructor.name}) stream chunk in an environment with a global "Buffer" defined, which this library assumes to be Node. Please report this error.`)}if("undefined"!=typeof TextDecoder){if(e instanceof Uint8Array||e instanceof ArrayBuffer)return this.textDecoder??(this.textDecoder=new TextDecoder("utf8")),this.textDecoder.decode(e);throw new O(`Unexpected: received non-Uint8Array/ArrayBuffer (${e.constructor.name}) in a web platform. Please report this error.`)}throw new O("Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.")}flush(){if(!this.buffer.length&&!this.trailingCR)return[];const e=[this.buffer.join("")];return this.buffer=[],this.trailingCR=!1,e}}function K(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}}}V.NEWLINE_CHARS=new Set(["\n","\r"]),V.NEWLINE_REGEXP=/\r\n|[\n\r]/g;class z{constructor(e,t){this.iterator=e,this.controller=t}static fromSSEResponse(e,t){let s=!1;return new z((async function*(){if(s)throw new Error("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)throw t.abort(),new O("Attempted to iterate over a response with no body");const s=new Q,n=new V,r=K(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?(new TextEncoder).encode(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=G(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(!n)if(s.data.startsWith("[DONE]"))n=!0;else if(null===s.event){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(e&&e.error)throw new T(void 0,e.error,void 0,void 0);yield e}else{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 T(void 0,e.error,e.message,void 0);yield{event:s.event,data:e}}n=!0}catch(e){if(e instanceof Error&&"AbortError"===e.name)return;throw e}finally{n||t.abort()}}),t)}static fromReadableStream(e,t){let s=!1;return new z((async function*(){if(s)throw new Error("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 V,s=K(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())n||t&&(yield JSON.parse(t));n=!0}catch(e){if(e instanceof Error&&"AbortError"===e.name)return;throw e}finally{n||t.abort()}}),t)}[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 z((()=>n(e)),this.controller),new z((()=>n(t)),this.controller)]}toReadableStream(){const e=this;let t;const s=new TextEncoder;return new E({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:n,done:r}=await t.next();if(r)return e.close();const o=s.encode(JSON.stringify(n)+"\n");e.enqueue(o)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}function G(e){for(let t=0;tnull!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob,Z=e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&ee(e),ee=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 te(e,t,s){if(e=await e,Z(e))return e;if(Y(e)){const n=await e.blob();t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()??"unknown_file");const r=ee(n)?[await n.arrayBuffer()]:[n];return new A(r,t,s)}const n=await async function(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(ee(e))t.push(await e.arrayBuffer());else{if(!ne(e))throw new Error(`Unexpected data type: ${typeof e}; constructor: ${e?.constructor?.name}; props: ${function(e){const t=Object.getOwnPropertyNames(e);return`[${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`);for await(const s of e)t.push(s)}return t}(e);if(t||(t=function(e){return se(e.name)||se(e.filename)||se(e.path)?.split(/[\\/]/).pop()}(e)??"unknown_file"),!s?.type){const e=n[0]?.type;"string"==typeof e&&(s={...s,type:e})}return new A(n,t,s)}const se=e=>"string"==typeof e?e:"undefined"!=typeof Buffer&&e instanceof Buffer?String(e):void 0,ne=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],re=e=>e&&"object"==typeof e&&e.body&&"MultipartBody"===e[Symbol.toStringTag],oe=async e=>{const t=await ae(e.body);return R(t,e)},ae=async e=>{const t=new S;return await Promise.all(Object.entries(e||{}).map((([e,s])=>ie(t,e,s)))),t},ie=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((e=>Z(e)||Y(e)||C(e))(s)){const n=await te(s);e.append(t,n)}else if(Array.isArray(s))await Promise.all(s.map((s=>ie(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])=>ie(e,`${t}[${s}]`,n))))}}};var le,ce=function(e,t,s,n,r){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?r.call(e,s):r?r.value=s:t.set(e,s),s},ue=function(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)};async function he(e){const{response:t}=e;if(e.options.stream)return Ne("response",t.status,t.url,t.headers,t.body),e.options.__streamClass?e.options.__streamClass.fromSSEResponse(t,e.controller):z.fromSSEResponse(t,e.controller);if(204===t.status)return null;if(e.options.__binaryResponse)return t;const s=t.headers.get("content-type");if(s?.includes("application/json")||s?.includes("application/vnd.api+json")){const e=await t.json();return Ne("response",t.status,t.url,t.headers,e),de(e,t)}const n=await t.text();return Ne("response",t.status,t.url,t.headers,n),n}function de(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 fe extends Promise{constructor(e,t=he){super((e=>{e(null)})),this.responsePromise=e,this.parseResponse=t}_thenUnwrap(e){return new fe(this.responsePromise,(async t=>de(e(await this.parseResponse(t),t),t.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(this.parseResponse)),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)}}class pe{constructor({baseURL:e,maxRetries:t=2,timeout:s=6e5,httpAgent:n,fetch:r}){this.baseURL=e,this.maxRetries=Ce("maxRetries",t),this.timeout=Ce("timeout",s),this.httpAgent=n,this.fetch=r??x}authHeaders(e){return{}}defaultHeaders(e){return{Accept:"application/json","Content-Type":"application/json","User-Agent":this.getUserAgent(),...Ae(),...this.authHeaders(e)}}validateHeaders(e,t){}defaultIdempotencyKey(){return`stainless-node-retry-${qe()}`}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((async s=>{const n=s&&ee(s?.body)?new DataView(await s.body.arrayBuffer()):s?.body instanceof DataView?s.body:s?.body instanceof ArrayBuffer?new DataView(s.body):s&&ArrayBuffer.isView(s?.body)?new DataView(s.body.buffer):s?.body;return{method:e,path:t,...s,body:n}})))}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}calculateContentLength(e){if("string"==typeof e){if("undefined"!=typeof Buffer)return Buffer.byteLength(e,"utf8").toString();if("undefined"!=typeof TextEncoder){return(new TextEncoder).encode(e).length.toString()}}else if(ArrayBuffer.isView(e))return e.byteLength.toString();return null}buildRequest(e,{retryCount:t=0}={}){const{method:s,path:n,query:r,headers:o={}}=e,a=ArrayBuffer.isView(e.body)||e.__binaryRequest&&"string"==typeof e.body?e.body:re(e.body)?e.body.body:e.body?JSON.stringify(e.body,null,2):null,i=this.calculateContentLength(a),l=this.buildURL(n,r);"timeout"in e&&Ce("timeout",e.timeout);const c=e.timeout??this.timeout,u=e.httpAgent??this.httpAgent??I(l),h=c+1e3;"number"==typeof u?.options?.timeout&&h>(u.options.timeout??0)&&(u.options.timeout=h),this.idempotencyHeader&&"get"!==s&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),o[this.idempotencyHeader]=e.idempotencyKey);return{req:{method:s,...a&&{body:a},headers:this.buildHeaders({options:e,headers:o,contentLength:i,retryCount:t}),...u&&{agent:u},signal:e.signal??null},url:l,timeout:c}}buildHeaders({options:e,headers:t,contentLength:s,retryCount:n}){const r={};s&&(r["content-length"]=s);const o=this.defaultHeaders(e);return je(r,o),je(r,t),re(e.body)&&"node"!==v&&delete r["content-type"],void 0===De(o,"x-stainless-retry-count")&&void 0===De(t,"x-stainless-retry-count")&&(r["x-stainless-retry-count"]=String(n)),this.validateHeaders(r,t),r}async prepareOptions(e){}async prepareRequest(e,{url:t,options:s}){}parseHeaders(e){return e?Symbol.iterator in e?Object.fromEntries(Array.from(e).map((e=>[...e]))):{...e}:{}}makeStatusError(e,t,s,n){return T.generate(e,t,s,n)}request(e,t=null){return new fe(this.makeRequest(e,t))}async makeRequest(e,t){const s=await e,n=s.maxRetries??this.maxRetries;null==t&&(t=n),await this.prepareOptions(s);const{req:r,url:o,timeout:a}=this.buildRequest(s,{retryCount:n-t});if(await this.prepareRequest(r,{url:o,options:s}),Ne("request",o,s,r.headers),s.signal?.aborted)throw new j;const i=new AbortController,l=await this.fetchWithTimeout(o,r,a,i).catch(ke);if(l instanceof Error){if(s.signal?.aborted)throw new j;if(t)return this.retryRequest(s,t);if("AbortError"===l.name)throw new N;throw new M({cause:l})}const c=ye(l.headers);if(!l.ok){if(t&&this.shouldRetry(l)){return Ne(`response (error; ${`retrying, ${t} attempts remaining`})`,l.status,o,c),this.retryRequest(s,t,c)}const e=await l.text().catch((e=>ke(e).message)),n=Ee(e),r=n?void 0:e;Ne(`response (error; ${t?"(error; no more retries left)":"(error; not retryable)"})`,l.status,o,c,r);throw this.makeStatusError(l.status,n,r,c)}return{response:l,options:s,controller:i}}requestAPIList(e,t){const s=this.makeRequest(t,null);return new ge(this,s,e)}buildURL(e,t){const s=Ie(e)?new URL(e):new URL(this.baseURL+(this.baseURL.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),n=this.defaultQuery();return Oe(n)||(t={...n,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(s.search=this.stringifyQuery(t)),s.toString()}stringifyQuery(e){return Object.entries(e).filter((([e,t])=>void 0!==t)).map((([e,t])=>{if("string"==typeof t||"number"==typeof t||"boolean"==typeof t)return`${encodeURIComponent(e)}=${encodeURIComponent(t)}`;if(null===t)return`${encodeURIComponent(e)}=`;throw new O(`Cannot stringify type ${typeof t}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)})).join("&")}async fetchWithTimeout(e,t,s,n){const{signal:r,...o}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),i={signal:n.signal,...o};return i.method&&(i.method=i.method.toUpperCase()),this.fetch.call(void 0,e,i).finally((()=>{clearTimeout(a)}))}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){let n;const r=s?.["retry-after-ms"];if(r){const e=parseFloat(r);Number.isNaN(e)||(n=e)}const o=s?.["retry-after"];if(o&&!n){const e=parseFloat(o);n=Number.isNaN(e)?Date.parse(o)-Date.now():1e3*e}if(!(n&&0<=n&&n<6e4)){const s=e.maxRetries??this.maxRetries;n=this.calculateDefaultRetryTimeoutMillis(t,s)}return await Pe(n),this.makeRequest(e,t-1)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}getUserAgent(){return`${this.constructor.name}/JS ${_}`}}class me{constructor(e,t,s,n){le.set(this,void 0),ce(this,le,e,"f"),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageInfo()}async getNextPage(){const e=this.nextPageInfo();if(!e)throw new O("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");const t={...this.options};if("params"in e&&"object"==typeof t.query)t.query={...t.query,...e.params};else if("url"in e){const s=[...Object.entries(t.query||{}),...e.url.searchParams.entries()];for(const[t,n]of s)e.url.searchParams.set(t,n);t.query=void 0,t.path=e.url.toString()}return await ue(this,le,"f").requestAPIList(this.constructor,t)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(le=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class ge extends fe{constructor(e,t,s){super(t,(async t=>new s(e,t.response,await he(t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}const ye=e=>new Proxy(Object.fromEntries(e.entries()),{get(e,t){const s=t.toString();return e[s.toLowerCase()]||e[s]}}),we={method:!0,path:!0,query:!0,body:!0,headers:!0,maxRetries:!0,stream:!0,timeout:!0,httpAgent:!0,signal:!0,idempotencyKey:!0,__binaryRequest:!0,__binaryResponse:!0,__streamClass:!0},be=e=>"object"==typeof e&&null!==e&&!Oe(e)&&Object.keys(e).every((e=>Te(we,e))),_e=()=>{if("undefined"!=typeof Deno&&null!=Deno.build)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":_,"X-Stainless-OS":xe(Deno.build.os),"X-Stainless-Arch":ve(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":_,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":process.version};if("[object process]"===Object.prototype.toString.call("undefined"!=typeof process?process:0))return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":_,"X-Stainless-OS":xe(process.platform),"X-Stainless-Arch":ve(process.arch),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":process.version};const e=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 e?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":_,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${e.browser}`,"X-Stainless-Runtime-Version":e.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":_,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const ve=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 Se;const Ae=()=>Se??(Se=_e()),Ee=e=>{try{return JSON.parse(e)}catch(e){return}},Re=/^[a-z][a-z0-9+.-]*:/i,Ie=e=>Re.test(e),Pe=e=>new Promise((t=>setTimeout(t,e))),Ce=(e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new O(`${e} must be an integer`);if(t<0)throw new O(`${e} must be a positive integer`);return t},ke=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e)try{return new Error(JSON.stringify(e))}catch{}return new Error(e)},$e=e=>"undefined"!=typeof process?process.env?.[e]?.trim()??void 0:"undefined"!=typeof Deno?Deno.env?.get?.(e)?.trim():void 0;function Oe(e){if(!e)return!0;for(const t in e)return!1;return!0}function Te(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function je(e,t){for(const s in t){if(!Te(t,s))continue;const n=s.toLowerCase();if(!n)continue;const r=t[s];null===r?delete e[n]:void 0!==r&&(e[n]=r)}}const Me=new Set(["authorization","api-key"]);function Ne(e,...t){if("undefined"!=typeof process&&"true"===process?.env?.DEBUG){const s=t.map((e=>{if(!e)return e;if(e.headers){const t={...e,headers:{...e.headers}};for(const s in e.headers)Me.has(s.toLowerCase())&&(t.headers[s]="REDACTED");return t}let t=null;for(const s in e)Me.has(s.toLowerCase())&&(t??(t={...e}),t[s]="REDACTED");return t??e}));console.log(`OpenAI:DEBUG:${e}`,...s)}}const qe=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})),De=(e,t)=>{const s=t.toLowerCase();if((e=>"function"==typeof e?.get)(e)){const n=t[0]?.toUpperCase()+t.substring(1).replace(/([^\w])(\w)/g,((e,t,s)=>t+s.toUpperCase()));for(const r of[t,s,t.toUpperCase(),n]){const t=e.get(r);if(t)return t}}for(const[n,r]of Object.entries(e))if(n.toLowerCase()===s)return Array.isArray(r)?(r.length<=1||console.warn(`Received ${r.length} entries for the ${t} header, using the first entry.`),r[0]):r};function Be(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}class Le extends me{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageParams(){return null}nextPageInfo(){return null}}class Fe extends me{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[]}getPaginatedItems(){return this.data??[]}nextPageParams(){const e=this.nextPageInfo();if(!e)return null;if("params"in e)return e.params;const t=Object.fromEntries(e.url.searchParams);return Object.keys(t).length?t:null}nextPageInfo(){const e=this.getPaginatedItems();if(!e.length)return null;const t=e[e.length-1]?.id;return t?{params:{after:t}}:null}}class We{constructor(e){this._client=e}}let Ue=class extends We{create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}},Xe=class extends We{constructor(){super(...arguments),this.completions=new Ue(this._client)}};Xe.Completions=Ue;class Je extends We{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:{Accept:"application/octet-stream",...t?.headers},__binaryResponse:!0})}}class He extends We{create(e,t){return this._client.post("/audio/transcriptions",oe({body:e,...t}))}}class Ve extends We{create(e,t){return this._client.post("/audio/translations",oe({body:e,...t}))}}class Ke extends We{constructor(){super(...arguments),this.transcriptions=new He(this._client),this.translations=new Ve(this._client),this.speech=new Je(this._client)}}Ke.Transcriptions=He,Ke.Translations=Ve,Ke.Speech=Je;class ze extends We{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(`/batches/${e}`,t)}list(e={},t){return be(e)?this.list({},e):this._client.getAPIList("/batches",Ge,{query:e,...t})}cancel(e,t){return this._client.post(`/batches/${e}/cancel`,t)}}class Ge extends Fe{}ze.BatchesPage=Ge;class Qe extends We{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}retrieve(e,t){return this._client.get(`/assistants/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}update(e,t,s){return this._client.post(`/assistants/${e}`,{body:t,...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}list(e={},t){return be(e)?this.list({},e):this._client.getAPIList("/assistants",Ye,{query:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}del(e,t){return this._client.delete(`/assistants/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}}class Ye extends Fe{}function Ze(e){return"function"==typeof e.parse}Qe.AssistantsPage=Ye;const et=e=>"assistant"===e?.role,tt=e=>"function"===e?.role,st=e=>"tool"===e?.role;var nt,rt,ot,at,it,lt,ct,ut,ht,dt,ft,pt,mt,gt=function(e,t,s,n,r){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?r.call(e,s):r?r.value=s:t.set(e,s),s},yt=function(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)};class wt{constructor(){nt.add(this),this.controller=new AbortController,rt.set(this,void 0),ot.set(this,(()=>{})),at.set(this,(()=>{})),it.set(this,void 0),lt.set(this,(()=>{})),ct.set(this,(()=>{})),ut.set(this,{}),ht.set(this,!1),dt.set(this,!1),ft.set(this,!1),pt.set(this,!1),gt(this,rt,new Promise(((e,t)=>{gt(this,ot,e,"f"),gt(this,at,t,"f")})),"f"),gt(this,it,new Promise(((e,t)=>{gt(this,lt,e,"f"),gt(this,ct,t,"f")})),"f"),yt(this,rt,"f").catch((()=>{})),yt(this,it,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),yt(this,nt,"m",mt).bind(this))}),0)}_connected(){this.ended||(yt(this,ot,"f").call(this),this._emit("connect"))}get ended(){return yt(this,ht,"f")}get errored(){return yt(this,dt,"f")}get aborted(){return yt(this,ft,"f")}abort(){this.controller.abort()}on(e,t){return(yt(this,ut,"f")[e]||(yt(this,ut,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=yt(this,ut,"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(yt(this,ut,"f")[e]||(yt(this,ut,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{gt(this,pt,!0,"f"),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){gt(this,pt,!0,"f"),await yt(this,it,"f")}_emit(e,...t){if(yt(this,ht,"f"))return;"end"===e&&(gt(this,ht,!0,"f"),yt(this,lt,"f").call(this));const s=yt(this,ut,"f")[e];if(s&&(yt(this,ut,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return yt(this,pt,"f")||s?.length||Promise.reject(e),yt(this,at,"f").call(this,e),yt(this,ct,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];yt(this,pt,"f")||s?.length||Promise.reject(e),yt(this,at,"f").call(this,e),yt(this,ct,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function bt(e){return"auto-parseable-response-format"===e?.$brand}function _t(e){return"auto-parseable-tool"===e?.$brand}function vt(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new J;if("content_filter"===e.finish_reason)throw new H;return{...e,message:{...e.message,tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:_t(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??[],parsed:e.message.content&&!e.message.refusal?xt(t,e.message.content):null}}}));return{...e,choices:s}}function xt(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)return!1;const s=e.tools?.find((e=>e.function?.name===t.function.name));return _t(s)||s?.function.strict||!1}function At(e){return!!bt(e.response_format)||(e.tools?.some((e=>_t(e)||"function"===e.type&&!0===e.function.strict))??!1)}rt=new WeakMap,ot=new WeakMap,at=new WeakMap,it=new WeakMap,lt=new WeakMap,ct=new WeakMap,ut=new WeakMap,ht=new WeakMap,dt=new WeakMap,ft=new WeakMap,pt=new WeakMap,nt=new WeakSet,mt=function(e){if(gt(this,dt,!0,"f"),e instanceof Error&&"AbortError"===e.name&&(e=new j),e instanceof j)return gt(this,ft,!0,"f"),this._emit("abort",e);if(e instanceof O)return this._emit("error",e);if(e instanceof Error){const t=new O(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new O(String(e)))};var Et,Rt,It,Pt,Ct,kt,$t,Ot,Tt=function(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)};const jt=10;class Mt extends wt{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),(tt(e)||st(e))&&e.content)this._emit("functionCallResult",e.content);else if(et(e)&&e.function_call)this._emit("functionCall",e.function_call);else if(et(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new O("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),Tt(this,Et,"m",Rt).call(this)}async finalMessage(){return await this.done(),Tt(this,Et,"m",It).call(this)}async finalFunctionCall(){return await this.done(),Tt(this,Et,"m",Pt).call(this)}async finalFunctionCallResult(){return await this.done(),Tt(this,Et,"m",Ct).call(this)}async totalUsage(){return await this.done(),Tt(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=Tt(this,Et,"m",It).call(this);t&&this._emit("finalMessage",t);const s=Tt(this,Et,"m",Rt).call(this);s&&this._emit("finalContent",s);const n=Tt(this,Et,"m",Pt).call(this);n&&this._emit("finalFunctionCall",n);const r=Tt(this,Et,"m",Ct).call(this);null!=r&&this._emit("finalFunctionCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",Tt(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()))),Tt(this,Et,"m",$t).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(vt(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 _runFunctions(e,t,s){const n="function",{function_call:r="auto",stream:o,...a}=t,i="string"!=typeof r&&r?.name,{maxChatCompletions:l=jt}=s||{},c={};for(const e of t.functions)c[e.name||e.function.name]=e;const u=t.functions.map((e=>({name:e.name||e.function.name,parameters:e.parameters,description:e.description})));for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e.name))).join(", ")}. Please try again`;this._addMessage({role:n,name:l,content:e});continue}if(i&&i!==l){const e=`Invalid function_call: ${JSON.stringify(l)}. ${JSON.stringify(i)} requested. Please try again`;this._addMessage({role:n,name:l,content:e});continue}let f;try{f=Ze(d)?await d.parse(h):h}catch(e){this._addMessage({role:n,name:l,content:e instanceof Error?e.message:String(e)});continue}const p=await d.function(f,this),m=Tt(this,Et,"m",Ot).call(this,p);if(this._addMessage({role:n,name:l,content:m}),i)return}}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...a}=t,i="string"!=typeof r&&r?.function?.name,{maxChatCompletions:l=jt}=s||{},c=t.tools.map((e=>{if(_t(e)){if(!e.$callback)throw new O("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 h="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(i&&i!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(i)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let a;try{a=Ze(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(a,this),c=Tt(this,Et,"m",Ot).call(this,l);if(this._addMessage({role:n,tool_call_id:t,content:c}),i)return}}}}Et=new WeakSet,Rt=function(){return Tt(this,Et,"m",It).call(this).content??null},It=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(et(t)){const{function_call:e,...s}=t,n={...s,content:t.content??null,refusal:t.refusal??null};return e&&(n.function_call=e),n}}throw new O("stream ended without producing a ChatCompletionMessage with role=assistant")},Pt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(et(t)&&t?.function_call)return t.function_call;if(et(t)&&t?.tool_calls?.length)return t.tool_calls.at(-1)?.function}},Ct=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(tt(t)&&null!=t.content)return t.content;if(st(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},$t=function(e){if(null!=e.n&&e.n>1)throw new O("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ot=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class Nt extends Mt{static runFunctions(e,t,s){const n=new Nt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runFunctions"}};return n._run((()=>n._runFunctions(e,t,r))),n}static runTools(e,t,s){const n=new Nt,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 qt=1,Dt=2,Bt=4,Lt=8,Ft=16,Wt=32,Ut=64,Xt=128,Jt=256,Ht=511;class Vt extends Error{}class Kt extends Error{}const zt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Vt(`${e} at position ${n}`)},o=e=>{throw new Kt(`${e} at position ${n}`)},a=()=>(h(),n>=s&&r("Unexpected end of input"),'"'===e[n]?i():"{"===e[n]?l():"["===e[n]?c():"null"===e.substring(n,n+4)||Ft&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Wt&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Wt&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 a=n;let i=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&Lt&t)return o;const r=i();h(),n++;try{const e=a();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Lt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Lt&t)return o;r("Expected '}' at end of object")}return n++,o},c=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(a()),h(),","===e[n]&&n++}catch(e){if(Bt&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 a=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(a,n))}catch(s){"-"===e.substring(a,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(a,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;nfunction(e,t=Ht){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,Ht^Dt);var Qt,Yt,Zt,es,ts,ss,ns,rs,os,as,is,ls,cs=function(e,t,s,n,r){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?r.call(e,s):r?r.value=s:t.set(e,s),s},us=function(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)};class hs extends Mt{constructor(e){super(),Qt.add(this),Yt.set(this,void 0),Zt.set(this,void 0),es.set(this,void 0),cs(this,Yt,e,"f"),cs(this,Zt,[],"f")}get currentChatCompletionSnapshot(){return us(this,es,"f")}static fromReadableStream(e){const t=new hs(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new hs(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()))),us(this,Qt,"m",ts).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)us(this,Qt,"m",ns).call(this,e);if(r.controller.signal?.aborted)throw new j;return this._addChatCompletion(us(this,Qt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),us(this,Qt,"m",ts).call(this),this._connected();const n=z.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(us(this,Qt,"m",as).call(this)),us(this,Qt,"m",ns).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new j;return this._addChatCompletion(us(this,Qt,"m",as).call(this))}[(Yt=new WeakMap,Zt=new WeakMap,es=new WeakMap,Qt=new WeakSet,ts=function(){this.ended||cs(this,es,void 0,"f")},ss=function(e){let t=us(this,Zt,"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},us(this,Zt,"f")[e.index]=t,t)},ns=function(e){if(this.ended)return;const t=us(this,Qt,"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=us(this,Qt,"m",ss).call(this,e);e.finish_reason&&(us(this,Qt,"m",os).call(this,e),null!=n.current_tool_call_index&&us(this,Qt,"m",rs).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(us(this,Qt,"m",os).call(this,e),null!=n.current_tool_call_index&&us(this,Qt,"m",rs).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??""}))}}},rs=function(e,t){if(us(this,Qt,"m",ss).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=us(this,Yt,"f")?.tools?.find((e=>"function"===e.type&&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:_t(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},os=function(e){const t=us(this,Qt,"m",ss).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=us(this,Qt,"m",is).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 O("stream has ended, this shouldn't happen");const e=us(this,es,"f");if(!e)throw new O("request ended without sending any chunks");return cs(this,es,void 0,"f"),cs(this,Zt,[],"f"),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:a,...i}=e,l={...i,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new O(`missing finish_reason for choice ${n}`);const{content:a=null,function_call:i,tool_calls:l,...c}=t,u=t.role;if(!u)throw new O(`missing role for choice ${n}`);if(i){const{arguments:e,name:l}=i;if(null==e)throw new O(`missing function_call.arguments for choice ${n}`);if(!l)throw new O(`missing function_call.name for choice ${n}`);return{...o,message:{content:a,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:a,refusal:t.refusal??null,tool_calls:l.map(((t,s)=>{const{function:r,type:o,id:a,...i}=t,{arguments:l,name:c,...u}=r||{};if(null==a)throw new O(`missing choices[${n}].tool_calls[${s}].id\n${ds(e)}`);if(null==o)throw new O(`missing choices[${n}].tool_calls[${s}].type\n${ds(e)}`);if(null==c)throw new O(`missing choices[${n}].tool_calls[${s}].function.name\n${ds(e)}`);if(null==l)throw new O(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ds(e)}`);return{...i,id:a,type:o,function:{...u,name:c,arguments:l}}}))}}:{...o,message:{...c,content:a,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...a?{system_fingerprint:a}:{}};return function(e,t){return t&&At(t)?vt(e,t):{...e,choices:e.choices.map((e=>({...e,message:{...e.message,parsed:null,tool_calls:e.message.tool_calls??[]}})))}}(l,t)}(e,us(this,Yt,"f"))},is=function(){const e=us(this,Yt,"f")?.response_format;return bt(e)?e:null},ls=function(e){var t,s,n,r;let o=us(this,es,"f");const{choices:a,...i}=e;o?Object.assign(o,i):o=cs(this,es,{...i,choices:[]},"f");for(const{delta:a,finish_reason:i,index:l,logprobs:c=null,...u}of e.choices){let e=o.choices[l];if(e||(e=o.choices[l]={finish_reason:i,index:l,message:{},logprobs:c,...u}),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(i&&(e.finish_reason=i,us(this,Yt,"f")&&At(us(this,Yt,"f")))){if("length"===i)throw new J;if("content_filter"===i)throw new H}if(Object.assign(e,u),!a)continue;const{content:h,refusal:d,function_call:f,role:p,tool_calls:m,...g}=a;if(Object.assign(e.message,g),d&&(e.message.refusal=(e.message.refusal||"")+d),p&&(e.message.role=p),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),h&&(e.message.content=(e.message.content||"")+h,!e.message.refusal&&us(this,Qt,"m",is).call(this)&&(e.message.parsed=Gt(e.message.content))),m){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...a}of m){const i=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(i,a),s&&(i.id=s),n&&(i.type=n),o&&(i.function??(i.function={name:o.name??"",arguments:""})),o?.name&&(i.function.name=o.name),o?.arguments&&(i.function.arguments+=o.arguments,St(us(this,Yt,"f"),i)&&(i.function.parsed_arguments=Gt(i.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 z(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ds(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 runFunctions(e,t,s){const n=new fs(null),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runFunctions"}};return n._run((()=>n._runFunctions(e,t,r))),n}static runTools(e,t,s){const n=new fs(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends We{parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new O(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new O(`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":"beta.chat.completions.parse"}})._thenUnwrap((t=>vt(t,e)))}runFunctions(e,t){return e.stream?fs.runFunctions(this._client,e,t):Nt.runFunctions(this._client,e,t)}runTools(e,t){return e.stream?fs.runTools(this._client,e,t):Nt.runTools(this._client,e,t)}stream(e,t){return hs.createChatCompletion(this._client,e,t)}};class ms extends We{constructor(){super(...arguments),this.completions=new ps(this._client)}}!function(e){e.Completions=ps}(ms||(ms={}));class gs extends We{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}}class ys extends We{constructor(){super(...arguments),this.sessions=new gs(this._client)}}ys.Sessions=gs;var ws,bs,_s,vs,xs,Ss,As,Es,Rs,Is,Ps,Cs,ks,$s,Os,Ts,js,Ms,Ns,qs,Ds,Bs,Ls=function(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)},Fs=function(e,t,s,n,r){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?r.call(e,s):r?r.value=s:t.set(e,s),s};class Ws extends wt{constructor(){super(...arguments),ws.add(this),bs.set(this,[]),_s.set(this,{}),vs.set(this,{}),xs.set(this,void 0),Ss.set(this,void 0),As.set(this,void 0),Es.set(this,void 0),Rs.set(this,void 0),Is.set(this,void 0),Ps.set(this,void 0),Cs.set(this,void 0),ks.set(this,void 0)}[(bs=new WeakMap,_s=new WeakMap,vs=new WeakMap,xs=new WeakMap,Ss=new WeakMap,As=new WeakMap,Es=new WeakMap,Rs=new WeakMap,Is=new WeakMap,Ps=new WeakMap,Cs=new WeakMap,ks=new WeakMap,ws=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 Ws;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=z.fromReadableStream(e,this.controller);for await(const e of n)Ls(this,ws,"m",$s).call(this,e);if(n.controller.signal?.aborted)throw new j;return this._addRun(Ls(this,ws,"m",Os).call(this))}toReadableStream(){return new z(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n,r){const o=new Ws;return o._run((()=>o._runToolAssistantStream(e,t,s,n,{...r,headers:{...r?.headers,"X-Stainless-Helper-Method":"stream"}}))),o}async _createToolAssistantStream(e,t,s,n,r){const o=r?.signal;o&&(o.aborted&&this.controller.abort(),o.addEventListener("abort",(()=>this.controller.abort())));const a={...n,stream:!0},i=await e.submitToolOutputs(t,s,a,{...r,signal:this.controller.signal});this._connected();for await(const e of i)Ls(this,ws,"m",$s).call(this,e);if(i.controller.signal?.aborted)throw new j;return this._addRun(Ls(this,ws,"m",Os).call(this))}static createThreadAssistantStream(e,t,s){const n=new Ws;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 Ws;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return Ls(this,Ps,"f")}currentRun(){return Ls(this,Cs,"f")}currentMessageSnapshot(){return Ls(this,xs,"f")}currentRunStepSnapshot(){return Ls(this,ks,"f")}async finalRunSteps(){return await this.done(),Object.values(Ls(this,_s,"f"))}async finalMessages(){return await this.done(),Object.values(Ls(this,vs,"f"))}async finalRun(){if(await this.done(),!Ls(this,Ss,"f"))throw Error("Final run was not received.");return Ls(this,Ss,"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)Ls(this,ws,"m",$s).call(this,e);if(o.controller.signal?.aborted)throw new j;return this._addRun(Ls(this,ws,"m",Os).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},a=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of a)Ls(this,ws,"m",$s).call(this,e);if(a.controller.signal?.aborted)throw new j;return this._addRun(Ls(this,ws,"m",Os).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(!Be(t)||!Be(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(!Be(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,r){return await this._createToolAssistantStream(s,e,t,n,r)}}$s=function(e){if(!this.ended)switch(Fs(this,Ps,e,"f"),Ls(this,ws,"m",Ms).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.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":Ls(this,ws,"m",Bs).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":Ls(this,ws,"m",js).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":Ls(this,ws,"m",Ts).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Os=function(){if(this.ended)throw new O("stream has ended, this shouldn't happen");if(!Ls(this,Ss,"f"))throw Error("Final run has not been received");return Ls(this,Ss,"f")},Ts=function(e){const[t,s]=Ls(this,ws,"m",qs).call(this,e,Ls(this,xs,"f"));Fs(this,xs,t,"f"),Ls(this,vs,"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!=Ls(this,As,"f")){if(Ls(this,Es,"f"))switch(Ls(this,Es,"f").type){case"text":this._emit("textDone",Ls(this,Es,"f").text,Ls(this,xs,"f"));break;case"image_file":this._emit("imageFileDone",Ls(this,Es,"f").image_file,Ls(this,xs,"f"))}Fs(this,As,s.index,"f")}Fs(this,Es,t.content[s.index],"f")}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==Ls(this,As,"f")){const t=e.data.content[Ls(this,As,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,Ls(this,xs,"f"));break;case"text":this._emit("textDone",t.text,Ls(this,xs,"f"))}}Ls(this,xs,"f")&&this._emit("messageDone",e.data),Fs(this,xs,void 0,"f")}},js=function(e){const t=Ls(this,ws,"m",Ns).call(this,e);switch(Fs(this,ks,t,"f"),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==Ls(this,Rs,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(Ls(this,Is,"f")&&this._emit("toolCallDone",Ls(this,Is,"f")),Fs(this,Rs,e.index,"f"),Fs(this,Is,t.step_details.tool_calls[e.index],"f"),Ls(this,Is,"f")&&this._emit("toolCallCreated",Ls(this,Is,"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":Fs(this,ks,void 0,"f");"tool_calls"==e.data.step_details.type&&Ls(this,Is,"f")&&(this._emit("toolCallDone",Ls(this,Is,"f")),Fs(this,Is,void 0,"f")),this._emit("runStepDone",e.data,t)}},Ms=function(e){Ls(this,bs,"f").push(e),this._emit("event",e)},Ns=function(e){switch(e.event){case"thread.run.step.created":return Ls(this,_s,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=Ls(this,_s,"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=Ws.accumulateDelta(t,s.delta);Ls(this,_s,"f")[e.data.id]=n}return Ls(this,_s,"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":Ls(this,_s,"f")[e.data.id]=e.data}if(Ls(this,_s,"f")[e.data.id])return Ls(this,_s,"f")[e.data.id];throw new Error("No snapshot available")},qs=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]=Ls(this,ws,"m",Ds).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")},Ds=function(e,t){return Ws.accumulateDelta(t,e)},Bs=function(e){switch(Fs(this,Cs,e.data,"f"),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":Fs(this,Ss,e.data,"f"),Ls(this,Is,"f")&&(this._emit("toolCallDone",Ls(this,Is,"f")),Fs(this,Is,void 0,"f"))}};class Us extends We{create(e,t,s){return this._client.post(`/threads/${e}/messages`,{body:t,...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}retrieve(e,t,s){return this._client.get(`/threads/${e}/messages/${t}`,{...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}update(e,t,s,n){return this._client.post(`/threads/${e}/messages/${t}`,{body:s,...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}list(e,t={},s){return be(t)?this.list(e,{},t):this._client.getAPIList(`/threads/${e}/messages`,Xs,{query:t,...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}del(e,t,s){return this._client.delete(`/threads/${e}/messages/${t}`,{...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}}class Xs extends Fe{}Us.MessagesPage=Xs;class Js extends We{retrieve(e,t,s,n={},r){return be(n)?this.retrieve(e,t,s,{},n):this._client.get(`/threads/${e}/runs/${t}/steps/${s}`,{query:n,...r,headers:{"OpenAI-Beta":"assistants=v2",...r?.headers}})}list(e,t,s={},n){return be(s)?this.list(e,t,{},s):this._client.getAPIList(`/threads/${e}/runs/${t}/steps`,Hs,{query:s,...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}}class Hs extends Fe{}Js.RunStepsPage=Hs;class Vs extends We{constructor(){super(...arguments),this.steps=new Js(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers},stream:t.stream??!1})}retrieve(e,t,s){return this._client.get(`/threads/${e}/runs/${t}`,{...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}update(e,t,s,n){return this._client.post(`/threads/${e}/runs/${t}`,{body:s,...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}list(e,t={},s){return be(t)?this.list(e,{},t):this._client.getAPIList(`/threads/${e}/runs`,Ks,{query:t,...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}cancel(e,t,s){return this._client.post(`/threads/${e}/runs/${t}/cancel`,{...s,headers:{"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)}createAndStream(e,t,s){return Ws.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n={...s?.headers,"X-Stainless-Poll-Helper":"true"};for(s?.pollIntervalMs&&(n["X-Stainless-Custom-Poll-Interval"]=s.pollIntervalMs.toString());;){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 Pe(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Ws.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s,n){return this._client.post(`/threads/${e}/runs/${t}/submit_tool_outputs`,{body:s,...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers},stream:s.stream??!1})}async submitToolOutputsAndPoll(e,t,s,n){const r=await this.submitToolOutputs(e,t,s,n);return await this.poll(e,r.id,n)}submitToolOutputsStream(e,t,s,n){return Ws.createToolAssistantStream(e,t,this._client.beta.threads.runs,s,n)}}class Ks extends Fe{}Vs.RunsPage=Ks,Vs.Steps=Js,Vs.RunStepsPage=Hs;class zs extends We{constructor(){super(...arguments),this.runs=new Vs(this._client),this.messages=new Us(this._client)}create(e={},t){return be(e)?this.create({},e):this._client.post("/threads",{body:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}retrieve(e,t){return this._client.get(`/threads/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}update(e,t,s){return this._client.post(`/threads/${e}`,{body:t,...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}del(e,t){return this._client.delete(`/threads/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:{"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.thread_id,s.id,t)}createAndRunStream(e,t){return Ws.createThreadAssistantStream(e,this._client.beta.threads,t)}}zs.Runs=Vs,zs.RunsPage=Ks,zs.Messages=Us,zs.MessagesPage=Xs;let Gs=class extends We{create(e,t,s){return this._client.post(`/vector_stores/${e}/files`,{body:t,...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}retrieve(e,t,s){return this._client.get(`/vector_stores/${e}/files/${t}`,{...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}list(e,t={},s){return be(t)?this.list(e,{},t):this._client.getAPIList(`/vector_stores/${e}/files`,Qs,{query:t,...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}del(e,t,s){return this._client.delete(`/vector_stores/${e}/files/${t}`,{...s,headers:{"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={...s?.headers,"X-Stainless-Poll-Helper":"true"};for(s?.pollIntervalMs&&(n["X-Stainless-Custom-Poll-Interval"]=s.pollIntervalMs.toString());;){const r=await this.retrieve(e,t,{...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 Pe(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)}};class Qs extends Fe{}Gs.VectorStoreFilesPage=Qs;class Ys extends We{create(e,t,s){return this._client.post(`/vector_stores/${e}/file_batches`,{body:t,...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}retrieve(e,t,s){return this._client.get(`/vector_stores/${e}/file_batches/${t}`,{...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}cancel(e,t,s){return this._client.post(`/vector_stores/${e}/file_batches/${t}/cancel`,{...s,headers:{"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={},n){return be(s)?this.listFiles(e,t,{},s):this._client.getAPIList(`/vector_stores/${e}/file_batches/${t}/files`,Qs,{query:s,...n,headers:{"OpenAI-Beta":"assistants=v2",...n?.headers}})}async poll(e,t,s){const n={...s?.headers,"X-Stainless-Poll-Helper":"true"};for(s?.pollIntervalMs&&(n["X-Stainless-Custom-Poll-Interval"]=s.pollIntervalMs.toString());;){const{data:r,response:o}=await this.retrieve(e,t,{...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 Pe(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),a=this._client,i=t.values(),l=[...s];const c=Array(o).fill(i).map((async function(e){for(let t of e){const e=await a.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 Zs extends We{constructor(){super(...arguments),this.files=new Gs(this._client),this.fileBatches=new Ys(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}retrieve(e,t){return this._client.get(`/vector_stores/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}update(e,t,s){return this._client.post(`/vector_stores/${e}`,{body:t,...s,headers:{"OpenAI-Beta":"assistants=v2",...s?.headers}})}list(e={},t){return be(e)?this.list({},e):this._client.getAPIList("/vector_stores",en,{query:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}del(e,t){return this._client.delete(`/vector_stores/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t?.headers}})}}class en extends Fe{}Zs.VectorStoresPage=en,Zs.Files=Gs,Zs.VectorStoreFilesPage=Qs,Zs.FileBatches=Ys;class tn extends We{constructor(){super(...arguments),this.realtime=new ys(this._client),this.vectorStores=new Zs(this._client),this.chat=new ms(this._client),this.assistants=new Qe(this._client),this.threads=new zs(this._client)}}tn.Realtime=ys,tn.VectorStores=Zs,tn.VectorStoresPage=en,tn.Assistants=Qe,tn.AssistantsPage=Ye,tn.Threads=zs;class sn extends We{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class nn extends We{create(e,t){return this._client.post("/embeddings",{body:e,...t})}}class rn extends We{create(e,t){return this._client.post("/files",oe({body:e,...t}))}retrieve(e,t){return this._client.get(`/files/${e}`,t)}list(e={},t){return be(e)?this.list({},e):this._client.getAPIList("/files",on,{query:e,...t})}del(e,t){return this._client.delete(`/files/${e}`,t)}content(e,t){return this._client.get(`/files/${e}/content`,{...t,headers:{Accept:"application/binary",...t?.headers},__binaryResponse:!0})}retrieveContent(e,t){return this._client.get(`/files/${e}/content`,t)}async waitForProcessing(e,{pollInterval:t=5e3,maxWait:s=18e5}={}){const n=new Set(["processed","error","deleted"]),r=Date.now();let o=await this.retrieve(e);for(;!o.status||!n.has(o.status);)if(await Pe(t),o=await this.retrieve(e),Date.now()-r>s)throw new N({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}}class on extends Fe{}rn.FileObjectsPage=on;class an extends We{list(e,t={},s){return be(t)?this.list(e,{},t):this._client.getAPIList(`/fine_tuning/jobs/${e}/checkpoints`,ln,{query:t,...s})}}class ln extends Fe{}an.FineTuningJobCheckpointsPage=ln;class cn extends We{constructor(){super(...arguments),this.checkpoints=new an(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(`/fine_tuning/jobs/${e}`,t)}list(e={},t){return be(e)?this.list({},e):this._client.getAPIList("/fine_tuning/jobs",un,{query:e,...t})}cancel(e,t){return this._client.post(`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return be(t)?this.listEvents(e,{},t):this._client.getAPIList(`/fine_tuning/jobs/${e}/events`,hn,{query:t,...s})}}class un extends Fe{}class hn extends Fe{}cn.FineTuningJobsPage=un,cn.FineTuningJobEventsPage=hn,cn.Checkpoints=an,cn.FineTuningJobCheckpointsPage=ln;class dn extends We{constructor(){super(...arguments),this.jobs=new cn(this._client)}}dn.Jobs=cn,dn.FineTuningJobsPage=un,dn.FineTuningJobEventsPage=hn;class fn extends We{createVariation(e,t){return this._client.post("/images/variations",oe({body:e,...t}))}edit(e,t){return this._client.post("/images/edits",oe({body:e,...t}))}generate(e,t){return this._client.post("/images/generations",{body:e,...t})}}class pn extends We{retrieve(e,t){return this._client.get(`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",mn,e)}del(e,t){return this._client.delete(`/models/${e}`,t)}}class mn extends Le{}pn.ModelsPage=mn;class gn extends We{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class yn extends We{create(e,t,s){return this._client.post(`/uploads/${e}/parts`,oe({body:t,...s}))}}class wn extends We{constructor(){super(...arguments),this.parts=new yn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(`/uploads/${e}/complete`,{body:t,...s})}}var bn;wn.Parts=yn;class _n extends pe{constructor({baseURL:e=$e("OPENAI_BASE_URL"),apiKey:t=$e("OPENAI_API_KEY"),organization:s=$e("OPENAI_ORG_ID")??null,project:n=$e("OPENAI_PROJECT_ID")??null,...r}={}){if(void 0===t)throw new O("The OPENAI_API_KEY environment variable is missing or empty; either provide it, or instantiate the OpenAI client with an apiKey option, like new OpenAI({ apiKey: 'My API Key' }).");const o={apiKey:t,organization:s,project:n,...r,baseURL:e||"https://api.openai.com/v1"};if(!o.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new O("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");super({baseURL:o.baseURL,timeout:o.timeout??6e5,httpAgent:o.httpAgent,maxRetries:o.maxRetries,fetch:o.fetch}),this.completions=new sn(this),this.chat=new Xe(this),this.embeddings=new nn(this),this.files=new rn(this),this.images=new fn(this),this.audio=new Ke(this),this.moderations=new gn(this),this.models=new pn(this),this.fineTuning=new dn(this),this.beta=new tn(this),this.batches=new ze(this),this.uploads=new wn(this),this._options=o,this.apiKey=t,this.organization=s,this.project=n}defaultQuery(){return this._options.defaultQuery}defaultHeaders(e){return{...super.defaultHeaders(e),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project,...this._options.defaultHeaders}}authHeaders(e){return{Authorization:`Bearer ${this.apiKey}`}}stringifyQuery(e){return b(e,{arrayFormat:"brackets"})}}function vn({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)}bn=_n,_n.OpenAI=bn,_n.DEFAULT_TIMEOUT=6e5,_n.OpenAIError=O,_n.APIError=T,_n.APIConnectionError=M,_n.APIConnectionTimeoutError=N,_n.APIUserAbortError=j,_n.NotFoundError=L,_n.ConflictError=F,_n.RateLimitError=U,_n.BadRequestError=q,_n.AuthenticationError=D,_n.InternalServerError=X,_n.PermissionDeniedError=B,_n.UnprocessableEntityError=W,_n.toFile=te,_n.fileFromPath=P,_n.Completions=sn,_n.Chat=Xe,_n.Embeddings=nn,_n.Files=rn,_n.FileObjectsPage=on,_n.Images=fn,_n.Audio=Ke,_n.Moderations=gn,_n.Models=pn,_n.ModelsPage=mn,_n.FineTuning=dn,_n.Beta=tn,_n.Batches=ze,_n.BatchesPage=Ge,_n.Uploads=wn;const xn=document.querySelector("#apiKey"),Sn=document.querySelector("#model"),An=document.querySelector("#models"),En=document.querySelector("#includeImages-line"),Rn=document.querySelector("#baseURL");function In(){!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(Sn.value)?En.style.display="none":En.style.display="flex"}Sn.addEventListener("input",In),Sn.addEventListener("focus",(function(){return n(this,void 0,void 0,(function*(){var e,t;const s=null===(e=xn.value)||void 0===e?void 0:e.trim(),n=null===(t=Rn.value)||void 0===t?void 0:t.trim();if(s){Sn.innerHTML="";try{const e=new _n({apiKey:s,baseURL:n,dangerouslyAllowBrowser:!0}),t=(yield e.models.list()).data.filter((e=>e.id.startsWith("gpt")||e.id.startsWith("o1")||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,An.appendChild(t)}In()}catch(e){console.error(e),vn({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=Sn.value)||void 0===e?void 0:e.trim(),r=null===(t=xn.value)||void 0===t?void 0:t.trim(),o=null===(s=Rn.value)||void 0===s?void 0:s.trim();try{vn({msg:"Checking GPT version...",isInfinite:!0,isError:!1});const e=new _n({apiKey:r,baseURL:o,dangerouslyAllowBrowser:!0});yield e.chat.completions.create({model:n,messages:[{role:"user",content:"reply just pong"}]}),vn({msg:"The model is valid!"})}catch(e){vn({msg:e,isError:!0})}}))}));const Pn=["includeImages"],Cn={autocomplete:[],clipboard:["typing","mouseover"],"question-to-answer":["typing","infinite","mouseover"]};function kn(){const s=Cn[e.actualMode],n=t.filter((e=>!s.includes(e)&&!Pn.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");kn()}));const $n="1.1.3",On=document.querySelector("#version");function Tn(e,t=!0){if(t)return void(On.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,On.appendChild(s),On.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),$n))),t=e.split("."),s=$n.split("."),r=Math.min(t.length,s.length);for(let n=0;nparseInt(s[n]))return Tn(e,!1);if(parseInt(s[n])>parseInt(t[n]))return Tn($n)}Tn($n)}))}();const jn=document.querySelector("#settings"),Mn=document.querySelector("#advanced-settings"),Nn=document.querySelector("#switch-settings");Nn.addEventListener("click",(function(e){e.preventDefault(),"flex"===Mn.style.display?(jn.style.display="flex",Mn.style.display="none",Nn.textContent="Advanced settings"):(jn.style.display="none",Mn.style.display="flex",Nn.textContent="Go back to settings")}));const qn=document.querySelector(".save"),Dn=["apiKey","code","model","baseURL","maxTokens"];qn.addEventListener("click",(function(){const[s,n,r,o,a]=Dn.map((e=>document.querySelector("#"+e).value.trim())),[i,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?vn({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:a?parseInt(a):void 0,logs:i,title:l,cursor:c,typing:u,mouseover:h,infinite:d,timeout:f,history:p,includeImages:m,mode:e.actualMode}}),vn({msg:"Configuration saved"})):vn({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")}Dn.forEach((e=>r[e]?document.querySelector("#"+e).value=r[e]:null)),t.forEach((e=>document.querySelector("#"+e).checked=r[e]||""))}kn(),In()}))}));
+!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 null!=e&&"object"==typeof e&&!Array.isArray(e)}const R=e=>new Promise((t=>setTimeout(t,e))),E="5.11.0";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":E,"X-Stainless-OS":T(Deno.build.os),"X-Stainless-Arch":P(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":E,"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":E,"X-Stainless-OS":T(globalThis.process.platform??"unknown"),"X-Stainless-Arch":P(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":E,"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":E,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const P=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",T=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 q(...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 M(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return q({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function L(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 N=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),D="RFC3986",W=e=>String(e),B={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:W};let U=(e,t)=>(U=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),U(e,t));const F=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),X=1024;function H(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)},K=function(e,t){Array.prototype.push.apply(e,I(t)?t:[t])};let V;const z={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=X?o.slice(e,e+X):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]=F[n]:n<2048?s[s.length]=F[192|n>>6]+F[128|63&n]:n<55296||n>=57344?s[s.length]=F[224|n>>12]+F[128|n>>6&63]+F[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=F[240|n>>18]+F[128|n>>12&63]+F[128|n>>6&63]+F[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:D,formatter:W,indices:!1,serializeDate:e=>(V??(V=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const G={};function Q(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(G))&&!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(G)&&(b=0)}if("function"==typeof c?w=c(t,w):w instanceof Date?w=d?.(w):"comma"===s&&I(w)&&(w=H(w,(function(e){return e instanceof Date?d?.(e):e}))),null===w){if(o)return l&&!m?l(t,z.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,z.encoder,g,"key",f);return[p?.(e)+"="+p?.(l(w,z.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=H(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(G,y),K(S,Q(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 Y(e,t={}){let s=e;const n=function(e=z){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||z.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=D;if(void 0!==e.format){if(!U(B,e.format))throw new TypeError("Unknown format option provided.");s=e.format}const n=B[s];let r,o=z.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":z.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||z.allowDots:!!e.allowDots;return{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:z.addQueryPrefix,allowDots:i,allowEmptyArrays:"boolean"==typeof e.allowEmptyArrays?!!e.allowEmptyArrays:z.allowEmptyArrays,arrayFormat:r,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:z.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:void 0===e.delimiter?z.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:z.encode,encodeDotInKeys:"boolean"==typeof e.encodeDotInKeys?e.encodeDotInKeys:z.encodeDotInKeys,encoder:"function"==typeof e.encoder?e.encoder:z.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:z.encodeValuesOnly,filter:o,format:s,formatter:n,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:z.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:z.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:z.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 Z,ee;function te(e){let t;return(Z??(t=new globalThis.TextEncoder,Z=t.encode.bind(t)))(e)}function se(e){let t;return(ee??(t=new globalThis.TextDecoder,ee=t.decode.bind(t)))(e)}var ne,re;class oe{constructor(){ne.set(this,void 0),re.set(this,void 0),r(this,ne,new Uint8Array),r(this,re,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?te(e):e;r(this,ne,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,ne,"f"),t]));const s=[];let n;for(;null!=(n=ie(o(this,ne,"f"),o(this,re,"f")));){if(n.carriage&&null==o(this,re,"f")){r(this,re,n.index);continue}if(null!=o(this,re,"f")&&(n.index!==o(this,re,"f")+1||n.carriage)){s.push(se(o(this,ne,"f").subarray(0,o(this,re,"f")-1))),r(this,ne,o(this,ne,"f").subarray(o(this,re,"f"))),r(this,re,null);continue}const e=null!==o(this,re,"f")?n.preceding-1:n.preceding,t=se(o(this,ne,"f").subarray(0,e));s.push(t),r(this,ne,o(this,ne,"f").subarray(n.index)),r(this,re,null)}return s}flush(){return o(this,ne,"f").length?this.decode("\n"):[]}}function ie(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 pe(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(le))}`)};function ue(){}function he(e,t,s){return!t||le[e]>le[s]?ue:t[e].bind(t)}const de={error:ue,warn:ue,info:ue,debug:ue};let fe=new WeakMap;function pe(e){const t=e.logger,s=e.logLevel??"off";if(!t)return de;const n=fe.get(t);if(n&&n[0]===s)return n[1];const r={error:he("error",t,s),warn:he("warn",t,s),info:he("info",t,s),debug:he("debug",t,s)};return fe.set(t,[s,r]),r}const me=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 ge,ye,we;class _e{constructor(e,t,s){this.iterator=e,ge.set(this,void 0),this.controller=t,r(this,ge,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?pe(s):console;return new _e((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 be,n=new oe,r=L(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?te(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=ae(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 _e((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 oe,s=L(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)}[(ge=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,o(this,ge,"f")),new _e((()=>n(t)),this.controller,o(this,ge,"f"))]}toReadableStream(){const e=this;let t;return q({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=te(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class be{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 ve(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return pe(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 xe(await s.json(),s)}return await s.text()})();return pe(e).debug(`[${n}] response parsed`,me({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function xe(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 Se extends Promise{constructor(e,t,s=ve){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,ye.set(this,void 0),r(this,ye,e)}_thenUnwrap(e){return new Se(o(this,ye,"f"),this.responsePromise,(async(t,s)=>xe(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,ye,"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)}}ye=new WeakMap;class $e{constructor(e,t,s,n){we.set(this,void 0),r(this,we,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,we,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(we=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ae extends Se{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await ve(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class Ie extends $e{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 Oe extends $e{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:{...(s=this.options.query,"object"!=typeof s?{}:s??{}),after:t}}:null;var s}}const ke=()=>{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 Re(e,t,s){return ke(),new File(e,t??"unknown_file",s)}function Ee(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 Ce=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],Pe=async(e,t)=>({...e,body:await je(e.body,t)}),Te=new WeakMap;const je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Te.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 Te.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])=>qe(s,e,t)))),s},qe=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,Re([await s.blob()],Ee(s)));else if(Ce(s))e.append(t,Re([await new Response(M(s)).blob()],Ee(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ee(s));else if(Array.isArray(s))await Promise.all(s.map((s=>qe(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])=>qe(e,`${t}[${s}]`,n))))}}},Me=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 Le(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Me(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Ce(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 Le(s))}return t}class Ne{constructor(e){this._client=e}}function De(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const We=Object.freeze(Object.create(null)),Be=(e=De)=>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??We)??We)?.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},Ue=Be(De);let Fe=class extends Ne{list(e,t={},s){return this._client.getAPIList(Ue`/chat/completions/${e}/messages`,Oe,{query:t,...s})}};function Xe(e){return"function"==typeof e.parse}const He=e=>"assistant"===e?.role,Je=e=>"tool"===e?.role;var Ke,Ve,ze,Ge,Qe,Ye,Ze,et,tt,st,nt,rt,ot,it,at,lt,ct,ut,ht,dt,ft;class pt{constructor(){Ke.add(this),this.controller=new AbortController,Ve.set(this,void 0),ze.set(this,(()=>{})),Ge.set(this,(()=>{})),Qe.set(this,void 0),Ye.set(this,(()=>{})),Ze.set(this,(()=>{})),et.set(this,{}),tt.set(this,!1),st.set(this,!1),nt.set(this,!1),rt.set(this,!1),r(this,Ve,new Promise(((e,t)=>{r(this,ze,e),r(this,Ge,t)}))),r(this,Qe,new Promise(((e,t)=>{r(this,Ye,e),r(this,Ze,t)}))),o(this,Ve,"f").catch((()=>{})),o(this,Qe,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),o(this,Ke,"m",ot).bind(this))}),0)}_connected(){this.ended||(o(this,ze,"f").call(this),this._emit("connect"))}get ended(){return o(this,tt,"f")}get errored(){return o(this,st,"f")}get aborted(){return o(this,nt,"f")}abort(){this.controller.abort()}on(e,t){return(o(this,et,"f")[e]||(o(this,et,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=o(this,et,"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,et,"f")[e]||(o(this,et,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{r(this,rt,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){r(this,rt,!0),await o(this,Qe,"f")}_emit(e,...t){if(o(this,tt,"f"))return;"end"===e&&(r(this,tt,!0),o(this,Ye,"f").call(this));const s=o(this,et,"f")[e];if(s&&(o(this,et,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return o(this,rt,"f")||s?.length||Promise.reject(e),o(this,Ge,"f").call(this,e),o(this,Ze,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];o(this,rt,"f")||s?.length||Promise.reject(e),o(this,Ge,"f").call(this,e),o(this,Ze,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function mt(e){return"auto-parseable-response-format"===e?.$brand}function gt(e){return"auto-parseable-tool"===e?.$brand}function yt(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{...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=>e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:gt(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?wt(t,e.message.content):null}}}));return{...e,choices:s}}function wt(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 _t(e,t){if(!e)return!1;const s=e.tools?.find((e=>e.function?.name===t.function.name));return gt(s)||s?.function.strict||!1}function bt(e){return!!mt(e.response_format)||(e.tools?.some((e=>gt(e)||"function"===e.type&&!0===e.function.strict))??!1)}Ve=new WeakMap,ze=new WeakMap,Ge=new WeakMap,Qe=new WeakMap,Ye=new WeakMap,Ze=new WeakMap,et=new WeakMap,tt=new WeakMap,st=new WeakMap,nt=new WeakMap,rt=new WeakMap,Ke=new WeakSet,ot=function(e){if(r(this,st,!0),e instanceof Error&&"AbortError"===e.name&&(e=new h),e instanceof h)return r(this,nt,!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 vt=10;class xt extends pt{constructor(){super(...arguments),it.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),Je(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(He(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,it,"m",at).call(this)}async finalMessage(){return await this.done(),o(this,it,"m",lt).call(this)}async finalFunctionToolCall(){return await this.done(),o(this,it,"m",ct).call(this)}async finalFunctionToolCallResult(){return await this.done(),o(this,it,"m",ut).call(this)}async totalUsage(){return await this.done(),o(this,it,"m",ht).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=o(this,it,"m",lt).call(this);t&&this._emit("finalMessage",t);const s=o(this,it,"m",at).call(this);s&&this._emit("finalContent",s);const n=o(this,it,"m",ct).call(this);n&&this._emit("finalFunctionToolCall",n);const r=o(this,it,"m",ut).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",o(this,it,"m",ht).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,it,"m",dt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(yt(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&&r?.function?.name,{maxChatCompletions:u=vt}=s||{},h=t.tools.map((e=>{if(gt(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=Xe(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,it,"m",ft).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:u}),l)return}}}}it=new WeakSet,at=function(){return o(this,it,"m",lt).call(this).content??null},lt=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(He(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new c("stream ended without producing a ChatCompletionMessage with role=assistant")},ct=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(He(t)&&t?.tool_calls?.length)return t.tool_calls.at(-1)?.function}},ut=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(Je(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}},ht=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},dt=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.")},ft=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class St extends xt{static runTools(e,t,s){const n=new St,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),He(e)&&e.content&&this._emit("content",e.content)}}const $t=1,At=2,It=4,Ot=8,kt=16,Rt=32,Et=64,Ct=128,Pt=256,Tt=511;class jt extends Error{}class qt extends Error{}const Mt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new jt(`${e} at position ${n}`)},o=e=>{throw new qt(`${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)||kt&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Rt&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Rt&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Ct&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Pt&t&&1{const i=n;let a=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&Ot&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(Ot&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Ot&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(It&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&At&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(At&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||At&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&At&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=Tt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return Mt(e.trim(),t)}(e,Tt^At);var Nt,Dt,Wt,Bt,Ut,Ft,Xt,Ht,Jt,Kt,Vt,zt;class Gt extends xt{constructor(e){super(),Nt.add(this),Dt.set(this,void 0),Wt.set(this,void 0),Bt.set(this,void 0),r(this,Dt,e),r(this,Wt,[])}get currentChatCompletionSnapshot(){return o(this,Bt,"f")}static fromReadableStream(e){const t=new Gt(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new Gt(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,Nt,"m",Ut).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,Nt,"m",Xt).call(this,e);if(r.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Nt,"m",Kt).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),o(this,Nt,"m",Ut).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(o(this,Nt,"m",Kt).call(this)),o(this,Nt,"m",Xt).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Nt,"m",Kt).call(this))}[(Dt=new WeakMap,Wt=new WeakMap,Bt=new WeakMap,Nt=new WeakSet,Ut=function(){this.ended||r(this,Bt,void 0)},Ft=function(e){let t=o(this,Wt,"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,Wt,"f")[e.index]=t,t)},Xt=function(e){if(this.ended)return;const t=o(this,Nt,"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,Nt,"m",Ft).call(this,e);e.finish_reason&&(o(this,Nt,"m",Jt).call(this,e),null!=n.current_tool_call_index&&o(this,Nt,"m",Ht).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,Nt,"m",Jt).call(this,e),null!=n.current_tool_call_index&&o(this,Nt,"m",Ht).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??""}))}}},Ht=function(e,t){if(o(this,Nt,"m",Ft).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,Dt,"f")?.tools?.find((e=>"function"===e.type&&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:gt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},Jt=function(e){const t=o(this,Nt,"m",Ft).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=o(this,Nt,"m",Vt).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}))},Kt=function(){if(this.ended)throw new c("stream has ended, this shouldn't happen");const e=o(this,Bt,"f");if(!e)throw new c("request ended without sending any chunks");return r(this,Bt,void 0),r(this,Wt,[]),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${Qt(e)}`);if(null==o)throw new c(`missing choices[${n}].tool_calls[${s}].type\n${Qt(e)}`);if(null==u)throw new c(`missing choices[${n}].tool_calls[${s}].function.name\n${Qt(e)}`);if(null==l)throw new c(`missing choices[${n}].tool_calls[${s}].function.arguments\n${Qt(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&&bt(t)?yt(e,t):{...e,choices:e.choices.map((e=>({...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(l,t)}(e,o(this,Dt,"f"))},Vt=function(){const e=o(this,Dt,"f")?.response_format;return mt(e)?e:null},zt=function(e){var t,s,n,i;let a=o(this,Bt,"f");const{choices:l,...c}=e;a?Object.assign(a,c):a=r(this,Bt,{...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,Dt,"f")&&bt(o(this,Dt,"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,Nt,"m",Vt).call(this)&&(e.message.parsed=Lt(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,_t(o(this,Dt,"f"),l)&&(l.function.parsed_arguments=Lt(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 _e(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function Qt(e){return JSON.stringify(e)}class Yt extends Gt{static fromReadableStream(e){const t=new Yt(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new Yt(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let Zt=class extends Ne{constructor(){super(...arguments),this.messages=new Fe(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(Ue`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(Ue`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Oe,{query:e,...t})}delete(e,t){return this._client.delete(Ue`/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=>yt(t,e)))}runTools(e,t){return e.stream?Yt.runTools(this._client,e,t):St.runTools(this._client,e,t)}stream(e,t){return Gt.createChatCompletion(this._client,e,t)}};Zt.Messages=Fe;class es extends Ne{constructor(){super(...arguments),this.completions=new Zt(this._client)}}es.Completions=Zt;const ts=Symbol("brand.privateNullableHeaders");function*ss(e){if(!e)return;if(ts 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 ns=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of ss(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{[ts]:!0,values:t,nulls:s}};class rs extends Ne{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ns([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class os extends Ne{create(e,t){return this._client.post("/audio/transcriptions",Pe({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class is extends Ne{create(e,t){return this._client.post("/audio/translations",Pe({body:e,...t,__metadata:{model:e.model}},this._client))}}class as extends Ne{constructor(){super(...arguments),this.transcriptions=new os(this._client),this.translations=new is(this._client),this.speech=new rs(this._client)}}as.Transcriptions=os,as.Translations=is,as.Speech=rs;class ls extends Ne{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Ue`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Oe,{query:e,...t})}cancel(e,t){return this._client.post(Ue`/batches/${e}/cancel`,t)}}class cs extends Ne{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ns([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Ue`/assistants/${e}`,{...t,headers:ns([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Ue`/assistants/${e}`,{body:t,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Oe,{query:e,...t,headers:ns([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Ue`/assistants/${e}`,{...t,headers:ns([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class us extends Ne{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ns([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class hs extends Ne{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ns([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class ds extends Ne{constructor(){super(...arguments),this.sessions=new us(this._client),this.transcriptionSessions=new hs(this._client)}}ds.Sessions=us,ds.TranscriptionSessions=hs;class fs extends Ne{create(e,t,s){return this._client.post(Ue`/threads/${e}/messages`,{body:t,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Ue`/threads/${n}/messages/${e}`,{...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Ue`/threads/${n}/messages/${e}`,{body:r,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Ue`/threads/${e}/messages`,Oe,{query:t,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(Ue`/threads/${n}/messages/${e}`,{...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class ps extends Ne{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(Ue`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(Ue`/threads/${n}/runs/${e}/steps`,Oe,{query:r,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const ms=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 gs,ys,ws,_s,bs,vs,xs,Ss,$s,As,Is,Os,ks,Rs,Es,Cs,Ps,Ts,js,qs,Ms,Ls,Ns;class Ds extends pt{constructor(){super(...arguments),gs.add(this),ws.set(this,[]),_s.set(this,{}),bs.set(this,{}),vs.set(this,void 0),xs.set(this,void 0),Ss.set(this,void 0),$s.set(this,void 0),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)}[(ws=new WeakMap,_s=new WeakMap,bs=new WeakMap,vs=new WeakMap,xs=new WeakMap,Ss=new WeakMap,$s=new WeakMap,As=new WeakMap,Is=new WeakMap,Os=new WeakMap,ks=new WeakMap,Rs=new WeakMap,gs=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 ys;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)o(this,gs,"m",Es).call(this,e);if(n.controller.signal?.aborted)throw new h;return this._addRun(o(this,gs,"m",Cs).call(this))}toReadableStream(){return new _e(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new ys;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,gs,"m",Es).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,gs,"m",Cs).call(this))}static createThreadAssistantStream(e,t,s){const n=new ys;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 ys;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return o(this,Os,"f")}currentRun(){return o(this,ks,"f")}currentMessageSnapshot(){return o(this,vs,"f")}currentRunStepSnapshot(){return o(this,Rs,"f")}async finalRunSteps(){return await this.done(),Object.values(o(this,_s,"f"))}async finalMessages(){return await this.done(),Object.values(o(this,bs,"f"))}async finalRun(){if(await this.done(),!o(this,xs,"f"))throw Error("Final run was not received.");return o(this,xs,"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,gs,"m",Es).call(this,e);if(i.controller.signal?.aborted)throw new h;return this._addRun(o(this,gs,"m",Cs).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,gs,"m",Es).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,gs,"m",Cs).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(!k(t)||!k(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(!k(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)}}ys=Ds,Es=function(e){if(!this.ended)switch(r(this,Os,e),o(this,gs,"m",js).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,gs,"m",Ns).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,gs,"m",Ts).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,gs,"m",Ps).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Cs=function(){if(this.ended)throw new c("stream has ended, this shouldn't happen");if(!o(this,xs,"f"))throw Error("Final run has not been received");return o(this,xs,"f")},Ps=function(e){const[t,s]=o(this,gs,"m",Ms).call(this,e,o(this,vs,"f"));r(this,vs,t),o(this,bs,"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,Ss,"f")){if(o(this,$s,"f"))switch(o(this,$s,"f").type){case"text":this._emit("textDone",o(this,$s,"f").text,o(this,vs,"f"));break;case"image_file":this._emit("imageFileDone",o(this,$s,"f").image_file,o(this,vs,"f"))}r(this,Ss,s.index)}r(this,$s,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==o(this,Ss,"f")){const t=e.data.content[o(this,Ss,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,o(this,vs,"f"));break;case"text":this._emit("textDone",t.text,o(this,vs,"f"))}}o(this,vs,"f")&&this._emit("messageDone",e.data),r(this,vs,void 0)}},Ts=function(e){const t=o(this,gs,"m",qs).call(this,e);switch(r(this,Rs,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,As,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(o(this,Is,"f")&&this._emit("toolCallDone",o(this,Is,"f")),r(this,As,e.index),r(this,Is,t.step_details.tool_calls[e.index]),o(this,Is,"f")&&this._emit("toolCallCreated",o(this,Is,"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,Rs,void 0);"tool_calls"==e.data.step_details.type&&o(this,Is,"f")&&(this._emit("toolCallDone",o(this,Is,"f")),r(this,Is,void 0)),this._emit("runStepDone",e.data,t)}},js=function(e){o(this,ws,"f").push(e),this._emit("event",e)},qs=function(e){switch(e.event){case"thread.run.step.created":return o(this,_s,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=o(this,_s,"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=ys.accumulateDelta(t,s.delta);o(this,_s,"f")[e.data.id]=n}return o(this,_s,"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,_s,"f")[e.data.id]=e.data}if(o(this,_s,"f")[e.data.id])return o(this,_s,"f")[e.data.id];throw new Error("No snapshot available")},Ms=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,gs,"m",Ls).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")},Ls=function(e,t){return ys.accumulateDelta(t,e)},Ns=function(e){switch(r(this,ks,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,xs,e.data),o(this,Is,"f")&&(this._emit("toolCallDone",o(this,Is,"f")),r(this,Is,void 0))}};let Ws=class extends Ne{constructor(){super(...arguments),this.steps=new ps(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(Ue`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Ue`/threads/${n}/runs/${e}`,{...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Ue`/threads/${n}/runs/${e}`,{body:r,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Ue`/threads/${e}/runs`,Oe,{query:t,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(Ue`/threads/${n}/runs/${e}/cancel`,{...s,headers:ns([{"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 Ds.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ns([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 R(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Ds.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Ue`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ns([{"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 Ds.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};Ws.Steps=ps;class Bs extends Ne{constructor(){super(...arguments),this.runs=new Ws(this._client),this.messages=new fs(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ns([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Ue`/threads/${e}`,{...t,headers:ns([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Ue`/threads/${e}`,{body:t,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(Ue`/threads/${e}`,{...t,headers:ns([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ns([{"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 Ds.createThreadAssistantStream(e,this._client.beta.threads,t)}}Bs.Runs=Ws,Bs.Messages=fs;class Us extends Ne{constructor(){super(...arguments),this.realtime=new ds(this._client),this.assistants=new cs(this._client),this.threads=new Bs(this._client)}}Us.Realtime=ds,Us.Assistants=cs,Us.Threads=Bs;class Fs extends Ne{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class Xs extends Ne{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Ue`/containers/${n}/files/${e}/content`,{...s,headers:ns([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let Hs=class extends Ne{constructor(){super(...arguments),this.content=new Xs(this._client)}create(e,t,s){return this._client.post(Ue`/containers/${e}/files`,Pe({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Ue`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(Ue`/containers/${e}/files`,Oe,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(Ue`/containers/${n}/files/${e}`,{...s,headers:ns([{Accept:"*/*"},s?.headers])})}};Hs.Content=Xs;class Js extends Ne{constructor(){super(...arguments),this.files=new Hs(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(Ue`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Oe,{query:e,...t})}delete(e,t){return this._client.delete(Ue`/containers/${e}`,{...t,headers:ns([{Accept:"*/*"},t?.headers])})}}Js.Files=Hs;class Ks extends Ne{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&pe(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:(pe(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 Ys extends Ne{}let Zs=class extends Ne{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 en extends Ne{constructor(){super(...arguments),this.graders=new Zs(this._client)}}en.Graders=Zs;class tn extends Ne{create(e,t,s){return this._client.getAPIList(Ue`/fine_tuning/checkpoints/${e}/permissions`,Ie,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(Ue`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(Ue`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let sn=class extends Ne{constructor(){super(...arguments),this.permissions=new tn(this._client)}};sn.Permissions=tn;class nn extends Ne{list(e,t={},s){return this._client.getAPIList(Ue`/fine_tuning/jobs/${e}/checkpoints`,Oe,{query:t,...s})}}class rn extends Ne{constructor(){super(...arguments),this.checkpoints=new nn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(Ue`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Oe,{query:e,...t})}cancel(e,t){return this._client.post(Ue`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(Ue`/fine_tuning/jobs/${e}/events`,Oe,{query:t,...s})}pause(e,t){return this._client.post(Ue`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(Ue`/fine_tuning/jobs/${e}/resume`,t)}}rn.Checkpoints=nn;class on extends Ne{constructor(){super(...arguments),this.methods=new Ys(this._client),this.jobs=new rn(this._client),this.checkpoints=new sn(this._client),this.alpha=new en(this._client)}}on.Methods=Ys,on.Jobs=rn,on.Checkpoints=sn,on.Alpha=en;class an extends Ne{}class ln extends Ne{constructor(){super(...arguments),this.graderModels=new an(this._client)}}ln.GraderModels=an;class cn extends Ne{createVariation(e,t){return this._client.post("/images/variations",Pe({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",Pe({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 un extends Ne{retrieve(e,t){return this._client.get(Ue`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",Ie,e)}delete(e,t){return this._client.delete(Ue`/models/${e}`,t)}}class hn extends Ne{create(e,t){return this._client.post("/moderations",{body:e,...t})}}function dn(e,t){return t&&function(e){if(mt(e.text?.format))return!0;return!1}(t)?fn(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 fn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:mn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:pn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||gn(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 pn(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 mn(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 gn(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 yn,wn,_n,bn,vn,xn,Sn,$n;class An extends pt{constructor(e){super(),yn.add(this),wn.set(this,void 0),_n.set(this,void 0),bn.set(this,void 0),r(this,wn,e)}static createResponse(e,t,s){const n=new An(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,yn,"m",vn).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,yn,"m",xn).call(this,e,i);if(r.controller.signal?.aborted)throw new h;return o(this,yn,"m",Sn).call(this)}[(wn=new WeakMap,_n=new WeakMap,bn=new WeakMap,yn=new WeakSet,vn=function(){this.ended||r(this,_n,void 0)},xn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=o(this,yn,"m",$n).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)}},Sn=function(){if(this.ended)throw new c("stream has ended, this shouldn't happen");const e=o(this,_n,"f");if(!e)throw new c("request ended without sending any events");r(this,_n,void 0);const t=function(e,t){return dn(e,t)}(e,o(this,wn,"f"));return r(this,bn,t),t},$n=function(e){let t=o(this,_n,"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,_n,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}`);"message"===s.type&&s.content.push(e.part);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.completed":r(this,_n,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,bn,"f");if(!e)throw new c("stream ended without producing a ChatCompletion");return e}}class In extends Ne{list(e,t={},s){return this._client.getAPIList(Ue`/responses/${e}/input_items`,Oe,{query:t,...s})}}class On extends Ne{constructor(){super(...arguments),this.inputItems=new In(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&&gn(e),e)))}retrieve(e,t={},s){return this._client.get(Ue`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&gn(e),e)))}delete(e,t){return this._client.delete(Ue`/responses/${e}`,{...t,headers:ns([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>fn(t,e)))}stream(e,t){return An.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(Ue`/responses/${e}/cancel`,t)}}On.InputItems=In;class kn extends Ne{create(e,t,s){return this._client.post(Ue`/uploads/${e}/parts`,Pe({body:t,...s},this._client))}}class Rn extends Ne{constructor(){super(...arguments),this.parts=new kn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(Ue`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(Ue`/uploads/${e}/complete`,{body:t,...s})}}Rn.Parts=kn;class En extends Ne{create(e,t,s){return this._client.post(Ue`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Ue`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(Ue`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ns([{"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(Ue`/vector_stores/${n}/file_batches/${e}/files`,Oe,{query:r,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ns([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 R(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 Cn extends Ne{create(e,t,s){return this._client.post(Ue`/vector_stores/${e}/files`,{body:t,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Ue`/vector_stores/${n}/files/${e}`,{...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(Ue`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Ue`/vector_stores/${e}/files`,Oe,{query:t,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(Ue`/vector_stores/${n}/files/${e}`,{...s,headers:ns([{"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=ns([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 R(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(Ue`/vector_stores/${n}/files/${e}/content`,Ie,{...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Pn extends Ne{constructor(){super(...arguments),this.files=new Cn(this._client),this.fileBatches=new En(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ns([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Ue`/vector_stores/${e}`,{...t,headers:ns([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Ue`/vector_stores/${e}`,{body:t,...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Oe,{query:e,...t,headers:ns([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Ue`/vector_stores/${e}`,{...t,headers:ns([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(Ue`/vector_stores/${e}/search`,Ie,{body:t,method:"post",...s,headers:ns([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Tn,jn,qn,Mn,Ln,Nn,Dn;Pn.Files=Cn,Pn.FileBatches=En;class Wn extends Ne{constructor(){super(...arguments),Tn.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,Tn,"m",jn).call(this,s);const r=ns([t]).values,i=o(this,Tn,"m",qn).call(this,r,"webhook-signature"),a=o(this,Tn,"m",qn).call(this,r,"webhook-timestamp"),l=o(this,Tn,"m",qn).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")}}Tn=new WeakSet,jn=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")},qn=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 Bn{constructor({baseURL:e=ms("OPENAI_BASE_URL"),apiKey:t=ms("OPENAI_API_KEY"),organization:s=ms("OPENAI_ORG_ID")??null,project:n=ms("OPENAI_PROJECT_ID")??null,webhookSecret:o=ms("OPENAI_WEBHOOK_SECRET")??null,...i}={}){if(Mn.add(this),Nn.set(this,void 0),this.completions=new Fs(this),this.chat=new es(this),this.embeddings=new Ks(this),this.files=new Qs(this),this.images=new cn(this),this.audio=new as(this),this.moderations=new hn(this),this.models=new un(this),this.fineTuning=new on(this),this.graders=new ln(this),this.vectorStores=new Pn(this),this.webhooks=new Wn(this),this.beta=new Us(this),this.batches=new ls(this),this.uploads=new Rn(this),this.responses=new On(this),this.evals=new Gs(this),this.containers=new Js(this),void 0===t)throw new c("The OPENAI_API_KEY environment variable is missing or empty; either provide it, or instantiate the OpenAI client with an apiKey option, like new OpenAI({ apiKey: 'My API Key' }).");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??Ln.DEFAULT_TIMEOUT,this.logger=a.logger??console;const l="warn";this.logLevel=l,this.logLevel=ce(a.logLevel,"ClientOptions.logLevel",this)??ce(ms("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,Nn,N),this._options=a,this.apiKey=t,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 ns([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return Y(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${E}`}defaultIdempotencyKey(){return`stainless-node-retry-${i()}`}makeStatusError(e,t,s,n){return u.generate(e,t,s,n)}buildURL(e,t,s){const n=!o(this,Mn,"m",Dn).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){}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 Se(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(pe(this).debug(`[${u}] sending request`,me({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 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 pe(this).info(`[${u}] connection ${r?"timed out":"failed"} - ${e}`),pe(this).debug(`[${u}] connection ${r?"timed out":"failed"} (${e})`,me({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),this.retryRequest(n,t,s??u);if(pe(this).info(`[${u}] connection ${r?"timed out":"failed"} - error; no more retries left`),pe(this).debug(`[${u}] connection ${r?"timed out":"failed"} (error; no more retries left)`,me({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),pe(this).info(`${_} - ${e}`),pe(this).debug(`[${u}] response error (${e})`,me({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";pe(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;pe(this).debug(`[${u}] response error (${r})`,me({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 pe(this).info(_),pe(this).debug(`[${u}] response start`,me({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 Ae(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 R(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=ns([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=ns([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||e instanceof 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:M(e)}:o(this,Nn,"f").call(this,{body:e,headers:s})}}function Un({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)}Ln=Bn,Nn=new WeakMap,Mn=new WeakSet,Dn=function(){return"https://api.openai.com/v1"!==this.baseURL},Bn.OpenAI=Ln,Bn.DEFAULT_TIMEOUT=6e5,Bn.OpenAIError=c,Bn.APIError=u,Bn.APIConnectionError=d,Bn.APIConnectionTimeoutError=f,Bn.APIUserAbortError=h,Bn.NotFoundError=y,Bn.ConflictError=w,Bn.RateLimitError=b,Bn.BadRequestError=p,Bn.AuthenticationError=m,Bn.InternalServerError=v,Bn.PermissionDeniedError=g,Bn.UnprocessableEntityError=_,Bn.InvalidWebhookSignatureError=$,Bn.toFile=async function(e,t,s){if(ke(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Me(e))(e=await e))return e instanceof File?e:Re([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()),Re(await Le(n),t,s)}const n=await Le(e);if(t||(t=Ee(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Re(n,t,s)},Bn.Completions=Fs,Bn.Chat=es,Bn.Embeddings=Ks,Bn.Files=Qs,Bn.Images=cn,Bn.Audio=as,Bn.Moderations=hn,Bn.Models=un,Bn.FineTuning=on,Bn.Graders=ln,Bn.VectorStores=Pn,Bn.Webhooks=Wn,Bn.Beta=Us,Bn.Batches=ls,Bn.Uploads=Rn,Bn.Responses=On,Bn.Evals=Gs,Bn.Containers=Js;const Fn=document.querySelector("#apiKey"),Xn=document.querySelector("#model"),Hn=document.querySelector("#models"),Jn=document.querySelector("#includeImages-line"),Kn=document.querySelector("#baseURL");function Vn(){!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(Xn.value)?Jn.style.display="none":Jn.style.display="flex"}Xn.addEventListener("input",Vn),Xn.addEventListener("focus",(function(){return n(this,void 0,void 0,(function*(){var e,t;const s=null===(e=Fn.value)||void 0===e?void 0:e.trim(),n=null===(t=Kn.value)||void 0===t?void 0:t.trim();if(s){Xn.innerHTML="";try{const e=new Bn({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,Hn.appendChild(t)}Vn()}catch(e){console.error(e),Un({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=Xn.value)||void 0===e?void 0:e.trim(),r=null===(t=Fn.value)||void 0===t?void 0:t.trim(),o=null===(s=Kn.value)||void 0===s?void 0:s.trim();try{Un({msg:"Checking GPT version...",isInfinite:!0,isError:!1});const e=new Bn({apiKey:r,baseURL:o,dangerouslyAllowBrowser:!0});yield e.chat.completions.create({model:n,messages:[{role:"user",content:"reply just pong"}]}),Un({msg:"The model is valid!"})}catch(e){Un({msg:e,isError:!0})}}))}));const zn=["includeImages"],Gn={autocomplete:[],clipboard:["typing","mouseover"],"question-to-answer":["typing","infinite","mouseover"]};function Qn(){const s=Gn[e.actualMode],n=t.filter((e=>!s.includes(e)&&!zn.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");Qn()}));const Yn="1.1.4",Zn=document.querySelector("#version");function er(e,t=!0){if(t)return void(Zn.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,Zn.appendChild(s),Zn.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),Yn))),t=e.split("."),s=Yn.split("."),r=Math.min(t.length,s.length);for(let n=0;nparseInt(s[n]))return er(e,!1);if(parseInt(s[n])>parseInt(t[n]))return er(Yn)}er(Yn)}))}();const tr=document.querySelector("#settings"),sr=document.querySelector("#advanced-settings"),nr=document.querySelector("#switch-settings");nr.addEventListener("click",(function(e){e.preventDefault(),"flex"===sr.style.display?(tr.style.display="flex",sr.style.display="none",nr.textContent="Advanced settings"):(tr.style.display="none",sr.style.display="flex",nr.textContent="Go back to settings")}));const rr=document.querySelector(".save"),or=["apiKey","code","model","baseURL","maxTokens"];rr.addEventListener("click",(function(){const[s,n,r,o,i]=or.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?Un({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}}),Un({msg:"Configuration saved"})):Un({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")}or.forEach((e=>r[e]?document.querySelector("#"+e).value=r[e]:null)),t.forEach((e=>document.querySelector("#"+e).checked=r[e]||""))}Qn(),Vn()}))}));
//# sourceMappingURL=popup.js.map
diff --git a/extension/popup/popup.js.map b/extension/popup/popup.js.map
index 9c4004a..31d71a6 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/qs/formats.mjs","../../node_modules/openai/internal/qs/utils.mjs","../../node_modules/openai/internal/qs/stringify.mjs","../../node_modules/openai/version.mjs","../../node_modules/openai/_shims/registry.mjs","../../node_modules/openai/_shims/MultipartBody.mjs","../../node_modules/openai/_shims/index.mjs","../../node_modules/openai/_shims/web-runtime.mjs","../../node_modules/openai/error.mjs","../../node_modules/openai/internal/decoders/line.mjs","../../node_modules/openai/internal/stream-utils.mjs","../../node_modules/openai/streaming.mjs","../../node_modules/openai/uploads.mjs","../../node_modules/openai/core.mjs","../../node_modules/openai/pagination.mjs","../../node_modules/openai/resource.mjs","../../node_modules/openai/resources/chat/completions.mjs","../../node_modules/openai/resources/chat/chat.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/lib/RunnableFunction.mjs","../../node_modules/openai/lib/chatCompletionUtils.mjs","../../node_modules/openai/lib/EventStream.mjs","../../node_modules/openai/lib/parser.mjs","../../node_modules/openai/lib/AbstractChatCompletionRunner.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/beta/chat/completions.mjs","../../node_modules/openai/resources/beta/chat/chat.mjs","../../node_modules/openai/resources/beta/realtime/sessions.mjs","../../node_modules/openai/resources/beta/realtime/realtime.mjs","../../node_modules/openai/lib/AssistantStream.mjs","../../node_modules/openai/resources/beta/threads/messages.mjs","../../node_modules/openai/resources/beta/threads/runs/steps.mjs","../../node_modules/openai/resources/beta/threads/runs/runs.mjs","../../node_modules/openai/resources/beta/threads/threads.mjs","../../node_modules/openai/resources/beta/vector-stores/files.mjs","../../node_modules/openai/resources/beta/vector-stores/file-batches.mjs","../../node_modules/openai/lib/Util.mjs","../../node_modules/openai/resources/beta/vector-stores/vector-stores.mjs","../../node_modules/openai/resources/beta/beta.mjs","../../node_modules/openai/resources/completions.mjs","../../node_modules/openai/resources/embeddings.mjs","../../node_modules/openai/resources/files.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/images.mjs","../../node_modules/openai/resources/models.mjs","../../node_modules/openai/resources/moderations.mjs","../../node_modules/openai/resources/uploads/parts.mjs","../../node_modules/openai/resources/uploads/uploads.mjs","../../node_modules/openai/index.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","export const default_format = 'RFC3986';\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: (v) => String(v),\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nconst has = Object.prototype.hasOwnProperty;\nconst is_array = Array.isArray;\nconst hex_table = (() => {\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 (is_array(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 (is_array(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) ||\n !has.call(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 (is_array(target) && !is_array(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (is_array(target) && is_array(source)) {\n source.forEach(function (item, i) {\n if (has.call(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.call(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 (is_array(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 } from \"./utils.mjs\";\nimport { default_format, formatters } from \"./formats.mjs\";\nconst has = Object.prototype.hasOwnProperty;\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 is_array = Array.isArray;\nconst push = Array.prototype.push;\nconst push_to_array = function (arr, value_or_array) {\n push.apply(arr, is_array(value_or_array) ? value_or_array : [value_or_array]);\n};\nconst to_ISO = Date.prototype.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: formatters[default_format],\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return to_ISO.call(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' && is_array(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' && is_array(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 (is_array(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 && is_array(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && is_array(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 = is_array(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 && is_array(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.call(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' || is_array(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 (is_array(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 const VERSION = '4.82.0'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","export let auto = false;\nexport let kind = undefined;\nexport let fetch = undefined;\nexport let Request = undefined;\nexport let Response = undefined;\nexport let Headers = undefined;\nexport let FormData = undefined;\nexport let Blob = undefined;\nexport let File = undefined;\nexport let ReadableStream = undefined;\nexport let getMultipartRequestOptions = undefined;\nexport let getDefaultAgent = undefined;\nexport let fileFromPath = undefined;\nexport let isFsReadStream = undefined;\nexport function setShims(shims, options = { auto: false }) {\n if (auto) {\n throw new Error(`you must \\`import 'openai/shims/${shims.kind}'\\` before importing anything else from openai`);\n }\n if (kind) {\n throw new Error(`can't \\`import 'openai/shims/${shims.kind}'\\` after \\`import 'openai/shims/${kind}'\\``);\n }\n auto = options.auto;\n kind = shims.kind;\n fetch = shims.fetch;\n Request = shims.Request;\n Response = shims.Response;\n Headers = shims.Headers;\n FormData = shims.FormData;\n Blob = shims.Blob;\n File = shims.File;\n ReadableStream = shims.ReadableStream;\n getMultipartRequestOptions = shims.getMultipartRequestOptions;\n getDefaultAgent = shims.getDefaultAgent;\n fileFromPath = shims.fileFromPath;\n isFsReadStream = shims.isFsReadStream;\n}\n//# sourceMappingURL=registry.mjs.map","/**\n * Disclaimer: modules in _shims aren't intended to be imported by SDK users.\n */\nexport class MultipartBody {\n constructor(body) {\n this.body = body;\n }\n get [Symbol.toStringTag]() {\n return 'MultipartBody';\n }\n}\n//# sourceMappingURL=MultipartBody.mjs.map","/**\n * Disclaimer: modules in _shims aren't intended to be imported by SDK users.\n */\nimport * as shims from './registry.mjs';\nimport * as auto from 'openai/_shims/auto/runtime';\nif (!shims.kind) shims.setShims(auto.getRuntime(), { auto: true });\nexport * from './registry.mjs';\n","import { MultipartBody } from \"./MultipartBody.mjs\";\nexport function getRuntime({ manuallyImported } = {}) {\n const recommendation = manuallyImported ?\n `You may need to use polyfills`\n : `Add one of these imports before your first \\`import … from 'openai'\\`:\n- \\`import 'openai/shims/node'\\` (if you're running on Node)\n- \\`import 'openai/shims/web'\\` (otherwise)\n`;\n let _fetch, _Request, _Response, _Headers;\n try {\n // @ts-ignore\n _fetch = fetch;\n // @ts-ignore\n _Request = Request;\n // @ts-ignore\n _Response = Response;\n // @ts-ignore\n _Headers = Headers;\n }\n catch (error) {\n throw new Error(`this environment is missing the following Web Fetch API type: ${error.message}. ${recommendation}`);\n }\n return {\n kind: 'web',\n fetch: _fetch,\n Request: _Request,\n Response: _Response,\n Headers: _Headers,\n FormData: \n // @ts-ignore\n typeof FormData !== 'undefined' ? FormData : (class FormData {\n // @ts-ignore\n constructor() {\n throw new Error(`file uploads aren't supported in this environment yet as 'FormData' is undefined. ${recommendation}`);\n }\n }),\n Blob: typeof Blob !== 'undefined' ? Blob : (class Blob {\n constructor() {\n throw new Error(`file uploads aren't supported in this environment yet as 'Blob' is undefined. ${recommendation}`);\n }\n }),\n File: \n // @ts-ignore\n typeof File !== 'undefined' ? File : (class File {\n // @ts-ignore\n constructor() {\n throw new Error(`file uploads aren't supported in this environment yet as 'File' is undefined. ${recommendation}`);\n }\n }),\n ReadableStream: \n // @ts-ignore\n typeof ReadableStream !== 'undefined' ? ReadableStream : (class ReadableStream {\n // @ts-ignore\n constructor() {\n throw new Error(`streaming isn't supported in this environment yet as 'ReadableStream' is undefined. ${recommendation}`);\n }\n }),\n getMultipartRequestOptions: async (\n // @ts-ignore\n form, opts) => ({\n ...opts,\n body: new MultipartBody(form),\n }),\n getDefaultAgent: (url) => undefined,\n fileFromPath: () => {\n throw new Error('The `fileFromPath` function is only supported in Node. See the README for more details: https://www.github.com/openai/openai-node#file-uploads');\n },\n isFsReadStream: (value) => false,\n };\n}\n//# sourceMappingURL=web-runtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"./core.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.request_id = headers?.['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}\n//# sourceMappingURL=error.mjs.map","import { OpenAIError } from \"../../error.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 this.buffer = [];\n this.trailingCR = false;\n }\n decode(chunk) {\n let text = this.decodeText(chunk);\n if (this.trailingCR) {\n text = '\\r' + text;\n this.trailingCR = false;\n }\n if (text.endsWith('\\r')) {\n this.trailingCR = true;\n text = text.slice(0, -1);\n }\n if (!text) {\n return [];\n }\n const trailingNewline = LineDecoder.NEWLINE_CHARS.has(text[text.length - 1] || '');\n let lines = text.split(LineDecoder.NEWLINE_REGEXP);\n // if there is a trailing new line then the last entry will be an empty\n // string which we don't care about\n if (trailingNewline) {\n lines.pop();\n }\n if (lines.length === 1 && !trailingNewline) {\n this.buffer.push(lines[0]);\n return [];\n }\n if (this.buffer.length > 0) {\n lines = [this.buffer.join('') + lines[0], ...lines.slice(1)];\n this.buffer = [];\n }\n if (!trailingNewline) {\n this.buffer = [lines.pop() || ''];\n }\n return lines;\n }\n decodeText(bytes) {\n if (bytes == null)\n return '';\n if (typeof bytes === 'string')\n return bytes;\n // Node:\n if (typeof Buffer !== 'undefined') {\n if (bytes instanceof Buffer) {\n return bytes.toString();\n }\n if (bytes instanceof Uint8Array) {\n return Buffer.from(bytes).toString();\n }\n throw new OpenAIError(`Unexpected: received non-Uint8Array (${bytes.constructor.name}) stream chunk in an environment with a global \"Buffer\" defined, which this library assumes to be Node. Please report this error.`);\n }\n // Browser\n if (typeof TextDecoder !== 'undefined') {\n if (bytes instanceof Uint8Array || bytes instanceof ArrayBuffer) {\n this.textDecoder ?? (this.textDecoder = new TextDecoder('utf8'));\n return this.textDecoder.decode(bytes);\n }\n throw new OpenAIError(`Unexpected: received non-Uint8Array/ArrayBuffer (${bytes.constructor.name}) in a web platform. Please report this error.`);\n }\n throw new OpenAIError(`Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.`);\n }\n flush() {\n if (!this.buffer.length && !this.trailingCR) {\n return [];\n }\n const lines = [this.buffer.join('')];\n this.buffer = [];\n this.trailingCR = false;\n return lines;\n }\n}\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n//# sourceMappingURL=line.mjs.map","/**\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//# sourceMappingURL=stream-utils.mjs.map","import { ReadableStream } from \"./_shims/index.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { LineDecoder } from \"./internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"./internal/stream-utils.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller) {\n this.iterator = iterator;\n this.controller = controller;\n }\n static fromSSEResponse(response, controller) {\n let consumed = false;\n async function* iterator() {\n if (consumed) {\n throw new Error('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) {\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 if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, undefined);\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 (e instanceof Error && e.name === 'AbortError')\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);\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) {\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 Error('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 (e instanceof Error && e.name === 'AbortError')\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);\n }\n [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),\n new Stream(() => teeIterator(right), this.controller),\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 const encoder = new TextEncoder();\n return new ReadableStream({\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 = encoder.encode(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 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' ? new TextEncoder().encode(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}\nfunction 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 - 2; 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}\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}\n/** This is an internal helper function that's just used for testing */\nexport function _decodeChunks(chunks) {\n const decoder = new LineDecoder();\n const lines = [];\n for (const chunk of chunks) {\n lines.push(...decoder.decode(chunk));\n }\n return lines;\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","import { FormData, File, getMultipartRequestOptions, isFsReadStream, } from \"./_shims/index.mjs\";\nexport { fileFromPath } from \"./_shims/index.mjs\";\nexport const isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\nexport const isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\n/**\n * The BlobLike type omits arrayBuffer() because @types/node-fetch@^2.6.4 lacks it; but this check\n * adds the arrayBuffer() method type because it is available and used at runtime\n */\nexport const 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';\nexport const isUploadable = (value) => {\n return isFileLike(value) || isResponseLike(value) || isFsReadStream(value);\n};\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 // 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 return value;\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop() ?? 'unknown_file');\n // we need to convert the `Blob` into an array buffer because the `Blob` class\n // that `node-fetch` defines is incompatible with the web standard which results\n // in `new File` interpreting it as a string instead of binary data.\n const data = isBlobLike(blob) ? [(await blob.arrayBuffer())] : [blob];\n return new File(data, name, options);\n }\n const bits = await getBytes(value);\n name || (name = getName(value) ?? 'unknown_file');\n if (!options?.type) {\n const type = bits[0]?.type;\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return new File(bits, 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(await value.arrayBuffer());\n }\n else if (isAsyncIterableIterator(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(chunk); // TODO, consider validating?\n }\n }\n else {\n throw new Error(`Unexpected data type: ${typeof value}; constructor: ${value?.constructor\n ?.name}; props: ${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n const props = Object.getOwnPropertyNames(value);\n return `[${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\nfunction getName(value) {\n return (getStringFromMaybeBuffer(value.name) ||\n getStringFromMaybeBuffer(value.filename) ||\n // For fs.ReadStream\n getStringFromMaybeBuffer(value.path)?.split(/[\\\\/]/).pop());\n}\nconst getStringFromMaybeBuffer = (x) => {\n if (typeof x === 'string')\n return x;\n if (typeof Buffer !== 'undefined' && x instanceof Buffer)\n return String(x);\n return undefined;\n};\nconst isAsyncIterableIterator = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\nexport const isMultipartBody = (body) => body && typeof body === 'object' && body.body && body[Symbol.toStringTag] === 'MultipartBody';\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) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n const form = await createForm(opts.body);\n return getMultipartRequestOptions(form, opts);\n};\nexport const multipartFormRequestOptions = async (opts) => {\n const form = await createForm(opts.body);\n return getMultipartRequestOptions(form, opts);\n};\nexport const createForm = async (body) => {\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\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 (isUploadable(value)) {\n const file = await toFile(value);\n form.append(key, file);\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","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _AbstractPage_client;\nimport { VERSION } from \"./version.mjs\";\nimport { Stream } from \"./streaming.mjs\";\nimport { OpenAIError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, } from \"./error.mjs\";\nimport { kind as shimsKind, getDefaultAgent, fetch, } from \"./_shims/index.mjs\";\nimport { isBlobLike, isMultipartBody } from \"./uploads.mjs\";\nexport { maybeMultipartFormRequestOptions, multipartFormRequestOptions, createForm, } from \"./uploads.mjs\";\nasync function defaultParseResponse(props) {\n const { response } = props;\n if (props.options.stream) {\n 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);\n }\n return Stream.fromSSEResponse(response, props.controller);\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 isJSON = contentType?.includes('application/json') || contentType?.includes('application/vnd.api+json');\n if (isJSON) {\n const json = await response.json();\n debug('response', response.status, response.url, response.headers, json);\n return _addRequestID(json, response);\n }\n const text = await response.text();\n debug('response', response.status, response.url, response.headers, text);\n // TODO handle blob, arraybuffer, other content types, etc.\n return text;\n}\nfunction _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/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(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 }\n _thenUnwrap(transform) {\n return new APIPromise(this.responsePromise, async (props) => _addRequestID(transform(await this.parseResponse(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\"` if you can,\n * or add one of these imports before your first `import … from 'openai'`:\n * - `import 'openai/shims/node'` (if you're running on Node)\n * - `import 'openai/shims/web'` (otherwise)\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 *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` if you can,\n * or add one of these imports before your first `import … from 'openai'`:\n * - `import 'openai/shims/node'` (if you're running on Node)\n * - `import 'openai/shims/web'` (otherwise)\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(this.parseResponse);\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}\nexport class APIClient {\n constructor({ baseURL, maxRetries = 2, timeout = 600000, // 10 minutes\n httpAgent, fetch: overriddenFetch, }) {\n this.baseURL = baseURL;\n this.maxRetries = validatePositiveInteger('maxRetries', maxRetries);\n this.timeout = validatePositiveInteger('timeout', timeout);\n this.httpAgent = httpAgent;\n this.fetch = overriddenFetch ?? fetch;\n }\n authHeaders(opts) {\n return {};\n }\n /**\n * Override this to add your own default headers, for example:\n *\n * {\n * ...super.defaultHeaders(),\n * Authorization: 'Bearer 123',\n * }\n */\n defaultHeaders(opts) {\n return {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'User-Agent': this.getUserAgent(),\n ...getPlatformHeaders(),\n ...this.authHeaders(opts),\n };\n }\n /**\n * Override this to add your own headers validation:\n */\n validateHeaders(headers, customHeaders) { }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\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(async (opts) => {\n const body = opts && isBlobLike(opts?.body) ? new DataView(await opts.body.arrayBuffer())\n : opts?.body instanceof DataView ? opts.body\n : opts?.body instanceof ArrayBuffer ? new DataView(opts.body)\n : opts && ArrayBuffer.isView(opts?.body) ? new DataView(opts.body.buffer)\n : opts?.body;\n return { method, path, ...opts, body };\n }));\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n calculateContentLength(body) {\n if (typeof body === 'string') {\n if (typeof Buffer !== 'undefined') {\n return Buffer.byteLength(body, 'utf8').toString();\n }\n if (typeof TextEncoder !== 'undefined') {\n const encoder = new TextEncoder();\n const encoded = encoder.encode(body);\n return encoded.length.toString();\n }\n }\n else if (ArrayBuffer.isView(body)) {\n return body.byteLength.toString();\n }\n return null;\n }\n buildRequest(options, { retryCount = 0 } = {}) {\n const { method, path, query, headers: headers = {} } = options;\n const body = ArrayBuffer.isView(options.body) || (options.__binaryRequest && typeof options.body === 'string') ?\n options.body\n : isMultipartBody(options.body) ? options.body.body\n : options.body ? JSON.stringify(options.body, null, 2)\n : null;\n const contentLength = this.calculateContentLength(body);\n const url = this.buildURL(path, query);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n const timeout = options.timeout ?? this.timeout;\n const httpAgent = options.httpAgent ?? this.httpAgent ?? getDefaultAgent(url);\n const minAgentTimeout = timeout + 1000;\n if (typeof httpAgent?.options?.timeout === 'number' &&\n minAgentTimeout > (httpAgent.options.timeout ?? 0)) {\n // Allow any given request to bump our agent active socket timeout.\n // This may seem strange, but leaking active sockets should be rare and not particularly problematic,\n // and without mutating agent we would need to create more of them.\n // This tradeoff optimizes for performance.\n httpAgent.options.timeout = minAgentTimeout;\n }\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n headers[this.idempotencyHeader] = options.idempotencyKey;\n }\n const reqHeaders = this.buildHeaders({ options, headers, contentLength, retryCount });\n const req = {\n method,\n ...(body && { body: body }),\n headers: reqHeaders,\n ...(httpAgent && { agent: httpAgent }),\n // @ts-ignore node-fetch uses a custom AbortSignal type that is\n // not compatible with standard web types\n signal: options.signal ?? null,\n };\n return { req, url, timeout };\n }\n buildHeaders({ options, headers, contentLength, retryCount, }) {\n const reqHeaders = {};\n if (contentLength) {\n reqHeaders['content-length'] = contentLength;\n }\n const defaultHeaders = this.defaultHeaders(options);\n applyHeadersMut(reqHeaders, defaultHeaders);\n applyHeadersMut(reqHeaders, headers);\n // let builtin fetch set the Content-Type for multipart bodies\n if (isMultipartBody(options.body) && shimsKind !== 'node') {\n delete reqHeaders['content-type'];\n }\n // Don't set the retry count header if it was already set or removed through default headers or by the\n // caller. We check `defaultHeaders` and `headers`, which can contain nulls, instead of `reqHeaders` to\n // account for the removal case.\n if (getHeader(defaultHeaders, 'x-stainless-retry-count') === undefined &&\n getHeader(headers, 'x-stainless-retry-count') === undefined) {\n reqHeaders['x-stainless-retry-count'] = String(retryCount);\n }\n this.validateHeaders(reqHeaders, headers);\n return reqHeaders;\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) { }\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 parseHeaders(headers) {\n return (!headers ? {}\n : Symbol.iterator in headers ?\n Object.fromEntries(Array.from(headers).map((header) => [...header]))\n : { ...headers });\n }\n makeStatusError(status, error, message, headers) {\n return APIError.generate(status, error, message, headers);\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this.makeRequest(options, remainingRetries));\n }\n async makeRequest(optionsInput, retriesRemaining) {\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 } = this.buildRequest(options, { retryCount: maxRetries - retriesRemaining });\n await this.prepareRequest(req, { url, options });\n debug('request', url, options, req.headers);\n if (options.signal?.aborted) {\n throw new APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n if (response instanceof Error) {\n if (options.signal?.aborted) {\n throw new APIUserAbortError();\n }\n if (retriesRemaining) {\n return this.retryRequest(options, retriesRemaining);\n }\n if (response.name === 'AbortError') {\n throw new APIConnectionTimeoutError();\n }\n throw new APIConnectionError({ cause: response });\n }\n const responseHeaders = createResponseHeaders(response.headers);\n if (!response.ok) {\n if (retriesRemaining && this.shouldRetry(response)) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n debug(`response (error; ${retryMessage})`, response.status, url, responseHeaders);\n return this.retryRequest(options, retriesRemaining, responseHeaders);\n }\n const errText = await response.text().catch((e) => castToError(e).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n const retryMessage = retriesRemaining ? `(error; no more retries left)` : `(error; not retryable)`;\n debug(`response (error; ${retryMessage})`, response.status, url, responseHeaders, errMessage);\n const err = this.makeStatusError(response.status, errJSON, errMessage, responseHeaders);\n throw err;\n }\n return { response, options, controller };\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null);\n return new PagePromise(this, request, Page);\n }\n buildURL(path, query) {\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(this.baseURL + (this.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 stringifyQuery(query) {\n return Object.entries(query)\n .filter(([_, value]) => typeof value !== 'undefined')\n .map(([key, value]) => {\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n }\n if (value === null) {\n return `${encodeURIComponent(key)}=`;\n }\n throw new OpenAIError(`Cannot stringify type ${typeof value}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`);\n })\n .join('&');\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const fetchOptions = {\n signal: controller.signal,\n ...options,\n };\n if (fetchOptions.method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = fetchOptions.method.toUpperCase();\n }\n return (\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n this.fetch.call(undefined, url, fetchOptions).finally(() => {\n clearTimeout(timeout);\n }));\n }\n 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, 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?.['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?.['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);\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 getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n}\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.nextPageInfo() != null;\n }\n async getNextPage() {\n const nextInfo = this.nextPageInfo();\n if (!nextInfo) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n const nextOptions = { ...this.options };\n if ('params' in nextInfo && typeof nextOptions.query === 'object') {\n nextOptions.query = { ...nextOptions.query, ...nextInfo.params };\n }\n else if ('url' in nextInfo) {\n const params = [...Object.entries(nextOptions.query || {}), ...nextInfo.url.searchParams.entries()];\n for (const [key, value] of params) {\n nextInfo.url.searchParams.set(key, value);\n }\n nextOptions.query = undefined;\n nextOptions.path = nextInfo.url.toString();\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\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(request, async (props) => new Page(client, props.response, await defaultParseResponse(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}\nexport const createResponseHeaders = (headers) => {\n return new Proxy(Object.fromEntries(\n // @ts-ignore\n headers.entries()), {\n get(target, name) {\n const key = name.toString();\n return target[key.toLowerCase()] || target[key];\n },\n });\n};\n// This is required so that we can determine if a given object matches the RequestOptions\n// type at runtime. While this requires duplication, it is enforced by the TypeScript\n// compiler such that any missing / extraneous keys will cause an error.\nconst requestOptionsKeys = {\n method: true,\n path: true,\n query: true,\n body: true,\n headers: true,\n maxRetries: true,\n stream: true,\n timeout: true,\n httpAgent: true,\n signal: true,\n idempotencyKey: true,\n __binaryRequest: true,\n __binaryResponse: true,\n __streamClass: true,\n};\nexport const isRequestOptions = (obj) => {\n return (typeof obj === 'object' &&\n obj !== null &&\n !isEmptyObj(obj) &&\n Object.keys(obj).every((k) => hasOwn(requestOptionsKeys, k)));\n};\nconst getPlatformProperties = () => {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\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': process.version,\n };\n }\n // Check if Node.js\n if (Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(process.platform),\n 'X-Stainless-Arch': normalizeArch(process.arch),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': process.version,\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;\nconst getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nconst isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\nconst 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 castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\nexport const ensurePresent = (value) => {\n if (value == null)\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n return value;\n};\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 process !== 'undefined') {\n return process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof Deno !== 'undefined') {\n return Deno.env?.get?.(env)?.trim();\n }\n return undefined;\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 === undefined) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value === undefined) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value === undefined) {\n return undefined;\n }\n return coerceBoolean(value);\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}\n/**\n * Copies headers from \"newHeaders\" onto \"targetHeaders\",\n * using lower-case for all properties,\n * ignoring any keys with undefined values,\n * and deleting any keys with null values.\n */\nfunction applyHeadersMut(targetHeaders, newHeaders) {\n for (const k in newHeaders) {\n if (!hasOwn(newHeaders, k))\n continue;\n const lowerKey = k.toLowerCase();\n if (!lowerKey)\n continue;\n const val = newHeaders[k];\n if (val === null) {\n delete targetHeaders[lowerKey];\n }\n else if (val !== undefined) {\n targetHeaders[lowerKey] = val;\n }\n }\n}\nconst SENSITIVE_HEADERS = new Set(['authorization', 'api-key']);\nexport function debug(action, ...args) {\n if (typeof process !== 'undefined' && process?.env?.['DEBUG'] === 'true') {\n const modifiedArgs = args.map((arg) => {\n if (!arg) {\n return arg;\n }\n // Check for sensitive headers in request body 'headers' object\n if (arg['headers']) {\n // clone so we don't mutate\n const modifiedArg = { ...arg, headers: { ...arg['headers'] } };\n for (const header in arg['headers']) {\n if (SENSITIVE_HEADERS.has(header.toLowerCase())) {\n modifiedArg['headers'][header] = 'REDACTED';\n }\n }\n return modifiedArg;\n }\n let modifiedArg = null;\n // Check for sensitive headers in headers object\n for (const header in arg) {\n if (SENSITIVE_HEADERS.has(header.toLowerCase())) {\n // avoid making a copy until we need to\n modifiedArg ?? (modifiedArg = { ...arg });\n modifiedArg[header] = 'REDACTED';\n }\n }\n return modifiedArg ?? arg;\n });\n console.log(`OpenAI:DEBUG:${action}`, ...modifiedArgs);\n }\n}\n/**\n * https://stackoverflow.com/a/2117523\n */\nconst uuid4 = () => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\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};\nexport const isHeadersProtocol = (headers) => {\n return typeof headers?.get === 'function';\n};\nexport const getRequiredHeader = (headers, header) => {\n const foundHeader = getHeader(headers, header);\n if (foundHeader === undefined) {\n throw new Error(`Could not find ${header} header`);\n }\n return foundHeader;\n};\nexport const getHeader = (headers, header) => {\n const lowerCasedHeader = header.toLowerCase();\n if (isHeadersProtocol(headers)) {\n // to deal with the case where the header looks like Stainless-Event-Id\n const intercapsHeader = header[0]?.toUpperCase() +\n header.substring(1).replace(/([^\\w])(\\w)/g, (_m, g1, g2) => g1 + g2.toUpperCase());\n for (const key of [header, lowerCasedHeader, header.toUpperCase(), intercapsHeader]) {\n const value = headers.get(key);\n if (value) {\n return value;\n }\n }\n }\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() === lowerCasedHeader) {\n if (Array.isArray(value)) {\n if (value.length <= 1)\n return value[0];\n console.warn(`Received ${value.length} entries for the ${header} header, using the first entry.`);\n return value[0];\n }\n return value;\n }\n }\n return undefined;\n};\n/**\n * Encodes a string to Base64 format.\n */\nexport const toBase64 = (str) => {\n if (!str)\n return '';\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(str).toString('base64');\n }\n if (typeof btoa !== 'undefined') {\n return btoa(str);\n }\n throw new OpenAIError('Cannot generate b64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\n//# sourceMappingURL=core.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { AbstractPage } from \"./core.mjs\";\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 // @deprecated Please use `nextPageInfo()` instead\n /**\n * This page represents a response that isn't actually paginated at the API level\n * so there will never be any next page params.\n */\n nextPageParams() {\n return null;\n }\n nextPageInfo() {\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 }\n getPaginatedItems() {\n return this.data ?? [];\n }\n // @deprecated Please use `nextPageInfo()` instead\n nextPageParams() {\n const info = this.nextPageInfo();\n if (!info)\n return null;\n if ('params' in info)\n return info.params;\n const params = Object.fromEntries(info.url.searchParams);\n if (!Object.keys(params).length)\n return null;\n return params;\n }\n nextPageInfo() {\n const data = this.getPaginatedItems();\n if (!data.length) {\n return null;\n }\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return { params: { after: id } };\n }\n}\n//# sourceMappingURL=pagination.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","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/chat/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 \"../../resource.mjs\";\nimport * as CompletionsAPI from \"./completions.mjs\";\nimport { Completions, } from \"./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 { APIResource } from \"../../resource.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: { 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 \"../../resource.mjs\";\nimport * as Core from \"../../core.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', Core.multipartFormRequestOptions({ body, ...options }));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../resource.mjs\";\nimport * as Core from \"../../core.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', Core.multipartFormRequestOptions({ body, ...options }));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../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 \"../resource.mjs\";\nimport { isRequestOptions } from \"../core.mjs\";\nimport { CursorPage } from \"../pagination.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(`/batches/${batchId}`, options);\n }\n list(query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list({}, query);\n }\n return this._client.getAPIList('/batches', BatchesPage, { 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(`/batches/${batchId}/cancel`, options);\n }\n}\nexport class BatchesPage extends CursorPage {\n}\nBatches.BatchesPage = BatchesPage;\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../resource.mjs\";\nimport { isRequestOptions } from \"../../core.mjs\";\nimport { CursorPage } from \"../../pagination.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Retrieves an assistant.\n */\n retrieve(assistantId, options) {\n return this._client.get(`/assistants/${assistantId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Modifies an assistant.\n */\n update(assistantId, body, options) {\n return this._client.post(`/assistants/${assistantId}`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n list(query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list({}, query);\n }\n return this._client.getAPIList('/assistants', AssistantsPage, {\n query,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Delete an assistant.\n */\n del(assistantId, options) {\n return this._client.delete(`/assistants/${assistantId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n}\nexport class AssistantsPage extends CursorPage {\n}\nAssistants.AssistantsPage = AssistantsPage;\n//# sourceMappingURL=assistants.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 *\n * @deprecated - please use ParsingToolFunction instead.\n */\nexport class ParsingFunction {\n constructor(input) {\n this.function = input.function;\n this.parse = input.parse;\n this.parameters = input.parameters;\n this.description = input.description;\n this.name = input.name;\n }\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","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isFunctionMessage = (message) => {\n return message?.role === 'function';\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 __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _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 { 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","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\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 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 ...choice,\n message: { ...choice.message, parsed: null, tool_calls: choice.message.tool_calls ?? [] },\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 return {\n ...choice,\n message: {\n ...choice.message,\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? [],\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) => inputTool.function?.name === toolCall.function.name);\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) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => inputTool.function?.name === toolCall.function.name);\n return 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 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","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionCall, _AbstractChatCompletionRunner_getFinalFunctionCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { OpenAIError } from \"../error.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nimport { isAssistantMessage, isFunctionMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.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 ((isFunctionMessage(message) || 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('functionCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.function_call) {\n this._emit('functionCall', message.function_call);\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('functionCall', 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 finalFunctionCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionCall).call(this);\n }\n async finalFunctionCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionCallResult).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_getFinalFunctionCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionCallResult', 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 _runFunctions(client, params, options) {\n const role = 'function';\n const { function_call = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof function_call !== 'string' && function_call?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n const functionsByName = {};\n for (const f of params.functions) {\n functionsByName[f.name || f.function.name] = f;\n }\n const functions = params.functions.map((f) => ({\n name: f.name || f.function.name,\n parameters: f.parameters,\n description: f.description,\n }));\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 function_call,\n functions,\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.function_call)\n return;\n const { name, arguments: args } = message.function_call;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid function_call: ${JSON.stringify(name)}. Available options are: ${functions\n .map((f) => JSON.stringify(f.name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, name, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid function_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, name, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n this._addMessage({\n role,\n name,\n content: error instanceof Error ? error.message : String(error),\n });\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, name, content });\n if (singleFunctionToCall)\n return;\n }\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?.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 const { function_call, ...rest } = message;\n // TODO: support audio here\n const ret = {\n ...rest,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n if (function_call) {\n ret.function_call = function_call;\n }\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionCall = function _AbstractChatCompletionRunner_getFinalFunctionCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.function_call) {\n return message.function_call;\n }\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionCallResult = function _AbstractChatCompletionRunner_getFinalFunctionCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isFunctionMessage(message) && message.content != null) {\n return message.content;\n }\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","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n /** @deprecated - please use `runTools` instead. */\n static runFunctions(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runFunctions' },\n };\n runner._run(() => runner._runFunctions(client, params, opts));\n return runner;\n }\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 __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _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 { OpenAIError, APIUserAbortError, LengthFinishReasonError, ContentFilterFinishReasonError, } from \"../error.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.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) => tool.type === 'function' && tool.function.name === toolCallSnapshot.function.name);\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 /** @deprecated - please use `runTools` instead. */\n static runFunctions(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(null);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runFunctions' },\n };\n runner._run(() => runner._runFunctions(client, params, opts));\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 \"../../../resource.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 { ChatCompletionStreamingRunner, } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingFunction, ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner, } from \"../../../lib/ChatCompletionRunner.mjs\";\nexport class Completions extends APIResource {\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': 'beta.chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runFunctions(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runFunctions(this._client, body, options);\n }\n return ChatCompletionRunner.runFunctions(this._client, body, options);\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}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.mjs\";\nimport * as CompletionsAPI from \"./completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\n(function (Chat) {\n Chat.Completions = CompletionsAPI.Completions;\n})(Chat || (Chat = {}));\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.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 create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: { '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 \"../../../resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\n//# sourceMappingURL=realtime.mjs.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _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;\nimport * as Core from \"../core.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.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 AssistantStream();\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(threadId, runId, runs, params, options) {\n const runner = new AssistantStream();\n runner._run(() => runner._runToolAssistantStream(threadId, runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, threadId, 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(threadId, 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 AssistantStream();\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 AssistantStream();\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 (Core.isObj(accValue) && Core.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 (!Core.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(threadId, runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, threadId, runId, params, options);\n }\n}\n_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.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 }\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 = AssistantStream.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 AssistantStream.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 __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};\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../core.mjs\";\nimport { CursorPage } from \"../../../pagination.mjs\";\nexport class Messages extends APIResource {\n /**\n * Create a message.\n */\n create(threadId, body, options) {\n return this._client.post(`/threads/${threadId}/messages`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Retrieve a message.\n */\n retrieve(threadId, messageId, options) {\n return this._client.get(`/threads/${threadId}/messages/${messageId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Modifies a message.\n */\n update(threadId, messageId, body, options) {\n return this._client.post(`/threads/${threadId}/messages/${messageId}`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n list(threadId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list(threadId, {}, query);\n }\n return this._client.getAPIList(`/threads/${threadId}/messages`, MessagesPage, {\n query,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Deletes a message.\n */\n del(threadId, messageId, options) {\n return this._client.delete(`/threads/${threadId}/messages/${messageId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n}\nexport class MessagesPage extends CursorPage {\n}\nMessages.MessagesPage = MessagesPage;\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../../core.mjs\";\nimport { CursorPage } from \"../../../../pagination.mjs\";\nexport class Steps extends APIResource {\n retrieve(threadId, runId, stepId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.retrieve(threadId, runId, stepId, {}, query);\n }\n return this._client.get(`/threads/${threadId}/runs/${runId}/steps/${stepId}`, {\n query,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n list(threadId, runId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list(threadId, runId, {}, query);\n }\n return this._client.getAPIList(`/threads/${threadId}/runs/${runId}/steps`, RunStepsPage, {\n query,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n}\nexport class RunStepsPage extends CursorPage {\n}\nSteps.RunStepsPage = RunStepsPage;\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../../core.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../core.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { RunStepsPage, Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../pagination.mjs\";\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(`/threads/${threadId}/runs`, {\n query: { include },\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n */\n retrieve(threadId, runId, options) {\n return this._client.get(`/threads/${threadId}/runs/${runId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Modifies a run.\n */\n update(threadId, runId, body, options) {\n return this._client.post(`/threads/${threadId}/runs/${runId}`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n list(threadId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list(threadId, {}, query);\n }\n return this._client.getAPIList(`/threads/${threadId}/runs`, RunsPage, {\n query,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n */\n cancel(threadId, runId, options) {\n return this._client.post(`/threads/${threadId}/runs/${runId}/cancel`, {\n ...options,\n headers: { '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(threadId, run.id, 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(threadId, runId, options) {\n const headers = { ...options?.headers, 'X-Stainless-Poll-Helper': 'true' };\n if (options?.pollIntervalMs) {\n headers['X-Stainless-Custom-Poll-Interval'] = options.pollIntervalMs.toString();\n }\n while (true) {\n const { data: run, response } = await this.retrieve(threadId, runId, {\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(threadId, runId, body, options) {\n return this._client.post(`/threads/${threadId}/runs/${runId}/submit_tool_outputs`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n stream: body.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(threadId, runId, body, options) {\n const run = await this.submitToolOutputs(threadId, runId, body, options);\n return await this.poll(threadId, run.id, 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(threadId, runId, body, options) {\n return AssistantStream.createToolAssistantStream(threadId, runId, this._client.beta.threads.runs, body, options);\n }\n}\nexport class RunsPage extends CursorPage {\n}\nRuns.RunsPage = RunsPage;\nRuns.Steps = Steps;\nRuns.RunStepsPage = RunStepsPage;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../core.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, MessagesPage, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, RunsPage, } from \"./runs/runs.mjs\";\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 create(body = {}, options) {\n if (isRequestOptions(body)) {\n return this.create({}, body);\n }\n return this._client.post('/threads', {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Retrieves a thread.\n */\n retrieve(threadId, options) {\n return this._client.get(`/threads/${threadId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Modifies a thread.\n */\n update(threadId, body, options) {\n return this._client.post(`/threads/${threadId}`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Delete a thread.\n */\n del(threadId, options) {\n return this._client.delete(`/threads/${threadId}`, {\n ...options,\n headers: { '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: { '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.thread_id, run.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.RunsPage = RunsPage;\nThreads.Messages = Messages;\nThreads.MessagesPage = MessagesPage;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.mjs\";\nimport { sleep, isRequestOptions } from \"../../../core.mjs\";\nimport { CursorPage } from \"../../../pagination.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(`/vector_stores/${vectorStoreId}/files`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(vectorStoreId, fileId, options) {\n return this._client.get(`/vector_stores/${vectorStoreId}/files/${fileId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n list(vectorStoreId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list(vectorStoreId, {}, query);\n }\n return this._client.getAPIList(`/vector_stores/${vectorStoreId}/files`, VectorStoreFilesPage, {\n query,\n ...options,\n headers: { '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 del(vectorStoreId, fileId, options) {\n return this._client.delete(`/vector_stores/${vectorStoreId}/files/${fileId}`, {\n ...options,\n headers: { '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 = { ...options?.headers, 'X-Stainless-Poll-Helper': 'true' };\n if (options?.pollIntervalMs) {\n headers['X-Stainless-Custom-Poll-Interval'] = options.pollIntervalMs.toString();\n }\n while (true) {\n const fileResponse = await this.retrieve(vectorStoreId, fileId, {\n ...options,\n headers,\n }).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}\nexport class VectorStoreFilesPage extends CursorPage {\n}\nFiles.VectorStoreFilesPage = VectorStoreFilesPage;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../core.mjs\";\nimport { sleep } from \"../../../core.mjs\";\nimport { allSettledWithThrow } from \"../../../lib/Util.mjs\";\nimport { VectorStoreFilesPage } from \"./files.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(`/vector_stores/${vectorStoreId}/file_batches`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(vectorStoreId, batchId, options) {\n return this._client.get(`/vector_stores/${vectorStoreId}/file_batches/${batchId}`, {\n ...options,\n headers: { '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(vectorStoreId, batchId, options) {\n return this._client.post(`/vector_stores/${vectorStoreId}/file_batches/${batchId}/cancel`, {\n ...options,\n headers: { '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 listFiles(vectorStoreId, batchId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.listFiles(vectorStoreId, batchId, {}, query);\n }\n return this._client.getAPIList(`/vector_stores/${vectorStoreId}/file_batches/${batchId}/files`, VectorStoreFilesPage, { query, ...options, headers: { '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 = { ...options?.headers, 'X-Stainless-Poll-Helper': 'true' };\n if (options?.pollIntervalMs) {\n headers['X-Stainless-Custom-Poll-Interval'] = options.pollIntervalMs.toString();\n }\n while (true) {\n const { data: batch, response } = await this.retrieve(vectorStoreId, batchId, {\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}\nexport { VectorStoreFilesPage };\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 \"../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../core.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, VectorStoreFilesPage, } from \"./files.mjs\";\nimport { CursorPage } from \"../../../pagination.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: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreId, options) {\n return this._client.get(`/vector_stores/${vectorStoreId}`, {\n ...options,\n headers: { '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(`/vector_stores/${vectorStoreId}`, {\n body,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n list(query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list({}, query);\n }\n return this._client.getAPIList('/vector_stores', VectorStoresPage, {\n query,\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n /**\n * Delete a vector store.\n */\n del(vectorStoreId, options) {\n return this._client.delete(`/vector_stores/${vectorStoreId}`, {\n ...options,\n headers: { 'OpenAI-Beta': 'assistants=v2', ...options?.headers },\n });\n }\n}\nexport class VectorStoresPage extends CursorPage {\n}\nVectorStores.VectorStoresPage = VectorStoresPage;\nVectorStores.Files = Files;\nVectorStores.VectorStoreFilesPage = VectorStoreFilesPage;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport * as ChatAPI from \"./chat/chat.mjs\";\nimport { Assistants, AssistantsPage, } 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\";\nimport * as VectorStoresAPI from \"./vector-stores/vector-stores.mjs\";\nimport { VectorStores, VectorStoresPage, } from \"./vector-stores/vector-stores.mjs\";\nimport { Chat } from \"./chat/chat.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.vectorStores = new VectorStoresAPI.VectorStores(this._client);\n this.chat = new ChatAPI.Chat(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.VectorStores = VectorStores;\nBeta.VectorStoresPage = VectorStoresPage;\nBeta.Assistants = Assistants;\nBeta.AssistantsPage = AssistantsPage;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../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 \"../resource.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n */\n create(body, options) {\n return this._client.post('/embeddings', { body, ...options });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../resource.mjs\";\nimport { isRequestOptions } from \"../core.mjs\";\nimport { sleep } from \"../core.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport * as Core from \"../core.mjs\";\nimport { CursorPage } from \"../pagination.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 100 GB.\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', Core.multipartFormRequestOptions({ body, ...options }));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileId, options) {\n return this._client.get(`/files/${fileId}`, options);\n }\n list(query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list({}, query);\n }\n return this._client.getAPIList('/files', FileObjectsPage, { query, ...options });\n }\n /**\n * Delete a file.\n */\n del(fileId, options) {\n return this._client.delete(`/files/${fileId}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileId, options) {\n return this._client.get(`/files/${fileId}/content`, {\n ...options,\n headers: { Accept: 'application/binary', ...options?.headers },\n __binaryResponse: true,\n });\n }\n /**\n * Returns the contents of the specified file.\n *\n * @deprecated The `.content()` method should be used instead\n */\n retrieveContent(fileId, options) {\n return this._client.get(`/files/${fileId}/content`, options);\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}\nexport class FileObjectsPage extends CursorPage {\n}\nFiles.FileObjectsPage = FileObjectsPage;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../core.mjs\";\nimport { CursorPage } from \"../../../pagination.mjs\";\nexport class Checkpoints extends APIResource {\n list(fineTuningJobId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list(fineTuningJobId, {}, query);\n }\n return this._client.getAPIList(`/fine_tuning/jobs/${fineTuningJobId}/checkpoints`, FineTuningJobCheckpointsPage, { query, ...options });\n }\n}\nexport class FineTuningJobCheckpointsPage extends CursorPage {\n}\nCheckpoints.FineTuningJobCheckpointsPage = FineTuningJobCheckpointsPage;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../resource.mjs\";\nimport { isRequestOptions } from \"../../../core.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, FineTuningJobCheckpointsPage, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../pagination.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/fine-tuning)\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/fine-tuning)\n */\n retrieve(fineTuningJobId, options) {\n return this._client.get(`/fine_tuning/jobs/${fineTuningJobId}`, options);\n }\n list(query = {}, options) {\n if (isRequestOptions(query)) {\n return this.list({}, query);\n }\n return this._client.getAPIList('/fine_tuning/jobs', FineTuningJobsPage, { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n */\n cancel(fineTuningJobId, options) {\n return this._client.post(`/fine_tuning/jobs/${fineTuningJobId}/cancel`, options);\n }\n listEvents(fineTuningJobId, query = {}, options) {\n if (isRequestOptions(query)) {\n return this.listEvents(fineTuningJobId, {}, query);\n }\n return this._client.getAPIList(`/fine_tuning/jobs/${fineTuningJobId}/events`, FineTuningJobEventsPage, {\n query,\n ...options,\n });\n }\n}\nexport class FineTuningJobsPage extends CursorPage {\n}\nexport class FineTuningJobEventsPage extends CursorPage {\n}\nJobs.FineTuningJobsPage = FineTuningJobsPage;\nJobs.FineTuningJobEventsPage = FineTuningJobEventsPage;\nJobs.Checkpoints = Checkpoints;\nJobs.FineTuningJobCheckpointsPage = FineTuningJobCheckpointsPage;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../resource.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { FineTuningJobEventsPage, FineTuningJobsPage, Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.jobs = new JobsAPI.Jobs(this._client);\n }\n}\nFineTuning.Jobs = Jobs;\nFineTuning.FineTuningJobsPage = FineTuningJobsPage;\nFineTuning.FineTuningJobEventsPage = FineTuningJobEventsPage;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../resource.mjs\";\nimport * as Core from \"../core.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image.\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', Core.multipartFormRequestOptions({ body, ...options }));\n }\n /**\n * Creates an edited or extended image given an original image and a prompt.\n */\n edit(body, options) {\n return this._client.post('/images/edits', Core.multipartFormRequestOptions({ body, ...options }));\n }\n /**\n * Creates an image given a prompt.\n */\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../resource.mjs\";\nimport { Page } from \"../pagination.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(`/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', ModelsPage, 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 del(model, options) {\n return this._client.delete(`/models/${model}`, options);\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class ModelsPage extends Page {\n}\nModels.ModelsPage = ModelsPage;\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../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 \"../../resource.mjs\";\nimport * as Core from \"../../core.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(`/uploads/${uploadId}/parts`, Core.multipartFormRequestOptions({ body, ...options }));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.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`s, the correct `mime_type` must be specified. Please refer\n * to documentation for the supported MIME types for your use case:\n *\n * - [Assistants](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(`/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(`/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.\nvar _a;\nimport * as qs from \"./internal/qs/index.mjs\";\nimport * as Core from \"./core.mjs\";\nimport * as Errors from \"./error.mjs\";\nimport * as Pagination from \"./pagination.mjs\";\nimport * as Uploads from \"./uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { Batches, BatchesPage, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { FileObjectsPage, Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models, ModelsPage } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI extends Core.APIClient {\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} [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 {number} [opts.httpAgent] - An HTTP agent used to manage HTTP(s) connections.\n * @param {Core.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 {Core.Headers} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Core.DefaultQuery} 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 = Core.readEnv('OPENAI_BASE_URL'), apiKey = Core.readEnv('OPENAI_API_KEY'), organization = Core.readEnv('OPENAI_ORG_ID') ?? null, project = Core.readEnv('OPENAI_PROJECT_ID') ?? null, ...opts } = {}) {\n if (apiKey === undefined) {\n throw new Errors.OpenAIError(\"The OPENAI_API_KEY environment variable is missing or empty; either provide it, or instantiate the OpenAI client with an apiKey option, like new OpenAI({ apiKey: 'My API Key' }).\");\n }\n const options = {\n apiKey,\n organization,\n project,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && Core.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 super({\n baseURL: options.baseURL,\n timeout: options.timeout ?? 600000 /* 10 minutes */,\n httpAgent: options.httpAgent,\n maxRetries: options.maxRetries,\n fetch: options.fetch,\n });\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.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this._options = options;\n this.apiKey = apiKey;\n this.organization = organization;\n this.project = project;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n defaultHeaders(opts) {\n return {\n ...super.defaultHeaders(opts),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n ...this._options.defaultHeaders,\n };\n }\n authHeaders(opts) {\n return { Authorization: `Bearer ${this.apiKey}` };\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n}\n_a = OpenAI;\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.toFile = Uploads.toFile;\nOpenAI.fileFromPath = Uploads.fileFromPath;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.FileObjectsPage = FileObjectsPage;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.ModelsPage = ModelsPage;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.BatchesPage = BatchesPage;\nOpenAI.Uploads = UploadsAPIUploads;\n/** API Client for interfacing with the Azure OpenAI API. */\nexport class AzureOpenAI extends OpenAI {\n /**\n * API Client for interfacing with the Azure OpenAI API.\n *\n * @param {string | undefined} [opts.apiVersion=process.env['OPENAI_API_VERSION'] ?? undefined]\n * @param {string | undefined} [opts.endpoint=process.env['AZURE_OPENAI_ENDPOINT'] ?? undefined] - Your Azure endpoint, including the resource, e.g. `https://example-resource.azure.openai.com/`\n * @param {string | undefined} [opts.apiKey=process.env['AZURE_OPENAI_API_KEY'] ?? undefined]\n * @param {string | undefined} opts.deployment - A model deployment, if given, sets the base client URL to include `/deployments/{deployment}`.\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL']] - Sets the base URL for the API, e.g. `https://example-resource.azure.openai.com/openai/`.\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 {number} [opts.httpAgent] - An HTTP agent used to manage HTTP(s) connections.\n * @param {Core.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 {Core.Headers} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Core.DefaultQuery} 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 = Core.readEnv('OPENAI_BASE_URL'), apiKey = Core.readEnv('AZURE_OPENAI_API_KEY'), apiVersion = Core.readEnv('OPENAI_API_VERSION'), endpoint, deployment, azureADTokenProvider, dangerouslyAllowBrowser, ...opts } = {}) {\n if (!apiVersion) {\n throw new Errors.OpenAIError(\"The OPENAI_API_VERSION environment variable is missing or empty; either provide it, or instantiate the AzureOpenAI client with an apiVersion option, like new AzureOpenAI({ apiVersion: 'My API Version' }).\");\n }\n if (typeof azureADTokenProvider === 'function') {\n dangerouslyAllowBrowser = true;\n }\n if (!azureADTokenProvider && !apiKey) {\n throw new Errors.OpenAIError('Missing credentials. Please pass one of `apiKey` and `azureADTokenProvider`, or set the `AZURE_OPENAI_API_KEY` environment variable.');\n }\n if (azureADTokenProvider && apiKey) {\n throw new Errors.OpenAIError('The `apiKey` and `azureADTokenProvider` arguments are mutually exclusive; only one can be passed at a time.');\n }\n // define a sentinel value to avoid any typing issues\n apiKey ?? (apiKey = API_KEY_SENTINEL);\n opts.defaultQuery = { ...opts.defaultQuery, 'api-version': apiVersion };\n if (!baseURL) {\n if (!endpoint) {\n endpoint = process.env['AZURE_OPENAI_ENDPOINT'];\n }\n if (!endpoint) {\n throw new Errors.OpenAIError('Must provide one of the `baseURL` or `endpoint` arguments, or the `AZURE_OPENAI_ENDPOINT` environment variable');\n }\n baseURL = `${endpoint}/openai`;\n }\n else {\n if (endpoint) {\n throw new Errors.OpenAIError('baseURL and endpoint are mutually exclusive');\n }\n }\n super({\n apiKey,\n baseURL,\n ...opts,\n ...(dangerouslyAllowBrowser !== undefined ? { dangerouslyAllowBrowser } : {}),\n });\n this.apiVersion = '';\n this._azureADTokenProvider = azureADTokenProvider;\n this.apiVersion = apiVersion;\n this.deploymentName = deployment;\n }\n buildRequest(options, props = {}) {\n if (_deployments_endpoints.has(options.path) && options.method === 'post' && options.body !== undefined) {\n if (!Core.isObj(options.body)) {\n throw new Error('Expected request body to be an object');\n }\n const model = this.deploymentName || options.body['model'];\n if (model !== undefined && !this.baseURL.includes('/deployments')) {\n options.path = `/deployments/${model}${options.path}`;\n }\n }\n return super.buildRequest(options, props);\n }\n async _getAzureADToken() {\n if (typeof this._azureADTokenProvider === 'function') {\n const token = await this._azureADTokenProvider();\n if (!token || typeof token !== 'string') {\n throw new Errors.OpenAIError(`Expected 'azureADTokenProvider' argument to return a string but it returned ${token}`);\n }\n return token;\n }\n return undefined;\n }\n authHeaders(opts) {\n return {};\n }\n async prepareOptions(opts) {\n /**\n * The user should provide a bearer token provider if they want\n * to use Azure AD authentication. The user shouldn't set the\n * Authorization header manually because the header is overwritten\n * with the Azure AD token if a bearer token provider is provided.\n */\n if (opts.headers?.['api-key']) {\n return super.prepareOptions(opts);\n }\n const token = await this._getAzureADToken();\n opts.headers ?? (opts.headers = {});\n if (token) {\n opts.headers['Authorization'] = `Bearer ${token}`;\n }\n else if (this.apiKey !== API_KEY_SENTINEL) {\n opts.headers['api-key'] = this.apiKey;\n }\n else {\n throw new Errors.OpenAIError('Unable to handle auth');\n }\n return super.prepareOptions(opts);\n }\n}\nconst _deployments_endpoints = new Set([\n '/completions',\n '/chat/completions',\n '/embeddings',\n '/audio/transcriptions',\n '/audio/translations',\n '/audio/speech',\n '/images/generations',\n]);\nconst API_KEY_SENTINEL = '';\nexport { toFile, fileFromPath } from \"./uploads.mjs\";\nexport { OpenAIError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, NotFoundError, ConflictError, RateLimitError, BadRequestError, AuthenticationError, InternalServerError, PermissionDeniedError, UnprocessableEntityError, } from \"./error.mjs\";\nexport default OpenAI;\n//# sourceMappingURL=index.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","SuppressedError","default_format","formatters","RFC1738","v","String","replace","RFC3986","is_array","Array","isArray","hex_table","array","i","push","toString","toUpperCase","limit","maybe_map","val","fn","mapped","length","has","Object","prototype","hasOwnProperty","array_prefix_generators","brackets","prefix","comma","indices","key","repeat","push_to_array","arr","value_or_array","to_ISO","Date","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","Symbol","call","escape","$0","parseInt","slice","out","j","segment","c","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","obj","tmp_sc","find_flag","undefined","get","pos","RangeError","constructor","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","set","valueSideChannel","WeakMap","stringify","opts","options","TypeError","normalize_stringify_options","joined","VERSION","kind","fetch","FormData","File","ReadableStream","getMultipartRequestOptions","getDefaultAgent","fileFromPath","isFsReadStream","auto","MultipartBody","body","this","toStringTag","shims.kind","shims","Error","shims.setShims","manuallyImported","recommendation","_fetch","_Request","_Response","_Headers","Request","Response","Headers","error","message","Blob","async","form","url","auto.getRuntime","OpenAIError","APIError","status","headers","super","makeMessage","request_id","data","code","param","type","msg","JSON","generate","errorResponse","APIConnectionError","cause","castToError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","LineDecoder","buffer","trailingCR","decode","chunk","text","decodeText","endsWith","trailingNewline","NEWLINE_CHARS","lines","split","NEWLINE_REGEXP","pop","bytes","Buffer","Uint8Array","from","name","TextDecoder","ArrayBuffer","textDecoder","flush","ReadableStreamToAsyncIterable","stream","asyncIterator","reader","getReader","read","releaseLock","cancelPromise","cancel","Set","Stream","iterator","controller","fromSSEResponse","response","consumed","sse","abort","sseDecoder","SSEDecoder","lineDecoder","iter","sseChunk","binaryChunk","TextEncoder","patternIndex","newData","findDoubleNewlineIndex","iterSSEChunks","line","_iterSSEMessages","startsWith","event","parse","console","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","start","pull","ctrl","close","enqueue","err","return","chunks","substring","fieldname","_","index","indexOf","partition","isResponseLike","blob","isFileLike","lastModified","isBlobLike","size","arrayBuffer","toFile","URL","pathname","bits","parts","isView","isAsyncIterableIterator","props","getOwnPropertyNames","map","p","propsForError","getBytes","getStringFromMaybeBuffer","filename","path","getName","x","isMultipartBody","multipartFormRequestOptions","createForm","all","entries","addFormValue","append","isUploadable","file","entry","prop","_AbstractPage_client","__classPrivateFieldSet","receiver","state","f","__classPrivateFieldGet","defaultParseResponse","debug","__streamClass","__binaryResponse","contentType","includes","json","_addRequestID","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","withResponse","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","APIClient","baseURL","maxRetries","timeout","httpAgent","overriddenFetch","validatePositiveInteger","authHeaders","defaultHeaders","Accept","getUserAgent","getPlatformHeaders","validateHeaders","customHeaders","defaultIdempotencyKey","uuid4","methodRequest","post","patch","put","method","request","DataView","getAPIList","Page","requestAPIList","calculateContentLength","byteLength","buildRequest","retryCount","query","__binaryRequest","contentLength","buildURL","minAgentTimeout","idempotencyHeader","idempotencyKey","req","buildHeaders","agent","signal","reqHeaders","applyHeadersMut","shimsKind","getHeader","prepareOptions","prepareRequest","parseHeaders","fromEntries","header","makeStatusError","remainingRetries","makeRequest","optionsInput","retriesRemaining","aborted","AbortController","fetchWithTimeout","retryRequest","responseHeaders","createResponseHeaders","ok","shouldRetry","errText","errJSON","safeJSON","errMessage","PagePromise","isAbsoluteURL","defaultQuery","isEmptyObj","search","stringifyQuery","encodeURIComponent","init","ms","addEventListener","setTimeout","fetchOptions","clearTimeout","shouldRetryHeader","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","Number","isNaN","retryAfterHeader","timeoutSeconds","now","calculateDefaultRetryTimeoutMillis","sleep","numRetries","Math","min","pow","random","AbstractPage","client","hasNextPage","getPaginatedItems","nextPageInfo","getNextPage","nextInfo","nextOptions","params","searchParams","iterPages","page","item","Proxy","target","toLowerCase","requestOptionsKeys","isRequestOptions","every","k","hasOwn","getPlatformProperties","Deno","build","normalizePlatform","os","normalizeArch","arch","version","deno","EdgeRuntime","process","platform","browserInfo","navigator","browserPatterns","pattern","match","exec","userAgent","browser","getBrowserInfo","_platformHeaders","startsWithSchemeRegexp","test","n","isInteger","readEnv","env","trim","_k","targetHeaders","newHeaders","lowerKey","SENSITIVE_HEADERS","action","args","modifiedArgs","arg","modifiedArg","log","r","lowerCasedHeader","isHeadersProtocol","intercapsHeader","_m","g1","g2","warn","isObj","nextPageParams","CursorPage","info","id","after","APIResource","_client","create","arguments","completions","CompletionsAPI.Completions","Chat$1","Completions","Speech","Transcriptions","Core.multipartFormRequestOptions","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","retrieve","batchId","list","BatchesPage","Assistants","assistantId","update","AssistantsPage","del","delete","isRunnableFunctionWithParse","isAssistantMessage","role","isFunctionMessage","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","EventStream","add","_run","executor","_emitFinal","_emit","bind","_connected","ended","errored","on","listener","off","listeners","findIndex","l","splice","once","emitted","forEach","isAutoParsableResponseFormat","response_format","isAutoParsableTool","tool","parseChatCompletion","completion","choices","choice","finish_reason","tool_calls","toolCall","inputTool","tools","find","function","parsed_arguments","$parseRaw","strict","parseToolCall","parsed","content","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","WeakSet","openAIError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionCall","_AbstractChatCompletionRunner_getFinalFunctionCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","messages","_addChatCompletion","chatCompletion","_addMessage","emit","function_call","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionCall","finalFunctionCallResult","totalUsage","allChatCompletions","usage","_createChatCompletion","chat","_runChatCompletion","_runFunctions","restParams","singleFunctionToCall","maxChatCompletions","functionsByName","functions","parameters","description","rawContent","_runTools","tool_choice","inputTools","$callback","tool_call_id","rest","ret","at","y","total","completion_tokens","prompt_tokens","total_tokens","ChatCompletionRunner","runFunctions","runner","runTools","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","model","system_fingerprint","choiceRest","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_a","_b","_c","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","validateInputTools","Chat","Sessions","Realtime","sessions","SessionsAPI.Sessions","_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","threadId","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","acc","deltaValue","accValue","Core.isObj","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","Messages","messageId","MessagesPage","Steps","stepId","RunStepsPage","Runs","steps","StepsAPI.Steps","include","RunsPage","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","submitToolOutputsAndPoll","submitToolOutputsStream","Threads","RunsAPI.Runs","MessagesAPI.Messages","createAndRunPoll","thread_id","createAndRunStream","vectorStoreId","fileId","VectorStoreFilesPage","fileResponse","upload","fileInfo","files","purpose","file_id","uploadAndPoll","Files$1","FileBatches","batch","listFiles","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","promises","results","allSettled","reason","allSettledWithThrow","file_ids","VectorStores","FilesAPI.Files","fileBatches","FileBatchesAPI.FileBatches","VectorStoresPage","Files","Beta","realtime","RealtimeAPI.Realtime","vectorStores","VectorStoresAPI.VectorStores","ChatAPI.Chat","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Embeddings","FileObjectsPage","retrieveContent","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","Checkpoints","fineTuningJobId","FineTuningJobCheckpointsPage","Jobs","checkpoints","CheckpointsAPI.Checkpoints","FineTuningJobsPage","listEvents","FineTuningJobEventsPage","FineTuning","jobs","JobsAPI.Jobs","Images","createVariation","edit","Models","ModelsPage","Moderations","Parts","uploadId","Uploads","PartsAPI.Parts","complete","OpenAI","Core.APIClient","Core.readEnv","apiKey","organization","project","Errors.OpenAIError","dangerouslyAllowBrowser","window","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.Beta","batches","API.Batches","uploads","API.Uploads","_options","Authorization","qs.stringify","showMessage","isError","isInfinite","style","color","textContent","display","DEFAULT_TIMEOUT","Errors.APIError","Errors.APIConnectionError","Errors.APIConnectionTimeoutError","Errors.APIUserAbortError","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Uploads.toFile","Uploads.fileFromPath","UploadsAPIUploads","apiKeySelector","inputModel","modelsList","imagesIntegrationLine","baseURLSelector","checkCanIncludeImages","versionNumber","isCurrentVersionSupportingImages","innerHTML","a","b","localeCompare","opt","createElement","appendChild","toExcludes","disabledForThisMode","autocomplete","clipboard","handleModeChange","needDisable","dontNeedDisable","parentElement","button","mode","classList","remove","CURRENT_VERSION","versionDisplay","setVersion","isCurrent","link","href","rel","createTextNode","lastVersion","getLastVersion","lastVertionSplitted","currentVersionSplitted","minVersionLength","notifyUpdate","settings","advencedSettings","switchSettings","preventDefault","saveBtn","inputsText","maxTokens","selector","logs","title","cursor","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]}
\ 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/RunnableFunction.mjs","../../node_modules/openai/lib/chatCompletionUtils.mjs","../../node_modules/openai/lib/EventStream.mjs","../../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../../node_modules/openai/lib/parser.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/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/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 === undefined) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value === undefined) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value === undefined) {\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.11.0'; // 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}\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","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","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 { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.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?.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.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","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\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 ...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 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 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) => inputTool.function?.name === toolCall.function.name);\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) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => inputTool.function?.name === toolCall.function.name);\n return 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 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","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 { OpenAIError, APIUserAbortError, LengthFinishReasonError, ContentFilterFinishReasonError, } from \"../error.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.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) => tool.type === 'function' && tool.function.name === toolCallSnapshot.function.name);\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\";\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 { 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 100 GB.\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","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 if (output.type === 'message') {\n output.content.push(event.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.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 { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.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.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError(\"The OPENAI_API_KEY environment variable is missing or empty; either provide it, or instantiate the OpenAI client with an apiKey option, like new OpenAI({ apiKey: 'My API Key' }).\");\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 = apiKey;\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 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 /**\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 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 body instanceof 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.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","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","x","after","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","isRunnableFunctionWithParse","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","isAutoParsableResponseFormat","response_format","isAutoParsableTool","tool","parseChatCompletion","completion","choices","choice","finish_reason","tool_calls","toolCall","inputTool","tools","find","function","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","content","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","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","Realtime","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","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","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","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","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","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","cursor","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]}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index c04326b..edf9fc2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,30 +1,31 @@
{
"name": "moodlegpt",
- "version": "1.1.3",
+ "version": "1.1.4",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "moodlegpt",
- "version": "1.1.3",
+ "version": "1.1.4",
"license": "MIT",
"devDependencies": {
- "@eslint/js": "^9.22.0",
- "@rollup/plugin-commonjs": "^28.0.2",
+ "@eslint/js": "^9.32.0",
+ "@rollup/plugin-commonjs": "^28.0.6",
"@rollup/plugin-node-resolve": "^16.0.0",
"@rollup/plugin-terser": "^0.4.4",
- "@rollup/plugin-typescript": "^12.1.2",
- "@types/chrome": "^0.0.309",
+ "@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.26.1",
- "eslint": "^9.22.0",
- "eslint-config-prettier": "^10.1.1",
- "openai": "^4.78.1",
- "prettier": "^3.2.5",
- "rollup": "^4.13.0",
+ "@typescript-eslint/parser": "^8.38.0",
+ "eslint": "^9.32.0",
+ "eslint-config-prettier": "^10.1.8",
+ "openai": "^5.11.0",
+ "prettier": "^3.6.2",
+ "rollup": "^4.46.2",
"rollup-plugin-ts": "^3.2.0",
- "typescript": "^5.4.2",
- "typescript-eslint": "^8.26.1"
+ "typescript": "^5.8.3",
+ "typescript-eslint": "^8.38.0"
}
},
"node_modules/@eslint-community/eslint-utils": {
@@ -32,6 +33,7 @@
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
"integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"eslint-visitor-keys": "^3.4.3"
},
@@ -59,6 +61,7 @@
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
"integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@eslint/object-schema": "^2.1.6",
"debug": "^4.3.1",
@@ -73,6 +76,7 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -83,6 +87,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -95,15 +100,17 @@
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz",
"integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/core": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz",
- "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==",
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
+ "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@types/json-schema": "^7.0.15"
},
@@ -116,6 +123,7 @@
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
"integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
@@ -139,25 +147,18 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
- "node_modules/@eslint/eslintrc/node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
"node_modules/@eslint/eslintrc/node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -166,10 +167,11 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.30.1",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.30.1.tgz",
- "integrity": "sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==",
+ "version": "9.32.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz",
+ "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -182,15 +184,17 @@
"resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
"integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz",
- "integrity": "sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==",
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz",
+ "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@eslint/core": "^0.15.1",
"levn": "^0.4.1"
@@ -199,18 +203,6 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": {
- "version": "0.15.1",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
- "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.15"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
"node_modules/@humanfs/core": {
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
@@ -260,9 +252,9 @@
}
},
"node_modules/@humanwhocodes/retry": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
- "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz",
+ "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==",
"dev": true,
"engines": {
"node": ">=18.18"
@@ -331,9 +323,9 @@
}
},
"node_modules/@mdn/browser-compat-data": {
- "version": "5.6.35",
- "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.6.35.tgz",
- "integrity": "sha512-ag7tX/vba+g1OVelqrcdUPnao+Fio0YgcIUYs07qoV3escMAqF7sNKSHH8JxXQ0psY3u8l8jqmmGx0vFPtIrtw==",
+ "version": "5.7.4",
+ "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.7.4.tgz",
+ "integrity": "sha512-d4rta1K2i3oEDYMXkIvv9S/+UJRdoYU59k9VkNn+2lzN5jpw7rDyiU5W5ALaFu1saDuqp/+JDig0JpUpHy8WvQ==",
"dev": true
},
"node_modules/@nodelib/fs.scandir": {
@@ -372,10 +364,11 @@
}
},
"node_modules/@rollup/plugin-commonjs": {
- "version": "28.0.2",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.2.tgz",
- "integrity": "sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==",
+ "version": "28.0.6",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.6.tgz",
+ "integrity": "sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^5.0.1",
"commondir": "^1.0.1",
@@ -398,9 +391,9 @@
}
},
"node_modules/@rollup/plugin-node-resolve": {
- "version": "16.0.0",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz",
- "integrity": "sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==",
+ "version": "16.0.1",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz",
+ "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==",
"dev": true,
"dependencies": {
"@rollup/pluginutils": "^5.0.1",
@@ -444,10 +437,11 @@
}
},
"node_modules/@rollup/plugin-typescript": {
- "version": "12.1.2",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.2.tgz",
- "integrity": "sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==",
+ "version": "12.1.4",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.4.tgz",
+ "integrity": "sha512-s5Hx+EtN60LMlDBvl5f04bEiFZmAepk27Q+mr85L/00zPDn1jtzlTV6FWn81MaIwqfWzKxmOJrBWHU6vtQyedQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^5.1.0",
"resolve": "^1.22.1"
@@ -492,267 +486,302 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.1.tgz",
- "integrity": "sha512-kwctwVlswSEsr4ljpmxKrRKp1eG1v2NAhlzFzDf1x1OdYaMjBYjDCbHkzWm57ZXzTwqn8stMXgROrnMw8dJK3w==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz",
+ "integrity": "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==",
"cpu": [
"arm"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.1.tgz",
- "integrity": "sha512-4H5ZtZitBPlbPsTv6HBB8zh1g5d0T8TzCmpndQdqq20Ugle/nroOyDMf9p7f88Gsu8vBLU78/cuh8FYHZqdXxw==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz",
+ "integrity": "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.1.tgz",
- "integrity": "sha512-f2AJ7Qwx9z25hikXvg+asco8Sfuc5NCLg8rmqQBIOUoWys5sb/ZX9RkMZDPdnnDevXAMJA5AWLnRBmgdXGEUiA==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz",
+ "integrity": "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.1.tgz",
- "integrity": "sha512-+/2JBrRfISCsWE4aEFXxd+7k9nWGXA8+wh7ZUHn/u8UDXOU9LN+QYKKhd57sIn6WRcorOnlqPMYFIwie/OHXWw==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz",
+ "integrity": "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.1.tgz",
- "integrity": "sha512-SUeB0pYjIXwT2vfAMQ7E4ERPq9VGRrPR7Z+S4AMssah5EHIilYqjWQoTn5dkDtuIJUSTs8H+C9dwoEcg3b0sCA==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz",
+ "integrity": "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"freebsd"
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.1.tgz",
- "integrity": "sha512-L3T66wAZiB/ooiPbxz0s6JEX6Sr2+HfgPSK+LMuZkaGZFAFCQAHiP3dbyqovYdNaiUXcl9TlgnIbcsIicAnOZg==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz",
+ "integrity": "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"freebsd"
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.1.tgz",
- "integrity": "sha512-UBXdQ4+ATARuFgsFrQ+tAsKvBi/Hly99aSVdeCUiHV9dRTTpMU7OrM3WXGys1l40wKVNiOl0QYY6cZQJ2xhKlQ==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz",
+ "integrity": "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==",
"cpu": [
"arm"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.1.tgz",
- "integrity": "sha512-m/yfZ25HGdcCSwmopEJm00GP7xAUyVcBPjttGLRAqZ60X/bB4Qn6gP7XTwCIU6bITeKmIhhwZ4AMh2XLro+4+w==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz",
+ "integrity": "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==",
"cpu": [
"arm"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.1.tgz",
- "integrity": "sha512-Wy+cUmFuvziNL9qWRRzboNprqSQ/n38orbjRvd6byYWridp5TJ3CD+0+HUsbcWVSNz9bxkDUkyASGP0zS7GAvg==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz",
+ "integrity": "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.1.tgz",
- "integrity": "sha512-CQ3MAGgiFmQW5XJX5W3wnxOBxKwFlUAgSXFA2SwgVRjrIiVt5LHfcQLeNSHKq5OEZwv+VCBwlD1+YKCjDG8cpg==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz",
+ "integrity": "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.1.tgz",
- "integrity": "sha512-rSzb1TsY4lSwH811cYC3OC2O2mzNMhM13vcnA7/0T6Mtreqr3/qs6WMDriMRs8yvHDI54qxHgOk8EV5YRAHFbw==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz",
+ "integrity": "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==",
"cpu": [
"loong64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.1.tgz",
- "integrity": "sha512-fwr0n6NS0pG3QxxlqVYpfiY64Fd1Dqd8Cecje4ILAV01ROMp4aEdCj5ssHjRY3UwU7RJmeWd5fi89DBqMaTawg==",
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz",
+ "integrity": "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==",
"cpu": [
"ppc64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.1.tgz",
- "integrity": "sha512-4uJb9qz7+Z/yUp5RPxDGGGUcoh0PnKF33QyWgEZ3X/GocpWb6Mb+skDh59FEt5d8+Skxqs9mng6Swa6B2AmQZg==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz",
+ "integrity": "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==",
"cpu": [
"riscv64"
],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz",
+ "integrity": "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.1.tgz",
- "integrity": "sha512-QlIo8ndocWBEnfmkYqj8vVtIUpIqJjfqKggjy7IdUncnt8BGixte1wDON7NJEvLg3Kzvqxtbo8tk+U1acYEBlw==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz",
+ "integrity": "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==",
"cpu": [
"s390x"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.1.tgz",
- "integrity": "sha512-hzpleiKtq14GWjz3ahWvJXgU1DQC9DteiwcsY4HgqUJUGxZThlL66MotdUEK9zEo0PK/2ADeZGM9LIondE302A==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz",
+ "integrity": "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.1.tgz",
- "integrity": "sha512-jqtKrO715hDlvUcEsPn55tZt2TEiBvBtCMkUuU0R6fO/WPT7lO9AONjPbd8II7/asSiNVQHCMn4OLGigSuxVQA==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz",
+ "integrity": "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.1.tgz",
- "integrity": "sha512-RnHy7yFf2Wz8Jj1+h8klB93N0NHNHXFhNwAmiy9zJdpY7DE01VbEVtPdrK1kkILeIbHGRJjvfBDBhnxBr8kD4g==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz",
+ "integrity": "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.1.tgz",
- "integrity": "sha512-i7aT5HdiZIcd7quhzvwQ2oAuX7zPYrYfkrd1QFfs28Po/i0q6kas/oRrzGlDhAEyug+1UfUtkWdmoVlLJj5x9Q==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz",
+ "integrity": "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==",
"cpu": [
"ia32"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.1.tgz",
- "integrity": "sha512-k3MVFD9Oq+laHkw2N2v7ILgoa9017ZMF/inTtHzyTVZjYs9cSH18sdyAf6spBAJIGwJ5UaC7et2ZH1WCdlhkMw==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz",
+ "integrity": "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@types/chrome": {
- "version": "0.0.309",
- "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.309.tgz",
- "integrity": "sha512-ZFADzcp8b+roUrux68U8pti4cmNOLJXWkShk8lfxj9SBcjYqpJt7NypBprSJUJDJVakGZgd2Tt00QePIGh7oPA==",
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.1.1.tgz",
+ "integrity": "sha512-MLtFW++/n+OPQIaf5hA6pmURd3Zn+OxuvASyf2mYh8B8pHDpbhHjwlVHMw3H/aJC9Z7Z3itO0AFaZeegrGk0yA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/filesystem": "*",
"@types/har-format": "*"
}
},
"node_modules/@types/estree": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
- "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
- "dev": true
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/filesystem": {
"version": "0.0.36",
@@ -779,25 +808,17 @@
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/node": {
- "version": "18.19.74",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.74.tgz",
- "integrity": "sha512-HMwEkkifei3L605gFdV+/UwtpxP6JSzM+xFk2Ia6DNFSwSVBRh9qp5Tgf4lNFOMfPVuU0WnkcWpXZpgn5ufO4A==",
+ "version": "24.1.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz",
+ "integrity": "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "undici-types": "~5.26.4"
- }
- },
- "node_modules/@types/node-fetch": {
- "version": "2.6.12",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz",
- "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "form-data": "^4.0.0"
+ "undici-types": "~7.8.0"
}
},
"node_modules/@types/object-path": {
@@ -825,16 +846,17 @@
"dev": true
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.36.0.tgz",
- "integrity": "sha512-lZNihHUVB6ZZiPBNgOQGSxUASI7UJWhT8nHyUGCnaQ28XFCw98IfrMCG3rUl1uwUWoAvodJQby2KTs79UTcrAg==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz",
+ "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.36.0",
- "@typescript-eslint/type-utils": "8.36.0",
- "@typescript-eslint/utils": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0",
+ "@typescript-eslint/scope-manager": "8.38.0",
+ "@typescript-eslint/type-utils": "8.38.0",
+ "@typescript-eslint/utils": "8.38.0",
+ "@typescript-eslint/visitor-keys": "8.38.0",
"graphemer": "^1.4.0",
"ignore": "^7.0.0",
"natural-compare": "^1.4.0",
@@ -848,21 +870,32 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.36.0",
+ "@typescript-eslint/parser": "^8.38.0",
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <5.9.0"
}
},
- "node_modules/@typescript-eslint/parser": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.36.0.tgz",
- "integrity": "sha512-FuYgkHwZLuPbZjQHzJXrtXreJdFMKl16BFYyRrLxDhWr6Qr7Kbcu2s1Yhu8tsiMXw1S0W1pjfFfYEt+R604s+Q==",
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
"dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz",
+ "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.36.0",
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/typescript-estree": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0",
+ "@typescript-eslint/scope-manager": "8.38.0",
+ "@typescript-eslint/types": "8.38.0",
+ "@typescript-eslint/typescript-estree": "8.38.0",
+ "@typescript-eslint/visitor-keys": "8.38.0",
"debug": "^4.3.4"
},
"engines": {
@@ -878,13 +911,14 @@
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.36.0.tgz",
- "integrity": "sha512-JAhQFIABkWccQYeLMrHadu/fhpzmSQ1F1KXkpzqiVxA/iYI6UnRt2trqXHt1sYEcw1mxLnB9rKMsOxXPxowN/g==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz",
+ "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.36.0",
- "@typescript-eslint/types": "^8.36.0",
+ "@typescript-eslint/tsconfig-utils": "^8.38.0",
+ "@typescript-eslint/types": "^8.38.0",
"debug": "^4.3.4"
},
"engines": {
@@ -899,13 +933,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.36.0.tgz",
- "integrity": "sha512-wCnapIKnDkN62fYtTGv2+RY8FlnBYA3tNm0fm91kc2BjPhV2vIjwwozJ7LToaLAyb1ca8BxrS7vT+Pvvf7RvqA==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz",
+ "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0"
+ "@typescript-eslint/types": "8.38.0",
+ "@typescript-eslint/visitor-keys": "8.38.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -916,10 +951,11 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.36.0.tgz",
- "integrity": "sha512-Nhh3TIEgN18mNbdXpd5Q8mSCBnrZQeY9V7Ca3dqYvNDStNIGRmJA6dmrIPMJ0kow3C7gcQbpsG2rPzy1Ks/AnA==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz",
+ "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -932,13 +968,15 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.36.0.tgz",
- "integrity": "sha512-5aaGYG8cVDd6cxfk/ynpYzxBRZJk7w/ymto6uiyUFtdCozQIsQWh7M28/6r57Fwkbweng8qAzoMCPwSJfWlmsg==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz",
+ "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "8.36.0",
- "@typescript-eslint/utils": "8.36.0",
+ "@typescript-eslint/types": "8.38.0",
+ "@typescript-eslint/typescript-estree": "8.38.0",
+ "@typescript-eslint/utils": "8.38.0",
"debug": "^4.3.4",
"ts-api-utils": "^2.1.0"
},
@@ -955,10 +993,11 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.36.0.tgz",
- "integrity": "sha512-xGms6l5cTJKQPZOKM75Dl9yBfNdGeLRsIyufewnxT4vZTrjC0ImQT4fj8QmtJK84F58uSh5HVBSANwcfiXxABQ==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz",
+ "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -968,15 +1007,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.36.0.tgz",
- "integrity": "sha512-JaS8bDVrfVJX4av0jLpe4ye0BpAaUW7+tnS4Y4ETa3q7NoZgzYbN9zDQTJ8kPb5fQ4n0hliAt9tA4Pfs2zA2Hg==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz",
+ "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.36.0",
- "@typescript-eslint/tsconfig-utils": "8.36.0",
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0",
+ "@typescript-eslint/project-service": "8.38.0",
+ "@typescript-eslint/tsconfig-utils": "8.38.0",
+ "@typescript-eslint/types": "8.38.0",
+ "@typescript-eslint/visitor-keys": "8.38.0",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
@@ -996,15 +1036,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.36.0.tgz",
- "integrity": "sha512-VOqmHu42aEMT+P2qYjylw6zP/3E/HvptRwdn/PZxyV27KhZg2IOszXod4NcXisWzPAGSS4trE/g4moNj6XmH2g==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz",
+ "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.7.0",
- "@typescript-eslint/scope-manager": "8.36.0",
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/typescript-estree": "8.36.0"
+ "@typescript-eslint/scope-manager": "8.38.0",
+ "@typescript-eslint/types": "8.38.0",
+ "@typescript-eslint/typescript-estree": "8.38.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1019,12 +1060,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.36.0.tgz",
- "integrity": "sha512-vZrhV2lRPWDuGoxcmrzRZyxAggPL+qp3WzUrlZD+slFueDiYHxeBa34dUXPuC0RmGKzl4lS5kFJYvKCq9cnNDA==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz",
+ "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.36.0",
+ "@typescript-eslint/types": "8.38.0",
"eslint-visitor-keys": "^4.2.1"
},
"engines": {
@@ -1040,6 +1082,7 @@
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -1056,23 +1099,12 @@
"node": ">=8.0.0"
}
},
- "node_modules/abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "dev": true,
- "dependencies": {
- "event-target-shim": "^5.0.0"
- },
- "engines": {
- "node": ">=6.5"
- }
- },
"node_modules/acorn": {
"version": "8.15.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
+ "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -1085,27 +1117,17 @@
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
+ "license": "MIT",
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
- "node_modules/agentkeepalive": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz",
- "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==",
- "dev": true,
- "dependencies": {
- "humanize-ms": "^1.2.1"
- },
- "engines": {
- "node": ">= 8.0.0"
- }
- },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -1145,13 +1167,8 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true
+ "dev": true,
+ "license": "Python-2.0"
},
"node_modules/balanced-match": {
"version": "1.0.2",
@@ -1164,6 +1181,7 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
@@ -1251,14 +1269,15 @@
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001696",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz",
- "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==",
+ "version": "1.0.30001706",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz",
+ "integrity": "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==",
"dev": true,
"funding": [
{
@@ -1309,18 +1328,6 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -1418,19 +1425,10 @@
"node": ">=0.10.0"
}
},
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/electron-to-chromium": {
- "version": "1.5.90",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz",
- "integrity": "sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug==",
+ "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
},
"node_modules/escalade": {
@@ -1455,19 +1453,20 @@
}
},
"node_modules/eslint": {
- "version": "9.30.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.30.1.tgz",
- "integrity": "sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==",
+ "version": "9.32.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz",
+ "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1",
"@eslint/config-array": "^0.21.0",
"@eslint/config-helpers": "^0.3.0",
- "@eslint/core": "^0.14.0",
+ "@eslint/core": "^0.15.0",
"@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.30.1",
- "@eslint/plugin-kit": "^0.3.1",
+ "@eslint/js": "9.32.0",
+ "@eslint/plugin-kit": "^0.3.4",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.2",
@@ -1515,10 +1514,11 @@
}
},
"node_modules/eslint-config-prettier": {
- "version": "10.1.5",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz",
- "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==",
+ "version": "10.1.8",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz",
+ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
"dev": true,
+ "license": "MIT",
"bin": {
"eslint-config-prettier": "bin/cli.js"
},
@@ -1534,6 +1534,7 @@
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
"integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
@@ -1558,10 +1559,11 @@
}
},
"node_modules/eslint/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -1572,6 +1574,7 @@
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -1579,15 +1582,6 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint/node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
"node_modules/eslint/node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -1605,6 +1599,7 @@
"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"acorn": "^8.15.0",
"acorn-jsx": "^5.3.2",
@@ -1622,6 +1617,7 @@
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -1646,6 +1642,7 @@
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"estraverse": "^5.2.0"
},
@@ -1677,20 +1674,12 @@
"node": ">=0.10.0"
}
},
- "node_modules/event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fast-glob": {
"version": "3.3.3",
@@ -1724,7 +1713,8 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
@@ -1814,45 +1804,13 @@
"integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
"dev": true
},
- "node_modules/form-data": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
- "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
- "dev": true,
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/form-data-encoder": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz",
- "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==",
- "dev": true
- },
- "node_modules/formdata-node": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz",
- "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==",
- "dev": true,
- "dependencies": {
- "node-domexception": "1.0.0",
- "web-streams-polyfill": "4.0.0-beta.3"
- },
- "engines": {
- "node": ">= 12.20"
- }
- },
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -1887,6 +1845,7 @@
"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -1930,19 +1889,10 @@
"node": ">=10.0.0"
}
},
- "node_modules/humanize-ms": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
- "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.0.0"
- }
- },
"node_modules/ignore": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
- "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"dev": true,
"engines": {
"node": ">= 4"
@@ -1953,6 +1903,7 @@
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
"integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
@@ -2053,6 +2004,7 @@
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
@@ -2070,7 +2022,8 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
@@ -2164,27 +2117,6 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -2212,45 +2144,6 @@
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true
},
- "node_modules/node-domexception": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
- "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/jimmywarting"
- },
- {
- "type": "github",
- "url": "https://paypal.me/jimmywarting"
- }
- ],
- "engines": {
- "node": ">=10.5.0"
- }
- },
- "node_modules/node-fetch": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
- "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
- "dev": true,
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
"node_modules/node-releases": {
"version": "2.0.19",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
@@ -2267,19 +2160,11 @@
}
},
"node_modules/openai": {
- "version": "4.82.0",
- "resolved": "https://registry.npmjs.org/openai/-/openai-4.82.0.tgz",
- "integrity": "sha512-1bTxOVGZuVGsKKUWbh3BEwX1QxIXUftJv+9COhhGGVDTFwiaOd4gWsMynF2ewj1mg6by3/O+U8+EEHpWRdPaJg==",
+ "version": "5.11.0",
+ "resolved": "https://registry.npmjs.org/openai/-/openai-5.11.0.tgz",
+ "integrity": "sha512-+AuTc5pVjlnTuA9zvn8rA/k+1RluPIx9AD4eDcnutv6JNwHHZxIhkFy+tmMKCvmMFDQzfA/r1ujvPWB19DQkYg==",
"dev": true,
- "dependencies": {
- "@types/node": "^18.11.18",
- "@types/node-fetch": "^2.6.4",
- "abort-controller": "^3.0.0",
- "agentkeepalive": "^4.2.1",
- "form-data-encoder": "1.7.2",
- "formdata-node": "^4.3.2",
- "node-fetch": "^2.6.7"
- },
+ "license": "Apache-2.0",
"bin": {
"openai": "bin/cli"
},
@@ -2348,6 +2233,7 @@
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"callsites": "^3.0.0"
},
@@ -2407,10 +2293,11 @@
}
},
"node_modules/prettier": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz",
- "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
+ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
"dev": true,
+ "license": "MIT",
"bin": {
"prettier": "bin/prettier.cjs"
},
@@ -2426,6 +2313,7 @@
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -2484,6 +2372,7 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
@@ -2499,12 +2388,13 @@
}
},
"node_modules/rollup": {
- "version": "4.34.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.1.tgz",
- "integrity": "sha512-iYZ/+PcdLYSGfH3S+dGahlW/RWmsqDhLgj1BT9DH/xXJ0ggZN7xkdP9wipPNjjNLczI+fmMLmTB9pye+d2r4GQ==",
+ "version": "4.46.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz",
+ "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/estree": "1.0.6"
+ "@types/estree": "1.0.8"
},
"bin": {
"rollup": "dist/bin/rollup"
@@ -2514,25 +2404,26 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.34.1",
- "@rollup/rollup-android-arm64": "4.34.1",
- "@rollup/rollup-darwin-arm64": "4.34.1",
- "@rollup/rollup-darwin-x64": "4.34.1",
- "@rollup/rollup-freebsd-arm64": "4.34.1",
- "@rollup/rollup-freebsd-x64": "4.34.1",
- "@rollup/rollup-linux-arm-gnueabihf": "4.34.1",
- "@rollup/rollup-linux-arm-musleabihf": "4.34.1",
- "@rollup/rollup-linux-arm64-gnu": "4.34.1",
- "@rollup/rollup-linux-arm64-musl": "4.34.1",
- "@rollup/rollup-linux-loongarch64-gnu": "4.34.1",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.34.1",
- "@rollup/rollup-linux-riscv64-gnu": "4.34.1",
- "@rollup/rollup-linux-s390x-gnu": "4.34.1",
- "@rollup/rollup-linux-x64-gnu": "4.34.1",
- "@rollup/rollup-linux-x64-musl": "4.34.1",
- "@rollup/rollup-win32-arm64-msvc": "4.34.1",
- "@rollup/rollup-win32-ia32-msvc": "4.34.1",
- "@rollup/rollup-win32-x64-msvc": "4.34.1",
+ "@rollup/rollup-android-arm-eabi": "4.46.2",
+ "@rollup/rollup-android-arm64": "4.46.2",
+ "@rollup/rollup-darwin-arm64": "4.46.2",
+ "@rollup/rollup-darwin-x64": "4.46.2",
+ "@rollup/rollup-freebsd-arm64": "4.46.2",
+ "@rollup/rollup-freebsd-x64": "4.46.2",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.46.2",
+ "@rollup/rollup-linux-arm-musleabihf": "4.46.2",
+ "@rollup/rollup-linux-arm64-gnu": "4.46.2",
+ "@rollup/rollup-linux-arm64-musl": "4.46.2",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.46.2",
+ "@rollup/rollup-linux-ppc64-gnu": "4.46.2",
+ "@rollup/rollup-linux-riscv64-gnu": "4.46.2",
+ "@rollup/rollup-linux-riscv64-musl": "4.46.2",
+ "@rollup/rollup-linux-s390x-gnu": "4.46.2",
+ "@rollup/rollup-linux-x64-gnu": "4.46.2",
+ "@rollup/rollup-linux-x64-musl": "4.46.2",
+ "@rollup/rollup-win32-arm64-msvc": "4.46.2",
+ "@rollup/rollup-win32-ia32-msvc": "4.46.2",
+ "@rollup/rollup-win32-x64-msvc": "4.46.2",
"fsevents": "~2.3.2"
}
},
@@ -2643,9 +2534,9 @@
]
},
"node_modules/semver": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz",
- "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==",
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -2714,6 +2605,7 @@
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
},
@@ -2746,9 +2638,9 @@
}
},
"node_modules/terser": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz",
- "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==",
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz",
+ "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
@@ -2775,17 +2667,12 @@
"node": ">=8.0"
}
},
- "node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
- "dev": true
- },
"node_modules/ts-api-utils": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
"integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=18.12"
},
@@ -2831,10 +2718,11 @@
}
},
"node_modules/typescript": {
- "version": "5.7.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
- "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
+ "version": "5.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
+ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
"dev": true,
+ "license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -2844,14 +2732,16 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.36.0.tgz",
- "integrity": "sha512-fTCqxthY+h9QbEgSIBfL9iV6CvKDFuoxg6bHPNpJ9HIUzS+jy2lCEyCmGyZRWEBSaykqcDPf1SJ+BfCI8DRopA==",
+ "version": "8.38.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz",
+ "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.36.0",
- "@typescript-eslint/parser": "8.36.0",
- "@typescript-eslint/utils": "8.36.0"
+ "@typescript-eslint/eslint-plugin": "8.38.0",
+ "@typescript-eslint/parser": "8.38.0",
+ "@typescript-eslint/typescript-estree": "8.38.0",
+ "@typescript-eslint/utils": "8.38.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2892,15 +2782,16 @@
}
},
"node_modules/undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
- "dev": true
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz",
+ "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/update-browserslist-db": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz",
- "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+ "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
"dev": true,
"funding": [
{
@@ -2932,35 +2823,11 @@
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"punycode": "^2.1.0"
}
},
- "node_modules/web-streams-polyfill": {
- "version": "4.0.0-beta.3",
- "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz",
- "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==",
- "dev": true,
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
- "dev": true
- },
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "dev": true,
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
"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 fcd6910..088ba83 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "moodlegpt",
- "version": "1.1.3",
+ "version": "1.1.4",
"description": "This extension allows you to hide CHAT-GPT in a Moodle quiz.",
"scripts": {
"build": "npm run prettier && npm run lint && npm run fastBuild",
@@ -26,21 +26,22 @@
},
"homepage": "https://github.com/yoannchb-pro/MoodleGPT#readme",
"devDependencies": {
- "@eslint/js": "^9.22.0",
- "@rollup/plugin-commonjs": "^28.0.2",
+ "@eslint/js": "^9.32.0",
+ "@rollup/plugin-commonjs": "^28.0.6",
"@rollup/plugin-node-resolve": "^16.0.0",
"@rollup/plugin-terser": "^0.4.4",
- "@rollup/plugin-typescript": "^12.1.2",
- "@types/chrome": "^0.0.309",
+ "@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.26.1",
- "eslint": "^9.22.0",
- "eslint-config-prettier": "^10.1.1",
- "openai": "^4.78.1",
- "prettier": "^3.2.5",
- "rollup": "^4.13.0",
+ "@typescript-eslint/parser": "^8.38.0",
+ "eslint": "^9.32.0",
+ "eslint-config-prettier": "^10.1.8",
+ "openai": "^5.11.0",
+ "prettier": "^3.6.2",
+ "rollup": "^4.46.2",
"rollup-plugin-ts": "^3.2.0",
- "typescript": "^5.4.2",
- "typescript-eslint": "^8.26.1"
+ "typescript": "^5.8.3",
+ "typescript-eslint": "^8.38.0"
}
}
diff --git a/src/background/core/create-question.ts b/src/background/core/create-question.ts
index 1f59ed1..4d336f4 100644
--- a/src/background/core/create-question.ts
+++ b/src/background/core/create-question.ts
@@ -20,6 +20,8 @@ function createAndNormalizeQuestion(questionContainer: HTMLElement) {
if (attoText) {
question = question.replace((attoText as HTMLElement).innerText, '');
}
+ const clearMyChoice = questionContainer.querySelector('[role="button"]');
+ if (clearMyChoice) question = question.replace((clearMyChoice as HTMLElement).innerText, '');
// Make tables more readable for chat-gpt
const tables: NodeListOf = questionContainer.querySelectorAll('.qtext table');
diff --git a/src/background/core/get-response.ts b/src/background/core/get-response.ts
index 2542fba..86cecd3 100644
--- a/src/background/core/get-response.ts
+++ b/src/background/core/get-response.ts
@@ -3,7 +3,7 @@ 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 { fixeO1 } from '../utils/fixe-o1';
+import { fixeO } from '../utils/fixe-o';
/**
* Get the response from chatGPT api
@@ -30,7 +30,7 @@ async function getChatGPTResponse(
});
const req = await client.chat.completions.create(
- fixeO1(config.model, {
+ fixeO(config.model, {
model: config.model,
messages: contentHandler.messages,
diff --git a/src/background/utils/fixe-o1.ts b/src/background/utils/fixe-o.ts
similarity index 76%
rename from src/background/utils/fixe-o1.ts
rename to src/background/utils/fixe-o.ts
index 2535c6b..9112fab 100644
--- a/src/background/utils/fixe-o1.ts
+++ b/src/background/utils/fixe-o.ts
@@ -6,8 +6,8 @@ import { ChatCompletionCreateParamsNonStreaming } from 'openai/resources/chat/co
* @param data
* @returns
*/
-export function fixeO1(model: string, data: ChatCompletionCreateParamsNonStreaming) {
- if (!model.startsWith('o1') && !model.startsWith('o3')) return data;
+export function fixeO(model: string, data: ChatCompletionCreateParamsNonStreaming) {
+ if (model.search(/^o\d+/gi) === -1) return data;
if (data.max_tokens) {
data.max_completion_tokens = data.max_tokens;
diff --git a/src/popup/gpt-version.ts b/src/popup/gpt-version.ts
index 72b6963..8672a0e 100644
--- a/src/popup/gpt-version.ts
+++ b/src/popup/gpt-version.ts
@@ -40,7 +40,9 @@ export async function populateDatalistWithGptVersions() {
const models = rep.data.filter(
model =>
- model.id.startsWith('gpt') || model.id.startsWith('o1') || model.id.startsWith('chatgpt')
+ 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
diff --git a/src/popup/version.ts b/src/popup/version.ts
index b3204f3..31632b6 100644
--- a/src/popup/version.ts
+++ b/src/popup/version.ts
@@ -1,4 +1,4 @@
-const CURRENT_VERSION = '1.1.3';
+const CURRENT_VERSION = '1.1.4';
const versionDisplay = document.querySelector('#version')!;
/**