promptgun 0.13.24 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.d.ts CHANGED
@@ -596,6 +596,7 @@ export declare const AiModel: {
596
596
  */
597
597
  readonly gpt_4o_transcribe: "gpt-4o-transcribe";
598
598
  /**
599
+ * "OpenAI model ID: gpt-image-1"
599
600
  * | Attribute | Rating | Value |
600
601
  * |----------------|-----------------|----------------|
601
602
  * | Intelligence | ? | ? |
@@ -844,11 +845,18 @@ export declare class BasicPrompt<PSArgs> implements AsyncGenerator<string>, Prom
844
845
  private _temperature;
845
846
  private _topP;
846
847
  private _model;
848
+ private _firstThink;
847
849
  private readonly generator;
848
850
  private promptName?;
849
- constructor(aiClient: AIClient, promptSupplier: (args: PSArgs) => Prompt, promptSupplierArgs: PSArgs, callingCodeLine: CodeLine, _temperature: number | undefined, _topP: number | undefined, _model: AiModelId | undefined);
851
+ constructor(aiClient: AIClient, promptSupplier: (args: PSArgs) => Prompt, promptSupplierArgs: PSArgs, callingCodeLine: CodeLine, _temperature: number | undefined, _topP: number | undefined, _model: AiModelId | undefined, _firstThink: boolean);
850
852
  name(name: string): this;
851
853
  model(model: AiModelId): this;
854
+ /**
855
+ * If requesting data, the model is asked to write out a
856
+ * reasoning, step by step, before any of the requested
857
+ * JSON is outputted.
858
+ */
859
+ firstThink(firstThink?: boolean): this;
852
860
  /**
853
861
  * What sampling temperature to use, between 0 and 2.
854
862
  * Higher values like 0.8 will make the output more random,
@@ -1009,7 +1017,7 @@ export declare type JsonArray = AnyJson[];
1009
1017
 
1010
1018
  export declare class JsonArrayPrompt<PSArgs, T_arr extends AnyJson = AnyJson> extends JsonPrompt<PSArgs, T_arr[]> {
1011
1019
  protected readonly arrayElementGenerator: Flux<T_arr>;
1012
- constructor(aiClient: AIClient, promptSupplier: (args: PSArgs) => Prompt, promptSupplierArgs: PSArgs, jsonTypeSupplier: ((value: EmptyTypeSpec<unknown>) => TypeSpec<T_arr[]>) | undefined, callingCodeLine: CodeLine, promptName: string | undefined, _temperature: number | undefined, _topP: number | undefined, _model: AiModelId | undefined);
1020
+ constructor(aiClient: AIClient, promptSupplier: (args: PSArgs) => Prompt, promptSupplierArgs: PSArgs, jsonTypeSupplier: ((value: EmptyTypeSpec<unknown>) => TypeSpec<T_arr[]>) | undefined, callingCodeLine: CodeLine, promptName: string | undefined, _temperature: number | undefined, _topP: number | undefined, _model: AiModelId | undefined, _firstThink: boolean);
1013
1021
  next(...[value]: [] | [any]): Promise<IteratorResult<T_arr>>;
1014
1022
  return(value: any): Promise<IteratorResult<T_arr, any>>;
1015
1023
  throw(e: any): Promise<IteratorResult<T_arr, any>>;
@@ -1039,9 +1047,10 @@ export declare class JsonPrompt<PSArgs, Json extends AnyJson = AnyJson> extends
1039
1047
  protected _temperature: number | undefined;
1040
1048
  protected _topP: number | undefined;
1041
1049
  protected _model: AiModelId | undefined;
1050
+ protected _firstThink: boolean;
1042
1051
  protected readonly stringGenerator: AsyncGenerator<string>;
1043
1052
  protected readonly partialJsonGenerator: AsyncGenerator<AnyJson>;
1044
- constructor(aiClient: AIClient, promptSupplier: (args: PSArgs) => Prompt, promptSupplierArgs: PSArgs, jsonTypeSupplier: ((value: EmptyTypeSpec<unknown>) => TypeSpec<Json>) | undefined, callingCodeLine: CodeLine, promptName: string | undefined, _temperature: number | undefined, _topP: number | undefined, _model: AiModelId | undefined);
1053
+ constructor(aiClient: AIClient, promptSupplier: (args: PSArgs) => Prompt, promptSupplierArgs: PSArgs, jsonTypeSupplier: ((value: EmptyTypeSpec<unknown>) => TypeSpec<Json>) | undefined, callingCodeLine: CodeLine, promptName: string | undefined, _temperature: number | undefined, _topP: number | undefined, _model: AiModelId | undefined, _firstThink: boolean);
1045
1054
  next(...[value]: [] | [any]): Promise<IteratorResult<AnyJson, any>>;
1046
1055
  return(value: any): Promise<IteratorResult<AnyJson, any>>;
1047
1056
  throw(e: any): Promise<IteratorResult<AnyJson, any>>;
@@ -1052,6 +1061,12 @@ export declare class JsonPrompt<PSArgs, Json extends AnyJson = AnyJson> extends
1052
1061
  get [Symbol.toStringTag](): string;
1053
1062
  name(name: string): this;
1054
1063
  model(model: AiModelId): this;
1064
+ /**
1065
+ * If requesting data, the model is asked to write out a
1066
+ * reasoning, step by step, before any of the requested
1067
+ * JSON is outputted.
1068
+ */
1069
+ firstThink(firstThink?: boolean): this;
1055
1070
  /**
1056
1071
  * What sampling temperature to use, between 0 and 2.
1057
1072
  * Higher values like 0.8 will make the output more random,
package/build/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var t=Object.create,e=Object.defineProperty,r=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,n=Object.getPrototypeOf,s={}.hasOwnProperty,o=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),a=(o,a,l)=>(l=null!=o?t(n(o)):{},((t,n,o,a)=>{if(n&&"object"==typeof n||"function"==typeof n)for(let o of i(n))!s.call(t,o)&&void 0!==o&&e(t,o,{get:()=>n[o],enumerable:!(a=r(n,o))||a.enumerable});return t})(!a&&o&&o.t?l:e(l,"default",{value:o,enumerable:!0}),o)),l=o((t=>{"use strict";Object.defineProperty(t,"t",{value:!0}),t.Flux=void 0;var e=class t{generator;upstream;handleCancel;i=!1;constructor(t,e,i){let n=this;this.generator=async function*(){try{yield*t}catch(t){throw yield r,t}finally{n.i=!0}}(),this.upstream=e,this.handleCancel=i}[Symbol.asyncIterator](){return this}async next(...t){let e=await this.generator.next(t);return e.value!==r?e:await this.next(t)}return(t){return this.generator.return(t)}throw(t){return this.generator.throw(t)}async cancel(t){if(!this.closed){if(void 0!==this.upstream)return this.upstream.cancel(t);void 0!==this.handleCancel?this.handleCancel(t):await this.throw(t)}}async then(t,e){try{let e=await this.asList();return null!=t?await t(e):e}catch(t){if(null!=e)return e(t);throw t}}async catch(t){try{return this.asList()}catch(e){if(null!=t)return t(e);throw e}}async finally(t){let e=await this.asList();return t?.(),e}get[Symbol.toStringTag](){return"Flux"}subscribe(t){let e=void 0!==t?this.doOnEach(t):this,r=()=>{e.next().then((t=>{t.done||r()})).catch((t=>{console.error(t)}))};return r(),{unsubscribe:()=>this.return()}}filter(e){let r=this;return t.constructFromGeneratorFunction((async function*(){for await(let t of r)e(t)&&(yield t)}),this)}untilExcl(e){let r=this;return t.constructFromGeneratorFunction((async function*(){for await(let t of r){if(e(t))break;yield t}}),this)}doOnEach(e){let r=this;return t.constructFromGeneratorFunction((async function*(){for await(let t of r)e(t),yield t}),this)}doAfterLast(e){let r=this,i=[];return t.constructFromGeneratorFunction((async function*(){for await(let t of r)i.push(t),yield t;await e(i)}),this)}map(e){let r=this;return t.constructFromGeneratorFunction((async function*(){for await(let t of r)yield e(t)}),this)}take(e){let r=this;return t.constructFromGeneratorFunction((async function*(){let t=0;for await(let i of r){if(t>=e){r.cancel();break}t++,yield i}}),this)}flatMap(e){let r=this;return t.constructFromGeneratorFunction((async function*(){for await(let t of r){let r=e(t);if(Array.isArray(r))for(let t of r)yield t;else yield await r}}),this)}transform(e){let r=e(this);return t.constructFromGeneratorFunction((async function*(){for await(let t of r)yield t}),this)}async reduce(t,e){let r=e;for await(let e of this)r=t(r,e);return r}async asList(){let t=[];for await(let e of this)t.push(e);return t}async whenComplete(){for await(let t of this);}static create(e){let r,i=[],n=[],s=!1,o=t=>{if(s)throw Error("Cannot push to a completed generator");n.length>0?n.shift().resolve({done:!1,value:t}):i.push(t)},a=()=>{for(s=!0;n.length>0;)n.shift().resolve({done:!0,value:void 0})},l=t=>{r={value:t},n.shift()?.reject(t)};return(async()=>{try{await e(o,a,l)}catch(t){l(t)}})(),t.fromGenerator({[Symbol.asyncIterator](){return this},next(...t){if(r){let t=r.value;return r=void 0,Promise.reject(t)}if(i.length>0){let t=i.shift();return Promise.resolve({done:!1,value:t})}return s?Promise.resolve({done:!0,value:void 0}):new Promise(((t,e)=>{n.push({resolve:t,reject:e})}))},return:()=>(a(),Promise.resolve({done:!0,value:void 0})),throw:t=>(l(t),Promise.reject(t))})}static fromArray(e){return t.fromGeneratorFunction((async function*(){for(let t of e)yield t}))}static constructFromGeneratorFunction(e,r,i){return new t(e(),r,i)}static fromGeneratorFunction(e,r){return t.constructFromGeneratorFunction(e,void 0,r)}static fromGenerator(e,r){return new t(e,void 0,r)}static fromReadableStream(e,r){return t.fromGeneratorFunction((async function*(){let t=e.getReader();try{let e;for(;!(e=await t.read()).done;)yield e.value}finally{await t.cancel()}}),r)}get closed(){return this.i}};t.Flux=e;var r={}})),u=o((t=>{"use strict";Object.defineProperty(t,"t",{value:!0}),t.Flux=void 0;var e=l();Object.defineProperty(t,"Flux",{enumerable:!0,get:function(){return e.Flux}})})),h=a(u(),1),p=a(u(),1),c=new TextDecoder,f=class extends Error{data;httpStatus=400;constructor(t,e){let r=t.map((t=>{if(t.expectedProp)return{expectedProp:(t.path+".").replace(/^root\./,"")+t.expectedProp};if(t.expectedType)return{expectedType:t.expectedType.map(v).join(" | "),path:t.path,insteadGot:t.value};if(t.unknownProp)return{unknownProp:(t.path+".").replace(/^root\./,"")+t.unknownProp};throw Error("illegal state")}));super(e??"Value is of the wrong format: "+JSON.stringify(r,null,2)),this.data=r}};function w(t){return new y([],t)}function d(t,e,r,i){let n=e.map((e=>function(t,e,r,i){let{ignoreUnknownProps:n=!0}=i;switch(e.type){case"array":return Array.isArray(t)?0===t.length?[]:d(t[0],e.elementType,r+"[..]",i):[{expectedType:[e],path:r,value:t}];case"boolean":return"boolean"!=typeof t?[{expectedType:[e],path:r,value:t}]:[];case"undefined":return void 0===t?[]:[{expectedType:[e],path:r,value:t}];case"object":{if("object"!=typeof t||null===t)return[{expectedType:[e],path:r,value:t}];let s=[];for(let n in e.props){let o=e.props[n];if(!(n in t)){o.optional||s.push({expectedProp:n,path:r,value:t});continue}let a=o.optional?[...o.type,{type:"undefined"}]:o.type;s.push(...d(t[n],a,r+"."+n,i))}if(!n)for(let i in t)i in e.props||s.push({unknownProp:i,path:r,value:t});return s}case"string":return"string"==typeof t?[]:[{expectedType:[e],path:r,value:t}];case"null":return null===t?[]:[{expectedType:[e],path:r,value:t}];case"number":return"number"==typeof t?[]:[{expectedType:[e],path:r,value:t}];case"constant":return t!==e.value||Number.isNaN(t)?[{expectedType:[e],path:r,value:t}]:[]}}(t,e,r,i)));if(n.some((t=>0===t.length)))return[];{let e=n.flatMap((t=>t.filter((t=>void 0!==t.expectedType&&t.path===r))));return e.length>0?[{expectedType:e.flatMap((t=>t.expectedType)),path:r,value:t}]:n.flatMap((t=>t))}}var m,y=class t{type;value;constructor(t=[],e){this.type=t,this.value=e}canBeArray(e){let r=e(new t([],this.value)),i=new t([{type:"array",elementType:r.type}],this.value);return new t([...this.type,...i.type],this.value)}canBeObject(e){let r=e(new t([{type:"object",props:{}}],this.value));return new t([...this.type,...r.type],this.value)}hasString(t){return this.hasProperty(t,(t=>t.canBeString()))}canHaveProperty(t,e){return this.hasProperty(t,e,!0)}hasProperty(e,r,i=!1){let n=1===this.type.length?this.type[0]:void 0;if(void 0===n||"object"!==n.type)throw Error("illegal state");let{type:s}=r(new t([],this.value));return new t([{...n,props:{...n.props,[e]:{optional:i,type:s}}}],this.value)}canBeString(){return new t([...this.type,{type:"string"}],this.value)}canBeNumber(){return new t([...this.type,{type:"number"}],this.value)}canBeBoolean(){return new t([...this.type,{type:"boolean"}],this.value)}canBeConstant(e){return new t([...this.type,{type:"constant",value:e}],this.value)}canBeNull(){return new t([...this.type,{type:"null"}],this.value)}canBeUndefined(){return new t([...this.type,{type:"undefined"}],this.value)}andNothingElse(t={}){let e=d(this.value,this.type,"root",t);if(e.length>0)throw new f(e,t.errorMessage);return this.value}orDefaultTo(t,e={}){return d(this.value,this.type,"root",e).length>0?t:this.value}describe(){return _(this.type)}};function _(t,e=0){if(Array.isArray(t))return t.map((t=>_(t,e))).join(" | ");switch(t.type){case"array":return _(t.elementType,e)+"[]";case"boolean":return"boolean";case"undefined":return"undefined";case"object":return"{\n"+Object.keys(t.props).map((r=>`${g(e+1)}${r}: ${_(t.props[r].type,e+1)}`)).join(",\n")+`\n${g(e)}}`;case"string":return"string";case"null":return"null";case"number":return"number";case"constant":return`"${t.value}"`}}function g(t){let e="";for(let r=0;r<t;r++)e+=" ";return e}function v(t){return"constant"===t.type?`'${t.value}'`:t.type}import{config as b}from"dotenv";function A(){if(!m){b();let t=function(){let t="t";t+="ps",t="ht"+t,t+=":",t+="/",t+="/ap",t+="i.pr";let e="i";return e="d.a"+e,e="gri"+e,t+="ompt",t+e}();m=w(t).canBeString().andNothingElse({errorMessage:"PromptGrid API URL invalid: "+t})}return m}var E=class{constructor(t,e,r,i,n=!1){this.type=t,this.source=e,this.value=r,this.fieldName=i,this.maybeIncomplete=n}},T=class t{jsonBuffer="";highestOffsetParsed=-1;static toJsonTokenFlux(e){return(new t).processDataBuffer(e)}processDataBuffer(t){return t.flatMap((t=>this.getExcerpts(t)))}getExcerpts(t){this.jsonBuffer+=t;let e,r=[],i=new N(this.jsonBuffer);for(;e=this.nextToken(i);)i.currentTokenLocation().getCharOffset()>this.highestOffsetParsed&&!e.maybeIncomplete&&(r.push({token:e}),this.highestOffsetParsed=i.currentTokenLocation().getCharOffset());return r.push({source:t}),r}nextToken(t){let e=t.nextToken();return"string"!=typeof e?e:void 0}},N=class{constructor(t){this.content=t}position=0;currentTokenType;parentFieldName;currentValue=null;context=[];nextToken(){let t=this.position;if(this.position>=this.content.length)return"string-ended";for(;this.position<this.content.length&&/\s/.test(this.content[this.position]);)this.position++;if(this.position>=this.content.length)return"string-ended";let e=e=>this.content.substring(t,e),r=this.content[this.position];switch(r){case"{":return this.position++,this.currentTokenType="START_OBJECT",this.pushContext("object"),new E(this.currentTokenType,e(this.position),void 0,this.parentFieldName);case"}":{this.position++,this.currentTokenType="END_OBJECT";let t=new E(this.currentTokenType,e(this.position),void 0,this.parentFieldName);return this.parentFieldName=void 0,this.popContext("object"),"field"===this.currentContextType&&this.popContext("field"),t}case"[":return this.position++,this.currentTokenType="START_ARRAY",this.pushContext("array"),new E(this.currentTokenType,e(this.position),void 0,this.parentFieldName);case"]":{this.position++,this.currentTokenType="END_ARRAY";let t=new E(this.currentTokenType,e(this.position),void 0,this.parentFieldName);return this.parentFieldName=void 0,this.popContext("array"),"field"===this.currentContextType&&this.popContext("field"),t}case'"':if("object"===this.currentContextType){this.currentTokenType="FIELD_NAME";let t=++this.position,r=this.content.indexOf('"',t);for(;r>=0&&"\\"===this.content[r-1];)r=this.content.indexOf('"',r+1);if(-1===r)return"token-incomplete";let i=this.content.substring(t,r);for(r++;r<this.content.length&&/\s/.test(this.content[r]);)r++;if(r===this.content.length)return"token-incomplete";if(":"!==this.content[r])throw Error("Expected token ':'");r++,this.position=r;let n=new E(this.currentTokenType,e(this.position),i,void 0);return this.parentFieldName=i,this.pushContext("field"),n}{this.currentTokenType="VALUE_STRING";let t=++this.position,r=this.content.indexOf('"',t);for(;r>0&&"\\"===this.content[r-1];)r=this.content.indexOf('"',r+1);if(-1===r)return"token-incomplete";let i=this.content.substring(t,r);this.position=r+1,this.currentValue=i;let n=new E(this.currentTokenType,e(this.position),i,"VALUE_STRING"===this.currentTokenType?this.parentFieldName:void 0);return this.parentFieldName=void 0,"field"===this.currentContextType&&this.popContext("field"),n}case"t":{let t=this.content.substring(this.position,this.position+4);if("true"===t)return this.position+=4,this.currentTokenType="VALUE_TRUE",this.currentValue=!0,"field"===this.currentContextType&&this.popContext("field"),new E(this.currentTokenType,e(this.position),this.currentValue,this.parentFieldName);if(t.length<4)return"token-incomplete";break}case"f":{let t=this.content.substring(this.position,this.position+5);if("false"===t)return this.position+=5,this.currentTokenType="VALUE_FALSE",this.currentValue=!1,"field"===this.currentContextType&&this.popContext("field"),new E(this.currentTokenType,e(this.position),this.currentValue,this.parentFieldName);if(t.length<5)return"token-incomplete";break}case"n":{let t=this.content.substring(this.position,this.position+4);if("null"===t)return this.position+=4,this.currentTokenType="VALUE_NULL",this.currentValue=null,"field"===this.currentContextType&&this.popContext("field"),new E(this.currentTokenType,e(this.position),this.currentValue,this.parentFieldName);if(t.length<4)return"token-incomplete";break}case",":return this.position++,this.currentTokenType="COMMA",new E(this.currentTokenType,e(this.position),void 0,void 0,!1);default:if(/[0-9-]/.test(r)){let t="",r=!1;for(;this.position<this.content.length&&(/[0-9]/.test(this.content[this.position])||"-"===this.content[this.position]||"."===this.content[this.position]||"e"===this.content[this.position]||"E"===this.content[this.position]||"+"===this.content[this.position]);)"."===this.content[this.position]&&(r=!0),t+=this.content[this.position++];r?(this.currentTokenType="VALUE_NUMBER_FLOAT",this.currentValue=parseFloat(t)):(this.currentTokenType="VALUE_NUMBER_INT",this.currentValue=parseInt(t,10));let i=this.position>=this.content.length;return"field"===this.currentContextType&&this.popContext("field"),new E(this.currentTokenType,e(this.position),this.currentValue,this.parentFieldName,i)}}throw new U("Invalid JSON at position "+this.position)}currentTokenLocation(){return{getCharOffset:()=>this.position}}get currentContextType(){return this.context[this.context.length-1]}pushContext(t){this.context.push(t)}popContext(t){if(0===this.context.length)throw Error("Cannot pop context, context empty");let e=this.currentContextType;if(e!==t)throw Error(`Cannot pop context \`${t}', current context '${e}'`);this.context.pop()}},U=class extends Error{constructor(t){super(t),this.name="JsonParseException"}},S=a(u(),1);function L(t){return null!=t}var x=class{receivedJson=[];propertyCallbacks=new Map;onElementCallbacks=new Set;onCompleteCallbacks=new Set;onEachExcerptCallbacks=new Set;currentToken;state=new R;receivedExcerpts=[];onElement(t){return this.onElementCallbacks.add(t),this}onProperty(t,e){return this.propertyCallbacks.has(t)||this.propertyCallbacks.set(t,[]),this.propertyCallbacks.get(t).push(e),this}onJsonStringProperty(t,e){return this.propertyCallbacks.has(t)||this.propertyCallbacks.set(t,[]),this.propertyCallbacks.get(t).push((t=>{let r=new V,i=[],n=new J;t.onEachExcerpt((t=>{void 0!==t.source&&i.push(t.source);let e=i.join(""),s=this.endsOnUnevenNumberOfBackslashes(e)?e.substring(0,e.length-1):e;i.length=0;let o=s.replace(/\\"/g,'"').substring(1),a=null!=t.token?o.substring(0,o.length-1):o;r.getExcerpts(a).forEach((t=>n.push(t)))})),e(n)})),this}onEachExcerpt(t){return this.onEachExcerptCallbacks.add(t),this.receivedExcerpts.forEach(t),this}async then(t,e){try{let e=await this.getResponseAsPromise();return L(t)?await t(e):e}catch(t){if(L(e))return await e(t);throw t}}async catch(t){try{return await this.getResponseAsPromise()}catch(e){if(L(t))return t(e);throw e}}async finally(t){try{return await this.getResponseAsPromise()}finally{t?.()}}get[Symbol.toStringTag](){return"StreamedJsonElement"}getResponseAsPromise(){return new Promise((t=>{this.onCompleteAs(t)}))}onComplete(t){this.o(this.toAsync(t),void 0)}o(t,e){this.onCompleteCallbacks.add({consumer:t,expectedTokenType:e})}onCompleteAsync(t){this.o(t,void 0)}onCompleteAs(t){this.onCompleteAsAsync(this.toAsync(t))}onCompleteAsAsync(t){this.o((e=>{let r=e.replace(/,$/,""),i=(()=>{try{return JSON.parse(r)}catch(t){throw t.message=`${t.message}. JSON string was: ${r}`,t}})();return t(i)}),void 0)}onCompleteAsString(t){this.o(this.toAsync(t),new Set(["VALUE_STRING","VALUE_NULL"]))}onCompleteAsStringAsync(t){this.o(t,new Set(["VALUE_STRING","VALUE_NULL"]))}onCompleteAsInt(t){this.o(this.toAsync(t),new Set(["VALUE_NUMBER_INT","VALUE_NULL"]))}onCompleteAsIntAsync(t){this.o(t,new Set(["VALUE_NUMBER_INT","VALUE_NULL"]))}onCompleteAsNumber(t){this.o(this.toAsync(t),new Set(["VALUE_NUMBER_INT","VALUE_NUMBER_FLOAT","VALUE_NULL"]))}onCompleteAsNumberAsync(t){this.o(t,new Set(["VALUE_NUMBER_INT","VALUE_NUMBER_FLOAT","VALUE_NULL"]))}onCompleteAsBoolean(t){this.o(this.toAsync(t),new Set(["VALUE_TRUE","VALUE_FALSE","VALUE_NULL"]))}onCompleteAsBooleanAsync(t){this.o(t,new Set(["VALUE_TRUE","VALUE_FALSE","VALUE_NULL"]))}whenComplete(){return new Promise((t=>{this.onComplete((e=>t(e)))}))}asJsonFlux(){return S.Flux.create(((t,e)=>{this.onEachExcerpt((e=>{e.source&&t(e.source)})),this.o((async()=>e()))}))}whenCompleteAs(){return new Promise((t=>{this.onCompleteAs(t)}))}async push(t){let e=t.token;if(this.onEachExcerptCallbacks.forEach((e=>e(t))),this.isState(O))return this.state.child.push(t);if(!e)return;let r=e.type;if(this.currentToken=e,this.isState(R))switch(r){case"START_OBJECT":if(this.onElementCallbacks.size>0)throw Error("registered onElement for object");return this.state=new k,void this.receivedJson.push(e.source);case"START_ARRAY":if(this.propertyCallbacks.size>0)throw Error("registered onProperty for array");return this.state=new j,void this.receivedJson.push(e.source);case"VALUE_STRING":case"VALUE_NUMBER_INT":case"VALUE_NUMBER_FLOAT":case"VALUE_TRUE":case"VALUE_FALSE":case"VALUE_NULL":return this.receivedJson.push(e.source),this.end();default:throw new B(e)}else if(this.isState(k))switch(r){case"FIELD_NAME":case"COMMA":return void this.receivedJson.push(e.source);case"END_OBJECT":return this.receivedJson.push(e.source),this.end();case"START_OBJECT":case"START_ARRAY":case"VALUE_STRING":case"VALUE_NUMBER_INT":case"VALUE_NUMBER_FLOAT":case"VALUE_TRUE":case"VALUE_FALSE":case"VALUE_NULL":{let r=new J;return r.onComplete((t=>{this.receivedJson.push(t),this.state=new k})),this.state=new I(r),this.propertyCallbacks.get(e.fieldName)?.forEach((t=>{t(r)})),r.push(t)}default:throw new B(e)}else if(this.isState(j))switch(r){case"END_ARRAY":return this.receivedJson.push(e.source),this.end();case"START_OBJECT":case"START_ARRAY":case"VALUE_STRING":case"VALUE_NUMBER_INT":case"VALUE_NUMBER_FLOAT":case"VALUE_TRUE":case"VALUE_FALSE":case"VALUE_NULL":{let e=new J;return e.onComplete((t=>{this.receivedJson.push(t),this.state=new j})),this.onElementCallbacks.forEach((t=>t(e))),this.state=new C(e),e.push(t)}case"COMMA":return void this.receivedJson.push(e.source);default:throw new B(e)}throw Error("Unknown state")}async end(){if(void 0===this.currentToken)throw Error("Illegal state");this.onCompleteCallbacks.forEach((t=>{let e=t.expectedTokenType,r=(()=>{if(void 0===e)return this.receivedJson.join("");if(!e.has(this.currentToken.type))throw Error(`Expected token type ${Array.from(e).join(", ")} but got ${this.currentToken.type}`);return this.currentToken.value})();t.consumer(r)}))}isState(t){return this.state instanceof t}endsOnUnevenNumberOfBackslashes(t){let e=0;for(let r=t.length-1;r>=0&&"\\"===t[r];r--)e++;return e%2==1}toAsync(t){return async e=>{t(e)}}},P=class{},O=class extends P{constructor(t){super(),this.child=t}},R=class extends P{},j=class extends P{},C=class extends O{constructor(t){super(t)}},k=class extends P{},I=class extends O{constructor(t){super(t)}},B=class extends Error{constructor(t){super("Unexpected token: "+t.type),this.name="UnexpectedTokenException"}},V=class{getExcerpts(t){return[{source:t}]}},J=class extends x{constructor(){super()}},M=a(u(),1),$=class extends x{jsonTokenFlux;constructor(t){super();let e=this;this.jsonTokenFlux=M.Flux.fromGeneratorFunction((async function*(){let r;for await(let i of t)void 0!==i.token&&(r?.token?.maybeIncomplete&&r.token.type===i.token.type&&!i.token.maybeIncomplete&&await e.push(i),r=i.token),(void 0===i.token||!i.token.maybeIncomplete)&&await e.push(i),yield i;r?.token?.maybeIncomplete&&await e.push(r)}))}whenComplete(){return this.jsonTokenFlux.then((()=>this.receivedJson.join("")))}asJsonFlux(){return this.jsonTokenFlux.map((t=>t.source)).filter((t=>void 0!==t))}},F=class{parse(t){return new $(t)}};function G(t){try{return JSON.parse(t)}catch(e){throw Error(`Failed to parse JSON with error '${e.message}'. JSON was: ${t}`)}}function D(t){if(""===t.trim())return;let e=[],r=!1,i=t=>e.push(t),n=(...t)=>{let r=e[e.length-1];if(void 0===r||!t.includes(r))throw Error("illegal state");e.pop()},s=()=>Error(`Illegal state (json: ${t})`);for(let o of t){let t=e.length>0?e[e.length-1]:null,a=!1;if('"'===o)if(null===t)i('"value');else if("["===t||null===t)i('"value');else if("{"===t)i('"prop');else if('"prop":'===t)n('"prop":'),i('"value');else if('"prop'===t)r||(n('"prop'),i('"prop"'));else{if('"value'!==t)throw s();r||n('"value')}else if("["===o){if("["===t||null===t)i("[");else if('"prop":'===t)n('"prop":'),i("[");else if('"prop'!==t&&'"value'!==t)throw s()}else if("{"===o){if(null===t||"["===t||'"prop":'===t)i("{");else if('"prop'!==t&&'"value'!==t)throw s()}else if("\\"===o){if('"prop'!==t&&'"value'!==t)throw s();r||(a=!0)}else if(":"===o){if('"prop"'===t)n('"prop"'),i('"prop":');else if('"prop'!==t&&'"value'!==t)throw s()}else if("n"===o){if('"prop":'===t)n('"prop":'),i("n");else if("["===t||null===t)i("n");else if('"prop'!==t&&'"value'!==t)throw s()}else if("u"===o){if("n"===t)n("n"),i("nu");else if("tr"===t)n("tr"),i("tru");else if('"prop'!==t&&'"value'!==t)throw s()}else if("l"===o){if("nu"===t)n("nu"),i("nul");else if("nul"===t)n("nul");else if("fa"===t)n("fa"),i("fal");else if('"prop'!==t&&'"value'!==t)throw s()}else if("t"===o){if('"prop":'===t)n('"prop":'),i("t");else if('"prop'!==t&&'"value'!==t){if("["!==t&&null!==t)throw s();i("t")}}else if("r"===o){if("t"===t)n("t"),i("tr");else if('"prop'!==t&&'"value'!==t)throw s()}else if("e"===o){if("tru"===t)n("tru");else if("fals"===t)n("fals");else if('"prop'!==t&&'"value'!==t)throw s()}else if("f"===o){if('"prop":'===t)n('"prop":'),i("f");else if('"prop'!==t&&'"value'!==t){if("["!==t&&null!==t)throw s();i("f")}}else if("a"===o){if("f"===t)n("f"),i("fa");else if('"prop'!==t&&'"value'!==t)throw s()}else if("s"===o){if("fal"===t)n("fal"),i("fals");else if('"prop'!==t&&'"value'!==t)throw s()}else if("."===o){if('"prop":'===t)n('"prop":'),i("number.");else if('"prop'!==t&&'"value'!==t)if("{"===t)i("number.");else{if("["!==t&&null!==t)throw s();i("number.")}}else if(o.match(/[0-9]/)){if("number."===t)n("number.");else if('"prop'!==t&&'"value'!==t)if('"prop":'===t)n('"prop":');else if("{"!==t&&"["!==t&&null!==t)throw s()}else if("}"===o){if("{"===t)n("{");else if("number."===t)n("number."),n("{");else if('"prop'!==t&&'"value'!==t)throw s()}else if("]"===o){if("["===t)n("[");else if('"prop'!==t&&'"value'!==t)throw s()}else","===o&&"number."===t&&n("number.");r=a}let o=e.reverse().map((t=>{switch(t){case"{":return"}";case"[":return"]";case'"prop':return'": null';case'"prop"':return": null";case'"prop":':return" null";case"n":return"ull";case"nu":return"ll";case"nul":return"l";case"t":return"rue";case"tr":return"ue";case"tru":case"fals":return"e";case"f":return"alse";case"fa":return"lse";case"fal":return"se";case'"value':return'"';case"number.":return"0";default:throw s()}})).join("");return G((r?t.substring(0,t.length-1):t).replace(/( |\n|,)+$/,"")+o)}function Y(t){if(void 0===t)throw Error("Value is undefined");return t}var H=[];for(let t=0;t<256;++t)H.push((t+256).toString(16).slice(1));import{randomFillSync as z}from"crypto";var q=new Uint8Array(256),K=q.length;import{randomUUID as Q}from"crypto";var W={randomUUID:Q},X=function(t,e,r){if(W.randomUUID&&!e&&!t)return W.randomUUID();let i=(t=t||{}).random??t.rng?.()??(K>q.length-16&&(z(q),K=0),q.slice(K,K+=16));if(i.length<16)throw Error("Random bytes length must be >= 16");if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,e){if((r=r||0)<0||r+16>e.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let t=0;t<16;++t)e[r+t]=i[t];return e}return function(t,e=0){return(H[t[e+0]]+H[t[e+1]]+H[t[e+2]]+H[t[e+3]]+"-"+H[t[e+4]]+H[t[e+5]]+"-"+H[t[e+6]]+H[t[e+7]]+"-"+H[t[e+8]]+H[t[e+9]]+"-"+H[t[e+10]]+H[t[e+11]]+H[t[e+12]]+H[t[e+13]]+H[t[e+14]]+H[t[e+15]]).toLowerCase()}(i)},Z=class extends Error{data;httpStatus=400;constructor(t,e){let r=t.map((t=>{if(t.expectedProp)return{expectedProp:(t.path+".").replace(/^root\./,"")+t.expectedProp};if(t.expectedType)return{expectedType:t.expectedType.map(ft).join(" | "),path:t.path,insteadGot:t.value};if(t.unknownProp)return{unknownProp:(t.path+".").replace(/^root\./,"")+t.unknownProp};throw Error("illegal state")}));super(e??"Value is of the wrong format: "+JSON.stringify(r,null,2)),this.data=r}};function tt(t){return new it([],t)}function et(t,e,r,i){let n=e.map((e=>function(t,e,r,i){let{ignoreUnknownProps:n=!0,juggleBetweenNullAndUndefined:s=!1}=i,{problems:o=[],juggleTo:a}=(()=>{switch(e.type){case"array":{if(!Array.isArray(t))return{problems:[{expectedType:[e],path:r,value:t}]};if(0===t.length)return{};let n=t.map((t=>et(t,e.elementType,r+"[..]",i))),s=(()=>{if(0!==n.filter((t=>t.juggleTo)).length)return{value:n.map((t=>void 0===t.juggleTo?t.value:t.juggleTo.value))}})();return{problems:n.flatMap((t=>t.problems)),juggleTo:s}}case"boolean":return"boolean"!=typeof t?{problems:[{expectedType:[e],path:r,value:t}]}:{};case"undefined":return void 0===t?{}:s&&null===t?{juggleTo:{value:void 0}}:{problems:[{expectedType:[e],path:r,value:t}]};case"object":{if("object"!=typeof t||null===t)return{problems:[{expectedType:[e],path:r,value:t}]};let s=[],o=[];for(let n in e.props){let a=e.props[n],l=et(n in t?t[n]:void 0,a.optional?[...a.type,{type:"undefined"}]:a.type,r+"."+n,i);void 0!==l.juggleTo&&o.push({key:n,juggleTo:l.juggleTo.value}),s.push(...l.problems)}if(!n)for(let i in t)i in e.props||s.push({unknownProp:i,path:r,value:t});return{problems:s,juggleTo:(()=>{if(0===o.length)return;let e={...t};for(let t of o)e[t.key]=t.juggleTo;return{value:e}})()}}case"string":return{problems:"string"==typeof t?[]:[{expectedType:[e],path:r,value:t}]};case"null":return null===t?{}:s&&void 0===t?{juggleTo:{value:null}}:{problems:[{expectedType:[e],path:r,value:t}]};case"number":return{problems:"number"==typeof t?[]:[{expectedType:[e],path:r,value:t}]};case"constant":return{problems:t===e.value?[]:[{expectedType:[e],path:r,value:t}]}}})();return{type:e,value:t,problems:o,juggleTo:a}}(t,e,r,i)));if(function(t){return t.some((t=>0===t.problems.length&&void 0===t.juggleTo))}(n))return{types:e,value:t,problems:[]};let s=function(t){let e=t.filter((t=>0===t.problems.length&&void 0!==t.juggleTo));if(e.length>1)throw Error("Illegal State");return e[0]?.juggleTo}(n);if(void 0!==s)return{types:e,value:t,problems:[],juggleTo:s};let o=n.flatMap((t=>t.problems.filter((t=>void 0!==t.expectedType&&t.path===r))));return o.length>0?{types:e,value:t,problems:[{expectedType:o.flatMap((t=>t.expectedType)),path:r,value:t}]}:{types:e,value:t,problems:n.flatMap((t=>t.problems))}}var rt=class{constructor(t,e,r=void 0){this.type=t,this.value=e,this.l=r}},it=class t extends rt{array(e){let r=e(new t([],this.value)),i=new nt([{type:"array",elementType:r.type}],this.value);return new nt([...this.type,...i.type],this.value)}object(t){let e=t(new st([{type:"object",props:{}}],this.value));return new nt([...this.type,...e.type],this.value)}string(){return new nt([...this.type,{type:"string"}],this.value)}number(){return new nt([...this.type,{type:"number"}],this.value)}boolean(){return new nt([...this.type,{type:"boolean"}],this.value)}constant(t,...e){return new lt([...this.type,{type:"constant",value:t},...(e??[]).map((t=>({type:"constant",value:t})))],this.value)}null(){return new nt([...this.type,{type:"null"}],this.value)}undefined(){return new nt([...this.type,{type:"undefined"}],this.value)}any(){return new nt([],this.value)}},nt=class t extends rt{orArray(e){let r=e(new t([],this.value)),i=new t([{type:"array",elementType:r.type}],this.value);return new t([...this.type,...i.type],this.value)}orObject(e){let r=e(new st([{type:"object",props:{}}],this.value));return new t([...this.type,...r.type],this.value)}orString(){return new t([...this.type,{type:"string"}],this.value)}orNumber(){return new t([...this.type,{type:"number"}],this.value)}orBoolean(){return new t([...this.type,{type:"boolean"}],this.value)}orConstant(t,...e){return new lt([...this.type,{type:"constant",value:t},...(e??[]).map((t=>({type:"constant",value:t})))],this.value)}orNull(){return new t([...this.type,{type:"null"}],this.value)}orUndefined(){return new t([...this.type,{type:"undefined"}],this.value)}},st=class t{constructor(t,e){this.type=t,this.value=e}mayHave(t,e,r){return this.has(t,e,!0,r)}canHaveString(t,e){return this.mayHave(t,(t=>t.string()),e)}canHaveNumber(t,e){return this.mayHave(t,(t=>t.number()),e)}canHaveBoolean(t,e){return this.mayHave(t,(t=>t.boolean()),e)}canHaveConstant(t,[e,...r],i){return this.mayHave(t,(t=>t.constant(e,...r)),i)}has(e,r,i=!1,n){let{optional:s,comment:o}="string"==typeof i?{optional:!1,comment:i}:{optional:i,comment:n},a=1===this.type.length?this.type[0]:void 0;if(void 0===a||"object"!==a.type)throw Error("illegal state");let l=r(new at([],this.value)),u=l.type,h=l.u;return new t([{...a,props:{...a.props,[e]:{optional:s,type:u,comment:(()=>{let t=[...h,...void 0!==o?[o]:[]];return t.length>0?t.join(". "):void 0})()}}}],this.value)}hasString(t,e){return this.has(t,(t=>t.string()),!1,e)}hasNumber(t,e){return this.has(t,(t=>t.number()),!1,e)}hasBoolean(t,e){return this.has(t,(t=>t.boolean()),!1,e)}hasConstant(t,e,r,...i){let{constants:n,comment:s}=Array.isArray(e)?{constants:e,comment:r}:{constants:[e,...void 0!==r?[r]:[],...i],comment:void 0};return this.has(t,(t=>t.constant(...n)),!1,s)}},ot=class extends rt{constructor(t,e,r=[]){super(t,e),this.u=r}withComment(t){return new lt(this.type,this.value,[...this.u,t])}},at=class extends ot{array(t){let e=t(new it([],this.value)),r=new nt([{type:"array",elementType:e.type}],this.value);return new lt([...this.type,...r.type],this.value)}object(t){let e=t(new st([{type:"object",props:{}}],this.value));return new lt([...this.type,...e.type],this.value)}string(){return new lt([...this.type,{type:"string"}],this.value)}number(){return new lt([...this.type,{type:"number"}],this.value)}boolean(){return new lt([...this.type,{type:"boolean"}],this.value)}constant(...t){return new lt([...this.type,...t.map((t=>({type:"constant",value:t})))],this.value)}null(){return new lt([...this.type,{type:"null"}],this.value)}undefined(){return new lt([...this.type,{type:"undefined"}],this.value)}},lt=class t extends ot{orArray(e){let r=e(new nt([],this.value)),i=new nt([{type:"array",elementType:r.type}],this.value);return new t([...this.type,...i.type],this.value)}orObject(e){let r=e(new st([{type:"object",props:{}}],this.value));return new t([...this.type,...r.type],this.value)}orString(){return new t([...this.type,{type:"string"}],this.value)}orNumber(){return new t([...this.type,{type:"number"}],this.value)}orBoolean(){return new t([...this.type,{type:"boolean"}],this.value)}orConstant(...e){return new t([...this.type,...e.map((t=>({type:"constant",value:t})))],this.value)}orNull(){return new t([...this.type,{type:"null"}],this.value)}orUndefined(){return new t([...this.type,{type:"undefined"}],this.value)}};function ut(t,e,r={}){let{problems:i,juggleTo:n}=et(t,e.type,"root",r);if(i.length>0)throw new Z(i,r.errorMessage);return void 0!==n?n.value:t}function ht(t){return pt(t.type)}function pt(t,e=0){if(Array.isArray(t))return t.map((t=>pt(t,e))).join(" | ");switch(t.type){case"array":return pt(t.elementType,e)+"[]";case"boolean":return"boolean";case"undefined":return"undefined";case"object":{let r=Object.keys(t.props);return"{\n"+r.map(((i,n)=>{let s=t.props[i],o=pt(s.type,e+1),a=n<r.length-1?",":"",l=void 0!==s.comment?" // "+s.comment:"";return s.optional?`${ct(e+1)}[${i}: ${o}${a}]${l}\n`:`${ct(e+1)}${i}: ${o}${a}${l}\n`})).join("")+ct(e)+"}"}case"string":return"string";case"null":return"null";case"number":return"number";case"constant":return`"${t.value}"`}}function ct(t){let e="";for(let r=0;r<t;r++)e+=" ";return e}function ft(t){return"constant"===t.type?`'${t.value}'`:t.type}async function wt(t,e,r="gpt-image-1",i){let n=await fetch("https://api.openai.com/v1/images/generations",{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer "+t},body:JSON.stringify({model:r,prompt:e,size:i})});if(!n.ok){let t=await n.json();throw Error(`OpenAI API error: ${n.status} ${JSON.stringify(t)}`)}let s=await n.json();if(!s.data?.[0]?.b64_json)throw Error("Invalid response structure from OpenAI API");return Uint8Array.from(atob(s.data[0].b64_json),(t=>t.charCodeAt(0)))}import{writeFile as dt}from"fs";var mt={gpt_3_5_turbo:"gpt-3.5-turbo",gpt_3_5_turbo_0125:"gpt-3.5-turbo-0125",gpt_3_5_turbo_1106:"gpt-3.5-turbo-1106",gpt_3_5_turbo_16k:"gpt-3.5-turbo-16k",gpt_3_5_turbo_instruct:"gpt-3.5-turbo-instruct",gpt_3_5_turbo_instruct_0914:"gpt-3.5-turbo-instruct-0914",gpt_4:"gpt-4",gpt_4_0125_preview:"gpt-4-0125-preview",gpt_4_0613:"gpt-4-0613",gpt_4_1106_preview:"gpt-4-1106-preview",gpt_4_turbo:"gpt-4-turbo",gpt_4_turbo_2024_04_09:"gpt-4-turbo-2024-04-09",gpt_4_turbo_preview:"gpt-4-turbo-preview",gpt_4_1:"gpt-4.1",gpt_4_1_2025_04_14:"gpt-4.1-2025-04-14",gpt_4_1_mini:"gpt-4.1-mini",gpt_4_1_mini_2025_04_14:"gpt-4.1-mini-2025-04-14",gpt_4_1_nano:"gpt-4.1-nano",gpt_4_1_nano_2025_04_14:"gpt-4.1-nano-2025-04-14",gpt_4_5_preview:"gpt-4.5-preview",gpt_4_5_preview_2025_02_27:"gpt-4.5-preview-2025-02-27",gpt_4o:"gpt-4o",gpt_4o_2024_05_13:"gpt-4o-2024-05-13",gpt_4o_2024_08_06:"gpt-4o-2024-08-06",gpt_4o_2024_11_20:"gpt-4o-2024-11-20",gpt_4o_audio_preview:"gpt-4o-audio-preview",gpt_4o_audio_preview_2024_10_01:"gpt-4o-audio-preview-2024-10-01",gpt_4o_audio_preview_2024_12_17:"gpt-4o-audio-preview-2024-12-17",gpt_4o_mini:"gpt-4o-mini",gpt_4o_mini_2024_07_18:"gpt-4o-mini-2024-07-18",gpt_4o_mini_audio_preview:"gpt-4o-mini-audio-preview",gpt_4o_mini_audio_preview_2024_12_17:"gpt-4o-mini-audio-preview-2024-12-17",gpt_4o_mini_realtime_preview:"gpt-4o-mini-realtime-preview",gpt_4o_mini_realtime_preview_2024_12_17:"gpt-4o-mini-realtime-preview-2024-12-17",gpt_4o_mini_search_preview:"gpt-4o-mini-search-preview",gpt_4o_mini_search_preview_2025_03_11:"gpt-4o-mini-search-preview-2025-03-11",gpt_4o_mini_transcribe:"gpt-4o-mini-transcribe",gpt_4o_mini_tts:"gpt-4o-mini-tts",gpt_4o_realtime_preview:"gpt-4o-realtime-preview",gpt_4o_realtime_preview_2024_10_01:"gpt-4o-realtime-preview-2024-10-01",gpt_4o_realtime_preview_2024_12_17:"gpt-4o-realtime-preview-2024-12-17",gpt_4o_search_preview:"gpt-4o-search-preview",gpt_4o_search_preview_2025_03_11:"gpt-4o-search-preview-2025-03-11",gpt_4o_transcribe:"gpt-4o-transcribe",gpt_image_1:"gpt-image-1",o1:"o1",o1_2024_12_17:"o1-2024-12-17",o1_mini:"o1-mini",o1_mini_2024_09_12:"o1-mini-2024-09-12",o1_preview:"o1-preview",o1_preview_2024_09_12:"o1-preview-2024-09-12",o1_pro:"o1-pro",o1_pro_2025_03_19:"o1-pro-2025-03-19",o3:"o3",o3_2025_04_16:"o3-2025-04-16",o3_mini:"o3-mini",o3_mini_2025_01_31:"o3-mini-2025-01-31",o4_mini:"o4-mini",o4_mini_2025_04_16:"o4-mini-2025-04-16",omni_moderation_2024_09_26:"omni-moderation-2024-09-26",omni_moderation_latest:"omni-moderation-latest"},yt={dall_e_2:"dall-e-2",dall_e_3:"dall-e-3",gpt_image_1:"gpt-image-1"},_t=class{constructor(t,e){this.apiKeys=t,this.config=e}chat(t,e,...r){let{toPrompt:i}=(()=>{if("function"==typeof t)return{toPrompt:t,args:e};if("string"==typeof t)return{toPrompt:()=>t,args:void 0};if(Array.isArray(t)){let e=0===t.length?[{user:""}]:t;return{toPrompt:()=>e,args:void 0}}{let i=[t,...void 0!==e?[e]:[],...r],n=0===i.length?[{user:""}]:i;return{toPrompt:()=>n,args:void 0}}})();return new xt(this,i,e,kt(),void 0,void 0,void 0)}image(t){return new gt(t,void 0,void 0,this)}},gt=class{constructor(t,e,r,i){this.prompt=t,this.h=e,this.p=r,this.aiClient=i}async then(t,e){try{let e=await this.getResponseAsString();return L(t)?await t(e):e}catch(t){if(L(e))return await e(t);throw t}}async catch(t){try{return await this.getResponseAsString()}catch(e){if(L(t))return t(e);throw e}}async finally(t){try{return await this.getResponseAsString()}finally{t?.()}}get[Symbol.toStringTag](){return"ImagePrompt"}model(t){return this.h=t,this}size(t){return this.p=t,this}toFile(t){return new vt(this.prompt,this.h,this.p,t,this.aiClient)}async getResponseAsString(){let t=w(await this.aiClient.apiKeys.openai).canBeString().andNothingElse({errorMessage:"No OpenAI access token set"});return await wt(t,this.prompt)}},vt=class{constructor(t,e,r,i,n){this.prompt=t,this.h=e,this.p=r,this.fileName=i,this.aiClient=n}async then(t,e){try{let e=await this.getResponseAsFile();return L(t)?await t(e):e}catch(t){if(L(e))return await e(t);throw t}}async catch(t){try{return await this.getResponseAsFile()}catch(e){if(L(t))return t(e);throw e}}async finally(t){try{return await this.getResponseAsFile()}finally{t?.()}}get[Symbol.toStringTag](){return"ImageFilePrompt"}model(t){return this.h=t,this}size(t){return this.p=t,this}async getResponseAsFile(){let t=w(await this.aiClient.apiKeys.openai).canBeString().andNothingElse({errorMessage:"No OpenAI access token set"}),e=await wt(t,this.prompt,this.h,this.p);return new Promise(((t,r)=>{dt(this.fileName,e,(i=>{i?r(i):t(new File([e],this.fileName,{type:"image/png"}))}))}))}},bt=new _t(void 0,{});function At(t){let e=Tt(t);bt.apiKeys=Nt(e),bt.config=e}function Et(t){let e=Tt(t);return new _t(Nt(e),e)}function Tt(t){return{promptGridApiKey:(()=>{let e="string"==typeof t?t:t.promptGridApiKey;return ut(e,tt(e).string().orUndefined(),{errorMessage:"Please provide a valid API key; got "+e})})(),apiKeys:"object"==typeof t&&null!==t?t.apiKeys:void 0,debugMode:"object"==typeof t&&null!==t&&t.debugMode}}function Nt(t){let e=t.promptGridApiKey,r=t.apiKeys,i=void 0!==e?(async()=>{let t=await(async()=>{try{return await fetch(A()+"/handshake",{method:"POST",headers:{"Content-Type":"application/json","User-Agent":"promptgun",Authorization:"Bearer "+e}})}catch{throw Error("HTTP called failed when doing handshake")}})();if(200!==t.status){let e=await t.text();throw Error(`Handshake failed with status ${t.status}, body: ${e}`)}return await t.json()})():void 0;return{promptgrid:e,openai:(async()=>r?.openai??(await i)?.apiKeys.openai)()}}var Ut=new Map;function St(t){let e=t??bt;if(void 0===e.apiKeys)throw Error("No LLM set up. Call setupPromptGun first: ```import { setupPromptGun } from 'promptgun';\n\nsetupPromptGun({openAI: \"YOUR_OPENAI_API_KEY\"});\n```");return new Lt(e,kt())}var Lt=class{constructor(t,e){this.aiClient=t,this.callingCodeLine=e}completeChat(t,e){return new xt(this.aiClient,t,e,kt(),void 0,void 0,void 0)}},xt=class{constructor(t,e,r,i,n,s,o){this.aiClient=t,this.promptSupplier=e,this.promptSupplierArgs=r,this.callingCodeLine=i,this.m=n,this._=s,this.h=o;let a=this;this.generator=async function*(){yield*await jt(a.aiClient,o,a.promptSupplier(a.promptSupplierArgs),!1,a.promptName,n,s,i)}()}generator;promptName;name(t){return this.promptName=t,this}model(t){return this.h=t,this}temperature(t){return this.m=t,this}topP(t){return this._=t,this}next(...[t]){return this.generator.next(t)}return(t){return this.generator.return(t)}throw(t){return this.generator.throw(t)}[Symbol.asyncIterator](){return this}async then(t,e){try{let e=await this.getResponseAsString();return L(t)?await t(e):e}catch(t){if(L(e))return await e(t);throw t}}async catch(t){try{return await this.getResponseAsString()}catch(e){if(L(t))return t(e);throw e}}async finally(t){try{return await this.getResponseAsString()}finally{t?.()}}get[Symbol.toStringTag](){return"BasicPrompt"}get(t){return new Pt(this.aiClient,this.promptSupplier,this.promptSupplierArgs,t,kt(),this.promptName,this.m,this._,this.h)}getBoolean(){return this.get((t=>t.boolean()))}getString(){return this.get((t=>t.string()))}getNumber(){return this.get((t=>t.number()))}getObject(t){return this.get((e=>e.object(t)))}getArray(t){return new Ot(this.aiClient,this.promptSupplier,this.promptSupplierArgs,(e=>e.array(t)),this.callingCodeLine,this.promptName,this.m,this._,this.h)}getAny(){return this.get((t=>t.any()))}async getResponseAsString(){let t="";for await(let e of this)t+=e;return t}},Pt=class extends J{constructor(t,e,r,i,n,s,o,a,l){let u=async function*(){yield*await jt(t,l,e(r),void 0===i||i(tt(void 0)),s,o,a,n)}(),p=h.Flux.fromGenerator(u),c=(new T).processDataBuffer(p);super(),this.aiClient=t,this.promptSupplier=e,this.promptSupplierArgs=r,this.jsonTypeSupplier=i,this.callingCodeLine=n,this.promptName=s,this.m=o,this._=a,this.h=l;let f=this,w=(new F).parse(c);void 0!==i?w.onProperty("result",(t=>t.onEachExcerpt((t=>{void 0!==t.token&&this.push(t)})))):w.onEachExcerpt((t=>{void 0!==t.token&&this.push(t)})),this.stringGenerator=async function*(){for await(let t of c)void 0!==t.token?w.push(t):void 0!==t.source&&(yield t.source)}(),this.partialJsonGenerator=async function*(){let t="";for await(let e of f.stringGenerator){t+=e;let r=D(t);yield void 0!==i?r?.result:r}}()}stringGenerator;partialJsonGenerator;next(...[t]){return this.partialJsonGenerator.next(t)}return(t){return this.partialJsonGenerator.return(t)}throw(t){return this.partialJsonGenerator.throw(t)}[Symbol.asyncIterator](){return this.partialJsonGenerator}async then(t,e){try{let e=await this.getResponse();return L(t)?await t(e):e}catch(t){if(L(e))return await e(t);throw t}}async catch(t){try{return await this.getResponse()}catch(e){if(L(t))return t(e);throw e}}async finally(t){try{return await this.getResponse()}finally{t?.()}}get[Symbol.toStringTag](){return"JsonPrompt"}name(t){return this.promptName=t,this}model(t){return this.h=t,this}temperature(t){return this.m=t,this}topP(t){return this._=t,this}async getResponse(){let t=await this.getResponseAsString(),e=this.jsonTypeSupplier,r=G(t),i=void 0!==e?r?.result:r;if(void 0===e)return i;try{return ut(i,e(tt(i)),{juggleBetweenNullAndUndefined:!0})}catch{return console.debug('AI forgot to pack result in {"result": ...} wrapper, continuing by using complete result'),ut(r,e(tt(i)),{juggleBetweenNullAndUndefined:!0})}}v;getResponseAsString(){return void 0===this.v&&(this.v=this.A()),this.v}async A(){let t="";for await(let e of this.stringGenerator)t+=e;return t}},Ot=class extends Pt{arrayElementGenerator;constructor(t,e,r,i,n,s,o,a,l){super(t,e,r,i,n,s,o,a,l);let u=this;this.arrayElementGenerator=h.Flux.create((async(t,e)=>{await u.onElement((async e=>{t(await e)})),e()}))}next(...[t]){return this.arrayElementGenerator.next(t)}return(t){return this.arrayElementGenerator.return(t)}throw(t){return this.arrayElementGenerator.throw(t)}[Symbol.asyncIterator](){return this.arrayElementGenerator}async then(t,e){try{let e=await this.getResponse();return L(t)?await t(e):e}catch(t){if(L(e))return await e(t);throw t}}async catch(t){try{return await this.getResponse()}catch(e){if(L(t))return t(e);throw e}}async finally(t){try{return await this.getResponse()}finally{t?.()}}get[Symbol.toStringTag](){return"JsonArrayPrompt"}};function Rt(t){return t??"gpt-4o"}async function*jt(t,e,r,i,n,s,o,a){let l=new Map;try{let u=w(await t.apiKeys.openai).canBeString().andNothingElse({errorMessage:"No OpenAI access token set"}),h=function(t){let e=t=>({role:void 0!==t.user?"user":void 0!==t.system?"system":"assistant",content:Y(t.user??t.system??t.assistant)});return"string"==typeof t?[{role:"user",content:t}]:Array.isArray(t)?t.map(e):[e(t)]}(r),f=(()=>{if(!i)return h;let t=(()=>{let t=h.length-1;for(;t>=0&&"user"===h[t].role;)t--;return t})();return[...h.slice(0,t+1),{role:"system",content:Ct(0,i)},...h.slice(t+1)]})(),{fileName:d,lineNumber:m}=a;if(d&&void 0!==m&&Array.from(Ut.keys()).filter((t=>t.startsWith(d+":"))).map((t=>parseInt(t.split(":")[1],10))).length>1&&!n)throw Error(`Multiple prompts found in ${d}. Please specify a name using .name() method.`);let y={id:n,callingCodeLine:a},_=X(),g={},v=(e,r)=>{let i=X(),n=async()=>{g.currentSave=g.save,g.save=void 0,await async function(t,e){try{if(void 0===e)return;let r=await fetch(A()+"/api/conversations",{method:"PUT",headers:{"Content-Type":"application/json",Authorization:"Bearer "+e},body:JSON.stringify(t)});if(!r.ok)throw Error(`Got ${r.status} when attempting to save conversation, with body: ${await r.text()}`)}catch(t){console.error("Error saving conversation",t)}}(e,t.apiKeys.promptgrid),await new Promise((t=>setTimeout(t,100))),await(g.save?.callback()),g.currentSave=void 0};void 0!==g.save&&l.delete(g.save.uuid),g.save={uuid:i,callback:n},void 0===g.currentSave&&l.set(i,{chunk:r,promise:n().then()})};v({conversationUuid:_,prompt:y,messages:f.map((t=>({messageUuid:X(),role:t.role,content:t.content||""})))});let b=X();v({conversationUuid:_,prompt:y,messages:[{messageUuid:b,role:"assistant",content:""}]});let E=function({model:t,prompt:e,apiToken:r,temperature:i,topP:n,requireJsonResponse:s}){return p.Flux.fromGeneratorFunction((async function*(){let o=new AbortController,a=await fetch("https://api.openai.com/v1/chat/completions",{headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:"Bearer "+r},method:"POST",signal:o.signal,body:JSON.stringify({model:t,messages:e,stream:!0,temperature:i,top_p:n,response_format:s?{type:"json_object"}:void 0})});if(a.status<200||a.status>=300){let t=function(t){try{return JSON.parse(t).error.message}catch{return t}}(await a.text());throw Error("OpenAPI reported: "+t)}if(null===a.body)throw Error("illegal state");let l="";yield*p.Flux.fromReadableStream(a.body,(()=>o.abort())).map((t=>c.decode(t,{stream:!0}))).flatMap((t=>t.replaceAll("data: [DONE]","").replace(/^data: /,"").split("data: "))).map((t=>t.replace(/[\n ]*$/,"").trim())).flatMap((t=>{l+=t;try{let t=JSON.parse(l);return l="",[t]}catch{return[]}})).map((t=>t.choices[0])).untilExcl((t=>null!=t.finish_reason)).map((t=>t.delta.content)).filter((t=>void 0!==t))}))}({model:Rt(e),prompt:f,apiToken:u,temperature:s,topP:o,requireJsonResponse:!1!==i}),T="";yield*E.doOnEach((t=>{T+=t,v({conversationUuid:_,prompt:y,messages:[{messageUuid:b,role:"assistant",content:T}]},t)}))}finally{if(t.config.debugMode){let t=Array.from(l.values()).map((t=>t.promise));await Promise.all(t)}}}function Ct(t,e){{if(!0===e)return"Respond with JSON";let t=e;return"Respond with JSON matching the Typescript-style type spec below, noting\n- a value can ONLY be null if explicitly stated, e.g. 'string | null'\n- optional properties (denoted with squared brackets) can only be achieved by not including it, NOT by setting them to null\n\nThe type:\n"+ht(new it([],void 0).object((e=>e.has("result",(()=>new lt(t.type,t.value))))))}}function kt(){let t=(Error().stack??"").split("\n").map((t=>t.trim())).filter((t=>t.startsWith("at ")))[2],e=t.match(/[^(]+\([^)]+\)/),{functionName:r,fileName:i,lineNumber:n}=e?t.match("at (?<functionName>[^(]*) ((?<scheme>.*://)?(?<fileName>[^:]*):(?<lineNumber>[0-9]+):(?<colNumber>[0-9]+))").groups:t.match("at (?<scheme>.*://)?(?<fileName>[^:]*):(?<lineNumber>[0-9]+):(?<colNumber>[0-9]+)").groups;return{stacktraceFrame:w(t).canBeString().andNothingElse(),fileName:w(i).canBeString().andNothingElse(),lineNumber:w(parseInt(n)).canBeNumber().andNothingElse(),functionName:w(r).canBeString().canBeUndefined().andNothingElse()}}export{_t as AIClient,mt as AiModel,xt as BasicPrompt,at as EmptyPropTypeSpec,it as EmptyTypeSpec,lt as FullPropTypeSpec,nt as FullTypeSpec,vt as ImageFilePrompt,gt as ImagePrompt,Ot as JsonArrayPrompt,Pt as JsonPrompt,yt as OpenaiImageModel,Lt as PromptBase,ot as PropTypeSpec,J as StreamedJsonChildElement,$ as StreamedJsonRootElement,st as TypeMemberSpec,rt as TypeSpec,bt as ai,kt as getCallerFileNameAndLineNumber,Et as newAIClient,Nt as obtainAiClientData,D as parsePartialJson,St as promptAI,At as setupAI};
1
+ var t=Object.create,e=Object.defineProperty,r=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,n=Object.getPrototypeOf,s={}.hasOwnProperty,o=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),a=(o,a,l)=>(l=null!=o?t(n(o)):{},((t,n,o,a)=>{if(n&&"object"==typeof n||"function"==typeof n)for(let o of i(n))!s.call(t,o)&&void 0!==o&&e(t,o,{get:()=>n[o],enumerable:!(a=r(n,o))||a.enumerable});return t})(!a&&o&&o.t?l:e(l,"default",{value:o,enumerable:!0}),o)),l=o((t=>{"use strict";Object.defineProperty(t,"t",{value:!0}),t.Flux=void 0;var e=class t{generator;upstream;handleCancel;i=!1;constructor(t,e,i){let n=this;this.generator=async function*(){try{yield*t}catch(t){throw yield r,t}finally{n.i=!0}}(),this.upstream=e,this.handleCancel=i}[Symbol.asyncIterator](){return this}async next(...t){let e=await this.generator.next(t);return e.value!==r?e:await this.next(t)}return(t){return this.generator.return(t)}throw(t){return this.generator.throw(t)}async cancel(t){if(!this.closed){if(void 0!==this.upstream)return this.upstream.cancel(t);void 0!==this.handleCancel?this.handleCancel(t):await this.throw(t)}}async then(t,e){try{let e=await this.asList();return null!=t?await t(e):e}catch(t){if(null!=e)return e(t);throw t}}async catch(t){try{return this.asList()}catch(e){if(null!=t)return t(e);throw e}}async finally(t){let e=await this.asList();return t?.(),e}get[Symbol.toStringTag](){return"Flux"}subscribe(t){let e=void 0!==t?this.doOnEach(t):this,r=()=>{e.next().then((t=>{t.done||r()})).catch((t=>{console.error(t)}))};return r(),{unsubscribe:()=>this.return()}}filter(e){let r=this;return t.constructFromGeneratorFunction((async function*(){for await(let t of r)e(t)&&(yield t)}),this)}untilExcl(e){let r=this;return t.constructFromGeneratorFunction((async function*(){for await(let t of r){if(e(t))break;yield t}}),this)}doOnEach(e){let r=this;return t.constructFromGeneratorFunction((async function*(){for await(let t of r)e(t),yield t}),this)}doAfterLast(e){let r=this,i=[];return t.constructFromGeneratorFunction((async function*(){for await(let t of r)i.push(t),yield t;await e(i)}),this)}map(e){let r=this;return t.constructFromGeneratorFunction((async function*(){for await(let t of r)yield e(t)}),this)}take(e){let r=this;return t.constructFromGeneratorFunction((async function*(){let t=0;for await(let i of r){if(t>=e){r.cancel();break}t++,yield i}}),this)}flatMap(e){let r=this;return t.constructFromGeneratorFunction((async function*(){for await(let t of r){let r=e(t);if(Array.isArray(r))for(let t of r)yield t;else yield await r}}),this)}transform(e){let r=e(this);return t.constructFromGeneratorFunction((async function*(){for await(let t of r)yield t}),this)}async reduce(t,e){let r=e;for await(let e of this)r=t(r,e);return r}async asList(){let t=[];for await(let e of this)t.push(e);return t}async whenComplete(){for await(let t of this);}static create(e){let r,i=[],n=[],s=!1,o=t=>{if(s)throw Error("Cannot push to a completed generator");n.length>0?n.shift().resolve({done:!1,value:t}):i.push(t)},a=()=>{for(s=!0;n.length>0;)n.shift().resolve({done:!0,value:void 0})},l=t=>{r={value:t},n.shift()?.reject(t)};return(async()=>{try{await e(o,a,l)}catch(t){l(t)}})(),t.fromGenerator({[Symbol.asyncIterator](){return this},next(...t){if(r){let t=r.value;return r=void 0,Promise.reject(t)}if(i.length>0){let t=i.shift();return Promise.resolve({done:!1,value:t})}return s?Promise.resolve({done:!0,value:void 0}):new Promise(((t,e)=>{n.push({resolve:t,reject:e})}))},return:()=>(a(),Promise.resolve({done:!0,value:void 0})),throw:t=>(l(t),Promise.reject(t))})}static fromArray(e){return t.fromGeneratorFunction((async function*(){for(let t of e)yield t}))}static constructFromGeneratorFunction(e,r,i){return new t(e(),r,i)}static fromGeneratorFunction(e,r){return t.constructFromGeneratorFunction(e,void 0,r)}static fromGenerator(e,r){return new t(e,void 0,r)}static fromReadableStream(e,r){return t.fromGeneratorFunction((async function*(){let t=e.getReader();try{let e;for(;!(e=await t.read()).done;)yield e.value}finally{await t.cancel()}}),r)}get closed(){return this.i}};t.Flux=e;var r={}})),u=o((t=>{"use strict";Object.defineProperty(t,"t",{value:!0}),t.Flux=void 0;var e=l();Object.defineProperty(t,"Flux",{enumerable:!0,get:function(){return e.Flux}})})),h=a(u(),1),p=a(u(),1),c=new TextDecoder,f=class extends Error{data;httpStatus=400;constructor(t,e){let r=t.map((t=>{if(t.expectedProp)return{expectedProp:(t.path+".").replace(/^root\./,"")+t.expectedProp};if(t.expectedType)return{expectedType:t.expectedType.map(v).join(" | "),path:t.path,insteadGot:t.value};if(t.unknownProp)return{unknownProp:(t.path+".").replace(/^root\./,"")+t.unknownProp};throw Error("illegal state")}));super(e??"Value is of the wrong format: "+JSON.stringify(r,null,2)),this.data=r}};function w(t){return new y([],t)}function d(t,e,r,i){let n=e.map((e=>function(t,e,r,i){let{ignoreUnknownProps:n=!0}=i;switch(e.type){case"array":return Array.isArray(t)?0===t.length?[]:d(t[0],e.elementType,r+"[..]",i):[{expectedType:[e],path:r,value:t}];case"boolean":return"boolean"!=typeof t?[{expectedType:[e],path:r,value:t}]:[];case"undefined":return void 0===t?[]:[{expectedType:[e],path:r,value:t}];case"object":{if("object"!=typeof t||null===t)return[{expectedType:[e],path:r,value:t}];let s=[];for(let n in e.props){let o=e.props[n];if(!(n in t)){o.optional||s.push({expectedProp:n,path:r,value:t});continue}let a=o.optional?[...o.type,{type:"undefined"}]:o.type;s.push(...d(t[n],a,r+"."+n,i))}if(!n)for(let i in t)i in e.props||s.push({unknownProp:i,path:r,value:t});return s}case"string":return"string"==typeof t?[]:[{expectedType:[e],path:r,value:t}];case"null":return null===t?[]:[{expectedType:[e],path:r,value:t}];case"number":return"number"==typeof t?[]:[{expectedType:[e],path:r,value:t}];case"constant":return t!==e.value||Number.isNaN(t)?[{expectedType:[e],path:r,value:t}]:[]}}(t,e,r,i)));if(n.some((t=>0===t.length)))return[];{let e=n.flatMap((t=>t.filter((t=>void 0!==t.expectedType&&t.path===r))));return e.length>0?[{expectedType:e.flatMap((t=>t.expectedType)),path:r,value:t}]:n.flatMap((t=>t))}}var m,y=class t{type;value;constructor(t=[],e){this.type=t,this.value=e}canBeArray(e){let r=e(new t([],this.value)),i=new t([{type:"array",elementType:r.type}],this.value);return new t([...this.type,...i.type],this.value)}canBeObject(e){let r=e(new t([{type:"object",props:{}}],this.value));return new t([...this.type,...r.type],this.value)}hasString(t){return this.hasProperty(t,(t=>t.canBeString()))}canHaveProperty(t,e){return this.hasProperty(t,e,!0)}hasProperty(e,r,i=!1){let n=1===this.type.length?this.type[0]:void 0;if(void 0===n||"object"!==n.type)throw Error("illegal state");let{type:s}=r(new t([],this.value));return new t([{...n,props:{...n.props,[e]:{optional:i,type:s}}}],this.value)}canBeString(){return new t([...this.type,{type:"string"}],this.value)}canBeNumber(){return new t([...this.type,{type:"number"}],this.value)}canBeBoolean(){return new t([...this.type,{type:"boolean"}],this.value)}canBeConstant(e){return new t([...this.type,{type:"constant",value:e}],this.value)}canBeNull(){return new t([...this.type,{type:"null"}],this.value)}canBeUndefined(){return new t([...this.type,{type:"undefined"}],this.value)}andNothingElse(t={}){let e=d(this.value,this.type,"root",t);if(e.length>0)throw new f(e,t.errorMessage);return this.value}orDefaultTo(t,e={}){return d(this.value,this.type,"root",e).length>0?t:this.value}describe(){return _(this.type)}};function _(t,e=0){if(Array.isArray(t))return t.map((t=>_(t,e))).join(" | ");switch(t.type){case"array":return _(t.elementType,e)+"[]";case"boolean":return"boolean";case"undefined":return"undefined";case"object":return"{\n"+Object.keys(t.props).map((r=>`${g(e+1)}${r}: ${_(t.props[r].type,e+1)}`)).join(",\n")+`\n${g(e)}}`;case"string":return"string";case"null":return"null";case"number":return"number";case"constant":return`"${t.value}"`}}function g(t){let e="";for(let r=0;r<t;r++)e+=" ";return e}function v(t){return"constant"===t.type?`'${t.value}'`:t.type}import{config as b}from"dotenv";function A(){if(!m){b();let t=function(){let t="t";t+="ps",t="ht"+t,t+=":",t+="/",t+="/ap",t+="i.pr";let e="i";return e="d.a"+e,e="gri"+e,t+="ompt",t+e}();m=w(t).canBeString().andNothingElse({errorMessage:"PromptGrid API URL invalid: "+t})}return m}var E=class{constructor(t,e,r,i,n=!1){this.type=t,this.source=e,this.value=r,this.fieldName=i,this.maybeIncomplete=n}},T=class t{jsonBuffer="";highestOffsetParsed=-1;static toJsonTokenFlux(e){return(new t).processDataBuffer(e)}processDataBuffer(t){return t.flatMap((t=>this.getExcerpts(t)))}getExcerpts(t){this.jsonBuffer+=t;let e,r=[],i=new N(this.jsonBuffer);for(;e=this.nextToken(i);)i.currentTokenLocation().getCharOffset()>this.highestOffsetParsed&&!e.maybeIncomplete&&(r.push({token:e}),this.highestOffsetParsed=i.currentTokenLocation().getCharOffset());return r.push({source:t}),r}nextToken(t){let e=t.nextToken();return"string"!=typeof e?e:void 0}},N=class{constructor(t){this.content=t}position=0;currentTokenType;parentFieldName;currentValue=null;context=[];nextToken(){let t=this.position;if(this.position>=this.content.length)return"string-ended";for(;this.position<this.content.length&&/\s/.test(this.content[this.position]);)this.position++;if(this.position>=this.content.length)return"string-ended";let e=e=>this.content.substring(t,e),r=this.content[this.position];switch(r){case"{":return this.position++,this.currentTokenType="START_OBJECT",this.pushContext("object"),new E(this.currentTokenType,e(this.position),void 0,this.parentFieldName);case"}":{this.position++,this.currentTokenType="END_OBJECT";let t=new E(this.currentTokenType,e(this.position),void 0,this.parentFieldName);return this.parentFieldName=void 0,this.popContext("object"),"field"===this.currentContextType&&this.popContext("field"),t}case"[":return this.position++,this.currentTokenType="START_ARRAY",this.pushContext("array"),new E(this.currentTokenType,e(this.position),void 0,this.parentFieldName);case"]":{this.position++,this.currentTokenType="END_ARRAY";let t=new E(this.currentTokenType,e(this.position),void 0,this.parentFieldName);return this.parentFieldName=void 0,this.popContext("array"),"field"===this.currentContextType&&this.popContext("field"),t}case'"':if("object"===this.currentContextType){this.currentTokenType="FIELD_NAME";let t=++this.position,r=this.content.indexOf('"',t);for(;r>=0&&"\\"===this.content[r-1];)r=this.content.indexOf('"',r+1);if(-1===r)return"token-incomplete";let i=this.content.substring(t,r);for(r++;r<this.content.length&&/\s/.test(this.content[r]);)r++;if(r===this.content.length)return"token-incomplete";if(":"!==this.content[r])throw Error("Expected token ':'");r++,this.position=r;let n=new E(this.currentTokenType,e(this.position),i,void 0);return this.parentFieldName=i,this.pushContext("field"),n}{this.currentTokenType="VALUE_STRING";let t=++this.position,r=this.content.indexOf('"',t);for(;r>0&&"\\"===this.content[r-1];)r=this.content.indexOf('"',r+1);if(-1===r)return"token-incomplete";let i=this.content.substring(t,r);this.position=r+1,this.currentValue=i;let n=new E(this.currentTokenType,e(this.position),i,"VALUE_STRING"===this.currentTokenType?this.parentFieldName:void 0);return this.parentFieldName=void 0,"field"===this.currentContextType&&this.popContext("field"),n}case"t":{let t=this.content.substring(this.position,this.position+4);if("true"===t)return this.position+=4,this.currentTokenType="VALUE_TRUE",this.currentValue=!0,"field"===this.currentContextType&&this.popContext("field"),new E(this.currentTokenType,e(this.position),this.currentValue,this.parentFieldName);if(t.length<4)return"token-incomplete";break}case"f":{let t=this.content.substring(this.position,this.position+5);if("false"===t)return this.position+=5,this.currentTokenType="VALUE_FALSE",this.currentValue=!1,"field"===this.currentContextType&&this.popContext("field"),new E(this.currentTokenType,e(this.position),this.currentValue,this.parentFieldName);if(t.length<5)return"token-incomplete";break}case"n":{let t=this.content.substring(this.position,this.position+4);if("null"===t)return this.position+=4,this.currentTokenType="VALUE_NULL",this.currentValue=null,"field"===this.currentContextType&&this.popContext("field"),new E(this.currentTokenType,e(this.position),this.currentValue,this.parentFieldName);if(t.length<4)return"token-incomplete";break}case",":return this.position++,this.currentTokenType="COMMA",new E(this.currentTokenType,e(this.position),void 0,void 0,!1);default:if(/[0-9-]/.test(r)){let t="",r=!1;for(;this.position<this.content.length&&(/[0-9]/.test(this.content[this.position])||"-"===this.content[this.position]||"."===this.content[this.position]||"e"===this.content[this.position]||"E"===this.content[this.position]||"+"===this.content[this.position]);)"."===this.content[this.position]&&(r=!0),t+=this.content[this.position++];r?(this.currentTokenType="VALUE_NUMBER_FLOAT",this.currentValue=parseFloat(t)):(this.currentTokenType="VALUE_NUMBER_INT",this.currentValue=parseInt(t,10));let i=this.position>=this.content.length;return"field"===this.currentContextType&&this.popContext("field"),new E(this.currentTokenType,e(this.position),this.currentValue,this.parentFieldName,i)}}throw new U("Invalid JSON at position "+this.position)}currentTokenLocation(){return{getCharOffset:()=>this.position}}get currentContextType(){return this.context[this.context.length-1]}pushContext(t){this.context.push(t)}popContext(t){if(0===this.context.length)throw Error("Cannot pop context, context empty");let e=this.currentContextType;if(e!==t)throw Error(`Cannot pop context \`${t}', current context '${e}'`);this.context.pop()}},U=class extends Error{constructor(t){super(t),this.name="JsonParseException"}},S=a(u(),1);function L(t){return null!=t}var x=class{receivedJson=[];propertyCallbacks=new Map;onElementCallbacks=new Set;onCompleteCallbacks=new Set;onEachExcerptCallbacks=new Set;currentToken;state=new R;receivedExcerpts=[];onElement(t){return this.onElementCallbacks.add(t),this}onProperty(t,e){return this.propertyCallbacks.has(t)||this.propertyCallbacks.set(t,[]),this.propertyCallbacks.get(t).push(e),this}onJsonStringProperty(t,e){return this.propertyCallbacks.has(t)||this.propertyCallbacks.set(t,[]),this.propertyCallbacks.get(t).push((t=>{let r=new V,i=[],n=new J;t.onEachExcerpt((t=>{void 0!==t.source&&i.push(t.source);let e=i.join(""),s=this.endsOnUnevenNumberOfBackslashes(e)?e.substring(0,e.length-1):e;i.length=0;let o=s.replace(/\\"/g,'"').substring(1),a=null!=t.token?o.substring(0,o.length-1):o;r.getExcerpts(a).forEach((t=>n.push(t)))})),e(n)})),this}onEachExcerpt(t){return this.onEachExcerptCallbacks.add(t),this.receivedExcerpts.forEach(t),this}async then(t,e){try{let e=await this.getResponseAsPromise();return L(t)?await t(e):e}catch(t){if(L(e))return await e(t);throw t}}async catch(t){try{return await this.getResponseAsPromise()}catch(e){if(L(t))return t(e);throw e}}async finally(t){try{return await this.getResponseAsPromise()}finally{t?.()}}get[Symbol.toStringTag](){return"StreamedJsonElement"}getResponseAsPromise(){return new Promise((t=>{this.onCompleteAs(t)}))}onComplete(t){this.o(this.toAsync(t),void 0)}o(t,e){this.onCompleteCallbacks.add({consumer:t,expectedTokenType:e})}onCompleteAsync(t){this.o(t,void 0)}onCompleteAs(t){this.onCompleteAsAsync(this.toAsync(t))}onCompleteAsAsync(t){this.o((e=>{let r=e.replace(/,$/,""),i=(()=>{try{return JSON.parse(r)}catch(t){throw t.message=`${t.message}. JSON string was: ${r}`,t}})();return t(i)}),void 0)}onCompleteAsString(t){this.o(this.toAsync(t),new Set(["VALUE_STRING","VALUE_NULL"]))}onCompleteAsStringAsync(t){this.o(t,new Set(["VALUE_STRING","VALUE_NULL"]))}onCompleteAsInt(t){this.o(this.toAsync(t),new Set(["VALUE_NUMBER_INT","VALUE_NULL"]))}onCompleteAsIntAsync(t){this.o(t,new Set(["VALUE_NUMBER_INT","VALUE_NULL"]))}onCompleteAsNumber(t){this.o(this.toAsync(t),new Set(["VALUE_NUMBER_INT","VALUE_NUMBER_FLOAT","VALUE_NULL"]))}onCompleteAsNumberAsync(t){this.o(t,new Set(["VALUE_NUMBER_INT","VALUE_NUMBER_FLOAT","VALUE_NULL"]))}onCompleteAsBoolean(t){this.o(this.toAsync(t),new Set(["VALUE_TRUE","VALUE_FALSE","VALUE_NULL"]))}onCompleteAsBooleanAsync(t){this.o(t,new Set(["VALUE_TRUE","VALUE_FALSE","VALUE_NULL"]))}whenComplete(){return new Promise((t=>{this.onComplete((e=>t(e)))}))}asJsonFlux(){return S.Flux.create(((t,e)=>{this.onEachExcerpt((e=>{e.source&&t(e.source)})),this.o((async()=>e()))}))}whenCompleteAs(){return new Promise((t=>{this.onCompleteAs(t)}))}async push(t){let e=t.token;if(this.onEachExcerptCallbacks.forEach((e=>e(t))),this.isState(O))return this.state.child.push(t);if(!e)return;let r=e.type;if(this.currentToken=e,this.isState(R))switch(r){case"START_OBJECT":if(this.onElementCallbacks.size>0)throw Error("registered onElement for object");return this.state=new C,void this.receivedJson.push(e.source);case"START_ARRAY":if(this.propertyCallbacks.size>0)throw Error("registered onProperty for array");return this.state=new k,void this.receivedJson.push(e.source);case"VALUE_STRING":case"VALUE_NUMBER_INT":case"VALUE_NUMBER_FLOAT":case"VALUE_TRUE":case"VALUE_FALSE":case"VALUE_NULL":return this.receivedJson.push(e.source),this.end();default:throw new B(e)}else if(this.isState(C))switch(r){case"FIELD_NAME":case"COMMA":return void this.receivedJson.push(e.source);case"END_OBJECT":return this.receivedJson.push(e.source),this.end();case"START_OBJECT":case"START_ARRAY":case"VALUE_STRING":case"VALUE_NUMBER_INT":case"VALUE_NUMBER_FLOAT":case"VALUE_TRUE":case"VALUE_FALSE":case"VALUE_NULL":{let r=new J;return r.onComplete((t=>{this.receivedJson.push(t),this.state=new C})),this.state=new I(r),this.propertyCallbacks.get(e.fieldName)?.forEach((t=>{t(r)})),r.push(t)}default:throw new B(e)}else if(this.isState(k))switch(r){case"END_ARRAY":return this.receivedJson.push(e.source),this.end();case"START_OBJECT":case"START_ARRAY":case"VALUE_STRING":case"VALUE_NUMBER_INT":case"VALUE_NUMBER_FLOAT":case"VALUE_TRUE":case"VALUE_FALSE":case"VALUE_NULL":{let e=new J;return e.onComplete((t=>{this.receivedJson.push(t),this.state=new k})),this.onElementCallbacks.forEach((t=>t(e))),this.state=new j(e),e.push(t)}case"COMMA":return void this.receivedJson.push(e.source);default:throw new B(e)}throw Error("Unknown state")}async end(){if(void 0===this.currentToken)throw Error("Illegal state");this.onCompleteCallbacks.forEach((t=>{let e=t.expectedTokenType,r=(()=>{if(void 0===e)return this.receivedJson.join("");if(!e.has(this.currentToken.type))throw Error(`Expected token type ${Array.from(e).join(", ")} but got ${this.currentToken.type}`);return this.currentToken.value})();t.consumer(r)}))}isState(t){return this.state instanceof t}endsOnUnevenNumberOfBackslashes(t){let e=0;for(let r=t.length-1;r>=0&&"\\"===t[r];r--)e++;return e%2==1}toAsync(t){return async e=>{t(e)}}},P=class{},O=class extends P{constructor(t){super(),this.child=t}},R=class extends P{},k=class extends P{},j=class extends O{constructor(t){super(t)}},C=class extends P{},I=class extends O{constructor(t){super(t)}},B=class extends Error{constructor(t){super("Unexpected token: "+t.type),this.name="UnexpectedTokenException"}},V=class{getExcerpts(t){return[{source:t}]}},J=class extends x{constructor(){super()}},M=a(u(),1),$=class extends x{jsonTokenFlux;constructor(t){super();let e=this;this.jsonTokenFlux=M.Flux.fromGeneratorFunction((async function*(){let r;for await(let i of t)void 0!==i.token&&(r?.token?.maybeIncomplete&&r.token.type===i.token.type&&!i.token.maybeIncomplete&&await e.push(i),r=i.token),(void 0===i.token||!i.token.maybeIncomplete)&&await e.push(i),yield i;r?.token?.maybeIncomplete&&await e.push(r)}))}whenComplete(){return this.jsonTokenFlux.then((()=>this.receivedJson.join("")))}asJsonFlux(){return this.jsonTokenFlux.map((t=>t.source)).filter((t=>void 0!==t))}},F=class{parse(t){return new $(t)}};function G(t){try{return JSON.parse(t)}catch(e){throw Error(`Failed to parse JSON with error '${e.message}'. JSON was: ${t}`)}}function D(t){if(""===t.trim())return;let e=[],r=!1,i=t=>e.push(t),n=(...t)=>{let r=e[e.length-1];if(void 0===r||!t.includes(r))throw Error("illegal state");e.pop()},s=()=>Error(`Illegal state (json: ${t})`);for(let o of t){let t=e.length>0?e[e.length-1]:null,a=!1;if('"'===o)if(null===t)i('"value');else if("["===t||null===t)i('"value');else if("{"===t)i('"prop');else if('"prop":'===t)n('"prop":'),i('"value');else if('"prop'===t)r||(n('"prop'),i('"prop"'));else{if('"value'!==t)throw s();r||n('"value')}else if("["===o){if("["===t||null===t)i("[");else if('"prop":'===t)n('"prop":'),i("[");else if('"prop'!==t&&'"value'!==t)throw s()}else if("{"===o){if(null===t||"["===t||'"prop":'===t)i("{");else if('"prop'!==t&&'"value'!==t)throw s()}else if("\\"===o){if('"prop'!==t&&'"value'!==t)throw s();r||(a=!0)}else if(":"===o){if('"prop"'===t)n('"prop"'),i('"prop":');else if('"prop'!==t&&'"value'!==t)throw s()}else if("n"===o){if('"prop":'===t)n('"prop":'),i("n");else if("["===t||null===t)i("n");else if('"prop'!==t&&'"value'!==t)throw s()}else if("u"===o){if("n"===t)n("n"),i("nu");else if("tr"===t)n("tr"),i("tru");else if('"prop'!==t&&'"value'!==t)throw s()}else if("l"===o){if("nu"===t)n("nu"),i("nul");else if("nul"===t)n("nul");else if("fa"===t)n("fa"),i("fal");else if('"prop'!==t&&'"value'!==t)throw s()}else if("t"===o){if('"prop":'===t)n('"prop":'),i("t");else if('"prop'!==t&&'"value'!==t){if("["!==t&&null!==t)throw s();i("t")}}else if("r"===o){if("t"===t)n("t"),i("tr");else if('"prop'!==t&&'"value'!==t)throw s()}else if("e"===o){if("tru"===t)n("tru");else if("fals"===t)n("fals");else if('"prop'!==t&&'"value'!==t)throw s()}else if("f"===o){if('"prop":'===t)n('"prop":'),i("f");else if('"prop'!==t&&'"value'!==t){if("["!==t&&null!==t)throw s();i("f")}}else if("a"===o){if("f"===t)n("f"),i("fa");else if('"prop'!==t&&'"value'!==t)throw s()}else if("s"===o){if("fal"===t)n("fal"),i("fals");else if('"prop'!==t&&'"value'!==t)throw s()}else if("."===o){if('"prop":'===t)n('"prop":'),i("number.");else if('"prop'!==t&&'"value'!==t)if("{"===t)i("number.");else{if("["!==t&&null!==t)throw s();i("number.")}}else if(o.match(/[0-9]/)){if("number."===t)n("number.");else if('"prop'!==t&&'"value'!==t)if('"prop":'===t)n('"prop":');else if("{"!==t&&"["!==t&&null!==t)throw s()}else if("}"===o){if("{"===t)n("{");else if("number."===t)n("number."),n("{");else if('"prop'!==t&&'"value'!==t)throw s()}else if("]"===o){if("["===t)n("[");else if('"prop'!==t&&'"value'!==t)throw s()}else","===o&&"number."===t&&n("number.");r=a}let o=e.reverse().map((t=>{switch(t){case"{":return"}";case"[":return"]";case'"prop':return'": null';case'"prop"':return": null";case'"prop":':return" null";case"n":return"ull";case"nu":return"ll";case"nul":return"l";case"t":return"rue";case"tr":return"ue";case"tru":case"fals":return"e";case"f":return"alse";case"fa":return"lse";case"fal":return"se";case'"value':return'"';case"number.":return"0";default:throw s()}})).join("");return G((r?t.substring(0,t.length-1):t).replace(/( |\n|,)+$/,"")+o)}function Y(t){if(void 0===t)throw Error("Value is undefined");return t}var H=[];for(let t=0;t<256;++t)H.push((t+256).toString(16).slice(1));import{randomFillSync as z}from"crypto";var q=new Uint8Array(256),K=q.length;import{randomUUID as Q}from"crypto";var W={randomUUID:Q},X=function(t,e,r){if(W.randomUUID&&!e&&!t)return W.randomUUID();let i=(t=t||{}).random??t.rng?.()??(K>q.length-16&&(z(q),K=0),q.slice(K,K+=16));if(i.length<16)throw Error("Random bytes length must be >= 16");if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,e){if((r=r||0)<0||r+16>e.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let t=0;t<16;++t)e[r+t]=i[t];return e}return function(t,e=0){return(H[t[e+0]]+H[t[e+1]]+H[t[e+2]]+H[t[e+3]]+"-"+H[t[e+4]]+H[t[e+5]]+"-"+H[t[e+6]]+H[t[e+7]]+"-"+H[t[e+8]]+H[t[e+9]]+"-"+H[t[e+10]]+H[t[e+11]]+H[t[e+12]]+H[t[e+13]]+H[t[e+14]]+H[t[e+15]]).toLowerCase()}(i)},Z=class extends Error{data;httpStatus=400;constructor(t,e){let r=t.map((t=>{if(t.expectedProp)return{expectedProp:(t.path+".").replace(/^root\./,"")+t.expectedProp};if(t.expectedType)return{expectedType:t.expectedType.map(ft).join(" | "),path:t.path,insteadGot:t.value};if(t.unknownProp)return{unknownProp:(t.path+".").replace(/^root\./,"")+t.unknownProp};throw Error("illegal state")}));super(e??"Value is of the wrong format: "+JSON.stringify(r,null,2)),this.data=r}};function tt(t){return new it([],t)}function et(t,e,r,i){let n=e.map((e=>function(t,e,r,i){let{ignoreUnknownProps:n=!0,juggleBetweenNullAndUndefined:s=!1}=i,{problems:o=[],juggleTo:a}=(()=>{switch(e.type){case"array":{if(!Array.isArray(t))return{problems:[{expectedType:[e],path:r,value:t}]};if(0===t.length)return{};let n=t.map((t=>et(t,e.elementType,r+"[..]",i))),s=(()=>{if(0!==n.filter((t=>t.juggleTo)).length)return{value:n.map((t=>void 0===t.juggleTo?t.value:t.juggleTo.value))}})();return{problems:n.flatMap((t=>t.problems)),juggleTo:s}}case"boolean":return"boolean"!=typeof t?{problems:[{expectedType:[e],path:r,value:t}]}:{};case"undefined":return void 0===t?{}:s&&null===t?{juggleTo:{value:void 0}}:{problems:[{expectedType:[e],path:r,value:t}]};case"object":{if("object"!=typeof t||null===t)return{problems:[{expectedType:[e],path:r,value:t}]};let s=[],o=[];for(let n in e.props){let a=e.props[n],l=et(n in t?t[n]:void 0,a.optional?[...a.type,{type:"undefined"}]:a.type,r+"."+n,i);void 0!==l.juggleTo&&o.push({key:n,juggleTo:l.juggleTo.value}),s.push(...l.problems)}if(!n)for(let i in t)i in e.props||s.push({unknownProp:i,path:r,value:t});return{problems:s,juggleTo:(()=>{if(0===o.length)return;let e={...t};for(let t of o)e[t.key]=t.juggleTo;return{value:e}})()}}case"string":return{problems:"string"==typeof t?[]:[{expectedType:[e],path:r,value:t}]};case"null":return null===t?{}:s&&void 0===t?{juggleTo:{value:null}}:{problems:[{expectedType:[e],path:r,value:t}]};case"number":return{problems:"number"==typeof t?[]:[{expectedType:[e],path:r,value:t}]};case"constant":return{problems:t===e.value?[]:[{expectedType:[e],path:r,value:t}]}}})();return{type:e,value:t,problems:o,juggleTo:a}}(t,e,r,i)));if(function(t){return t.some((t=>0===t.problems.length&&void 0===t.juggleTo))}(n))return{types:e,value:t,problems:[]};let s=function(t){let e=t.filter((t=>0===t.problems.length&&void 0!==t.juggleTo));if(e.length>1)throw Error("Illegal State");return e[0]?.juggleTo}(n);if(void 0!==s)return{types:e,value:t,problems:[],juggleTo:s};let o=n.flatMap((t=>t.problems.filter((t=>void 0!==t.expectedType&&t.path===r))));return o.length>0?{types:e,value:t,problems:[{expectedType:o.flatMap((t=>t.expectedType)),path:r,value:t}]}:{types:e,value:t,problems:n.flatMap((t=>t.problems))}}var rt=class{constructor(t,e,r=void 0){this.type=t,this.value=e,this.l=r}},it=class t extends rt{array(e){let r=e(new t([],this.value)),i=new nt([{type:"array",elementType:r.type}],this.value);return new nt([...this.type,...i.type],this.value)}object(t){let e=t(new st([{type:"object",props:{}}],this.value));return new nt([...this.type,...e.type],this.value)}string(){return new nt([...this.type,{type:"string"}],this.value)}number(){return new nt([...this.type,{type:"number"}],this.value)}boolean(){return new nt([...this.type,{type:"boolean"}],this.value)}constant(t,...e){return new lt([...this.type,{type:"constant",value:t},...(e??[]).map((t=>({type:"constant",value:t})))],this.value)}null(){return new nt([...this.type,{type:"null"}],this.value)}undefined(){return new nt([...this.type,{type:"undefined"}],this.value)}any(){return new nt([],this.value)}},nt=class t extends rt{orArray(e){let r=e(new t([],this.value)),i=new t([{type:"array",elementType:r.type}],this.value);return new t([...this.type,...i.type],this.value)}orObject(e){let r=e(new st([{type:"object",props:{}}],this.value));return new t([...this.type,...r.type],this.value)}orString(){return new t([...this.type,{type:"string"}],this.value)}orNumber(){return new t([...this.type,{type:"number"}],this.value)}orBoolean(){return new t([...this.type,{type:"boolean"}],this.value)}orConstant(t,...e){return new lt([...this.type,{type:"constant",value:t},...(e??[]).map((t=>({type:"constant",value:t})))],this.value)}orNull(){return new t([...this.type,{type:"null"}],this.value)}orUndefined(){return new t([...this.type,{type:"undefined"}],this.value)}},st=class t{constructor(t,e){this.type=t,this.value=e}mayHave(t,e,r){return this.has(t,e,!0,r)}canHaveString(t,e){return this.mayHave(t,(t=>t.string()),e)}canHaveNumber(t,e){return this.mayHave(t,(t=>t.number()),e)}canHaveBoolean(t,e){return this.mayHave(t,(t=>t.boolean()),e)}canHaveConstant(t,[e,...r],i){return this.mayHave(t,(t=>t.constant(e,...r)),i)}has(e,r,i=!1,n){let{optional:s,comment:o}="string"==typeof i?{optional:!1,comment:i}:{optional:i,comment:n},a=1===this.type.length?this.type[0]:void 0;if(void 0===a||"object"!==a.type)throw Error("illegal state");let l=r(new at([],this.value)),u=l.type,h=l.u;return new t([{...a,props:{...a.props,[e]:{optional:s,type:u,comment:(()=>{let t=[...h,...void 0!==o?[o]:[]];return t.length>0?t.join(". "):void 0})()}}}],this.value)}hasString(t,e){return this.has(t,(t=>t.string()),!1,e)}hasNumber(t,e){return this.has(t,(t=>t.number()),!1,e)}hasBoolean(t,e){return this.has(t,(t=>t.boolean()),!1,e)}hasConstant(t,e,r,...i){let{constants:n,comment:s}=Array.isArray(e)?{constants:e,comment:r}:{constants:[e,...void 0!==r?[r]:[],...i],comment:void 0};return this.has(t,(t=>t.constant(...n)),!1,s)}},ot=class extends rt{constructor(t,e,r=[]){super(t,e),this.u=r}withComment(t){return new lt(this.type,this.value,[...this.u,t])}},at=class extends ot{array(t){let e=t(new it([],this.value)),r=new nt([{type:"array",elementType:e.type}],this.value);return new lt([...this.type,...r.type],this.value)}object(t){let e=t(new st([{type:"object",props:{}}],this.value));return new lt([...this.type,...e.type],this.value)}string(){return new lt([...this.type,{type:"string"}],this.value)}number(){return new lt([...this.type,{type:"number"}],this.value)}boolean(){return new lt([...this.type,{type:"boolean"}],this.value)}constant(...t){return new lt([...this.type,...t.map((t=>({type:"constant",value:t})))],this.value)}null(){return new lt([...this.type,{type:"null"}],this.value)}undefined(){return new lt([...this.type,{type:"undefined"}],this.value)}},lt=class t extends ot{orArray(e){let r=e(new nt([],this.value)),i=new nt([{type:"array",elementType:r.type}],this.value);return new t([...this.type,...i.type],this.value)}orObject(e){let r=e(new st([{type:"object",props:{}}],this.value));return new t([...this.type,...r.type],this.value)}orString(){return new t([...this.type,{type:"string"}],this.value)}orNumber(){return new t([...this.type,{type:"number"}],this.value)}orBoolean(){return new t([...this.type,{type:"boolean"}],this.value)}orConstant(...e){return new t([...this.type,...e.map((t=>({type:"constant",value:t})))],this.value)}orNull(){return new t([...this.type,{type:"null"}],this.value)}orUndefined(){return new t([...this.type,{type:"undefined"}],this.value)}};function ut(t,e,r={}){let{problems:i,juggleTo:n}=et(t,e.type,"root",r);if(i.length>0)throw new Z(i,r.errorMessage);return void 0!==n?n.value:t}function ht(t){return pt(t.type)}function pt(t,e=0){if(Array.isArray(t))return t.map((t=>pt(t,e))).join(" | ");switch(t.type){case"array":return pt(t.elementType,e)+"[]";case"boolean":return"boolean";case"undefined":return"undefined";case"object":{let r=Object.keys(t.props);return"{\n"+r.map(((i,n)=>{let s=t.props[i],o=pt(s.type,e+1),a=n<r.length-1?",":"",l=void 0!==s.comment?" // "+s.comment:"";return s.optional?`${ct(e+1)}[${i}: ${o}${a}]${l}\n`:`${ct(e+1)}${i}: ${o}${a}${l}\n`})).join("")+ct(e)+"}"}case"string":return"string";case"null":return"null";case"number":return"number";case"constant":return`"${t.value}"`}}function ct(t){let e="";for(let r=0;r<t;r++)e+=" ";return e}function ft(t){return"constant"===t.type?`'${t.value}'`:t.type}async function wt(t,e,r="gpt-image-1",i){let n=await fetch("https://api.openai.com/v1/images/generations",{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer "+t},body:JSON.stringify({model:r,prompt:e,size:i})});if(!n.ok){let t=await n.json();throw Error(`OpenAI API error: ${n.status} ${JSON.stringify(t)}`)}let s=await n.json();if(!s.data?.[0]?.b64_json)throw Error("Invalid response structure from OpenAI API");return Uint8Array.from(atob(s.data[0].b64_json),(t=>t.charCodeAt(0)))}import{writeFile as dt}from"fs";var mt={gpt_3_5_turbo:"gpt-3.5-turbo",gpt_3_5_turbo_0125:"gpt-3.5-turbo-0125",gpt_3_5_turbo_1106:"gpt-3.5-turbo-1106",gpt_3_5_turbo_16k:"gpt-3.5-turbo-16k",gpt_3_5_turbo_instruct:"gpt-3.5-turbo-instruct",gpt_3_5_turbo_instruct_0914:"gpt-3.5-turbo-instruct-0914",gpt_4:"gpt-4",gpt_4_0125_preview:"gpt-4-0125-preview",gpt_4_0613:"gpt-4-0613",gpt_4_1106_preview:"gpt-4-1106-preview",gpt_4_turbo:"gpt-4-turbo",gpt_4_turbo_2024_04_09:"gpt-4-turbo-2024-04-09",gpt_4_turbo_preview:"gpt-4-turbo-preview",gpt_4_1:"gpt-4.1",gpt_4_1_2025_04_14:"gpt-4.1-2025-04-14",gpt_4_1_mini:"gpt-4.1-mini",gpt_4_1_mini_2025_04_14:"gpt-4.1-mini-2025-04-14",gpt_4_1_nano:"gpt-4.1-nano",gpt_4_1_nano_2025_04_14:"gpt-4.1-nano-2025-04-14",gpt_4_5_preview:"gpt-4.5-preview",gpt_4_5_preview_2025_02_27:"gpt-4.5-preview-2025-02-27",gpt_4o:"gpt-4o",gpt_4o_2024_05_13:"gpt-4o-2024-05-13",gpt_4o_2024_08_06:"gpt-4o-2024-08-06",gpt_4o_2024_11_20:"gpt-4o-2024-11-20",gpt_4o_audio_preview:"gpt-4o-audio-preview",gpt_4o_audio_preview_2024_10_01:"gpt-4o-audio-preview-2024-10-01",gpt_4o_audio_preview_2024_12_17:"gpt-4o-audio-preview-2024-12-17",gpt_4o_mini:"gpt-4o-mini",gpt_4o_mini_2024_07_18:"gpt-4o-mini-2024-07-18",gpt_4o_mini_audio_preview:"gpt-4o-mini-audio-preview",gpt_4o_mini_audio_preview_2024_12_17:"gpt-4o-mini-audio-preview-2024-12-17",gpt_4o_mini_realtime_preview:"gpt-4o-mini-realtime-preview",gpt_4o_mini_realtime_preview_2024_12_17:"gpt-4o-mini-realtime-preview-2024-12-17",gpt_4o_mini_search_preview:"gpt-4o-mini-search-preview",gpt_4o_mini_search_preview_2025_03_11:"gpt-4o-mini-search-preview-2025-03-11",gpt_4o_mini_transcribe:"gpt-4o-mini-transcribe",gpt_4o_mini_tts:"gpt-4o-mini-tts",gpt_4o_realtime_preview:"gpt-4o-realtime-preview",gpt_4o_realtime_preview_2024_10_01:"gpt-4o-realtime-preview-2024-10-01",gpt_4o_realtime_preview_2024_12_17:"gpt-4o-realtime-preview-2024-12-17",gpt_4o_search_preview:"gpt-4o-search-preview",gpt_4o_search_preview_2025_03_11:"gpt-4o-search-preview-2025-03-11",gpt_4o_transcribe:"gpt-4o-transcribe",gpt_image_1:"gpt-image-1",o1:"o1",o1_2024_12_17:"o1-2024-12-17",o1_mini:"o1-mini",o1_mini_2024_09_12:"o1-mini-2024-09-12",o1_preview:"o1-preview",o1_preview_2024_09_12:"o1-preview-2024-09-12",o1_pro:"o1-pro",o1_pro_2025_03_19:"o1-pro-2025-03-19",o3:"o3",o3_2025_04_16:"o3-2025-04-16",o3_mini:"o3-mini",o3_mini_2025_01_31:"o3-mini-2025-01-31",o4_mini:"o4-mini",o4_mini_2025_04_16:"o4-mini-2025-04-16",omni_moderation_2024_09_26:"omni-moderation-2024-09-26",omni_moderation_latest:"omni-moderation-latest"},yt={dall_e_2:"dall-e-2",dall_e_3:"dall-e-3",gpt_image_1:"gpt-image-1"},_t=class{constructor(t,e){this.apiKeys=t,this.config=e}chat(t,e,...r){let{toPrompt:i}=(()=>{if("function"==typeof t)return{toPrompt:t,args:e};if("string"==typeof t)return{toPrompt:()=>t,args:void 0};if(Array.isArray(t)){let e=0===t.length?[{user:""}]:t;return{toPrompt:()=>e,args:void 0}}{let i=[t,...void 0!==e?[e]:[],...r],n=0===i.length?[{user:""}]:i;return{toPrompt:()=>n,args:void 0}}})();return new xt(this,i,e,Ct(),void 0,void 0,void 0,!1)}image(t){return new gt(t,void 0,void 0,this)}},gt=class{constructor(t,e,r,i){this.prompt=t,this.h=e,this.p=r,this.aiClient=i}async then(t,e){try{let e=await this.getResponseAsString();return L(t)?await t(e):e}catch(t){if(L(e))return await e(t);throw t}}async catch(t){try{return await this.getResponseAsString()}catch(e){if(L(t))return t(e);throw e}}async finally(t){try{return await this.getResponseAsString()}finally{t?.()}}get[Symbol.toStringTag](){return"ImagePrompt"}model(t){return this.h=t,this}size(t){return this.p=t,this}toFile(t){return new vt(this.prompt,this.h,this.p,t,this.aiClient)}async getResponseAsString(){let t=w(await this.aiClient.apiKeys.openai).canBeString().andNothingElse({errorMessage:"No OpenAI access token set"});return await wt(t,this.prompt)}},vt=class{constructor(t,e,r,i,n){this.prompt=t,this.h=e,this.p=r,this.fileName=i,this.aiClient=n}async then(t,e){try{let e=await this.getResponseAsFile();return L(t)?await t(e):e}catch(t){if(L(e))return await e(t);throw t}}async catch(t){try{return await this.getResponseAsFile()}catch(e){if(L(t))return t(e);throw e}}async finally(t){try{return await this.getResponseAsFile()}finally{t?.()}}get[Symbol.toStringTag](){return"ImageFilePrompt"}model(t){return this.h=t,this}size(t){return this.p=t,this}async getResponseAsFile(){let t=w(await this.aiClient.apiKeys.openai).canBeString().andNothingElse({errorMessage:"No OpenAI access token set"}),e=await wt(t,this.prompt,this.h,this.p);return new Promise(((t,r)=>{dt(this.fileName,e,(i=>{i?r(i):t(new File([e],this.fileName,{type:"image/png"}))}))}))}},bt=new _t(void 0,{});function At(t){let e=Tt(t);bt.apiKeys=Nt(e),bt.config=e}function Et(t){let e=Tt(t);return new _t(Nt(e),e)}function Tt(t){return{promptGridApiKey:(()=>{let e="string"==typeof t?t:t.promptGridApiKey;return ut(e,tt(e).string().orUndefined(),{errorMessage:"Please provide a valid API key; got "+e})})(),apiKeys:"object"==typeof t&&null!==t?t.apiKeys:void 0,debugMode:"object"==typeof t&&null!==t&&t.debugMode}}function Nt(t){let e=t.promptGridApiKey,r=t.apiKeys,i=void 0!==e?(async()=>{let t=await(async()=>{try{return await fetch(A()+"/handshake",{method:"POST",headers:{"Content-Type":"application/json","User-Agent":"promptgun",Authorization:"Bearer "+e}})}catch{throw Error("HTTP called failed when doing handshake")}})();if(200!==t.status){let e=await t.text();throw Error(`Handshake failed with status ${t.status}, body: ${e}`)}return await t.json()})():void 0;return{promptgrid:e,openai:(async()=>r?.openai??(await i)?.apiKeys.openai)()}}var Ut=new Map;function St(t){let e=t??bt;if(void 0===e.apiKeys)throw Error("No LLM set up. Call setupPromptGun first: ```import { setupPromptGun } from 'promptgun';\n\nsetupPromptGun({openAI: \"YOUR_OPENAI_API_KEY\"});\n```");return new Lt(e,Ct())}var Lt=class{constructor(t,e){this.aiClient=t,this.callingCodeLine=e}completeChat(t,e){return new xt(this.aiClient,t,e,Ct(),void 0,void 0,void 0,!1)}},xt=class{constructor(t,e,r,i,n,s,o,a){this.aiClient=t,this.promptSupplier=e,this.promptSupplierArgs=r,this.callingCodeLine=i,this.m=n,this._=s,this.h=o,this.v=a;let l=this;this.generator=async function*(){yield*await kt(l.aiClient,o,l.promptSupplier(l.promptSupplierArgs),!1,l.promptName,a,n,s,i)}()}generator;promptName;name(t){return this.promptName=t,this}model(t){return this.h=t,this}firstThink(t=!0){return this.v=t,this}temperature(t){return this.m=t,this}topP(t){return this._=t,this}next(...[t]){return this.generator.next(t)}return(t){return this.generator.return(t)}throw(t){return this.generator.throw(t)}[Symbol.asyncIterator](){return this}async then(t,e){try{let e=await this.getResponseAsString();return L(t)?await t(e):e}catch(t){if(L(e))return await e(t);throw t}}async catch(t){try{return await this.getResponseAsString()}catch(e){if(L(t))return t(e);throw e}}async finally(t){try{return await this.getResponseAsString()}finally{t?.()}}get[Symbol.toStringTag](){return"BasicPrompt"}get(t){return new Pt(this.aiClient,this.promptSupplier,this.promptSupplierArgs,t,Ct(),this.promptName,this.m,this._,this.h,this.v)}getBoolean(){return this.get((t=>t.boolean()))}getString(){return this.get((t=>t.string()))}getNumber(){return this.get((t=>t.number()))}getObject(t){return this.get((e=>e.object(t)))}getArray(t){return new Ot(this.aiClient,this.promptSupplier,this.promptSupplierArgs,(e=>e.array(t)),this.callingCodeLine,this.promptName,this.m,this._,this.h,this.v)}getAny(){return this.get((t=>t.any()))}async getResponseAsString(){let t="";for await(let e of this)t+=e;return t}},Pt=class extends J{constructor(t,e,r,i,n,s,o,a,l,u){let p=async function*(){yield*await kt(t,l,e(r),void 0===i||i(tt(void 0)),s,u,o,a,n)}(),c=h.Flux.fromGenerator(p),f=(new T).processDataBuffer(c);super(),this.aiClient=t,this.promptSupplier=e,this.promptSupplierArgs=r,this.jsonTypeSupplier=i,this.callingCodeLine=n,this.promptName=s,this.m=o,this._=a,this.h=l,this.v=u;let w=this,d=(new F).parse(f);void 0!==i?d.onProperty("result",(t=>t.onEachExcerpt((t=>{void 0!==t.token&&this.push(t)})))):d.onEachExcerpt((t=>{void 0!==t.token&&this.push(t)})),this.stringGenerator=async function*(){for await(let t of f)void 0!==t.token?d.push(t):void 0!==t.source&&(yield t.source)}(),this.partialJsonGenerator=async function*(){let t="";for await(let e of w.stringGenerator){t+=e;let r=D(t);yield void 0!==i?r?.result:r}}()}stringGenerator;partialJsonGenerator;next(...[t]){return this.partialJsonGenerator.next(t)}return(t){return this.partialJsonGenerator.return(t)}throw(t){return this.partialJsonGenerator.throw(t)}[Symbol.asyncIterator](){return this.partialJsonGenerator}async then(t,e){try{let e=await this.getResponse();return L(t)?await t(e):e}catch(t){if(L(e))return await e(t);throw t}}async catch(t){try{return await this.getResponse()}catch(e){if(L(t))return t(e);throw e}}async finally(t){try{return await this.getResponse()}finally{t?.()}}get[Symbol.toStringTag](){return"JsonPrompt"}name(t){return this.promptName=t,this}model(t){return this.h=t,this}firstThink(t=!0){return this.v=t,this}temperature(t){return this.m=t,this}topP(t){return this._=t,this}async getResponse(){let t=await this.getResponseAsString(),e=this.jsonTypeSupplier,r=G(t),i=void 0!==e?r?.result:r;if(void 0===e)return i;try{return ut(i,e(tt(i)),{juggleBetweenNullAndUndefined:!0})}catch{return console.debug('AI forgot to pack result in {"result": ...} wrapper, continuing by using complete result'),ut(r,e(tt(i)),{juggleBetweenNullAndUndefined:!0})}}A;getResponseAsString(){return void 0===this.A&&(this.A=this.T()),this.A}async T(){let t="";for await(let e of this.stringGenerator)t+=e;return t}},Ot=class extends Pt{arrayElementGenerator;constructor(t,e,r,i,n,s,o,a,l,u){super(t,e,r,i,n,s,o,a,l,u);let p=this;this.arrayElementGenerator=h.Flux.create((async(t,e)=>{await p.onElement((async e=>{t(await e)})),e()}))}next(...[t]){return this.arrayElementGenerator.next(t)}return(t){return this.arrayElementGenerator.return(t)}throw(t){return this.arrayElementGenerator.throw(t)}[Symbol.asyncIterator](){return this.arrayElementGenerator}async then(t,e){try{let e=await this.getResponse();return L(t)?await t(e):e}catch(t){if(L(e))return await e(t);throw t}}async catch(t){try{return await this.getResponse()}catch(e){if(L(t))return t(e);throw e}}async finally(t){try{return await this.getResponse()}finally{t?.()}}get[Symbol.toStringTag](){return"JsonArrayPrompt"}};function Rt(t){return t??"gpt-4o"}async function*kt(t,e,r,i,n,s,o,a,l){let u=new Map;try{let h=w(await t.apiKeys.openai).canBeString().andNothingElse({errorMessage:"No OpenAI access token set"}),f=function(t){let e=t=>({role:void 0!==t.user?"user":void 0!==t.system?"system":"assistant",content:Y(t.user??t.system??t.assistant)});return"string"==typeof t?[{role:"user",content:t}]:Array.isArray(t)?t.map(e):[e(t)]}(r),d=(()=>{if(!i)return f;let t=(()=>{let t=f.length-1;for(;t>=0&&"user"===f[t].role;)t--;return t})();return[...f.slice(0,t+1),{role:"system",content:jt(0,i,s)},...f.slice(t+1)]})(),{fileName:m,lineNumber:y}=l;if(m&&void 0!==y&&Array.from(Ut.keys()).filter((t=>t.startsWith(m+":"))).map((t=>parseInt(t.split(":")[1],10))).length>1&&!n)throw Error(`Multiple prompts found in ${m}. Please specify a name using .name() method.`);let _={id:n,callingCodeLine:l},g=X(),v={},b=(e,r)=>{let i=X(),n=async()=>{v.currentSave=v.save,v.save=void 0,await async function(t,e){try{if(void 0===e)return;let r=await fetch(A()+"/api/conversations",{method:"PUT",headers:{"Content-Type":"application/json",Authorization:"Bearer "+e},body:JSON.stringify(t)});if(!r.ok)throw Error(`Got ${r.status} when attempting to save conversation, with body: ${await r.text()}`)}catch(t){console.error("Error saving conversation",t)}}(e,t.apiKeys.promptgrid),await new Promise((t=>setTimeout(t,100))),await(v.save?.callback()),v.currentSave=void 0};void 0!==v.save&&u.delete(v.save.uuid),v.save={uuid:i,callback:n},void 0===v.currentSave&&u.set(i,{chunk:r,promise:n().then()})};b({conversationUuid:g,prompt:_,messages:d.map((t=>({messageUuid:X(),role:t.role,content:t.content||""})))});let E=X();b({conversationUuid:g,prompt:_,messages:[{messageUuid:E,role:"assistant",content:""}]});let T=function({model:t,prompt:e,apiToken:r,temperature:i,topP:n,requireJsonResponse:s}){return p.Flux.fromGeneratorFunction((async function*(){let o=new AbortController,a=await fetch("https://api.openai.com/v1/chat/completions",{headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:"Bearer "+r},method:"POST",signal:o.signal,body:JSON.stringify({model:t,messages:e,stream:!0,temperature:i,top_p:n,response_format:s?{type:"json_object"}:void 0})});if(a.status<200||a.status>=300){let t=function(t){try{return JSON.parse(t).error.message}catch{return t}}(await a.text());throw Error("OpenAPI reported: "+t)}if(null===a.body)throw Error("illegal state");let l="";yield*p.Flux.fromReadableStream(a.body,(()=>o.abort())).map((t=>c.decode(t,{stream:!0}))).flatMap((t=>t.replaceAll("data: [DONE]","").replace(/^data: /,"").split("data: "))).map((t=>t.replace(/[\n ]*$/,"").trim())).flatMap((t=>{l+=t;try{let t=JSON.parse(l);return l="",[t]}catch{return[]}})).map((t=>t.choices[0])).untilExcl((t=>null!=t.finish_reason)).map((t=>t.delta.content)).filter((t=>void 0!==t))}))}({model:Rt(e),prompt:d,apiToken:h,temperature:o,topP:a,requireJsonResponse:!1!==i}),N="";yield*T.doOnEach((t=>{N+=t,b({conversationUuid:g,prompt:_,messages:[{messageUuid:E,role:"assistant",content:N}]},t)}))}finally{if(t.config.debugMode){let t=Array.from(u.values()).map((t=>t.promise));await Promise.all(t)}}}function jt(t,e,r){{if(!0===e)return"Respond with JSON";let t=e;return"Respond with JSON matching the Typescript-style type spec below, noting\n- a value can ONLY be null if explicitly stated, e.g. 'string | null'\n- optional properties (denoted with squared brackets) can only be achieved by not including it, NOT by setting them to null\n\nThe type:\n"+ht(new it([],void 0).object((e=>{let i=e;return r&&(i=i.hasString("reasoning","Elaborate your reasoning here. Think step by step. Give your thinking steps in a numbered list or in markdown with headers if the task requires it.")),i.has("result",(()=>new lt(t.type,t.value)))})))}}function Ct(){let t=(Error().stack??"").split("\n").map((t=>t.trim())).filter((t=>t.startsWith("at ")))[2],e=t.match(/[^(]+\([^)]+\)/),{functionName:r,fileName:i,lineNumber:n}=e?t.match("at (?<functionName>[^(]*) ((?<scheme>.*://)?(?<fileName>[^:]*):(?<lineNumber>[0-9]+):(?<colNumber>[0-9]+))").groups:t.match("at (?<scheme>.*://)?(?<fileName>[^:]*):(?<lineNumber>[0-9]+):(?<colNumber>[0-9]+)").groups;return{stacktraceFrame:w(t).canBeString().andNothingElse(),fileName:w(i).canBeString().andNothingElse(),lineNumber:w(parseInt(n)).canBeNumber().andNothingElse(),functionName:w(r).canBeString().canBeUndefined().andNothingElse()}}export{_t as AIClient,mt as AiModel,xt as BasicPrompt,at as EmptyPropTypeSpec,it as EmptyTypeSpec,lt as FullPropTypeSpec,nt as FullTypeSpec,vt as ImageFilePrompt,gt as ImagePrompt,Ot as JsonArrayPrompt,Pt as JsonPrompt,yt as OpenaiImageModel,Lt as PromptBase,ot as PropTypeSpec,J as StreamedJsonChildElement,$ as StreamedJsonRootElement,st as TypeMemberSpec,rt as TypeSpec,bt as ai,Ct as getCallerFileNameAndLineNumber,Et as newAIClient,Nt as obtainAiClientData,D as parsePartialJson,St as promptAI,At as setupAI};
2
2
  //# sourceMappingURL=index.js.map