blink 0.1.52 → 0.1.54
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/dist/api/index.cjs +15 -3
- package/dist/api/index.d.cts +55 -8
- package/dist/api/index.d.ts +55 -8
- package/dist/api/index.js +15 -3
- package/dist/cli/auth-BP6XsB4o.js +30 -0
- package/dist/cli/chat-VT2y0Ejx.js +1 -0
- package/dist/cli/connect-CUOPse6P.js +1 -0
- package/dist/cli/connect-CswVxp7Y.js +26 -0
- package/dist/cli/{dev-DD1tf2AT.js → dev-DWe1-Qrm.js} +73 -67
- package/dist/cli/dist-CN69Y-yA.js +45 -0
- package/dist/cli/events-CWgtj8lb.js +1 -0
- package/dist/cli/{getMachineId-bsd-CY-GIKzh.js → getMachineId-bsd-C-mIkoX1.js} +1 -1
- package/dist/cli/{getMachineId-darwin-BvUyLisY.js → getMachineId-darwin-BndlBc-C.js} +1 -1
- package/dist/cli/{getMachineId-linux-CaBhu4UD.js → getMachineId-linux-DYz-C3hh.js} +1 -1
- package/dist/cli/{getMachineId-unsupported-DsibGvjs.js → getMachineId-unsupported-CcuIl2b-.js} +1 -1
- package/dist/cli/{getMachineId-win-_QXKq1ge.js → getMachineId-win-KRlx7d-Q.js} +1 -1
- package/dist/cli/index.js +6 -110
- package/dist/cli/init-CyILyaVn.js +80 -0
- package/dist/cli/login-JR8bA13P.js +1 -0
- package/dist/cli/main-DqOlaYW2.js +6 -0
- package/dist/cli/open-Cr8lEmcs.js +1 -0
- package/dist/cli/serve-CEeYlO7w.js +60 -0
- package/dist/cli/serve-DY71nMqp.js +1 -0
- package/dist/cli/undici-jJcag_Yq.js +1 -0
- package/dist/cookie-CB9k3Awr.js +11 -0
- package/dist/cookie-Dx2Kx4Zh.cjs +11 -0
- package/dist/test.cjs +1 -1
- package/dist/test.js +1 -1
- package/package.json +1 -1
- package/dist/cli/main-CiEwxfsi.js +0 -138
- package/dist/cli/undici-DjSrZtb9.js +0 -1
- package/dist/cookie-BtKXrFr6.cjs +0 -1
- package/dist/cookie-CyZUsiHM.js +0 -1
- /package/dist/cli/{devtools-D6beCbGn.js → devtools-BS9tk1Y9.js} +0 -0
- /package/dist/cli/{esm-DiE8Xvft.js → esm-CeJfCMPI.js} +0 -0
- /package/dist/cli/{execAsync-Cr3GNTA4.js → execAsync-q2CSWc1b.js} +0 -0
- /package/dist/cli/{undici-0ADe8h0l.js → undici-BG07ys6c.js} +0 -0
package/dist/api/index.cjs
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
|
-
Object.defineProperty(exports,`__esModule`,{value:!0});const e=require(`../cookie-BtKXrFr6.cjs`);let t=require(`util`);t=e.__toESM(t);var n=(e,t)=>(e=e.replace(/\/+$/,``),e+=`/`,t=t.replace(/^\/+/,``),e+t),r=(e,t)=>{for(let[n,r]of Object.entries(t)){let t=RegExp(`/:`+n+`(?:{[^/]+})?\\??`);e=e.replace(t,r?`/${r}`:``)}return e},i=e=>{let t=new URLSearchParams;for(let[n,r]of Object.entries(e)){if(r===void 0)continue;if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r)}return t},a=(e,t)=>{switch(t){case`ws`:return e.replace(/^http/,`ws`);case`http`:return e.replace(/^ws/,`http`)}},o=e=>/^https?:\/\/[^\/]+?\/index(?=\?|$)/.test(e)?e.replace(/\/index(?=\?|$)/,`/`):e.replace(/\/index(?=\?|$)/,``);function s(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function c(e,t){if(!s(e)&&!s(t))return t;let n={...e};for(let e in t){let r=t[e];s(n[e])&&s(r)?n[e]=c(n[e],r):n[e]=r}return n}var l=(e,t)=>{let n=new Proxy(()=>{},{get(n,r){if(!(typeof r!=`string`||r===`then`))return l(e,[...t,r])},apply(n,r,i){return e({path:t,args:i})}});return n},u=class{url;method;queryParams=void 0;pathParams={};rBody;cType=void 0;constructor(e,t){this.url=e,this.method=t}fetch=async(t,n)=>{if(t){if(t.query&&(this.queryParams=i(t.query)),t.form){let e=new FormData;for(let[n,r]of Object.entries(t.form))if(Array.isArray(r))for(let t of r)e.append(n,t);else e.append(n,r);this.rBody=e}t.json&&(this.rBody=JSON.stringify(t.json),this.cType=`application/json`),t.param&&(this.pathParams=t.param)}let a=this.method.toUpperCase(),s={...t?.header,...typeof n?.headers==`function`?await n.headers():n?.headers};if(t?.cookie){let n=[];for(let[r,i]of Object.entries(t.cookie))n.push(e.serialize(r,i,{path:`/`}));s.Cookie=n.join(`,`)}this.cType&&(s[`Content-Type`]=this.cType);let c=new Headers(s??void 0),l=this.url;l=o(l),l=r(l,this.pathParams),this.queryParams&&(l=l+`?`+this.queryParams.toString()),a=this.method.toUpperCase();let u=!(a===`GET`||a===`HEAD`);return(n?.fetch||fetch)(l,{body:u?this.rBody:void 0,method:a,headers:c,...n?.init})}},d=(e,t)=>l(function s(l){let d=[...l.path],f=d.slice(-3).reverse();if(f[0]===`toString`)return f[1]===`name`?f[2]||``:s.toString();if(f[0]===`valueOf`)return f[1]===`name`?f[2]||``:s;let p=``;if(/^\$/.test(f[0])){let e=d.pop();e&&(p=e.replace(/^\$/,``))}let m=d.join(`/`),h=n(e,m);if(p===`url`){let e=h;return l.args[0]&&(l.args[0].param&&(e=r(h,l.args[0].param)),l.args[0].query&&(e=e+`?`+i(l.args[0].query).toString())),e=o(e),new URL(e)}if(p===`ws`){let e=a(l.args[0]&&l.args[0].param?r(h,l.args[0].param):h,`ws`),n=new URL(e),i=l.args[0]?.query;i&&Object.entries(i).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.searchParams.append(e,t)):n.searchParams.set(e,t)});let o=(...e)=>t?.webSocket!==void 0&&typeof t.webSocket==`function`?t.webSocket(...e):new WebSocket(...e);return o(n.toString())}let g=new u(h,p);if(p){t??={};let e=c(t,{...l.args[1]});return g.fetch(l.args[0],e)}return g},[]);const f=process.env[e.APIServerURLEnvironmentVariable],p=d(f??``,{fetch:f?void 0:async()=>{throw console.warn(`Your code is attempting to use the Blink API server, but no API server is configured for this Blink agent.`),Error(`No API server is configured for this Blink agent. External APIs are not available.`)}}),m=Object.freeze({upsert:async e=>{let t=await p.chat[`:id`].$post({param:{id:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}return{id:e}},message:async(e,t,n)=>{let r=await p.chat[`:id`].sendMessages.$post({param:{id:e},json:{messages:[t],behavior:n?.behavior??`enqueue`}});if(r.status!==204){let e=await r.json();throw Error(e.error)}}}),h=Object.freeze({kv:Object.freeze({get:async e=>{let t=await p.storage.kv[`:key`].$get({param:{key:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}let n=await t.json();return n.value},set:async(e,t)=>{let n=await p.storage.kv[`:key`].$post({param:{key:e},json:{value:t}});if(n.status!==204){let e=await n.json();throw Error(e.error)}},del:async e=>{let t=await p.storage.kv[`:key`].$delete({param:{key:e}});if(t.status!==204){let e=await t.json();throw Error(e.error)}}})}),g={with(e,t){let n={};for(let r of Object.keys(e)){let i=e[r];n[r]=i.with(t)}return n},prefix(e,t){let n={};for(let[r,i]of Object.entries(e))n[`${t}${r}`]=i;return n}};function _(e){return{version:`v0`,supportsRequests:e.onRequest!==void 0,supportsCompletions:e.experimental_provideCompletions!==void 0,fetch:async n=>{let r=new URL(n.url);if(r.pathname.startsWith(`/_agent/`))switch(r.pathname){case`/_agent/send-messages`:return v(n,e);case`/_agent/completions`:return y(n,e);case`/_agent/health`:return new Response(`OK`,{status:200});default:return new Response(`Not found`,{status:404})}if(e.onRequest){let r;try{r=await e.onRequest(n)}catch(e){return new Response(JSON.stringify({error:t.default.inspect(e)}),{status:500})}if(r)return r}return new Response(`Not found`,{status:404})}}}async function v(e,n){if(e.method!==`POST`)return new Response(`Method not allowed`,{status:405});let r;try{r=await e.json()}catch{return new Response(`Invalid request`,{status:400})}let i;try{i=await n.sendMessages({messages:r.messages,chat:r.chat})}catch(e){return new Response(JSON.stringify({error:t.default.inspect(e)}),{status:500})}if(i instanceof Response)return i;let a;if(i instanceof ReadableStream)a=i;else{if(typeof i!=`object`||!(`toUIMessageStream`in i))throw Error(`The agent must return a "Response", "ReadableStream", or "toUIMessageStream" function.`);a=i.toUIMessageStream()}return new Response(a.pipeThrough(new TransformStream({transform(e,t){t.enqueue(`data: ${JSON.stringify(e)}\n\n`)},flush(e){e.enqueue(`data: [DONE]
|
|
1
|
+
Object.defineProperty(exports,`__esModule`,{value:!0});const e=require(`../cookie-Dx2Kx4Zh.cjs`);let t=require(`zod/v4`);t=e.__toESM(t);let n=require(`zod/v3`);n=e.__toESM(n);let r=require(`util`);r=e.__toESM(r);function i(e){return typeof e==`object`&&!!e&&typeof e[Symbol.asyncIterator]==`function`}function a(...e){return e.reduce((e,t)=>({...e,...t??{}}),{})}function o(e){return Object.fromEntries([...e.headers])}function s(e=globalThis){var t,n,r;return e.window?`runtime/browser`:(t=e.navigator)?.userAgent?`runtime/${e.navigator.userAgent.toLowerCase()}`:(r=(n=e.process)?.versions)?.node?`runtime/node.js/${e.process.version.substring(0)}`:e.EdgeRuntime?`runtime/vercel-edge`:`runtime/unknown`}function c(e){return Object.fromEntries(Object.entries(e).filter(([e,t])=>t!=null))}function l(e,...t){let n=c(e??{}),r=new Headers(n),i=r.get(`user-agent`)||``;return r.set(`user-agent`,[i,...t].filter(Boolean).join(` `)),Object.fromEntries(r)}var u=({prefix:t,size:n=16,alphabet:r=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`,separator:i=`-`}={})=>{let a=()=>{let e=r.length,t=Array(n);for(let i=0;i<n;i++)t[i]=r[Math.random()*e|0];return t.join(``)};if(t==null)return a;if(r.includes(i))throw new e.InvalidArgumentError({argument:`separator`,message:`The separator "${i}" must not be part of the alphabet "${r}".`});return()=>`${t}${i}${a()}`},d=u();function f(e){return(e instanceof Error||e instanceof DOMException)&&(e.name===`AbortError`||e.name===`ResponseAborted`||e.name===`TimeoutError`)}var p=[`fetch failed`,`failed to fetch`];function m({error:t,url:n,requestBodyValues:r}){if(f(t))return t;if(t instanceof TypeError&&p.includes(t.message.toLowerCase())){let i=t.cause;if(i!=null)return new e.APICallError({message:`Cannot connect to API: ${i.message}`,cause:i,url:n,requestBodyValues:r,isRetryable:!0})}return t}var h=`3.0.10`,g=/"__proto__"\s*:/,_=/"constructor"\s*:/;function v(e){let t=JSON.parse(e);return typeof t!=`object`||!t||g.test(e)===!1&&_.test(e)===!1?t:y(t)}function y(e){let t=[e];for(;t.length;){let e=t;t=[];for(let n of e){if(Object.prototype.hasOwnProperty.call(n,`__proto__`)||Object.prototype.hasOwnProperty.call(n,`constructor`)&&Object.prototype.hasOwnProperty.call(n.constructor,`prototype`))throw SyntaxError(`Object contains forbidden prototype property`);for(let e in n){let r=n[e];r&&typeof r==`object`&&t.push(r)}}}return e}function b(e){let{stackTraceLimit:t}=Error;Error.stackTraceLimit=0;try{return v(e)}finally{Error.stackTraceLimit=t}}var x=Symbol.for(`vercel.ai.validator`);function S(e){return{[x]:!0,validate:e}}function C(e){return typeof e==`object`&&!!e&&x in e&&e[x]===!0&&`validate`in e}function w(e){return C(e)?e:T(e)}function T(t){return S(async n=>{let r=await t[`~standard`].validate(n);return r.issues==null?{success:!0,value:r.value}:{success:!1,error:new e.TypeValidationError({value:n,cause:r.issues})}})}async function E({value:t,schema:n}){let r=await D({value:t,schema:n});if(!r.success)throw e.TypeValidationError.wrap({value:t,cause:r.error});return r.value}async function D({value:t,schema:n}){let r=w(n);try{if(r.validate==null)return{success:!0,value:t,rawValue:t};let n=await r.validate(t);return n.success?{success:!0,value:n.value,rawValue:t}:{success:!1,error:e.TypeValidationError.wrap({value:t,cause:n.error}),rawValue:t}}catch(n){return{success:!1,error:e.TypeValidationError.wrap({value:t,cause:n}),rawValue:t}}}async function O({text:t,schema:n}){try{let e=b(t);return n==null?e:E({value:e,schema:n})}catch(n){throw e.JSONParseError.isInstance(n)||e.TypeValidationError.isInstance(n)?n:new e.JSONParseError({text:t,cause:n})}}async function k({text:t,schema:n}){try{let e=b(t);return n==null?{success:!0,value:e,rawValue:e}:await D({value:e,schema:n})}catch(n){return{success:!1,error:e.JSONParseError.isInstance(n)?n:new e.JSONParseError({text:t,cause:n}),rawValue:void 0}}}function A(e){try{return b(e),!0}catch{return!1}}function j({stream:t,schema:n}){return t.pipeThrough(new TextDecoderStream).pipeThrough(new e.EventSourceParserStream).pipeThrough(new TransformStream({async transform({data:e},t){e!==`[DONE]`&&t.enqueue(await k({text:e,schema:n}))}}))}async function M({provider:t,providerOptions:n,schema:r}){if(n?.[t]==null)return;let i=await D({value:n[t],schema:r});if(!i.success)throw new e.InvalidArgumentError({argument:`providerOptions`,message:`invalid ${t} provider options`,cause:i.error});return i.value}var ee=()=>globalThis.fetch,N=async({url:e,headers:t,body:n,failedResponseHandler:r,successfulResponseHandler:i,abortSignal:a,fetch:o})=>te({url:e,headers:{"Content-Type":`application/json`,...t},body:{content:JSON.stringify(n),values:n},failedResponseHandler:r,successfulResponseHandler:i,abortSignal:a,fetch:o}),te=async({url:t,headers:n={},body:r,successfulResponseHandler:i,failedResponseHandler:a,abortSignal:c,fetch:u=ee()})=>{try{let d=await u(t,{method:`POST`,headers:l(n,`ai-sdk/provider-utils/${h}`,s()),body:r.content,signal:c}),p=o(d);if(!d.ok){let n;try{n=await a({response:d,url:t,requestBodyValues:r.values})}catch(n){throw f(n)||e.APICallError.isInstance(n)?n:new e.APICallError({message:`Failed to process error response`,cause:n,statusCode:d.status,url:t,responseHeaders:p,requestBodyValues:r.values})}throw n.value}try{return await i({response:d,url:t,requestBodyValues:r.values})}catch(n){throw n instanceof Error&&(f(n)||e.APICallError.isInstance(n))?n:new e.APICallError({message:`Failed to process successful response`,cause:n,statusCode:d.status,url:t,responseHeaders:p,requestBodyValues:r.values})}}catch(e){throw m({error:e,url:t,requestBodyValues:r.values})}},P=({errorSchema:t,errorToMessage:n,isRetryable:r})=>async({response:i,url:a,requestBodyValues:s})=>{let c=await i.text(),l=o(i);if(c.trim()===``)return{responseHeaders:l,value:new e.APICallError({message:i.statusText,url:a,requestBodyValues:s,statusCode:i.status,responseHeaders:l,responseBody:c,isRetryable:r?.(i)})};try{let o=await O({text:c,schema:t});return{responseHeaders:l,value:new e.APICallError({message:n(o),url:a,requestBodyValues:s,statusCode:i.status,responseHeaders:l,responseBody:c,data:o,isRetryable:r?.(i,o)})}}catch{return{responseHeaders:l,value:new e.APICallError({message:i.statusText,url:a,requestBodyValues:s,statusCode:i.status,responseHeaders:l,responseBody:c,isRetryable:r?.(i)})}}},F=t=>async({response:n})=>{let r=o(n);if(n.body==null)throw new e.EmptyResponseBodyError({});return{responseHeaders:r,value:j({stream:n.body,schema:t})}},I=t=>async({response:n,url:r,requestBodyValues:i})=>{let a=await n.text(),s=await k({text:a,schema:t}),c=o(n);if(!s.success)throw new e.APICallError({message:`Invalid JSON response`,cause:s.error,statusCode:n.status,responseHeaders:c,responseBody:a,url:r,requestBodyValues:i});return{responseHeaders:c,value:s.value,rawValue:s.rawValue}},ne=Symbol(`Let zodToJsonSchema decide on which parser to use`),re=Symbol.for(`vercel.ai.schema`),{btoa:ie,atob:ae}=globalThis;function oe(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCodePoint(e[n]);return ie(t)}function se(e){return e instanceof Uint8Array?oe(e):e}function ce(e){return e?.replace(/\/$/,``)}function L(e){var t,n;return(n=(t=e?.providerOptions)?.openaiCompatible)??{}}function le(t){let n=[];for(let{role:r,content:i,...a}of t){let t=L({...a});switch(r){case`system`:n.push({role:`system`,content:i,...t});break;case`user`:if(i.length===1&&i[0].type===`text`){n.push({role:`user`,content:i[0].text,...L(i[0])});break}n.push({role:`user`,content:i.map(t=>{let n=L(t);switch(t.type){case`text`:return{type:`text`,text:t.text,...n};case`file`:if(t.mediaType.startsWith(`image/`)){let e=t.mediaType===`image/*`?`image/jpeg`:t.mediaType;return{type:`image_url`,image_url:{url:t.data instanceof URL?t.data.toString():`data:${e};base64,${se(t.data)}`},...n}}else throw new e.UnsupportedFunctionalityError({functionality:`file part media type ${t.mediaType}`})}}),...t});break;case`assistant`:{let e=``,r=[];for(let t of i){let n=L(t);switch(t.type){case`text`:e+=t.text;break;case`tool-call`:r.push({id:t.toolCallId,type:`function`,function:{name:t.toolName,arguments:JSON.stringify(t.input)},...n});break}}n.push({role:`assistant`,content:e,tool_calls:r.length>0?r:void 0,...t});break}case`tool`:for(let e of i){let t=e.output,r;switch(t.type){case`text`:case`error-text`:r=t.value;break;case`content`:case`json`:case`error-json`:r=JSON.stringify(t.value);break}let i=L(e);n.push({role:`tool`,tool_call_id:e.toolCallId,content:r,...i})}break;default:{let e=r;throw Error(`Unsupported role: ${e}`)}}}return n}function R({id:e,model:t,created:n}){return{id:e??void 0,modelId:t??void 0,timestamp:n==null?void 0:new Date(n*1e3)}}function z(e){switch(e){case`stop`:return`stop`;case`length`:return`length`;case`content_filter`:return`content-filter`;case`function_call`:case`tool_calls`:return`tool-calls`;default:return`unknown`}}var B=t.z.object({user:t.z.string().optional(),reasoningEffort:t.z.string().optional()}),ue=t.z.object({error:t.z.object({message:t.z.string(),type:t.z.string().nullish(),param:t.z.any().nullish(),code:t.z.union([t.z.string(),t.z.number()]).nullish()})}),V={errorSchema:ue,errorToMessage:e=>e.error.message};function de({tools:t,toolChoice:n}){t=t?.length?t:void 0;let r=[];if(t==null)return{tools:void 0,toolChoice:void 0,toolWarnings:r};let i=[];for(let e of t)e.type===`provider-defined`?r.push({type:`unsupported-tool`,tool:e}):i.push({type:`function`,function:{name:e.name,description:e.description,parameters:e.inputSchema}});if(n==null)return{tools:i,toolChoice:void 0,toolWarnings:r};let a=n.type;switch(a){case`auto`:case`none`:case`required`:return{tools:i,toolChoice:a,toolWarnings:r};case`tool`:return{tools:i,toolChoice:{type:`function`,function:{name:n.toolName}},toolWarnings:r};default:{let t=a;throw new e.UnsupportedFunctionalityError({functionality:`tool choice type: ${t}`})}}}var fe=class{constructor(e,t){this.specificationVersion=`v2`;var n,r;this.modelId=e,this.config=t;let i=(n=t.errorStructure)??V;this.chunkSchema=me(i.errorSchema),this.failedResponseHandler=P(i),this.supportsStructuredOutputs=(r=t.supportsStructuredOutputs)??!1}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(`.`)[0].trim()}get supportedUrls(){var e,t,n;return(n=(t=(e=this.config).supportedUrls)?.call(e))??{}}async getArgs({prompt:e,maxOutputTokens:t,temperature:n,topP:r,topK:i,frequencyPenalty:a,presencePenalty:o,providerOptions:s,stopSequences:c,responseFormat:l,seed:u,toolChoice:d,tools:f}){var p,m,h,g;let _=[],v=Object.assign((p=await M({provider:`openai-compatible`,providerOptions:s,schema:B}))??{},(m=await M({provider:this.providerOptionsName,providerOptions:s,schema:B}))??{});i!=null&&_.push({type:`unsupported-setting`,setting:`topK`}),l?.type===`json`&&l.schema!=null&&!this.supportsStructuredOutputs&&_.push({type:`unsupported-setting`,setting:`responseFormat`,details:`JSON response format schema is only supported with structuredOutputs`});let{tools:y,toolChoice:b,toolWarnings:x}=de({tools:f,toolChoice:d});return{args:{model:this.modelId,user:v.user,max_tokens:t,temperature:n,top_p:r,frequency_penalty:a,presence_penalty:o,response_format:l?.type===`json`?this.supportsStructuredOutputs===!0&&l.schema!=null?{type:`json_schema`,json_schema:{schema:l.schema,name:(h=l.name)??`response`,description:l.description}}:{type:`json_object`}:void 0,stop:c,seed:u,...Object.fromEntries(Object.entries((g=s?.[this.providerOptionsName])??{}).filter(([e])=>!Object.keys(B.shape).includes(e))),reasoning_effort:v.reasoningEffort,messages:le(e),tools:y,tool_choice:b},warnings:[..._,...x]}}async doGenerate(e){var t,n,r,i,o,s,c,l,u,f,p,m,h,g,_,v,y;let{args:b,warnings:x}=await this.getArgs({...e}),S=JSON.stringify(b),{responseHeaders:C,value:w,rawValue:T}=await N({url:this.config.url({path:`/chat/completions`,modelId:this.modelId}),headers:a(this.config.headers(),e.headers),body:b,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:I(pe),abortSignal:e.abortSignal,fetch:this.config.fetch}),E=w.choices[0],D=[],O=E.message.content;O!=null&&O.length>0&&D.push({type:`text`,text:O});let k=(t=E.message.reasoning_content)??E.message.reasoning;if(k!=null&&k.length>0&&D.push({type:`reasoning`,text:k}),E.message.tool_calls!=null)for(let e of E.message.tool_calls)D.push({type:`tool-call`,toolCallId:(n=e.id)??d(),toolName:e.function.name,input:e.function.arguments});let A={[this.providerOptionsName]:{},...await(i=(r=this.config.metadataExtractor)?.extractMetadata)?.call(r,{parsedBody:T})},j=(o=w.usage)?.completion_tokens_details;return j?.accepted_prediction_tokens!=null&&(A[this.providerOptionsName].acceptedPredictionTokens=j?.accepted_prediction_tokens),j?.rejected_prediction_tokens!=null&&(A[this.providerOptionsName].rejectedPredictionTokens=j?.rejected_prediction_tokens),{content:D,finishReason:z(E.finish_reason),usage:{inputTokens:(c=(s=w.usage)?.prompt_tokens)??void 0,outputTokens:(u=(l=w.usage)?.completion_tokens)??void 0,totalTokens:(p=(f=w.usage)?.total_tokens)??void 0,reasoningTokens:(g=(h=(m=w.usage)?.completion_tokens_details)?.reasoning_tokens)??void 0,cachedInputTokens:(y=(v=(_=w.usage)?.prompt_tokens_details)?.cached_tokens)??void 0},providerMetadata:A,request:{body:S},response:{...R(w),headers:C,body:T},warnings:x}}async doStream(t){var n;let{args:r,warnings:i}=await this.getArgs({...t}),o={...r,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},s=(n=this.config.metadataExtractor)?.createStreamExtractor(),{responseHeaders:c,value:l}=await N({url:this.config.url({path:`/chat/completions`,modelId:this.modelId}),headers:a(this.config.headers(),t.headers),body:o,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:F(this.chunkSchema),abortSignal:t.abortSignal,fetch:this.config.fetch}),u=[],f=`unknown`,p={completionTokens:void 0,completionTokensDetails:{reasoningTokens:void 0,acceptedPredictionTokens:void 0,rejectedPredictionTokens:void 0},promptTokens:void 0,promptTokensDetails:{cachedTokens:void 0},totalTokens:void 0},m=!0,h=this.providerOptionsName,g=!1,_=!1;return{stream:l.pipeThrough(new TransformStream({start(e){e.enqueue({type:`stream-start`,warnings:i})},transform(n,r){var i,a,o,c,l,h,v,y,b,x,S,C,w;if(t.includeRawChunks&&r.enqueue({type:`raw`,rawValue:n.rawValue}),!n.success){f=`error`,r.enqueue({type:`error`,error:n.error});return}let T=n.value;if(s?.processChunk(n.rawValue),`error`in T){f=`error`,r.enqueue({type:`error`,error:T.error.message});return}if(m&&(m=!1,r.enqueue({type:`response-metadata`,...R(T)})),T.usage!=null){let{prompt_tokens:e,completion_tokens:t,total_tokens:n,prompt_tokens_details:r,completion_tokens_details:i}=T.usage;p.promptTokens=e??void 0,p.completionTokens=t??void 0,p.totalTokens=n??void 0,i?.reasoning_tokens!=null&&(p.completionTokensDetails.reasoningTokens=i?.reasoning_tokens),i?.accepted_prediction_tokens!=null&&(p.completionTokensDetails.acceptedPredictionTokens=i?.accepted_prediction_tokens),i?.rejected_prediction_tokens!=null&&(p.completionTokensDetails.rejectedPredictionTokens=i?.rejected_prediction_tokens),r?.cached_tokens!=null&&(p.promptTokensDetails.cachedTokens=r?.cached_tokens)}let E=T.choices[0];if(E?.finish_reason!=null&&(f=z(E.finish_reason)),E?.delta==null)return;let D=E.delta,O=(i=D.reasoning_content)??D.reasoning;if(O&&(g||=(r.enqueue({type:`reasoning-start`,id:`reasoning-0`}),!0),r.enqueue({type:`reasoning-delta`,id:`reasoning-0`,delta:O})),D.content&&(_||=(r.enqueue({type:`text-start`,id:`txt-0`}),!0),r.enqueue({type:`text-delta`,id:`txt-0`,delta:D.content})),D.tool_calls!=null)for(let t of D.tool_calls){let n=t.index;if(u[n]==null){if(t.id==null)throw new e.InvalidResponseDataError({data:t,message:`Expected 'id' to be a string.`});if((a=t.function)?.name==null)throw new e.InvalidResponseDataError({data:t,message:`Expected 'function.name' to be a string.`});r.enqueue({type:`tool-input-start`,id:t.id,toolName:t.function.name}),u[n]={id:t.id,type:`function`,function:{name:t.function.name,arguments:(o=t.function.arguments)??``},hasFinished:!1};let i=u[n];(c=i.function)?.name!=null&&(l=i.function)?.arguments!=null&&(i.function.arguments.length>0&&r.enqueue({type:`tool-input-delta`,id:i.id,delta:i.function.arguments}),A(i.function.arguments)&&(r.enqueue({type:`tool-input-end`,id:i.id}),r.enqueue({type:`tool-call`,toolCallId:(h=i.id)??d(),toolName:i.function.name,input:i.function.arguments}),i.hasFinished=!0));continue}let i=u[n];if(i.hasFinished)continue;(v=t.function)?.arguments!=null&&(i.function.arguments+=(b=(y=t.function)?.arguments)??``),r.enqueue({type:`tool-input-delta`,id:i.id,delta:(x=t.function.arguments)??``}),(S=i.function)?.name!=null&&(C=i.function)?.arguments!=null&&A(i.function.arguments)&&(r.enqueue({type:`tool-input-end`,id:i.id}),r.enqueue({type:`tool-call`,toolCallId:(w=i.id)??d(),toolName:i.function.name,input:i.function.arguments}),i.hasFinished=!0)}},flush(e){var t,n,r,i,a,o;g&&e.enqueue({type:`reasoning-end`,id:`reasoning-0`}),_&&e.enqueue({type:`text-end`,id:`txt-0`});for(let n of u.filter(e=>!e.hasFinished))e.enqueue({type:`tool-input-end`,id:n.id}),e.enqueue({type:`tool-call`,toolCallId:(t=n.id)??d(),toolName:n.function.name,input:n.function.arguments});let c={[h]:{},...s?.buildMetadata()};p.completionTokensDetails.acceptedPredictionTokens!=null&&(c[h].acceptedPredictionTokens=p.completionTokensDetails.acceptedPredictionTokens),p.completionTokensDetails.rejectedPredictionTokens!=null&&(c[h].rejectedPredictionTokens=p.completionTokensDetails.rejectedPredictionTokens),e.enqueue({type:`finish`,finishReason:f,usage:{inputTokens:(n=p.promptTokens)??void 0,outputTokens:(r=p.completionTokens)??void 0,totalTokens:(i=p.totalTokens)??void 0,reasoningTokens:(a=p.completionTokensDetails.reasoningTokens)??void 0,cachedInputTokens:(o=p.promptTokensDetails.cachedTokens)??void 0},providerMetadata:c})}})),request:{body:o},response:{headers:c}}}},H=t.z.object({prompt_tokens:t.z.number().nullish(),completion_tokens:t.z.number().nullish(),total_tokens:t.z.number().nullish(),prompt_tokens_details:t.z.object({cached_tokens:t.z.number().nullish()}).nullish(),completion_tokens_details:t.z.object({reasoning_tokens:t.z.number().nullish(),accepted_prediction_tokens:t.z.number().nullish(),rejected_prediction_tokens:t.z.number().nullish()}).nullish()}).nullish(),pe=t.z.object({id:t.z.string().nullish(),created:t.z.number().nullish(),model:t.z.string().nullish(),choices:t.z.array(t.z.object({message:t.z.object({role:t.z.literal(`assistant`).nullish(),content:t.z.string().nullish(),reasoning_content:t.z.string().nullish(),reasoning:t.z.string().nullish(),tool_calls:t.z.array(t.z.object({id:t.z.string().nullish(),function:t.z.object({name:t.z.string(),arguments:t.z.string()})})).nullish()}),finish_reason:t.z.string().nullish()})),usage:H}),me=e=>t.z.union([t.z.object({id:t.z.string().nullish(),created:t.z.number().nullish(),model:t.z.string().nullish(),choices:t.z.array(t.z.object({delta:t.z.object({role:t.z.enum([`assistant`]).nullish(),content:t.z.string().nullish(),reasoning_content:t.z.string().nullish(),reasoning:t.z.string().nullish(),tool_calls:t.z.array(t.z.object({index:t.z.number(),id:t.z.string().nullish(),function:t.z.object({name:t.z.string().nullish(),arguments:t.z.string().nullish()})})).nullish()}).nullish(),finish_reason:t.z.string().nullish()})),usage:H}),e]);function he({prompt:t,user:n=`user`,assistant:r=`assistant`}){let i=``;t[0].role===`system`&&(i+=`${t[0].content}
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`,t=t.slice(1));for(let{role:a,content:o}of t)switch(a){case`system`:throw new e.InvalidPromptError({message:"Unexpected system message in prompt: ${content}",prompt:t});case`user`:{let e=o.map(e=>{switch(e.type){case`text`:return e.text}}).filter(Boolean).join(``);i+=`${n}:
|
|
4
|
+
${e}
|
|
4
5
|
|
|
5
|
-
`
|
|
6
|
+
`;break}case`assistant`:{let t=o.map(t=>{switch(t.type){case`text`:return t.text;case`tool-call`:throw new e.UnsupportedFunctionalityError({functionality:`tool-call messages`})}}).join(``);i+=`${r}:
|
|
7
|
+
${t}
|
|
8
|
+
|
|
9
|
+
`;break}case`tool`:throw new e.UnsupportedFunctionalityError({functionality:`tool messages`});default:{let e=a;throw Error(`Unsupported role: ${e}`)}}return i+=`${r}:
|
|
10
|
+
`,{prompt:i,stopSequences:[`
|
|
11
|
+
${n}:`]}}function U({id:e,model:t,created:n}){return{id:e??void 0,modelId:t??void 0,timestamp:n==null?void 0:new Date(n*1e3)}}function W(e){switch(e){case`stop`:return`stop`;case`length`:return`length`;case`content_filter`:return`content-filter`;case`function_call`:case`tool_calls`:return`tool-calls`;default:return`unknown`}}var ge=t.z.object({echo:t.z.boolean().optional(),logitBias:t.z.record(t.z.string(),t.z.number()).optional(),suffix:t.z.string().optional(),user:t.z.string().optional()}),_e=class{constructor(e,t){this.specificationVersion=`v2`;var n;this.modelId=e,this.config=t;let r=(n=t.errorStructure)??V;this.chunkSchema=ye(r.errorSchema),this.failedResponseHandler=P(r)}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(`.`)[0].trim()}get supportedUrls(){var e,t,n;return(n=(t=(e=this.config).supportedUrls)?.call(e))??{}}async getArgs({prompt:e,maxOutputTokens:t,temperature:n,topP:r,topK:i,frequencyPenalty:a,presencePenalty:o,stopSequences:s,responseFormat:c,seed:l,providerOptions:u,tools:d,toolChoice:f}){var p;let m=[],h=(p=await M({provider:this.providerOptionsName,providerOptions:u,schema:ge}))??{};i!=null&&m.push({type:`unsupported-setting`,setting:`topK`}),d?.length&&m.push({type:`unsupported-setting`,setting:`tools`}),f!=null&&m.push({type:`unsupported-setting`,setting:`toolChoice`}),c!=null&&c.type!==`text`&&m.push({type:`unsupported-setting`,setting:`responseFormat`,details:`JSON response format is not supported.`});let{prompt:g,stopSequences:_}=he({prompt:e}),v=[..._??[],...s??[]];return{args:{model:this.modelId,echo:h.echo,logit_bias:h.logitBias,suffix:h.suffix,user:h.user,max_tokens:t,temperature:n,top_p:r,frequency_penalty:a,presence_penalty:o,seed:l,...u?.[this.providerOptionsName],prompt:g,stop:v.length>0?v:void 0},warnings:m}}async doGenerate(e){var t,n,r,i,o,s;let{args:c,warnings:l}=await this.getArgs(e),{responseHeaders:u,value:d,rawValue:f}=await N({url:this.config.url({path:`/completions`,modelId:this.modelId}),headers:a(this.config.headers(),e.headers),body:c,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:I(ve),abortSignal:e.abortSignal,fetch:this.config.fetch}),p=d.choices[0],m=[];return p.text!=null&&p.text.length>0&&m.push({type:`text`,text:p.text}),{content:m,usage:{inputTokens:(n=(t=d.usage)?.prompt_tokens)??void 0,outputTokens:(i=(r=d.usage)?.completion_tokens)??void 0,totalTokens:(s=(o=d.usage)?.total_tokens)??void 0},finishReason:W(p.finish_reason),request:{body:c},response:{...U(d),headers:u,body:f},warnings:l}}async doStream(e){let{args:t,warnings:n}=await this.getArgs(e),r={...t,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},{responseHeaders:i,value:o}=await N({url:this.config.url({path:`/completions`,modelId:this.modelId}),headers:a(this.config.headers(),e.headers),body:r,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:F(this.chunkSchema),abortSignal:e.abortSignal,fetch:this.config.fetch}),s=`unknown`,c={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0},l=!0;return{stream:o.pipeThrough(new TransformStream({start(e){e.enqueue({type:`stream-start`,warnings:n})},transform(t,n){var r,i,a;if(e.includeRawChunks&&n.enqueue({type:`raw`,rawValue:t.rawValue}),!t.success){s=`error`,n.enqueue({type:`error`,error:t.error});return}let o=t.value;if(`error`in o){s=`error`,n.enqueue({type:`error`,error:o.error});return}l&&(l=!1,n.enqueue({type:`response-metadata`,...U(o)}),n.enqueue({type:`text-start`,id:`0`})),o.usage!=null&&(c.inputTokens=(r=o.usage.prompt_tokens)??void 0,c.outputTokens=(i=o.usage.completion_tokens)??void 0,c.totalTokens=(a=o.usage.total_tokens)??void 0);let u=o.choices[0];u?.finish_reason!=null&&(s=W(u.finish_reason)),u?.text!=null&&n.enqueue({type:`text-delta`,id:`0`,delta:u.text})},flush(e){l||e.enqueue({type:`text-end`,id:`0`}),e.enqueue({type:`finish`,finishReason:s,usage:c})}})),request:{body:r},response:{headers:i}}}},G=t.z.object({prompt_tokens:t.z.number(),completion_tokens:t.z.number(),total_tokens:t.z.number()}),ve=t.z.object({id:t.z.string().nullish(),created:t.z.number().nullish(),model:t.z.string().nullish(),choices:t.z.array(t.z.object({text:t.z.string(),finish_reason:t.z.string()})),usage:G.nullish()}),ye=e=>t.z.union([t.z.object({id:t.z.string().nullish(),created:t.z.number().nullish(),model:t.z.string().nullish(),choices:t.z.array(t.z.object({text:t.z.string(),finish_reason:t.z.string().nullish(),index:t.z.number()})),usage:G.nullish()}),e]),K=t.z.object({dimensions:t.z.number().optional(),user:t.z.string().optional()}),be=class{constructor(e,t){this.specificationVersion=`v2`,this.modelId=e,this.config=t}get provider(){return this.config.provider}get maxEmbeddingsPerCall(){var e;return(e=this.config.maxEmbeddingsPerCall)??2048}get supportsParallelCalls(){var e;return(e=this.config.supportsParallelCalls)??!0}get providerOptionsName(){return this.config.provider.split(`.`)[0].trim()}async doEmbed({values:t,headers:n,abortSignal:r,providerOptions:i}){var o,s,c;let l=Object.assign((o=await M({provider:`openai-compatible`,providerOptions:i,schema:K}))??{},(s=await M({provider:this.providerOptionsName,providerOptions:i,schema:K}))??{});if(t.length>this.maxEmbeddingsPerCall)throw new e.TooManyEmbeddingValuesForCallError({provider:this.provider,modelId:this.modelId,maxEmbeddingsPerCall:this.maxEmbeddingsPerCall,values:t});let{responseHeaders:u,value:d,rawValue:f}=await N({url:this.config.url({path:`/embeddings`,modelId:this.modelId}),headers:a(this.config.headers(),n),body:{model:this.modelId,input:t,encoding_format:`float`,dimensions:l.dimensions,user:l.user},failedResponseHandler:P((c=this.config.errorStructure)??V),successfulResponseHandler:I(xe),abortSignal:r,fetch:this.config.fetch});return{embeddings:d.data.map(e=>e.embedding),usage:d.usage?{tokens:d.usage.prompt_tokens}:void 0,providerMetadata:d.providerMetadata,response:{headers:u,body:f}}}},xe=t.z.object({data:t.z.array(t.z.object({embedding:t.z.array(t.z.number())})),usage:t.z.object({prompt_tokens:t.z.number()}).nullish(),providerMetadata:t.z.record(t.z.string(),t.z.record(t.z.string(),t.z.any())).optional()}),Se=class{constructor(e,t){this.modelId=e,this.config=t,this.specificationVersion=`v2`,this.maxImagesPerCall=10}get provider(){return this.config.provider}async doGenerate({prompt:e,n:t,size:n,aspectRatio:r,seed:i,providerOptions:o,headers:s,abortSignal:c}){var l,u,d,f,p;let m=[];r!=null&&m.push({type:`unsupported-setting`,setting:`aspectRatio`,details:"This model does not support aspect ratio. Use `size` instead."}),i!=null&&m.push({type:`unsupported-setting`,setting:`seed`});let h=(d=(u=(l=this.config._internal)?.currentDate)?.call(l))??new Date,{value:g,responseHeaders:_}=await N({url:this.config.url({path:`/images/generations`,modelId:this.modelId}),headers:a(this.config.headers(),s),body:{model:this.modelId,prompt:e,n:t,size:n,...(f=o.openai)??{},response_format:`b64_json`},failedResponseHandler:P((p=this.config.errorStructure)??V),successfulResponseHandler:I(Ce),abortSignal:c,fetch:this.config.fetch});return{images:g.data.map(e=>e.b64_json),warnings:m,response:{timestamp:h,modelId:this.modelId,headers:_}}}},Ce=t.z.object({data:t.z.array(t.z.object({b64_json:t.z.string()}))}),we=`1.0.19`;function Te(e){let t=ce(e.baseURL),n=e.name,r={...e.apiKey&&{Authorization:`Bearer ${e.apiKey}`},...e.headers},i=()=>l(r,`ai-sdk/openai-compatible/${we}`),a=r=>({provider:`${n}.${r}`,url:({path:n})=>{let r=new URL(`${t}${n}`);return e.queryParams&&(r.search=new URLSearchParams(e.queryParams).toString()),r.toString()},headers:i,fetch:e.fetch}),o=e=>s(e),s=t=>new fe(t,{...a(`chat`),includeUsage:e.includeUsage,supportsStructuredOutputs:e.supportsStructuredOutputs}),c=t=>new _e(t,{...a(`completion`),includeUsage:e.includeUsage}),u=e=>new be(e,{...a(`embedding`)}),d=e=>new Se(e,a(`image`)),f=e=>o(e);return f.languageModel=o,f.chatModel=s,f.completionModel=c,f.textEmbeddingModel=u,f.imageModel=d,f}var Ee=(e,t)=>(e=e.replace(/\/+$/,``),e+=`/`,t=t.replace(/^\/+/,``),e+t),q=(e,t)=>{for(let[n,r]of Object.entries(t)){let t=RegExp(`/:`+n+`(?:{[^/]+})?\\??`);e=e.replace(t,r?`/${r}`:``)}return e},J=e=>{let t=new URLSearchParams;for(let[n,r]of Object.entries(e)){if(r===void 0)continue;if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r)}return t},De=(e,t)=>{switch(t){case`ws`:return e.replace(/^http/,`ws`);case`http`:return e.replace(/^ws/,`http`)}},Y=e=>/^https?:\/\/[^\/]+?\/index(?=\?|$)/.test(e)?e.replace(/\/index(?=\?|$)/,`/`):e.replace(/\/index(?=\?|$)/,``);function X(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Oe(e,t){if(!X(e)&&!X(t))return t;let n={...e};for(let e in t){let r=t[e];X(n[e])&&X(r)?n[e]=Oe(n[e],r):n[e]=r}return n}var ke=(e,t)=>{let n=new Proxy(()=>{},{get(n,r){if(!(typeof r!=`string`||r===`then`))return ke(e,[...t,r])},apply(n,r,i){return e({path:t,args:i})}});return n},Ae=class{url;method;queryParams=void 0;pathParams={};rBody;cType=void 0;constructor(e,t){this.url=e,this.method=t}fetch=async(t,n)=>{if(t){if(t.query&&(this.queryParams=J(t.query)),t.form){let e=new FormData;for(let[n,r]of Object.entries(t.form))if(Array.isArray(r))for(let t of r)e.append(n,t);else e.append(n,r);this.rBody=e}t.json&&(this.rBody=JSON.stringify(t.json),this.cType=`application/json`),t.param&&(this.pathParams=t.param)}let r=this.method.toUpperCase(),i={...t?.header,...typeof n?.headers==`function`?await n.headers():n?.headers};if(t?.cookie){let n=[];for(let[r,i]of Object.entries(t.cookie))n.push(e.serialize(r,i,{path:`/`}));i.Cookie=n.join(`,`)}this.cType&&(i[`Content-Type`]=this.cType);let a=new Headers(i??void 0),o=this.url;o=Y(o),o=q(o,this.pathParams),this.queryParams&&(o=o+`?`+this.queryParams.toString()),r=this.method.toUpperCase();let s=!(r===`GET`||r===`HEAD`);return(n?.fetch||fetch)(o,{body:s?this.rBody:void 0,method:r,headers:a,...n?.init})}},je=(e,t)=>ke(function n(r){let i=[...r.path],a=i.slice(-3).reverse();if(a[0]===`toString`)return a[1]===`name`?a[2]||``:n.toString();if(a[0]===`valueOf`)return a[1]===`name`?a[2]||``:n;let o=``;if(/^\$/.test(a[0])){let e=i.pop();e&&(o=e.replace(/^\$/,``))}let s=i.join(`/`),c=Ee(e,s);if(o===`url`){let e=c;return r.args[0]&&(r.args[0].param&&(e=q(c,r.args[0].param)),r.args[0].query&&(e=e+`?`+J(r.args[0].query).toString())),e=Y(e),new URL(e)}if(o===`ws`){let e=De(r.args[0]&&r.args[0].param?q(c,r.args[0].param):c,`ws`),n=new URL(e),i=r.args[0]?.query;i&&Object.entries(i).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.searchParams.append(e,t)):n.searchParams.set(e,t)});let a=(...e)=>t?.webSocket!==void 0&&typeof t.webSocket==`function`?t.webSocket(...e):new WebSocket(...e);return a(n.toString())}let l=new Ae(c,o);if(o){t??={};let e=Oe(t,{...r.args[1]});return l.fetch(r.args[0],e)}return l},[]);const Me=process.env[e.APIServerURLEnvironmentVariable],Z=je(Me??``,{fetch:Me?void 0:async()=>{throw console.warn(`Your code is attempting to use the Blink API server, but no API server is configured for this Blink agent.`),Error(`No API server is configured for this Blink agent. External APIs are not available.`)}}),Ne=Object.freeze({upsert:async e=>{let t=await Z.chat[`:id`].$post({param:{id:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}return{id:e}},message:async(e,t,n)=>{let r=await Z.chat[`:id`].sendMessages.$post({param:{id:e},json:{messages:[t],behavior:n?.behavior??`enqueue`}});if(r.status!==204){let e=await r.json();throw Error(e.error)}}}),Pe=Object.freeze({kv:Object.freeze({get:async e=>{let t=await Z.storage.kv[`:key`].$get({param:{key:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}let n=await t.json();return n.value},set:async(e,t)=>{let n=await Z.storage.kv[`:key`].$post({param:{key:e},json:{value:t}});if(n.status!==204){let e=await n.json();throw Error(e.error)}},del:async e=>{let t=await Z.storage.kv[`:key`].$delete({param:{key:e}});if(t.status!==204){let e=await t.json();throw Error(e.error)}}})});var Fe=class extends Error{constructor(e,t){super(e),this.response=t}};const Q={withContext(e,t){let n={};for(let r of Object.keys(e)){let i=e[r];n[r]=i.withContext(t)}return n},with(e,t){let n={};for(let r of Object.keys(e)){let i=e[r];n[r]=i.withContext(t)}return n},async withApproval(t){let n={};for(let[e,r]of Object.entries(t.tools))n[e]={...r,execute:()=>{let e={type:`tool-approval`,outcome:`pending`};return e}};let r=t.messages[t.messages.length-1];if(!r?.parts)return n;let a=[];for(let n of r.parts){if(!e.isToolUIPart(n))continue;let r=e.getToolName(n),i=t.tools[r];if(!i||n.state!==`output-available`||!i.execute||!Ie(n.output))continue;n.output.outcome===`approved`&&a.push({toolName:e.getToolName(n),tool:i,input:n.input,toolCallId:n.toolCallId})}if(a.length>0){let n=e.createUIMessageStream({execute:async({writer:n})=>{n.write({type:`start-step`}),await Promise.all(a.map(async r=>{if(!r.tool.execute)throw Error(`Tool does not support execute.`);n.write({type:`tool-input-available`,toolCallId:r.toolCallId,toolName:r.toolName,input:r.input});try{let a=await r.tool.execute(r.input,{toolCallId:r.toolCallId,messages:e.convertToModelMessages(t.messages,{tools:t.tools}),abortSignal:t.abortSignal});if(i(a))for await(let e of a)n.write({type:`tool-output-available`,toolCallId:r.toolCallId,output:e,preliminary:!0});n.write({type:`tool-output-available`,toolCallId:r.toolCallId,output:a})}catch(e){n.write({type:`tool-output-error`,toolCallId:r.toolCallId,errorText:e instanceof Error?e.message:String(e)})}})),n.write({type:`finish`})}});throw new Fe(`Executing tools`,n)}return n},prefix(e,t){let n={};for(let[r,i]of Object.entries(e))n[`${t}${r}`]=i;return n}};function Ie(e){return typeof e==`object`&&!!e&&`type`in e&&e.type===`tool-approval`}function Le(e){return{version:`v0`,supportsRequests:e.onRequest!==void 0,supportsCompletions:e.experimental_provideCompletions!==void 0,fetch:async t=>{let n=new URL(t.url);if(n.pathname.startsWith(`/_agent/`))switch(n.pathname){case`/_agent/send-messages`:return Re(t,e);case`/_agent/completions`:return ze(t,e);case`/_agent/health`:return new Response(`OK`,{status:200});default:return new Response(`Not found`,{status:404})}if(e.onRequest){let n;try{n=await e.onRequest(t)}catch(e){return new Response(JSON.stringify({error:r.default.inspect(e)}),{status:500})}if(n)return n}return new Response(`Not found`,{status:404})}}}async function Re(e,t){if(e.method!==`POST`)return new Response(`Method not allowed`,{status:405});let n;try{n=await e.json()}catch{return new Response(`Invalid request`,{status:400})}let i;try{i=await t.sendMessages({messages:n.messages,chat:n.chat})}catch(e){if(e instanceof Fe)i=e.response;else return new Response(JSON.stringify({error:r.default.inspect(e)}),{status:500})}if(i instanceof Response)return i;let a;if(i instanceof ReadableStream)a=i;else{if(typeof i!=`object`||!(`toUIMessageStream`in i))throw Error(`The agent must return a "Response", "ReadableStream", or "toUIMessageStream" function.`);a=i.toUIMessageStream()}return new Response(a.pipeThrough(new TransformStream({transform(e,t){t.enqueue(`data: ${JSON.stringify(e)}\n\n`)},flush(e){e.enqueue(`data: [DONE]
|
|
12
|
+
|
|
13
|
+
`)}})).pipeThrough(new TextEncoderStream),{headers:$})}async function ze(e,t){if(e.method!==`POST`)return new Response(`Method not allowed`,{status:405});if(!t.experimental_provideCompletions)return new Response(`Completions not supported`,{status:404});let n;try{n=await e.json()}catch{return new Response(`Invalid request`,{status:400})}let i;try{i=await t.experimental_provideCompletions({messages:n.messages,input:n.input,caret:n.caret,selection:n.selection})}catch(e){return new Response(JSON.stringify({error:r.default.inspect(e)}),{status:500})}let a=await i;return a instanceof ReadableStream?new Response(a.pipeThrough(new TransformStream({transform(e,t){t.enqueue(`data: ${JSON.stringify(e)}\n\n`)},flush(e){e.enqueue(`data: [DONE]
|
|
14
|
+
|
|
15
|
+
`)}})).pipeThrough(new TextEncoderStream),{headers:$}):new Response(JSON.stringify(a),{headers:{"content-type":`application/json`}})}function Be(t,n){return t.headers.set(e.StreamResponseFormatHeader,n),t}const $={"content-type":`text/event-stream`,"cache-control":`no-cache, no-transform`,connection:`keep-alive`,"x-accel-buffering":`no`},Ve=e=>{let t=process.env.BLINK_TOKEN??process.env.BLINK_INVOCATION_AUTH_TOKEN;if(!t)throw Error(`You must be authenticated with Blink to use the model gateway.
|
|
16
|
+
|
|
17
|
+
Feel free to use other providers like OpenAI, Anthropic, or Google.`);return Te({baseURL:`https://blink.so/api/ai-gateway/v1`,apiKey:t,name:e,headers:{BLINK_ORGANIZATION_ID:`44d4baab-ed54-453f-8ffc-a8c9f3d05483`}})(e)};var He={agent:Le,chat:Ne,storage:Pe,tools:Q};exports.agent=Le,exports.chat=Ne,exports.default=He,exports.isToolApprovalOutput=Ie,exports.model=Ve,exports.storage=Pe,exports.tools=Q,exports.withResponseFormat=Be;
|
package/dist/api/index.d.cts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as _ai_sdk_provider0 from "@ai-sdk/provider";
|
|
1
2
|
import * as ai0 from "ai";
|
|
2
3
|
import { AsyncIterableStream, InferUIMessageChunk, Tool, ToolSet, UIDataTypes, UIMessage, UIMessagePart, UITools } from "ai";
|
|
3
4
|
|
|
@@ -27,27 +28,48 @@ declare const chat: Readonly<{
|
|
|
27
28
|
//#endregion
|
|
28
29
|
//#region src/api/tools.d.ts
|
|
29
30
|
/**
|
|
30
|
-
*
|
|
31
|
+
* ToolWithContext is a tool that supports the "withContext" method.
|
|
31
32
|
*
|
|
32
33
|
* @param CONTEXT The context type.
|
|
33
34
|
* @param TOOL The tool type.
|
|
34
35
|
* @returns The tool with the given context.
|
|
35
36
|
*/
|
|
36
|
-
type
|
|
37
|
-
|
|
37
|
+
type ToolWithContext<CONTEXT, TOOL extends Tool> = TOOL & {
|
|
38
|
+
withContext(context: CONTEXT): TOOL;
|
|
38
39
|
};
|
|
39
40
|
/**
|
|
40
41
|
* Tools are helpers for managing tools.
|
|
41
42
|
*/
|
|
42
43
|
declare const tools: {
|
|
43
44
|
/**
|
|
44
|
-
*
|
|
45
|
+
* withContext adds context to a set of tools that supports the "withContext" method.
|
|
45
46
|
*
|
|
46
47
|
* @param context
|
|
47
48
|
* @param tools
|
|
48
49
|
* @returns
|
|
49
50
|
*/
|
|
51
|
+
withContext<const TOOLS extends ToolsWithContext>(tools: TOOLS, context: ContextFromTools<TOOLS>): { [K in keyof TOOLS]: Tool };
|
|
52
|
+
/**
|
|
53
|
+
* @internal
|
|
54
|
+
* @deprecated Use withContext instead - it's the same thing.
|
|
55
|
+
*/
|
|
50
56
|
with<const TOOLS extends ToolsWithContext>(tools: TOOLS, context: ContextFromTools<TOOLS>): { [K in keyof TOOLS]: Tool };
|
|
57
|
+
/**
|
|
58
|
+
* withApproval ensures a set of tools need explicit user approval
|
|
59
|
+
* before they are executed.
|
|
60
|
+
*
|
|
61
|
+
* This works by replacing the execution of all provided tools with
|
|
62
|
+
* special output that interfaces must handle.
|
|
63
|
+
*
|
|
64
|
+
* On approval, the tool will be executed with the verbatim input.
|
|
65
|
+
*
|
|
66
|
+
* @returns Tools that should be sent in `streamText`.
|
|
67
|
+
*/
|
|
68
|
+
withApproval<TOOLS extends ToolSet, MESSAGE extends UIMessage>(options: {
|
|
69
|
+
messages: MESSAGE[];
|
|
70
|
+
tools: TOOLS;
|
|
71
|
+
abortSignal?: AbortSignal;
|
|
72
|
+
}): Promise<TOOLS>;
|
|
51
73
|
/**
|
|
52
74
|
* prefix adds a prefix to all the tools in a tool set.
|
|
53
75
|
*
|
|
@@ -58,11 +80,25 @@ declare const tools: {
|
|
|
58
80
|
prefix(tools: ToolSet, prefix: string): ToolSet;
|
|
59
81
|
};
|
|
60
82
|
type ToolsWithContext = Record<string, Tool & {
|
|
61
|
-
|
|
83
|
+
withContext(context: unknown): Tool;
|
|
62
84
|
}>;
|
|
63
85
|
type ContextFromTools<TOOLS extends ToolsWithContext> = TOOLS[keyof TOOLS] extends {
|
|
64
|
-
|
|
86
|
+
withContext(context: infer C): any;
|
|
65
87
|
} ? C : never;
|
|
88
|
+
/**
|
|
89
|
+
* ToolApprovalOutput is the output of a tool that requires approval.
|
|
90
|
+
*
|
|
91
|
+
* This should be consumed by the UI to display an approval prompt.
|
|
92
|
+
*/
|
|
93
|
+
interface ToolApprovalOutput {
|
|
94
|
+
type: "tool-approval";
|
|
95
|
+
outcome: "pending" | "approved" | "rejected";
|
|
96
|
+
reason?: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* isToolApprovalOutput checks if an output is a tool approval output.
|
|
100
|
+
*/
|
|
101
|
+
declare function isToolApprovalOutput(output: unknown): output is ToolApprovalOutput;
|
|
66
102
|
//#endregion
|
|
67
103
|
//#region src/api/storage.d.ts
|
|
68
104
|
/**
|
|
@@ -192,6 +228,7 @@ declare function withResponseFormat(response: Response, format: StreamResponseFo
|
|
|
192
228
|
* @param modelName - See: https://vercel.com/ai-gateway/models
|
|
193
229
|
* @returns An AI SDK model that is authenticated through Blink.
|
|
194
230
|
*/
|
|
231
|
+
declare const model: (modelName: string) => _ai_sdk_provider0.LanguageModelV2;
|
|
195
232
|
declare const _default: {
|
|
196
233
|
agent: typeof agent;
|
|
197
234
|
chat: Readonly<{
|
|
@@ -206,13 +243,23 @@ declare const _default: {
|
|
|
206
243
|
}>;
|
|
207
244
|
}>;
|
|
208
245
|
tools: {
|
|
246
|
+
withContext<const TOOLS extends {
|
|
247
|
+
[x: string]: ai0.Tool & {
|
|
248
|
+
withContext(context: unknown): ai0.Tool;
|
|
249
|
+
};
|
|
250
|
+
}>(tools: TOOLS, context: ContextFromTools<TOOLS>): { [K in keyof TOOLS]: ai0.Tool };
|
|
209
251
|
with<const TOOLS extends {
|
|
210
252
|
[x: string]: ai0.Tool & {
|
|
211
|
-
|
|
253
|
+
withContext(context: unknown): ai0.Tool;
|
|
212
254
|
};
|
|
213
255
|
}>(tools: TOOLS, context: ContextFromTools<TOOLS>): { [K in keyof TOOLS]: ai0.Tool };
|
|
256
|
+
withApproval<TOOLS extends ai0.ToolSet, MESSAGE extends UIMessage>(options: {
|
|
257
|
+
messages: MESSAGE[];
|
|
258
|
+
tools: TOOLS;
|
|
259
|
+
abortSignal?: AbortSignal;
|
|
260
|
+
}): Promise<TOOLS>;
|
|
214
261
|
prefix(tools: ai0.ToolSet, prefix: string): ai0.ToolSet;
|
|
215
262
|
};
|
|
216
263
|
};
|
|
217
264
|
//#endregion
|
|
218
|
-
export { Agent, AgentDefaultExport, Chat, ContextFromTools, ExperimentalCompletion, ExperimentalProvideCompletionsOptions, ExperimentalProvideCompletionsResponse, Message, MessageOptions, SendMessagesOptions, SendMessagesResponse, StreamResponseFormat,
|
|
265
|
+
export { Agent, AgentDefaultExport, Chat, ContextFromTools, ExperimentalCompletion, ExperimentalProvideCompletionsOptions, ExperimentalProvideCompletionsResponse, Message, MessageOptions, SendMessagesOptions, SendMessagesResponse, StreamResponseFormat, ToolApprovalOutput, ToolWithContext, agent, chat, _default as default, isToolApprovalOutput, model, storage, tools, withResponseFormat };
|
package/dist/api/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as _ai_sdk_provider0 from "@ai-sdk/provider";
|
|
1
2
|
import * as ai0 from "ai";
|
|
2
3
|
import { AsyncIterableStream, InferUIMessageChunk, Tool, ToolSet, UIDataTypes, UIMessage, UIMessagePart, UITools } from "ai";
|
|
3
4
|
|
|
@@ -27,27 +28,48 @@ declare const chat: Readonly<{
|
|
|
27
28
|
//#endregion
|
|
28
29
|
//#region src/api/tools.d.ts
|
|
29
30
|
/**
|
|
30
|
-
*
|
|
31
|
+
* ToolWithContext is a tool that supports the "withContext" method.
|
|
31
32
|
*
|
|
32
33
|
* @param CONTEXT The context type.
|
|
33
34
|
* @param TOOL The tool type.
|
|
34
35
|
* @returns The tool with the given context.
|
|
35
36
|
*/
|
|
36
|
-
type
|
|
37
|
-
|
|
37
|
+
type ToolWithContext<CONTEXT, TOOL extends Tool> = TOOL & {
|
|
38
|
+
withContext(context: CONTEXT): TOOL;
|
|
38
39
|
};
|
|
39
40
|
/**
|
|
40
41
|
* Tools are helpers for managing tools.
|
|
41
42
|
*/
|
|
42
43
|
declare const tools: {
|
|
43
44
|
/**
|
|
44
|
-
*
|
|
45
|
+
* withContext adds context to a set of tools that supports the "withContext" method.
|
|
45
46
|
*
|
|
46
47
|
* @param context
|
|
47
48
|
* @param tools
|
|
48
49
|
* @returns
|
|
49
50
|
*/
|
|
51
|
+
withContext<const TOOLS extends ToolsWithContext>(tools: TOOLS, context: ContextFromTools<TOOLS>): { [K in keyof TOOLS]: Tool };
|
|
52
|
+
/**
|
|
53
|
+
* @internal
|
|
54
|
+
* @deprecated Use withContext instead - it's the same thing.
|
|
55
|
+
*/
|
|
50
56
|
with<const TOOLS extends ToolsWithContext>(tools: TOOLS, context: ContextFromTools<TOOLS>): { [K in keyof TOOLS]: Tool };
|
|
57
|
+
/**
|
|
58
|
+
* withApproval ensures a set of tools need explicit user approval
|
|
59
|
+
* before they are executed.
|
|
60
|
+
*
|
|
61
|
+
* This works by replacing the execution of all provided tools with
|
|
62
|
+
* special output that interfaces must handle.
|
|
63
|
+
*
|
|
64
|
+
* On approval, the tool will be executed with the verbatim input.
|
|
65
|
+
*
|
|
66
|
+
* @returns Tools that should be sent in `streamText`.
|
|
67
|
+
*/
|
|
68
|
+
withApproval<TOOLS extends ToolSet, MESSAGE extends UIMessage>(options: {
|
|
69
|
+
messages: MESSAGE[];
|
|
70
|
+
tools: TOOLS;
|
|
71
|
+
abortSignal?: AbortSignal;
|
|
72
|
+
}): Promise<TOOLS>;
|
|
51
73
|
/**
|
|
52
74
|
* prefix adds a prefix to all the tools in a tool set.
|
|
53
75
|
*
|
|
@@ -58,11 +80,25 @@ declare const tools: {
|
|
|
58
80
|
prefix(tools: ToolSet, prefix: string): ToolSet;
|
|
59
81
|
};
|
|
60
82
|
type ToolsWithContext = Record<string, Tool & {
|
|
61
|
-
|
|
83
|
+
withContext(context: unknown): Tool;
|
|
62
84
|
}>;
|
|
63
85
|
type ContextFromTools<TOOLS extends ToolsWithContext> = TOOLS[keyof TOOLS] extends {
|
|
64
|
-
|
|
86
|
+
withContext(context: infer C): any;
|
|
65
87
|
} ? C : never;
|
|
88
|
+
/**
|
|
89
|
+
* ToolApprovalOutput is the output of a tool that requires approval.
|
|
90
|
+
*
|
|
91
|
+
* This should be consumed by the UI to display an approval prompt.
|
|
92
|
+
*/
|
|
93
|
+
interface ToolApprovalOutput {
|
|
94
|
+
type: "tool-approval";
|
|
95
|
+
outcome: "pending" | "approved" | "rejected";
|
|
96
|
+
reason?: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* isToolApprovalOutput checks if an output is a tool approval output.
|
|
100
|
+
*/
|
|
101
|
+
declare function isToolApprovalOutput(output: unknown): output is ToolApprovalOutput;
|
|
66
102
|
//#endregion
|
|
67
103
|
//#region src/api/storage.d.ts
|
|
68
104
|
/**
|
|
@@ -192,6 +228,7 @@ declare function withResponseFormat(response: Response, format: StreamResponseFo
|
|
|
192
228
|
* @param modelName - See: https://vercel.com/ai-gateway/models
|
|
193
229
|
* @returns An AI SDK model that is authenticated through Blink.
|
|
194
230
|
*/
|
|
231
|
+
declare const model: (modelName: string) => _ai_sdk_provider0.LanguageModelV2;
|
|
195
232
|
declare const _default: {
|
|
196
233
|
agent: typeof agent;
|
|
197
234
|
chat: Readonly<{
|
|
@@ -206,13 +243,23 @@ declare const _default: {
|
|
|
206
243
|
}>;
|
|
207
244
|
}>;
|
|
208
245
|
tools: {
|
|
246
|
+
withContext<const TOOLS extends {
|
|
247
|
+
[x: string]: ai0.Tool & {
|
|
248
|
+
withContext(context: unknown): ai0.Tool;
|
|
249
|
+
};
|
|
250
|
+
}>(tools: TOOLS, context: ContextFromTools<TOOLS>): { [K in keyof TOOLS]: ai0.Tool };
|
|
209
251
|
with<const TOOLS extends {
|
|
210
252
|
[x: string]: ai0.Tool & {
|
|
211
|
-
|
|
253
|
+
withContext(context: unknown): ai0.Tool;
|
|
212
254
|
};
|
|
213
255
|
}>(tools: TOOLS, context: ContextFromTools<TOOLS>): { [K in keyof TOOLS]: ai0.Tool };
|
|
256
|
+
withApproval<TOOLS extends ai0.ToolSet, MESSAGE extends UIMessage>(options: {
|
|
257
|
+
messages: MESSAGE[];
|
|
258
|
+
tools: TOOLS;
|
|
259
|
+
abortSignal?: AbortSignal;
|
|
260
|
+
}): Promise<TOOLS>;
|
|
214
261
|
prefix(tools: ai0.ToolSet, prefix: string): ai0.ToolSet;
|
|
215
262
|
};
|
|
216
263
|
};
|
|
217
264
|
//#endregion
|
|
218
|
-
export { Agent, AgentDefaultExport, Chat, ContextFromTools, ExperimentalCompletion, ExperimentalProvideCompletionsOptions, ExperimentalProvideCompletionsResponse, Message, MessageOptions, SendMessagesOptions, SendMessagesResponse, StreamResponseFormat,
|
|
265
|
+
export { Agent, AgentDefaultExport, Chat, ContextFromTools, ExperimentalCompletion, ExperimentalProvideCompletionsOptions, ExperimentalProvideCompletionsResponse, Message, MessageOptions, SendMessagesOptions, SendMessagesResponse, StreamResponseFormat, ToolApprovalOutput, ToolWithContext, agent, chat, _default as default, isToolApprovalOutput, model, storage, tools, withResponseFormat };
|
package/dist/api/index.js
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
|
-
import{APIServerURLEnvironmentVariable as e,StreamResponseFormatHeader as t,serialize as n}from"../cookie-CyZUsiHM.js";import r from"util";var i=(e,t)=>(e=e.replace(/\/+$/,``),e+=`/`,t=t.replace(/^\/+/,``),e+t),a=(e,t)=>{for(let[n,r]of Object.entries(t)){let t=RegExp(`/:`+n+`(?:{[^/]+})?\\??`);e=e.replace(t,r?`/${r}`:``)}return e},o=e=>{let t=new URLSearchParams;for(let[n,r]of Object.entries(e)){if(r===void 0)continue;if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r)}return t},s=(e,t)=>{switch(t){case`ws`:return e.replace(/^http/,`ws`);case`http`:return e.replace(/^ws/,`http`)}},c=e=>/^https?:\/\/[^\/]+?\/index(?=\?|$)/.test(e)?e.replace(/\/index(?=\?|$)/,`/`):e.replace(/\/index(?=\?|$)/,``);function l(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function u(e,t){if(!l(e)&&!l(t))return t;let n={...e};for(let e in t){let r=t[e];l(n[e])&&l(r)?n[e]=u(n[e],r):n[e]=r}return n}var d=(e,t)=>{let n=new Proxy(()=>{},{get(n,r){if(!(typeof r!=`string`||r===`then`))return d(e,[...t,r])},apply(n,r,i){return e({path:t,args:i})}});return n},f=class{url;method;queryParams=void 0;pathParams={};rBody;cType=void 0;constructor(e,t){this.url=e,this.method=t}fetch=async(e,t)=>{if(e){if(e.query&&(this.queryParams=o(e.query)),e.form){let t=new FormData;for(let[n,r]of Object.entries(e.form))if(Array.isArray(r))for(let e of r)t.append(n,e);else t.append(n,r);this.rBody=t}e.json&&(this.rBody=JSON.stringify(e.json),this.cType=`application/json`),e.param&&(this.pathParams=e.param)}let r=this.method.toUpperCase(),i={...e?.header,...typeof t?.headers==`function`?await t.headers():t?.headers};if(e?.cookie){let t=[];for(let[r,i]of Object.entries(e.cookie))t.push(n(r,i,{path:`/`}));i.Cookie=t.join(`,`)}this.cType&&(i[`Content-Type`]=this.cType);let s=new Headers(i??void 0),l=this.url;l=c(l),l=a(l,this.pathParams),this.queryParams&&(l=l+`?`+this.queryParams.toString()),r=this.method.toUpperCase();let u=!(r===`GET`||r===`HEAD`);return(t?.fetch||fetch)(l,{body:u?this.rBody:void 0,method:r,headers:s,...t?.init})}},p=(e,t)=>d(function n(r){let l=[...r.path],d=l.slice(-3).reverse();if(d[0]===`toString`)return d[1]===`name`?d[2]||``:n.toString();if(d[0]===`valueOf`)return d[1]===`name`?d[2]||``:n;let p=``;if(/^\$/.test(d[0])){let e=l.pop();e&&(p=e.replace(/^\$/,``))}let m=l.join(`/`),h=i(e,m);if(p===`url`){let e=h;return r.args[0]&&(r.args[0].param&&(e=a(h,r.args[0].param)),r.args[0].query&&(e=e+`?`+o(r.args[0].query).toString())),e=c(e),new URL(e)}if(p===`ws`){let e=s(r.args[0]&&r.args[0].param?a(h,r.args[0].param):h,`ws`),n=new URL(e),i=r.args[0]?.query;i&&Object.entries(i).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.searchParams.append(e,t)):n.searchParams.set(e,t)});let o=(...e)=>t?.webSocket!==void 0&&typeof t.webSocket==`function`?t.webSocket(...e):new WebSocket(...e);return o(n.toString())}let g=new f(h,p);if(p){t??={};let e=u(t,{...r.args[1]});return g.fetch(r.args[0],e)}return g},[]);const m=process.env[e],h=p(m??``,{fetch:m?void 0:async()=>{throw console.warn(`Your code is attempting to use the Blink API server, but no API server is configured for this Blink agent.`),Error(`No API server is configured for this Blink agent. External APIs are not available.`)}}),g=Object.freeze({upsert:async e=>{let t=await h.chat[`:id`].$post({param:{id:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}return{id:e}},message:async(e,t,n)=>{let r=await h.chat[`:id`].sendMessages.$post({param:{id:e},json:{messages:[t],behavior:n?.behavior??`enqueue`}});if(r.status!==204){let e=await r.json();throw Error(e.error)}}}),_=Object.freeze({kv:Object.freeze({get:async e=>{let t=await h.storage.kv[`:key`].$get({param:{key:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}let n=await t.json();return n.value},set:async(e,t)=>{let n=await h.storage.kv[`:key`].$post({param:{key:e},json:{value:t}});if(n.status!==204){let e=await n.json();throw Error(e.error)}},del:async e=>{let t=await h.storage.kv[`:key`].$delete({param:{key:e}});if(t.status!==204){let e=await t.json();throw Error(e.error)}}})}),v={with(e,t){let n={};for(let r of Object.keys(e)){let i=e[r];n[r]=i.with(t)}return n},prefix(e,t){let n={};for(let[r,i]of Object.entries(e))n[`${t}${r}`]=i;return n}};function y(e){return{version:`v0`,supportsRequests:e.onRequest!==void 0,supportsCompletions:e.experimental_provideCompletions!==void 0,fetch:async t=>{let n=new URL(t.url);if(n.pathname.startsWith(`/_agent/`))switch(n.pathname){case`/_agent/send-messages`:return b(t,e);case`/_agent/completions`:return x(t,e);case`/_agent/health`:return new Response(`OK`,{status:200});default:return new Response(`Not found`,{status:404})}if(e.onRequest){let n;try{n=await e.onRequest(t)}catch(e){return new Response(JSON.stringify({error:r.inspect(e)}),{status:500})}if(n)return n}return new Response(`Not found`,{status:404})}}}async function b(e,t){if(e.method!==`POST`)return new Response(`Method not allowed`,{status:405});let n;try{n=await e.json()}catch{return new Response(`Invalid request`,{status:400})}let i;try{i=await t.sendMessages({messages:n.messages,chat:n.chat})}catch(e){return new Response(JSON.stringify({error:r.inspect(e)}),{status:500})}if(i instanceof Response)return i;let a;if(i instanceof ReadableStream)a=i;else{if(typeof i!=`object`||!(`toUIMessageStream`in i))throw Error(`The agent must return a "Response", "ReadableStream", or "toUIMessageStream" function.`);a=i.toUIMessageStream()}return new Response(a.pipeThrough(new TransformStream({transform(e,t){t.enqueue(`data: ${JSON.stringify(e)}\n\n`)},flush(e){e.enqueue(`data: [DONE]
|
|
1
|
+
import{APICallError as e,APIServerURLEnvironmentVariable as t,EmptyResponseBodyError as n,EventSourceParserStream as r,InvalidArgumentError as i,InvalidPromptError as a,InvalidResponseDataError as o,JSONParseError as s,StreamResponseFormatHeader as c,TooManyEmbeddingValuesForCallError as l,TypeValidationError as u,UnsupportedFunctionalityError as d,convertToModelMessages as f,createUIMessageStream as p,getToolName as m,isToolUIPart as h,serialize as g}from"../cookie-CB9k3Awr.js";import{z as _}from"zod/v4";import{ZodFirstPartyTypeKind as v}from"zod/v3";import y from"util";function b(e){return typeof e==`object`&&!!e&&typeof e[Symbol.asyncIterator]==`function`}function x(...e){return e.reduce((e,t)=>({...e,...t??{}}),{})}function S(e){return Object.fromEntries([...e.headers])}function C(e=globalThis){var t,n,r;return e.window?`runtime/browser`:(t=e.navigator)?.userAgent?`runtime/${e.navigator.userAgent.toLowerCase()}`:(r=(n=e.process)?.versions)?.node?`runtime/node.js/${e.process.version.substring(0)}`:e.EdgeRuntime?`runtime/vercel-edge`:`runtime/unknown`}function w(e){return Object.fromEntries(Object.entries(e).filter(([e,t])=>t!=null))}function T(e,...t){let n=w(e??{}),r=new Headers(n),i=r.get(`user-agent`)||``;return r.set(`user-agent`,[i,...t].filter(Boolean).join(` `)),Object.fromEntries(r)}var E=({prefix:e,size:t=16,alphabet:n=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`,separator:r=`-`}={})=>{let a=()=>{let e=n.length,r=Array(t);for(let i=0;i<t;i++)r[i]=n[Math.random()*e|0];return r.join(``)};if(e==null)return a;if(n.includes(r))throw new i({argument:`separator`,message:`The separator "${r}" must not be part of the alphabet "${n}".`});return()=>`${e}${r}${a()}`},D=E();function O(e){return(e instanceof Error||e instanceof DOMException)&&(e.name===`AbortError`||e.name===`ResponseAborted`||e.name===`TimeoutError`)}var k=[`fetch failed`,`failed to fetch`];function A({error:t,url:n,requestBodyValues:r}){if(O(t))return t;if(t instanceof TypeError&&k.includes(t.message.toLowerCase())){let i=t.cause;if(i!=null)return new e({message:`Cannot connect to API: ${i.message}`,cause:i,url:n,requestBodyValues:r,isRetryable:!0})}return t}var j=`3.0.10`,ee=/"__proto__"\s*:/,te=/"constructor"\s*:/;function ne(e){let t=JSON.parse(e);return typeof t!=`object`||!t||ee.test(e)===!1&&te.test(e)===!1?t:re(t)}function re(e){let t=[e];for(;t.length;){let e=t;t=[];for(let n of e){if(Object.prototype.hasOwnProperty.call(n,`__proto__`)||Object.prototype.hasOwnProperty.call(n,`constructor`)&&Object.prototype.hasOwnProperty.call(n.constructor,`prototype`))throw SyntaxError(`Object contains forbidden prototype property`);for(let e in n){let r=n[e];r&&typeof r==`object`&&t.push(r)}}}return e}function M(e){let{stackTraceLimit:t}=Error;Error.stackTraceLimit=0;try{return ne(e)}finally{Error.stackTraceLimit=t}}var N=Symbol.for(`vercel.ai.validator`);function ie(e){return{[N]:!0,validate:e}}function ae(e){return typeof e==`object`&&!!e&&N in e&&e[N]===!0&&`validate`in e}function oe(e){return ae(e)?e:se(e)}function se(e){return ie(async t=>{let n=await e[`~standard`].validate(t);return n.issues==null?{success:!0,value:n.value}:{success:!1,error:new u({value:t,cause:n.issues})}})}async function ce({value:e,schema:t}){let n=await P({value:e,schema:t});if(!n.success)throw u.wrap({value:e,cause:n.error});return n.value}async function P({value:e,schema:t}){let n=oe(t);try{if(n.validate==null)return{success:!0,value:e,rawValue:e};let t=await n.validate(e);return t.success?{success:!0,value:t.value,rawValue:e}:{success:!1,error:u.wrap({value:e,cause:t.error}),rawValue:e}}catch(t){return{success:!1,error:u.wrap({value:e,cause:t}),rawValue:e}}}async function le({text:e,schema:t}){try{let n=M(e);return t==null?n:ce({value:n,schema:t})}catch(t){throw s.isInstance(t)||u.isInstance(t)?t:new s({text:e,cause:t})}}async function ue({text:e,schema:t}){try{let n=M(e);return t==null?{success:!0,value:n,rawValue:n}:await P({value:n,schema:t})}catch(t){return{success:!1,error:s.isInstance(t)?t:new s({text:e,cause:t}),rawValue:void 0}}}function F(e){try{return M(e),!0}catch{return!1}}function de({stream:e,schema:t}){return e.pipeThrough(new TextDecoderStream).pipeThrough(new r).pipeThrough(new TransformStream({async transform({data:e},n){e!==`[DONE]`&&n.enqueue(await ue({text:e,schema:t}))}}))}async function I({provider:e,providerOptions:t,schema:n}){if(t?.[e]==null)return;let r=await P({value:t[e],schema:n});if(!r.success)throw new i({argument:`providerOptions`,message:`invalid ${e} provider options`,cause:r.error});return r.value}var fe=()=>globalThis.fetch,L=async({url:e,headers:t,body:n,failedResponseHandler:r,successfulResponseHandler:i,abortSignal:a,fetch:o})=>pe({url:e,headers:{"Content-Type":`application/json`,...t},body:{content:JSON.stringify(n),values:n},failedResponseHandler:r,successfulResponseHandler:i,abortSignal:a,fetch:o}),pe=async({url:t,headers:n={},body:r,successfulResponseHandler:i,failedResponseHandler:a,abortSignal:o,fetch:s=fe()})=>{try{let c=await s(t,{method:`POST`,headers:T(n,`ai-sdk/provider-utils/${j}`,C()),body:r.content,signal:o}),l=S(c);if(!c.ok){let n;try{n=await a({response:c,url:t,requestBodyValues:r.values})}catch(n){throw O(n)||e.isInstance(n)?n:new e({message:`Failed to process error response`,cause:n,statusCode:c.status,url:t,responseHeaders:l,requestBodyValues:r.values})}throw n.value}try{return await i({response:c,url:t,requestBodyValues:r.values})}catch(n){throw n instanceof Error&&(O(n)||e.isInstance(n))?n:new e({message:`Failed to process successful response`,cause:n,statusCode:c.status,url:t,responseHeaders:l,requestBodyValues:r.values})}}catch(e){throw A({error:e,url:t,requestBodyValues:r.values})}},R=({errorSchema:t,errorToMessage:n,isRetryable:r})=>async({response:i,url:a,requestBodyValues:o})=>{let s=await i.text(),c=S(i);if(s.trim()===``)return{responseHeaders:c,value:new e({message:i.statusText,url:a,requestBodyValues:o,statusCode:i.status,responseHeaders:c,responseBody:s,isRetryable:r?.(i)})};try{let l=await le({text:s,schema:t});return{responseHeaders:c,value:new e({message:n(l),url:a,requestBodyValues:o,statusCode:i.status,responseHeaders:c,responseBody:s,data:l,isRetryable:r?.(i,l)})}}catch{return{responseHeaders:c,value:new e({message:i.statusText,url:a,requestBodyValues:o,statusCode:i.status,responseHeaders:c,responseBody:s,isRetryable:r?.(i)})}}},z=e=>async({response:t})=>{let r=S(t);if(t.body==null)throw new n({});return{responseHeaders:r,value:de({stream:t.body,schema:e})}},B=t=>async({response:n,url:r,requestBodyValues:i})=>{let a=await n.text(),o=await ue({text:a,schema:t}),s=S(n);if(!o.success)throw new e({message:`Invalid JSON response`,cause:o.error,statusCode:n.status,responseHeaders:s,responseBody:a,url:r,requestBodyValues:i});return{responseHeaders:s,value:o.value,rawValue:o.rawValue}},{btoa:me,atob:he}=globalThis;function ge(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCodePoint(e[n]);return me(t)}function _e(e){return e instanceof Uint8Array?ge(e):e}function ve(e){return e?.replace(/\/$/,``)}function V(e){var t,n;return(n=(t=e?.providerOptions)?.openaiCompatible)??{}}function ye(e){let t=[];for(let{role:n,content:r,...i}of e){let e=V({...i});switch(n){case`system`:t.push({role:`system`,content:r,...e});break;case`user`:if(r.length===1&&r[0].type===`text`){t.push({role:`user`,content:r[0].text,...V(r[0])});break}t.push({role:`user`,content:r.map(e=>{let t=V(e);switch(e.type){case`text`:return{type:`text`,text:e.text,...t};case`file`:if(e.mediaType.startsWith(`image/`)){let n=e.mediaType===`image/*`?`image/jpeg`:e.mediaType;return{type:`image_url`,image_url:{url:e.data instanceof URL?e.data.toString():`data:${n};base64,${_e(e.data)}`},...t}}else throw new d({functionality:`file part media type ${e.mediaType}`})}}),...e});break;case`assistant`:{let n=``,i=[];for(let e of r){let t=V(e);switch(e.type){case`text`:n+=e.text;break;case`tool-call`:i.push({id:e.toolCallId,type:`function`,function:{name:e.toolName,arguments:JSON.stringify(e.input)},...t});break}}t.push({role:`assistant`,content:n,tool_calls:i.length>0?i:void 0,...e});break}case`tool`:for(let e of r){let n=e.output,r;switch(n.type){case`text`:case`error-text`:r=n.value;break;case`content`:case`json`:case`error-json`:r=JSON.stringify(n.value);break}let i=V(e);t.push({role:`tool`,tool_call_id:e.toolCallId,content:r,...i})}break;default:{let e=n;throw Error(`Unsupported role: ${e}`)}}}return t}function H({id:e,model:t,created:n}){return{id:e??void 0,modelId:t??void 0,timestamp:n==null?void 0:new Date(n*1e3)}}function U(e){switch(e){case`stop`:return`stop`;case`length`:return`length`;case`content_filter`:return`content-filter`;case`function_call`:case`tool_calls`:return`tool-calls`;default:return`unknown`}}var W=_.object({user:_.string().optional(),reasoningEffort:_.string().optional()}),be=_.object({error:_.object({message:_.string(),type:_.string().nullish(),param:_.any().nullish(),code:_.union([_.string(),_.number()]).nullish()})}),G={errorSchema:be,errorToMessage:e=>e.error.message};function xe({tools:e,toolChoice:t}){e=e?.length?e:void 0;let n=[];if(e==null)return{tools:void 0,toolChoice:void 0,toolWarnings:n};let r=[];for(let t of e)t.type===`provider-defined`?n.push({type:`unsupported-tool`,tool:t}):r.push({type:`function`,function:{name:t.name,description:t.description,parameters:t.inputSchema}});if(t==null)return{tools:r,toolChoice:void 0,toolWarnings:n};let i=t.type;switch(i){case`auto`:case`none`:case`required`:return{tools:r,toolChoice:i,toolWarnings:n};case`tool`:return{tools:r,toolChoice:{type:`function`,function:{name:t.toolName}},toolWarnings:n};default:{let e=i;throw new d({functionality:`tool choice type: ${e}`})}}}var Se=class{constructor(e,t){this.specificationVersion=`v2`;var n,r;this.modelId=e,this.config=t;let i=(n=t.errorStructure)??G;this.chunkSchema=we(i.errorSchema),this.failedResponseHandler=R(i),this.supportsStructuredOutputs=(r=t.supportsStructuredOutputs)??!1}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(`.`)[0].trim()}get supportedUrls(){var e,t,n;return(n=(t=(e=this.config).supportedUrls)?.call(e))??{}}async getArgs({prompt:e,maxOutputTokens:t,temperature:n,topP:r,topK:i,frequencyPenalty:a,presencePenalty:o,providerOptions:s,stopSequences:c,responseFormat:l,seed:u,toolChoice:d,tools:f}){var p,m,h,g;let _=[],v=Object.assign((p=await I({provider:`openai-compatible`,providerOptions:s,schema:W}))??{},(m=await I({provider:this.providerOptionsName,providerOptions:s,schema:W}))??{});i!=null&&_.push({type:`unsupported-setting`,setting:`topK`}),l?.type===`json`&&l.schema!=null&&!this.supportsStructuredOutputs&&_.push({type:`unsupported-setting`,setting:`responseFormat`,details:`JSON response format schema is only supported with structuredOutputs`});let{tools:y,toolChoice:b,toolWarnings:x}=xe({tools:f,toolChoice:d});return{args:{model:this.modelId,user:v.user,max_tokens:t,temperature:n,top_p:r,frequency_penalty:a,presence_penalty:o,response_format:l?.type===`json`?this.supportsStructuredOutputs===!0&&l.schema!=null?{type:`json_schema`,json_schema:{schema:l.schema,name:(h=l.name)??`response`,description:l.description}}:{type:`json_object`}:void 0,stop:c,seed:u,...Object.fromEntries(Object.entries((g=s?.[this.providerOptionsName])??{}).filter(([e])=>!Object.keys(W.shape).includes(e))),reasoning_effort:v.reasoningEffort,messages:ye(e),tools:y,tool_choice:b},warnings:[..._,...x]}}async doGenerate(e){var t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_;let{args:v,warnings:y}=await this.getArgs({...e}),b=JSON.stringify(v),{responseHeaders:S,value:C,rawValue:w}=await L({url:this.config.url({path:`/chat/completions`,modelId:this.modelId}),headers:x(this.config.headers(),e.headers),body:v,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:B(Ce),abortSignal:e.abortSignal,fetch:this.config.fetch}),T=C.choices[0],E=[],O=T.message.content;O!=null&&O.length>0&&E.push({type:`text`,text:O});let k=(t=T.message.reasoning_content)??T.message.reasoning;if(k!=null&&k.length>0&&E.push({type:`reasoning`,text:k}),T.message.tool_calls!=null)for(let e of T.message.tool_calls)E.push({type:`tool-call`,toolCallId:(n=e.id)??D(),toolName:e.function.name,input:e.function.arguments});let A={[this.providerOptionsName]:{},...await(i=(r=this.config.metadataExtractor)?.extractMetadata)?.call(r,{parsedBody:w})},j=(a=C.usage)?.completion_tokens_details;return j?.accepted_prediction_tokens!=null&&(A[this.providerOptionsName].acceptedPredictionTokens=j?.accepted_prediction_tokens),j?.rejected_prediction_tokens!=null&&(A[this.providerOptionsName].rejectedPredictionTokens=j?.rejected_prediction_tokens),{content:E,finishReason:U(T.finish_reason),usage:{inputTokens:(s=(o=C.usage)?.prompt_tokens)??void 0,outputTokens:(l=(c=C.usage)?.completion_tokens)??void 0,totalTokens:(d=(u=C.usage)?.total_tokens)??void 0,reasoningTokens:(m=(p=(f=C.usage)?.completion_tokens_details)?.reasoning_tokens)??void 0,cachedInputTokens:(_=(g=(h=C.usage)?.prompt_tokens_details)?.cached_tokens)??void 0},providerMetadata:A,request:{body:b},response:{...H(C),headers:S,body:w},warnings:y}}async doStream(e){var t;let{args:n,warnings:r}=await this.getArgs({...e}),i={...n,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},a=(t=this.config.metadataExtractor)?.createStreamExtractor(),{responseHeaders:s,value:c}=await L({url:this.config.url({path:`/chat/completions`,modelId:this.modelId}),headers:x(this.config.headers(),e.headers),body:i,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:z(this.chunkSchema),abortSignal:e.abortSignal,fetch:this.config.fetch}),l=[],u=`unknown`,d={completionTokens:void 0,completionTokensDetails:{reasoningTokens:void 0,acceptedPredictionTokens:void 0,rejectedPredictionTokens:void 0},promptTokens:void 0,promptTokensDetails:{cachedTokens:void 0},totalTokens:void 0},f=!0,p=this.providerOptionsName,m=!1,h=!1;return{stream:c.pipeThrough(new TransformStream({start(e){e.enqueue({type:`stream-start`,warnings:r})},transform(t,n){var r,i,s,c,p,g,_,v,y,b,x,S,C;if(e.includeRawChunks&&n.enqueue({type:`raw`,rawValue:t.rawValue}),!t.success){u=`error`,n.enqueue({type:`error`,error:t.error});return}let w=t.value;if(a?.processChunk(t.rawValue),`error`in w){u=`error`,n.enqueue({type:`error`,error:w.error.message});return}if(f&&(f=!1,n.enqueue({type:`response-metadata`,...H(w)})),w.usage!=null){let{prompt_tokens:e,completion_tokens:t,total_tokens:n,prompt_tokens_details:r,completion_tokens_details:i}=w.usage;d.promptTokens=e??void 0,d.completionTokens=t??void 0,d.totalTokens=n??void 0,i?.reasoning_tokens!=null&&(d.completionTokensDetails.reasoningTokens=i?.reasoning_tokens),i?.accepted_prediction_tokens!=null&&(d.completionTokensDetails.acceptedPredictionTokens=i?.accepted_prediction_tokens),i?.rejected_prediction_tokens!=null&&(d.completionTokensDetails.rejectedPredictionTokens=i?.rejected_prediction_tokens),r?.cached_tokens!=null&&(d.promptTokensDetails.cachedTokens=r?.cached_tokens)}let T=w.choices[0];if(T?.finish_reason!=null&&(u=U(T.finish_reason)),T?.delta==null)return;let E=T.delta,O=(r=E.reasoning_content)??E.reasoning;if(O&&(m||=(n.enqueue({type:`reasoning-start`,id:`reasoning-0`}),!0),n.enqueue({type:`reasoning-delta`,id:`reasoning-0`,delta:O})),E.content&&(h||=(n.enqueue({type:`text-start`,id:`txt-0`}),!0),n.enqueue({type:`text-delta`,id:`txt-0`,delta:E.content})),E.tool_calls!=null)for(let e of E.tool_calls){let t=e.index;if(l[t]==null){if(e.id==null)throw new o({data:e,message:`Expected 'id' to be a string.`});if((i=e.function)?.name==null)throw new o({data:e,message:`Expected 'function.name' to be a string.`});n.enqueue({type:`tool-input-start`,id:e.id,toolName:e.function.name}),l[t]={id:e.id,type:`function`,function:{name:e.function.name,arguments:(s=e.function.arguments)??``},hasFinished:!1};let r=l[t];(c=r.function)?.name!=null&&(p=r.function)?.arguments!=null&&(r.function.arguments.length>0&&n.enqueue({type:`tool-input-delta`,id:r.id,delta:r.function.arguments}),F(r.function.arguments)&&(n.enqueue({type:`tool-input-end`,id:r.id}),n.enqueue({type:`tool-call`,toolCallId:(g=r.id)??D(),toolName:r.function.name,input:r.function.arguments}),r.hasFinished=!0));continue}let r=l[t];if(r.hasFinished)continue;(_=e.function)?.arguments!=null&&(r.function.arguments+=(y=(v=e.function)?.arguments)??``),n.enqueue({type:`tool-input-delta`,id:r.id,delta:(b=e.function.arguments)??``}),(x=r.function)?.name!=null&&(S=r.function)?.arguments!=null&&F(r.function.arguments)&&(n.enqueue({type:`tool-input-end`,id:r.id}),n.enqueue({type:`tool-call`,toolCallId:(C=r.id)??D(),toolName:r.function.name,input:r.function.arguments}),r.hasFinished=!0)}},flush(e){var t,n,r,i,o,s;m&&e.enqueue({type:`reasoning-end`,id:`reasoning-0`}),h&&e.enqueue({type:`text-end`,id:`txt-0`});for(let n of l.filter(e=>!e.hasFinished))e.enqueue({type:`tool-input-end`,id:n.id}),e.enqueue({type:`tool-call`,toolCallId:(t=n.id)??D(),toolName:n.function.name,input:n.function.arguments});let c={[p]:{},...a?.buildMetadata()};d.completionTokensDetails.acceptedPredictionTokens!=null&&(c[p].acceptedPredictionTokens=d.completionTokensDetails.acceptedPredictionTokens),d.completionTokensDetails.rejectedPredictionTokens!=null&&(c[p].rejectedPredictionTokens=d.completionTokensDetails.rejectedPredictionTokens),e.enqueue({type:`finish`,finishReason:u,usage:{inputTokens:(n=d.promptTokens)??void 0,outputTokens:(r=d.completionTokens)??void 0,totalTokens:(i=d.totalTokens)??void 0,reasoningTokens:(o=d.completionTokensDetails.reasoningTokens)??void 0,cachedInputTokens:(s=d.promptTokensDetails.cachedTokens)??void 0},providerMetadata:c})}})),request:{body:i},response:{headers:s}}}},K=_.object({prompt_tokens:_.number().nullish(),completion_tokens:_.number().nullish(),total_tokens:_.number().nullish(),prompt_tokens_details:_.object({cached_tokens:_.number().nullish()}).nullish(),completion_tokens_details:_.object({reasoning_tokens:_.number().nullish(),accepted_prediction_tokens:_.number().nullish(),rejected_prediction_tokens:_.number().nullish()}).nullish()}).nullish(),Ce=_.object({id:_.string().nullish(),created:_.number().nullish(),model:_.string().nullish(),choices:_.array(_.object({message:_.object({role:_.literal(`assistant`).nullish(),content:_.string().nullish(),reasoning_content:_.string().nullish(),reasoning:_.string().nullish(),tool_calls:_.array(_.object({id:_.string().nullish(),function:_.object({name:_.string(),arguments:_.string()})})).nullish()}),finish_reason:_.string().nullish()})),usage:K}),we=e=>_.union([_.object({id:_.string().nullish(),created:_.number().nullish(),model:_.string().nullish(),choices:_.array(_.object({delta:_.object({role:_.enum([`assistant`]).nullish(),content:_.string().nullish(),reasoning_content:_.string().nullish(),reasoning:_.string().nullish(),tool_calls:_.array(_.object({index:_.number(),id:_.string().nullish(),function:_.object({name:_.string().nullish(),arguments:_.string().nullish()})})).nullish()}).nullish(),finish_reason:_.string().nullish()})),usage:K}),e]);function Te({prompt:e,user:t=`user`,assistant:n=`assistant`}){let r=``;e[0].role===`system`&&(r+=`${e[0].content}
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`,e=e.slice(1));for(let{role:i,content:o}of e)switch(i){case`system`:throw new a({message:"Unexpected system message in prompt: ${content}",prompt:e});case`user`:{let e=o.map(e=>{switch(e.type){case`text`:return e.text}}).filter(Boolean).join(``);r+=`${t}:
|
|
4
|
+
${e}
|
|
4
5
|
|
|
5
|
-
`
|
|
6
|
+
`;break}case`assistant`:{let e=o.map(e=>{switch(e.type){case`text`:return e.text;case`tool-call`:throw new d({functionality:`tool-call messages`})}}).join(``);r+=`${n}:
|
|
7
|
+
${e}
|
|
8
|
+
|
|
9
|
+
`;break}case`tool`:throw new d({functionality:`tool messages`});default:{let e=i;throw Error(`Unsupported role: ${e}`)}}return r+=`${n}:
|
|
10
|
+
`,{prompt:r,stopSequences:[`
|
|
11
|
+
${t}:`]}}function q({id:e,model:t,created:n}){return{id:e??void 0,modelId:t??void 0,timestamp:n==null?void 0:new Date(n*1e3)}}function J(e){switch(e){case`stop`:return`stop`;case`length`:return`length`;case`content_filter`:return`content-filter`;case`function_call`:case`tool_calls`:return`tool-calls`;default:return`unknown`}}var Ee=_.object({echo:_.boolean().optional(),logitBias:_.record(_.string(),_.number()).optional(),suffix:_.string().optional(),user:_.string().optional()}),De=class{constructor(e,t){this.specificationVersion=`v2`;var n;this.modelId=e,this.config=t;let r=(n=t.errorStructure)??G;this.chunkSchema=ke(r.errorSchema),this.failedResponseHandler=R(r)}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(`.`)[0].trim()}get supportedUrls(){var e,t,n;return(n=(t=(e=this.config).supportedUrls)?.call(e))??{}}async getArgs({prompt:e,maxOutputTokens:t,temperature:n,topP:r,topK:i,frequencyPenalty:a,presencePenalty:o,stopSequences:s,responseFormat:c,seed:l,providerOptions:u,tools:d,toolChoice:f}){var p;let m=[],h=(p=await I({provider:this.providerOptionsName,providerOptions:u,schema:Ee}))??{};i!=null&&m.push({type:`unsupported-setting`,setting:`topK`}),d?.length&&m.push({type:`unsupported-setting`,setting:`tools`}),f!=null&&m.push({type:`unsupported-setting`,setting:`toolChoice`}),c!=null&&c.type!==`text`&&m.push({type:`unsupported-setting`,setting:`responseFormat`,details:`JSON response format is not supported.`});let{prompt:g,stopSequences:_}=Te({prompt:e}),v=[..._??[],...s??[]];return{args:{model:this.modelId,echo:h.echo,logit_bias:h.logitBias,suffix:h.suffix,user:h.user,max_tokens:t,temperature:n,top_p:r,frequency_penalty:a,presence_penalty:o,seed:l,...u?.[this.providerOptionsName],prompt:g,stop:v.length>0?v:void 0},warnings:m}}async doGenerate(e){var t,n,r,i,a,o;let{args:s,warnings:c}=await this.getArgs(e),{responseHeaders:l,value:u,rawValue:d}=await L({url:this.config.url({path:`/completions`,modelId:this.modelId}),headers:x(this.config.headers(),e.headers),body:s,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:B(Oe),abortSignal:e.abortSignal,fetch:this.config.fetch}),f=u.choices[0],p=[];return f.text!=null&&f.text.length>0&&p.push({type:`text`,text:f.text}),{content:p,usage:{inputTokens:(n=(t=u.usage)?.prompt_tokens)??void 0,outputTokens:(i=(r=u.usage)?.completion_tokens)??void 0,totalTokens:(o=(a=u.usage)?.total_tokens)??void 0},finishReason:J(f.finish_reason),request:{body:s},response:{...q(u),headers:l,body:d},warnings:c}}async doStream(e){let{args:t,warnings:n}=await this.getArgs(e),r={...t,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},{responseHeaders:i,value:a}=await L({url:this.config.url({path:`/completions`,modelId:this.modelId}),headers:x(this.config.headers(),e.headers),body:r,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:z(this.chunkSchema),abortSignal:e.abortSignal,fetch:this.config.fetch}),o=`unknown`,s={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0},c=!0;return{stream:a.pipeThrough(new TransformStream({start(e){e.enqueue({type:`stream-start`,warnings:n})},transform(t,n){var r,i,a;if(e.includeRawChunks&&n.enqueue({type:`raw`,rawValue:t.rawValue}),!t.success){o=`error`,n.enqueue({type:`error`,error:t.error});return}let l=t.value;if(`error`in l){o=`error`,n.enqueue({type:`error`,error:l.error});return}c&&(c=!1,n.enqueue({type:`response-metadata`,...q(l)}),n.enqueue({type:`text-start`,id:`0`})),l.usage!=null&&(s.inputTokens=(r=l.usage.prompt_tokens)??void 0,s.outputTokens=(i=l.usage.completion_tokens)??void 0,s.totalTokens=(a=l.usage.total_tokens)??void 0);let u=l.choices[0];u?.finish_reason!=null&&(o=J(u.finish_reason)),u?.text!=null&&n.enqueue({type:`text-delta`,id:`0`,delta:u.text})},flush(e){c||e.enqueue({type:`text-end`,id:`0`}),e.enqueue({type:`finish`,finishReason:o,usage:s})}})),request:{body:r},response:{headers:i}}}},Y=_.object({prompt_tokens:_.number(),completion_tokens:_.number(),total_tokens:_.number()}),Oe=_.object({id:_.string().nullish(),created:_.number().nullish(),model:_.string().nullish(),choices:_.array(_.object({text:_.string(),finish_reason:_.string()})),usage:Y.nullish()}),ke=e=>_.union([_.object({id:_.string().nullish(),created:_.number().nullish(),model:_.string().nullish(),choices:_.array(_.object({text:_.string(),finish_reason:_.string().nullish(),index:_.number()})),usage:Y.nullish()}),e]),Ae=_.object({dimensions:_.number().optional(),user:_.string().optional()}),je=class{constructor(e,t){this.specificationVersion=`v2`,this.modelId=e,this.config=t}get provider(){return this.config.provider}get maxEmbeddingsPerCall(){var e;return(e=this.config.maxEmbeddingsPerCall)??2048}get supportsParallelCalls(){var e;return(e=this.config.supportsParallelCalls)??!0}get providerOptionsName(){return this.config.provider.split(`.`)[0].trim()}async doEmbed({values:e,headers:t,abortSignal:n,providerOptions:r}){var i,a,o;let s=Object.assign((i=await I({provider:`openai-compatible`,providerOptions:r,schema:Ae}))??{},(a=await I({provider:this.providerOptionsName,providerOptions:r,schema:Ae}))??{});if(e.length>this.maxEmbeddingsPerCall)throw new l({provider:this.provider,modelId:this.modelId,maxEmbeddingsPerCall:this.maxEmbeddingsPerCall,values:e});let{responseHeaders:c,value:u,rawValue:d}=await L({url:this.config.url({path:`/embeddings`,modelId:this.modelId}),headers:x(this.config.headers(),t),body:{model:this.modelId,input:e,encoding_format:`float`,dimensions:s.dimensions,user:s.user},failedResponseHandler:R((o=this.config.errorStructure)??G),successfulResponseHandler:B(Me),abortSignal:n,fetch:this.config.fetch});return{embeddings:u.data.map(e=>e.embedding),usage:u.usage?{tokens:u.usage.prompt_tokens}:void 0,providerMetadata:u.providerMetadata,response:{headers:c,body:d}}}},Me=_.object({data:_.array(_.object({embedding:_.array(_.number())})),usage:_.object({prompt_tokens:_.number()}).nullish(),providerMetadata:_.record(_.string(),_.record(_.string(),_.any())).optional()}),Ne=class{constructor(e,t){this.modelId=e,this.config=t,this.specificationVersion=`v2`,this.maxImagesPerCall=10}get provider(){return this.config.provider}async doGenerate({prompt:e,n:t,size:n,aspectRatio:r,seed:i,providerOptions:a,headers:o,abortSignal:s}){var c,l,u,d,f;let p=[];r!=null&&p.push({type:`unsupported-setting`,setting:`aspectRatio`,details:"This model does not support aspect ratio. Use `size` instead."}),i!=null&&p.push({type:`unsupported-setting`,setting:`seed`});let m=(u=(l=(c=this.config._internal)?.currentDate)?.call(c))??new Date,{value:h,responseHeaders:g}=await L({url:this.config.url({path:`/images/generations`,modelId:this.modelId}),headers:x(this.config.headers(),o),body:{model:this.modelId,prompt:e,n:t,size:n,...(d=a.openai)??{},response_format:`b64_json`},failedResponseHandler:R((f=this.config.errorStructure)??G),successfulResponseHandler:B(Pe),abortSignal:s,fetch:this.config.fetch});return{images:h.data.map(e=>e.b64_json),warnings:p,response:{timestamp:m,modelId:this.modelId,headers:g}}}},Pe=_.object({data:_.array(_.object({b64_json:_.string()}))}),Fe=`1.0.19`;function Ie(e){let t=ve(e.baseURL),n=e.name,r={...e.apiKey&&{Authorization:`Bearer ${e.apiKey}`},...e.headers},i=()=>T(r,`ai-sdk/openai-compatible/${Fe}`),a=r=>({provider:`${n}.${r}`,url:({path:n})=>{let r=new URL(`${t}${n}`);return e.queryParams&&(r.search=new URLSearchParams(e.queryParams).toString()),r.toString()},headers:i,fetch:e.fetch}),o=e=>s(e),s=t=>new Se(t,{...a(`chat`),includeUsage:e.includeUsage,supportsStructuredOutputs:e.supportsStructuredOutputs}),c=t=>new De(t,{...a(`completion`),includeUsage:e.includeUsage}),l=e=>new je(e,{...a(`embedding`)}),u=e=>new Ne(e,a(`image`)),d=e=>o(e);return d.languageModel=o,d.chatModel=s,d.completionModel=c,d.textEmbeddingModel=l,d.imageModel=u,d}var Le=(e,t)=>(e=e.replace(/\/+$/,``),e+=`/`,t=t.replace(/^\/+/,``),e+t),X=(e,t)=>{for(let[n,r]of Object.entries(t)){let t=RegExp(`/:`+n+`(?:{[^/]+})?\\??`);e=e.replace(t,r?`/${r}`:``)}return e},Re=e=>{let t=new URLSearchParams;for(let[n,r]of Object.entries(e)){if(r===void 0)continue;if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r)}return t},ze=(e,t)=>{switch(t){case`ws`:return e.replace(/^http/,`ws`);case`http`:return e.replace(/^ws/,`http`)}},Z=e=>/^https?:\/\/[^\/]+?\/index(?=\?|$)/.test(e)?e.replace(/\/index(?=\?|$)/,`/`):e.replace(/\/index(?=\?|$)/,``);function Q(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Be(e,t){if(!Q(e)&&!Q(t))return t;let n={...e};for(let e in t){let r=t[e];Q(n[e])&&Q(r)?n[e]=Be(n[e],r):n[e]=r}return n}var Ve=(e,t)=>{let n=new Proxy(()=>{},{get(n,r){if(!(typeof r!=`string`||r===`then`))return Ve(e,[...t,r])},apply(n,r,i){return e({path:t,args:i})}});return n},He=class{url;method;queryParams=void 0;pathParams={};rBody;cType=void 0;constructor(e,t){this.url=e,this.method=t}fetch=async(e,t)=>{if(e){if(e.query&&(this.queryParams=Re(e.query)),e.form){let t=new FormData;for(let[n,r]of Object.entries(e.form))if(Array.isArray(r))for(let e of r)t.append(n,e);else t.append(n,r);this.rBody=t}e.json&&(this.rBody=JSON.stringify(e.json),this.cType=`application/json`),e.param&&(this.pathParams=e.param)}let n=this.method.toUpperCase(),r={...e?.header,...typeof t?.headers==`function`?await t.headers():t?.headers};if(e?.cookie){let t=[];for(let[n,r]of Object.entries(e.cookie))t.push(g(n,r,{path:`/`}));r.Cookie=t.join(`,`)}this.cType&&(r[`Content-Type`]=this.cType);let i=new Headers(r??void 0),a=this.url;a=Z(a),a=X(a,this.pathParams),this.queryParams&&(a=a+`?`+this.queryParams.toString()),n=this.method.toUpperCase();let o=!(n===`GET`||n===`HEAD`);return(t?.fetch||fetch)(a,{body:o?this.rBody:void 0,method:n,headers:i,...t?.init})}},Ue=(e,t)=>Ve(function n(r){let i=[...r.path],a=i.slice(-3).reverse();if(a[0]===`toString`)return a[1]===`name`?a[2]||``:n.toString();if(a[0]===`valueOf`)return a[1]===`name`?a[2]||``:n;let o=``;if(/^\$/.test(a[0])){let e=i.pop();e&&(o=e.replace(/^\$/,``))}let s=i.join(`/`),c=Le(e,s);if(o===`url`){let e=c;return r.args[0]&&(r.args[0].param&&(e=X(c,r.args[0].param)),r.args[0].query&&(e=e+`?`+Re(r.args[0].query).toString())),e=Z(e),new URL(e)}if(o===`ws`){let e=ze(r.args[0]&&r.args[0].param?X(c,r.args[0].param):c,`ws`),n=new URL(e),i=r.args[0]?.query;i&&Object.entries(i).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.searchParams.append(e,t)):n.searchParams.set(e,t)});let a=(...e)=>t?.webSocket!==void 0&&typeof t.webSocket==`function`?t.webSocket(...e):new WebSocket(...e);return a(n.toString())}let l=new He(c,o);if(o){t??={};let e=Be(t,{...r.args[1]});return l.fetch(r.args[0],e)}return l},[]);const We=process.env[t],$=Ue(We??``,{fetch:We?void 0:async()=>{throw console.warn(`Your code is attempting to use the Blink API server, but no API server is configured for this Blink agent.`),Error(`No API server is configured for this Blink agent. External APIs are not available.`)}}),Ge=Object.freeze({upsert:async e=>{let t=await $.chat[`:id`].$post({param:{id:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}return{id:e}},message:async(e,t,n)=>{let r=await $.chat[`:id`].sendMessages.$post({param:{id:e},json:{messages:[t],behavior:n?.behavior??`enqueue`}});if(r.status!==204){let e=await r.json();throw Error(e.error)}}}),Ke=Object.freeze({kv:Object.freeze({get:async e=>{let t=await $.storage.kv[`:key`].$get({param:{key:e}});if(t.status!==200){let e=await t.json();throw Error(e.error)}let n=await t.json();return n.value},set:async(e,t)=>{let n=await $.storage.kv[`:key`].$post({param:{key:e},json:{value:t}});if(n.status!==204){let e=await n.json();throw Error(e.error)}},del:async e=>{let t=await $.storage.kv[`:key`].$delete({param:{key:e}});if(t.status!==204){let e=await t.json();throw Error(e.error)}}})});var qe=class extends Error{constructor(e,t){super(e),this.response=t}};const Je={withContext(e,t){let n={};for(let r of Object.keys(e)){let i=e[r];n[r]=i.withContext(t)}return n},with(e,t){let n={};for(let r of Object.keys(e)){let i=e[r];n[r]=i.withContext(t)}return n},async withApproval(e){let t={};for(let[n,r]of Object.entries(e.tools))t[n]={...r,execute:()=>{let e={type:`tool-approval`,outcome:`pending`};return e}};let n=e.messages[e.messages.length-1];if(!n?.parts)return t;let r=[];for(let t of n.parts){if(!h(t))continue;let n=m(t),i=e.tools[n];if(!i||t.state!==`output-available`||!i.execute||!Ye(t.output))continue;t.output.outcome===`approved`&&r.push({toolName:m(t),tool:i,input:t.input,toolCallId:t.toolCallId})}if(r.length>0){let t=p({execute:async({writer:t})=>{t.write({type:`start-step`}),await Promise.all(r.map(async n=>{if(!n.tool.execute)throw Error(`Tool does not support execute.`);t.write({type:`tool-input-available`,toolCallId:n.toolCallId,toolName:n.toolName,input:n.input});try{let r=await n.tool.execute(n.input,{toolCallId:n.toolCallId,messages:f(e.messages,{tools:e.tools}),abortSignal:e.abortSignal});if(b(r))for await(let e of r)t.write({type:`tool-output-available`,toolCallId:n.toolCallId,output:e,preliminary:!0});t.write({type:`tool-output-available`,toolCallId:n.toolCallId,output:r})}catch(e){t.write({type:`tool-output-error`,toolCallId:n.toolCallId,errorText:e instanceof Error?e.message:String(e)})}})),t.write({type:`finish`})}});throw new qe(`Executing tools`,t)}return t},prefix(e,t){let n={};for(let[r,i]of Object.entries(e))n[`${t}${r}`]=i;return n}};function Ye(e){return typeof e==`object`&&!!e&&`type`in e&&e.type===`tool-approval`}function Xe(e){return{version:`v0`,supportsRequests:e.onRequest!==void 0,supportsCompletions:e.experimental_provideCompletions!==void 0,fetch:async t=>{let n=new URL(t.url);if(n.pathname.startsWith(`/_agent/`))switch(n.pathname){case`/_agent/send-messages`:return Ze(t,e);case`/_agent/completions`:return Qe(t,e);case`/_agent/health`:return new Response(`OK`,{status:200});default:return new Response(`Not found`,{status:404})}if(e.onRequest){let n;try{n=await e.onRequest(t)}catch(e){return new Response(JSON.stringify({error:y.inspect(e)}),{status:500})}if(n)return n}return new Response(`Not found`,{status:404})}}}async function Ze(e,t){if(e.method!==`POST`)return new Response(`Method not allowed`,{status:405});let n;try{n=await e.json()}catch{return new Response(`Invalid request`,{status:400})}let r;try{r=await t.sendMessages({messages:n.messages,chat:n.chat})}catch(e){if(e instanceof qe)r=e.response;else return new Response(JSON.stringify({error:y.inspect(e)}),{status:500})}if(r instanceof Response)return r;let i;if(r instanceof ReadableStream)i=r;else{if(typeof r!=`object`||!(`toUIMessageStream`in r))throw Error(`The agent must return a "Response", "ReadableStream", or "toUIMessageStream" function.`);i=r.toUIMessageStream()}return new Response(i.pipeThrough(new TransformStream({transform(e,t){t.enqueue(`data: ${JSON.stringify(e)}\n\n`)},flush(e){e.enqueue(`data: [DONE]
|
|
12
|
+
|
|
13
|
+
`)}})).pipeThrough(new TextEncoderStream),{headers:et})}async function Qe(e,t){if(e.method!==`POST`)return new Response(`Method not allowed`,{status:405});if(!t.experimental_provideCompletions)return new Response(`Completions not supported`,{status:404});let n;try{n=await e.json()}catch{return new Response(`Invalid request`,{status:400})}let r;try{r=await t.experimental_provideCompletions({messages:n.messages,input:n.input,caret:n.caret,selection:n.selection})}catch(e){return new Response(JSON.stringify({error:y.inspect(e)}),{status:500})}let i=await r;return i instanceof ReadableStream?new Response(i.pipeThrough(new TransformStream({transform(e,t){t.enqueue(`data: ${JSON.stringify(e)}\n\n`)},flush(e){e.enqueue(`data: [DONE]
|
|
14
|
+
|
|
15
|
+
`)}})).pipeThrough(new TextEncoderStream),{headers:et}):new Response(JSON.stringify(i),{headers:{"content-type":`application/json`}})}function $e(e,t){return e.headers.set(c,t),e}const et={"content-type":`text/event-stream`,"cache-control":`no-cache, no-transform`,connection:`keep-alive`,"x-accel-buffering":`no`},tt=e=>{let t=process.env.BLINK_TOKEN??process.env.BLINK_INVOCATION_AUTH_TOKEN;if(!t)throw Error(`You must be authenticated with Blink to use the model gateway.
|
|
16
|
+
|
|
17
|
+
Feel free to use other providers like OpenAI, Anthropic, or Google.`);return Ie({baseURL:`https://blink.so/api/ai-gateway/v1`,apiKey:t,name:e,headers:{BLINK_ORGANIZATION_ID:`44d4baab-ed54-453f-8ffc-a8c9f3d05483`}})(e)};var nt={agent:Xe,chat:Ge,storage:Ke,tools:Je};export{Xe as agent,Ge as chat,nt as default,Ye as isToolApprovalOutput,tt as model,Ke as storage,Je as tools,$e as withResponseFormat};
|