@easbot/llm 0.3.21 → 0.3.22
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/chunks/{chunk-YDIWY3EH.cjs → chunk-UIFIYRZK.cjs} +1 -1
- package/dist/chunks/copilot-R22QW5MH.cjs +1 -0
- package/dist/chunks/{models-snapshot-U7TQPEPU.cjs → models-snapshot-L4WLMITS.cjs} +1 -1
- package/dist/index.cjs +4 -4
- package/package.json +8 -8
- package/dist/chunks/copilot-5N6U442L.cjs +0 -1
- /package/dist/chunks/{chunk-3IYCLIOJ.cjs → chunk-KFESJR3T.cjs} +0 -0
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
'use strict';var chunkYDIWY3EH_cjs=require('./chunks/chunk-YDIWY3EH.cjs'),chunk3IYCLIOJ_cjs=require('./chunks/chunk-3IYCLIOJ.cjs'),k=require('zod'),tt=require('os'),Be=require('path'),_t=require('fuzzysort'),remeda=require('remeda'),ai=require('ai'),utils=require('@easbot/utils'),bt=require('fs/promises'),fs=require('fs'),http=require('http'),types=require('@easbot/types');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var k__default=/*#__PURE__*/_interopDefault(k);var tt__default=/*#__PURE__*/_interopDefault(tt);var Be__default=/*#__PURE__*/_interopDefault(Be);var _t__default=/*#__PURE__*/_interopDefault(_t);var bt__default=/*#__PURE__*/_interopDefault(bt);var We=["openai","anthropic","google","deepseek","alibaba","alibaba-coding-plan","alibaba-token-plan-cn","minimax","minimax-cn","minimax-coding-plan","minimax-cn-coding-plan","nvidia","easbot-local","ollama"],Ne={ollama:{id:"ollama",name:"ollama",npm:"@easbot/ollama-sdk",env:["OLLAMA_API_KEY"],models:{"qwen3.5:0.8b":Se("qwen3.5:0.8b"),"qwen3:0.6b":Se("qwen3:0.6b"),"gemma3:1b":Se("gemma3:1b")}},"easbot-local":{id:"easbot-local",name:"easbot-local",npm:"@easbot/local-model-sdk",env:[],models:{"bge-base-zh-v1.5":Se("bge-base-zh-v1.5"),"rerank-proxy":Se("rerank-proxy")}}},Gt={openai:"OpenAI",anthropic:"Anthropic",google:"Google",deepseek:"DeepSeek",alibaba:"Alibaba Cloud","alibaba-coding-plan":"Alibaba Coding Plan","alibaba-token-plan-cn":"Alibaba Token Plan (CN)",minimax:"MiniMax","minimax-cn":"MiniMax (CN)","minimax-coding-plan":"MiniMax Coding Plan","minimax-cn-coding-plan":"MiniMax Coding Plan (CN)",nvidia:"NVIDIA"};function Se(e){return {id:e,name:e,release_date:"2026-07-01",attachment:false,reasoning:false,temperature:true,tool_call:false,limit:{context:2e5,output:8192},options:{}}}var ht=utils.Log.create({service:"llm:interfaces"});exports.Flag=void 0;(w=>{function e(M){let x=process.env[M]?.toLowerCase();return x==="true"||x==="1"}function r(M,x){let j=process.env[M];if(j===void 0)return x;let h=Number(j);return Number.isNaN(h)?x:h}w.EASBOT_CONFIG=process.env.EASBOT_CONFIG,w.EASBOT_CONFIG_CONTENT=process.env.EASBOT_CONFIG_CONTENT,w.EASBOT_MODELS_FETCH=e("EASBOT_MODELS_FETCH"),w.EASBOT_MODELS_URL=process.env.EASBOT_MODELS_URL,w.EASBOT_MODELS_PATH=process.env.EASBOT_MODELS_PATH,w.EASBOT_OUTPUT_TOKEN_MAX=r("EASBOT_OUTPUT_TOKEN_MAX",32e3),w.EASBOT_ENABLE_EXPERIMENTAL_MODELS=e("EASBOT_ENABLE_EXPERIMENTAL_MODELS"),w.EASBOT_DEFAULT_MODEL=process.env.EASBOT_DEFAULT_MODEL;})(exports.Flag||(exports.Flag={}));var De;function Je(e){De=e,e?ht.debug("adapter registry set",{hasConfig:!!e.config,hasInstance:!!e.instance,hasGlobal:!!e.global,hasInstallation:!!e.installation}):ht.debug("adapter registry cleared");}function Ft(){return De}function He(){return De!==void 0}function je(e,r){let d=De?.[e];if(!d)throw new Error(`[LLM] adapter '${e}' (${r}) not registered. Call setAdapterRegistry({ ${e}: ... }) before using LLM.`);return d}function Xe(){return je("config","IConfigProvider")}function Ye(){return je("instance","IInstanceProvider")}function Me(){return je("global","IGlobalPathProvider")}function Te(){return je("installation","IInstallationProvider")}function zt(e){let r=process.env[e]?.toLowerCase();return r==="true"||r==="1"}function Kt(e,r){let d=process.env[e];if(d===void 0)return r;let c=Number(d);return Number.isFinite(c)?c:r}function V(e){return process.env[e]}exports.ModelsDev=void 0;(s=>{let e=utils.Log.create({service:"models.dev"});function r(){return Be__default.default.join(Me().cache,"models.json")}s.Model=k__default.default.object({id:k__default.default.string(),name:k__default.default.string(),family:k__default.default.string().optional(),release_date:k__default.default.string(),attachment:k__default.default.boolean(),reasoning:k__default.default.boolean(),temperature:k__default.default.boolean(),tool_call:k__default.default.boolean(),interleaved:k__default.default.union([k__default.default.literal(true),k__default.default.object({field:k__default.default.enum(["reasoning_content","reasoning_details"])}).strict()]).optional(),cost:k__default.default.object({input:k__default.default.number(),output:k__default.default.number(),cache_read:k__default.default.number().optional(),cache_write:k__default.default.number().optional(),context_over_200k:k__default.default.object({input:k__default.default.number(),output:k__default.default.number(),cache_read:k__default.default.number().optional(),cache_write:k__default.default.number().optional()}).optional()}).optional(),limit:k__default.default.object({context:k__default.default.number(),input:k__default.default.number().optional(),output:k__default.default.number()}),modalities:k__default.default.object({input:k__default.default.array(k__default.default.enum(["text","audio","image","video","pdf"])),output:k__default.default.array(k__default.default.enum(["text","audio","image","video","pdf"]))}).optional(),experimental:k__default.default.boolean().optional(),status:k__default.default.enum(["alpha","beta","deprecated"]).optional(),options:k__default.default.record(k__default.default.string(),k__default.default.any()),headers:k__default.default.record(k__default.default.string(),k__default.default.string()).optional(),provider:k__default.default.object({npm:k__default.default.string()}).optional(),variants:k__default.default.record(k__default.default.string(),k__default.default.record(k__default.default.string(),k__default.default.any())).optional()}),s.Provider=k__default.default.object({api:k__default.default.string().optional(),name:k__default.default.string(),env:k__default.default.array(k__default.default.string()),id:k__default.default.string(),npm:k__default.default.string().optional(),models:k__default.default.record(k__default.default.string(),s.Model)});function E(){return exports.Flag.EASBOT_MODELS_URL||"https://models.dev/api.json"}s.Data=utils.lazy(async()=>{let l=exports.Flag.EASBOT_MODELS_PATH??r(),u=await bt__default.default.readFile(l,"utf-8").then(x=>JSON.parse(x)).catch(()=>{});if(u)return P(u);let w=await import('./chunks/models-snapshot-U7TQPEPU.cjs').then(x=>x.snapshot).catch(()=>{});if(w)return P(w);if(!exports.Flag.EASBOT_MODELS_FETCH)return P({});let M=await utils.Fetch.get(E());return P(M.data??{})});function P(l){return Object.keys(Ne).length===0?l:remeda.mergeDeep(l,Ne)}async function _(){return await(0, s.Data)()}s.get=_;async function y(){try{let l=await utils.Fetch.get(E(),{headers:{"User-Agent":`EasBot/${Te().getVersion()}`},responseType:"text"});l.ok&&(await bt__default.default.writeFile(r(),l.data),s.Data.reset(),e.info("Models from models.dev refreshed successfully"));}catch(l){e.warn("Failed to refresh models from models.dev, using cached or snapshot data",{error:l instanceof Error?l.message:String(l),url:E()});}}s.refresh=y;})(exports.ModelsDev||(exports.ModelsDev={}));function Ht(){exports.Flag.EASBOT_MODELS_FETCH&&exports.ModelsDev.refresh();}var Et=k__default.default.object({type:k__default.default.union([k__default.default.literal("oauth"),k__default.default.literal("api")]),label:k__default.default.string()}).meta({ref:"ProviderAuthMethod"}),Ze=exports.ModelsDev.Provider.partial().extend({whitelist:k__default.default.array(k__default.default.string()).optional(),blacklist:k__default.default.array(k__default.default.string()).optional(),models:k__default.default.record(k__default.default.string(),exports.ModelsDev.Model.partial().extend({variants:k__default.default.record(k__default.default.string(),k__default.default.object({disabled:k__default.default.boolean().optional().describe("Disable this variant for the model")}).catchall(k__default.default.any())).optional().describe("Variant-specific configuration")})).optional(),options:k__default.default.object({apiKey:k__default.default.string().optional(),baseURL:k__default.default.string().optional(),enterpriseUrl:k__default.default.string().optional().describe("GitHub Enterprise URL for copilot authentication"),setCacheKey:k__default.default.boolean().optional().describe("Enable promptCacheKey for this provider (default false)"),timeout:k__default.default.union([k__default.default.number().int().positive().describe("Timeout in milliseconds for requests to this provider. Default is 300000 (5 minutes). Set to false to disable timeout."),k__default.default.literal(false).describe("Disable timeout for this provider entirely.")]).optional().describe("Timeout in milliseconds for requests to this provider. Default is 300000 (5 minutes). Set to false to disable timeout.")}).catchall(k__default.default.any()).optional()}).strict().meta({ref:"ProviderConfig"}),$e=k__default.default.object({provider:k__default.default.record(k__default.default.string(),Ze).optional().describe("Custom provider configurations and model overrides"),disabled_providers:k__default.default.array(k__default.default.string()).optional().describe("Disable providers that are loaded automatically"),enabled_providers:k__default.default.array(k__default.default.string()).optional().describe("When set, ONLY these providers will be enabled. All other providers will be ignored"),model:k__default.default.string().optional().describe("Model to use in the format of provider/model, eg anthropic/claude-2"),small_model:k__default.default.string().optional().describe("Small model to use for tasks like title generation in the format of provider/model"),embedding_model:k__default.default.string().optional().describe("Embedding model, defaults to easbot-local/bge-base-zh-v1.5"),graph_model:k__default.default.string().optional().describe("Graph model for entity and relation extraction, defaults to easbot-local/qwen2.5-7b-instruct"),rerank_model:k__default.default.string().optional().describe("Rerank model for search result reranking, defaults to easbot-local/qwen2.5-7b-instruct")}).meta({ref:"LLMConfig"});var ve=utils.Log.create({service:"llm:config:loader"}),Qe=null;async function et(e){try{if(!fs.existsSync(e))return null;let r=await bt__default.default.readFile(e,"utf-8");r=r.replace(/\{env:([^}]+)\}/g,(P,_)=>{let y=process.env[_];return y===void 0?(ve.debug("Environment variable not found",{varName:_,file:e}),""):y});let d=r,c=!1,E=!1,C=[];for(let P=0;P<r.length;P++){let _=r[P];if(E){C.push(_),E=!1;continue}if(_==="\\"){C.push(_),E=!0;continue}if(_==='"'){c=!c,C.push(_);continue}if(!c&&_==="/"&&r[P+1]==="/"){for(;P<r.length&&r[P]!==`
|
|
2
|
-
`&&r[P]!=="\r";)P++;continue}if(!c&&_==="/"&&r[P+1]==="*"){for(P+=2;P<r.length-1;){if(r[P]==="*"&&r[P+1]==="/"){P+=2;break}P++;}continue}C.push(_);}return d=C.join("").trim(),d?JSON.parse(d):null}catch(r){return ve.warn("Failed to load JSON file",{file:e,error:r instanceof Error?r.message:String(r)}),null}}function er(e){return e.reduce((r,d)=>d?remeda.mergeDeep(r,d):r,{})}function Ge(e){if(!e||typeof e!="object")return {};let r=e,d={};return "provider"in r&&(d.provider=r.provider),"disabled_providers"in r&&(d.disabled_providers=r.disabled_providers),"enabled_providers"in r&&(d.enabled_providers=r.enabled_providers),"model"in r&&(d.model=r.model),"small_model"in r&&(d.small_model=r.small_model),"embedding_model"in r&&(d.embedding_model=r.embedding_model),"graph_model"in r&&(d.graph_model=r.graph_model),"rerank_model"in r&&(d.rerank_model=r.rerank_model),d}async function tr(){let e=Me().config,r=Be__default.default.join(e,"easbot.json");ve.debug("Loading global config",{filePath:r});let d=await et(r);return Ge(d)}async function rr(e){let r=Be__default.default.join(e,".easbot","easbot.json");ve.debug("Loading project config",{filePath:r});let d=await et(r);return Ge(d)}async function nr(){let e=process.env.EASBOT_CONFIG;if(!e)return {};ve.debug("Loading custom config",{filePath:e});try{if(!fs.existsSync(e))throw new Error(`EASBOT_CONFIG file not found: ${e}`);let d=await et(e);if(d===null)throw new Error(`EASBOT_CONFIG file is empty or invalid JSON: ${e}`);return Ge(d)}catch(r){throw ve.error("EASBOT_CONFIG load failed",{filePath:e,error:r instanceof Error?r.message:String(r)}),r}}function or(){let e=process.env.EASBOT_CONFIG_CONTENT;if(!e)return {};ve.debug("Loading inline config",{length:e.length});try{let r=JSON.parse(e);return Ge(r)}catch(r){return ve.warn("Failed to parse EASBOT_CONFIG_CONTENT",{error:r instanceof Error?r.message:String(r)}),{}}}async function ir(){var l=[];try{let e=chunk3IYCLIOJ_cjs.b(l,ve.time("state"));let r=[];let d=[];let c=await tr();Object.keys(c).length>0&&(d.push(c),r.push(Be__default.default.join(Me().config,"easbot.json")));let E=Ye().getDirectory();let C=await rr(E);Object.keys(C).length>0&&(d.push(C),r.push(Be__default.default.join(E,"easbot.json")));let P=await nr();Object.keys(P).length>0&&(d.push(P),process.env.EASBOT_CONFIG&&r.push(process.env.EASBOT_CONFIG));let _=or();Object.keys(_).length>0&&d.push(_);let y=er(d);let s=$e.safeParse(y);s.success?y=s.data:(ve.warn("Config validation failed, using raw merged config",{issues:s.error.issues.slice(0,5)}),y=remeda.pickBy(y,x=>x!==void 0));Qe=y;return {config:y,directories:r}}catch(u){var w=u,M=true;}finally{chunk3IYCLIOJ_cjs.c(l,w,M);}}var kt=sr(ir);async function ar(){return kt()}function sr(e){let r,d=0,c=()=>{if(r)return r;let E=d;return r=e().then(C=>E!==d?(r=void 0,c()):C),r};return c.reset=()=>{d++,r=void 0;},c}exports.Config=void 0;(C=>{async function e(){if(He())try{return await Xe().getInfo()}catch(_){ve.debug("IConfigProvider failed, falling back to local loader",{error:_ instanceof Error?_.message:String(_)});}let{config:P}=await ar();return P}C.get=e;async function r(P){return (await e()).provider?.[P]}C.provider=r;async function d(){let P=await e();return (P.enabled_providers??[]).filter(_=>!(P.disabled_providers??[]).includes(_))}C.enabledProviders=d;function c(){return Qe!==null}C.isLoaded=c;function E(){kt.reset(),Qe=null;}C.clearCache=E;})(exports.Config||(exports.Config={}));utils.Log.create({service:"provider-transform"});function lr(e){if(e.startsWith("image/"))return "image";if(e.startsWith("audio/"))return "audio";if(e.startsWith("video/"))return "video";if(e==="application/pdf")return "pdf"}exports.ProviderTransform=void 0;(b=>{function e(){return exports.Flag.EASBOT_OUTPUT_TOKEN_MAX}b.getOutputTokenMax=e;function r(t){switch(t){case "@ai-sdk/github-copilot":return "copilot";case "@ai-sdk/openai":case "@ai-sdk/azure":return "openai";case "@ai-sdk/amazon-bedrock":return "bedrock";case "@ai-sdk/anthropic":case "@ai-sdk/google-vertex/anthropic":return "anthropic";case "@ai-sdk/google-vertex":case "@ai-sdk/google":return "google";case "@ai-sdk/gateway":return "gateway";case "@openrouter/ai-sdk-provider":return "openrouter";case "@easbot/ollama-sdk":return "ollama";case "@easbot/local-model-sdk":return "easbot-local"}}function d(t,i,m){if(i.api.npm==="@ai-sdk/anthropic"&&(t=t.map(g=>{if(typeof g.content=="string")return g.content===""?void 0:g;if(!Array.isArray(g.content))return g;let a=g.content.filter(v=>v.type==="text"||v.type==="reasoning"?v.text!=="":true);if(a.length!==0)return {...g,content:a}}).filter(g=>g!==void 0)),i.api.id.includes("claude"))return t.map(g=>((g.role==="assistant"||g.role==="tool")&&Array.isArray(g.content)&&(g.content=g.content.map(a=>(a.type==="tool-call"||a.type==="tool-result")&&"toolCallId"in a?{...a,toolCallId:a.toolCallId.replace(/[^a-zA-Z0-9_-]/g,"_")}:a)),g));if(i.providerId==="mistral"||i.api.id.toLowerCase().includes("mistral")||i.api.id.toLocaleLowerCase().includes("devstral")){let g=[];for(let a=0;a<t.length;a++){let v=t[a];if(!v)continue;let T=t[a+1];(v.role==="assistant"||v.role==="tool")&&Array.isArray(v.content)&&(v.content=v.content.map(U=>{if((U.type==="tool-call"||U.type==="tool-result")&&"toolCallId"in U){let W=U.toolCallId.replace(/[^a-zA-Z0-9]/g,"").substring(0,9).padEnd(9,"0");return {...U,toolCallId:W}}return U})),g.push(v),v.role==="tool"&&T?.role==="user"&&g.push({role:"assistant",content:[{type:"text",text:"Done."}]});}return g}if(typeof i.capabilities.interleaved=="object"&&i.capabilities.interleaved.field){let g=i.capabilities.interleaved.field;return t.map(a=>{if(a.role==="assistant"&&Array.isArray(a.content)){let T=a.content.filter(W=>W.type==="reasoning").map(W=>W.text).join(""),U=a.content.filter(W=>W.type!=="reasoning");return T?{...a,content:U,providerOptions:{...a.providerOptions,openaiCompatible:{...a.providerOptions?.openaiCompatible,[g]:T}}}:{...a,content:U}}return a})}return t}function c(t,i){let m=t.filter(v=>v.role==="system").slice(0,2),g=t.filter(v=>v.role!=="system").slice(-2),a={anthropic:{cacheControl:{type:"ephemeral"}},openrouter:{cacheControl:{type:"ephemeral"}},bedrock:{cachePoint:{type:"default"}},openaiCompatible:{cache_control:{type:"ephemeral"}},copilot:{copilot_cache_control:{type:"ephemeral"}}};for(let v of remeda.unique([...m,...g])){if(!(i==="anthropic"||i.includes("bedrock"))&&Array.isArray(v.content)&&v.content.length>0){let W=v.content[v.content.length-1];if(W&&typeof W=="object"){W.providerOptions=remeda.mergeDeep(W.providerOptions??{},a);continue}}v.providerOptions=remeda.mergeDeep(v.providerOptions??{},a);}return t}function E(t,i){return t.map(m=>{if(m.role!=="user"||!Array.isArray(m.content))return m;let g=m.content.map(a=>{if(a.type!=="file"&&a.type!=="image")return a;if(a.type==="image"){let ne=a.image.toString();if(ne.startsWith("data:")){let pe=ne.match(/^data:([^;]+);base64,(.*)$/);if(pe&&(!pe[2]||pe[2].length===0))return {type:"text",text:"ERROR: Image file is empty or corrupted. Please provide a valid image."}}}let v=a.type==="image"?a.image?.toString()?.split(";")?.[0]?.replace("data:",""):a.mediaType,T=a.type==="file"?a.filename:void 0,U=lr(v??"");return !U||i.capabilities.input[U]?a:{type:"text",text:`ERROR: Cannot read ${T?`"${T}"`:U} (this model does not support ${U} input). Inform the user.`}});return {...m,content:g}})}function C(t,i,m){t=E(t,i),t=d(t,i),(i.providerId==="anthropic"||i.api.id.includes("anthropic")||i.api.id.includes("claude")||i.id.includes("anthropic")||i.id.includes("claude")||i.api.npm==="@ai-sdk/anthropic")&&(t=c(t,i.providerId));let g=r(i.api.npm);if(g&&g!==i.providerId&&i.api.npm!=="@ai-sdk/azure"){let a=v=>{if(!v||!(i.providerId in v))return v;let T={...v};return T[g]=T[i.providerId],delete T[i.providerId],T};t=t.map(v=>Array.isArray(v.content)?{...v,providerOptions:a(v.providerOptions),content:v.content.map(T=>({...T,providerOptions:a(T.providerOptions)}))}:{...v,providerOptions:a(v.providerOptions)});}return t}b.message=C;function P(t){let i=t.id.toLowerCase();if(i.includes("qwen"))return .55;if(!i.includes("claude")){if(i.includes("gemini")||i.includes("glm-4.6")||i.includes("glm-4.7")||i.includes("minimax-m2"))return 1;if(i.includes("kimi-k2"))return i.includes("thinking")||i.includes("k2.")||i.includes("k2p")?1:.6}}b.temperature=P;function _(t){let i=t.id.toLowerCase();if(i.includes("qwen"))return 1;if(i.includes("minimax-m2")||i.includes("kimi-k2.5")||i.includes("kimi-k2p5")||i.includes("gemini"))return .95}b.topP=_;function y(t){let i=t.id.toLowerCase();if(i.includes("minimax-m2"))return i.includes("m2.1")?40:20;if(i.includes("gemini"))return 64}b.topK=y;let s=["low","medium","high"],l=["none","minimal",...s,"xhigh"];function u(t){if(!t.capabilities.reasoning)return {};let i=t.id.toLowerCase();if(i.includes("deepseek")||i.includes("minimax")||i.includes("glm")||i.includes("mistral")||i.includes("kimi")||i.includes("k2p5"))return {};if(i.includes("grok")&&i.includes("grok-3-mini"))return t.api.npm==="@openrouter/ai-sdk-provider"?{low:{reasoning:{effort:"low"}},high:{reasoning:{effort:"high"}}}:{low:{reasoningEffort:"low"},high:{reasoningEffort:"high"}};if(i.includes("grok"))return {};switch(t.api.npm){case "@openrouter/ai-sdk-provider":return !t.id.includes("gpt")&&!t.id.includes("gemini-3")?{}:Object.fromEntries(l.map(m=>[m,{reasoning:{effort:m}}]));case "@ai-sdk/gateway":return Object.fromEntries(l.map(m=>[m,{reasoningEffort:m}]));case "@ai-sdk/github-copilot":{if(t.id.includes("gemini"))return {};if(t.id.includes("claude"))return {thinking:{thinking_budget:4e3}};let m=utils.iife(()=>i.includes("5.1-codex-max")||i.includes("5.2")||i.includes("5.3")?[...s,"xhigh"]:s);return Object.fromEntries(m.map(g=>[g,{reasoningEffort:g,reasoningSummary:"auto",include:["reasoning.encrypted_content"]}]))}case "@ai-sdk/cerebras":case "@ai-sdk/togetherai":case "@ai-sdk/xai":case "@ai-sdk/deepinfra":case "@ai-sdk/openai-compatible":return Object.fromEntries(s.map(m=>[m,{reasoningEffort:m}]));case "@ai-sdk/azure":{if(i==="o1-mini")return {};let m=["low","medium","high"];return (i.includes("gpt-5-")||i==="gpt-5")&&m.unshift("minimal"),Object.fromEntries(m.map(g=>[g,{reasoningEffort:g,reasoningSummary:"auto",include:["reasoning.encrypted_content"]}]))}case "@ai-sdk/openai":{if(i==="gpt-5-pro")return {};let m=utils.iife(()=>{if(i.includes("codex"))return i.includes("5.2")||i.includes("5.3")?[...s,"xhigh"]:s;let g=[...s];return (i.includes("gpt-5-")||i==="gpt-5")&&g.unshift("minimal"),t.release_date>="2025-11-13"&&g.unshift("none"),t.release_date>="2025-12-04"&&g.push("xhigh"),g});return Object.fromEntries(m.map(g=>[g,{reasoningEffort:g,reasoningSummary:"auto",include:["reasoning.encrypted_content"]}]))}case "@ai-sdk/anthropic":case "@ai-sdk/google-vertex/anthropic":return {high:{thinking:{type:"enabled",budgetTokens:Math.min(16e3,Math.floor(t.limit.output/2-1))}},max:{thinking:{type:"enabled",budgetTokens:Math.min(31999,t.limit.output-1)}}};case "@ai-sdk/amazon-bedrock":return t.api.id.includes("anthropic")?{high:{reasoningConfig:{type:"enabled",budgetTokens:16e3}},max:{reasoningConfig:{type:"enabled",budgetTokens:31999}}}:Object.fromEntries(s.map(m=>[m,{reasoningConfig:{type:"enabled",maxReasoningEffort:m}}]));case "@ai-sdk/google-vertex":case "@ai-sdk/google":return i.includes("2.5")?{high:{thinkingConfig:{includeThoughts:true,thinkingBudget:16e3}},max:{thinkingConfig:{includeThoughts:true,thinkingBudget:24576}}}:Object.fromEntries(["low","high"].map(m=>[m,{includeThoughts:true,thinkingLevel:m}]));case "@ai-sdk/mistral":return {};case "@ai-sdk/cohere":return {};case "@ai-sdk/groq":{let m=["none",...s];return Object.fromEntries(m.map(g=>[g,{includeThoughts:true,thinkingLevel:g}]))}case "@ai-sdk/perplexity":return {};case "@mymediset/sap-ai-provider":case "@jerome-benoit/sap-ai-provider-v2":return t.api.id.includes("anthropic")?{high:{thinking:{type:"enabled",budgetTokens:16e3}},max:{thinking:{type:"enabled",budgetTokens:31999}}}:Object.fromEntries(s.map(m=>[m,{reasoningEffort:m}]))}return {}}b.variants=u;function w(t){let i={};(t.model.providerId==="openai"||t.model.api.npm==="@ai-sdk/openai"||t.model.api.npm==="@ai-sdk/github-copilot")&&(i.store=false),t.model.api.npm==="@openrouter/ai-sdk-provider"&&(i.usage={include:true},t.model.api.id.includes("gemini-3")&&(i.reasoning={effort:"high"})),(t.model.providerId==="baseten"||t.model.providerId==="easbot"&&["kimi-k2-thinking","glm-4.6"].includes(t.model.api.id))&&(i.chat_template_args={enable_thinking:true}),["zai","zhipuai"].includes(t.model.providerId)&&t.model.api.npm==="@ai-sdk/openai-compatible"&&(i.thinking={type:"enabled",clear_thinking:false}),(t.model.providerId==="openai"||t.providerOptions?.setCacheKey)&&(i.promptCacheKey=t.sessionId),(t.model.api.npm==="@ai-sdk/google"||t.model.api.npm==="@ai-sdk/google-vertex")&&(i.thinkingConfig={includeThoughts:true},t.model.api.id.includes("gemini-3")&&(i.thinkingConfig.thinkingLevel="high"));let m=t.model.api.id.toLowerCase();return (t.model.api.npm==="@ai-sdk/anthropic"||t.model.api.npm==="@ai-sdk/google-vertex/anthropic")&&(m.includes("k2p5")||m.includes("kimi-k2.5")||m.includes("kimi-k2p5"))&&(i.thinking={type:"enabled",budgetTokens:Math.min(16e3,Math.floor(t.model.limit.output/2-1))}),t.model.providerId==="alibaba-cn"&&t.model.capabilities.reasoning&&t.model.api.npm==="@ai-sdk/openai-compatible"&&!m.includes("kimi-k2-thinking")&&(i.enable_thinking=true),t.model.api.id.includes("gpt-5")&&!t.model.api.id.includes("gpt-5-chat")&&(t.model.api.id.includes("gpt-5-pro")||(i.reasoningEffort="medium",i.reasoningSummary="auto"),t.model.api.id.includes("gpt-5.")&&!t.model.api.id.includes("codex")&&!t.model.api.id.includes("-chat")&&t.model.providerId!=="azure"&&(i.textVerbosity="low"),t.model.providerId.startsWith("easbot")&&(i.promptCacheKey=t.sessionId,i.include=["reasoning.encrypted_content"],i.reasoningSummary="auto")),t.model.providerId==="venice"&&(i.promptCacheKey=t.sessionId),i}b.options=w;function M(t){return t.providerId==="openai"||t.api.npm==="@ai-sdk/openai"||t.api.npm==="@ai-sdk/github-copilot"?t.api.id.includes("gpt-5")?t.api.id.includes("5.")?{store:false,reasoningEffort:"low"}:{store:false,reasoningEffort:"minimal"}:{store:false}:t.providerId==="google"?t.api.id.includes("gemini-3")?{thinkingConfig:{thinkingLevel:"minimal"}}:{thinkingConfig:{thinkingBudget:0}}:t.providerId==="openrouter"?t.api.id.includes("google")?{reasoning:{enabled:false}}:{reasoningEffort:"minimal"}:{}}b.smallOptions=M;let x={amazon:"bedrock"};function j(t,i){if(t.api.npm==="@ai-sdk/gateway"){let g=t.api.id.indexOf("/"),a=g>0?t.api.id.slice(0,g):void 0,v=a?x[a]??a:void 0,T=i.gateway,U=Object.fromEntries(Object.entries(i).filter(([pe])=>pe!=="gateway")),W=Object.keys(U).length>0,ne={};return T!==void 0&&(ne.gateway=T),W&&(v?ne[v]=U:T&&typeof T=="object"&&!Array.isArray(T)?ne.gateway={...T,...U}:ne.gateway=U),ne}return {[r(t.api.npm)??t.providerId]:i}}b.providerOptions=j;function h(t){let i=e(),m=t.limit.output;return typeof m!="number"||m<=0?i:Math.min(m,i)}b.maxOutputTokens=h;function p(t,i){if(t.providerId==="google"||t.api.id.includes("gemini")){let m=g=>{if(g===null||typeof g!="object")return g;if(Array.isArray(g))return g.map(m);let a={};for(let[v,T]of Object.entries(g))v==="enum"&&Array.isArray(T)?(a[v]=T.map(U=>String(U)),(a.type==="integer"||a.type==="number")&&(a.type="string")):typeof T=="object"&&T!==null?a[v]=m(T):a[v]=T;return a.type==="object"&&a.properties&&Array.isArray(a.required)&&(a.required=a.required.filter(v=>v in a.properties)),a.type==="array"&&(a.items==null&&(a.items={}),typeof a.items=="object"&&!Array.isArray(a.items)&&!a.items.type&&(a.items.type="string")),a.type&&a.type!=="object"&&(delete a.properties,delete a.required),a};i=m(i);}return i}b.schema=p;})(exports.ProviderTransform||(exports.ProviderTransform={}));function hr(e){let r,d=0,c=()=>{if(r)return r;let E=d;return r=e().then(C=>E!==d?(r=void 0,c()):C),r};return c.reset=()=>{d++,r=void 0;},c}var br={"@ai-sdk/amazon-bedrock":()=>import('@ai-sdk/amazon-bedrock').then(e=>e.createAmazonBedrock),"@ai-sdk/anthropic":()=>import('@ai-sdk/anthropic').then(e=>e.createAnthropic),"@ai-sdk/azure":()=>import('@ai-sdk/azure').then(e=>e.createAzure),"@ai-sdk/google":()=>import('@ai-sdk/google').then(e=>e.createGoogleGenerativeAI),"@ai-sdk/google-vertex":()=>import('@ai-sdk/google-vertex').then(e=>e.createVertex),"@ai-sdk/google-vertex/anthropic":()=>import('@ai-sdk/google-vertex/anthropic').then(e=>e.createVertexAnthropic),"@ai-sdk/openai":()=>import('@ai-sdk/openai').then(e=>e.createOpenAI),"@ai-sdk/openai-compatible":()=>import('@ai-sdk/openai-compatible').then(e=>e.createOpenAICompatible),"@openrouter/ai-sdk-provider":()=>import('@openrouter/ai-sdk-provider').then(e=>e.createOpenRouter),"@ai-sdk/xai":()=>import('@ai-sdk/xai').then(e=>e.createXai),"@ai-sdk/mistral":()=>import('@ai-sdk/mistral').then(e=>e.createMistral),"@ai-sdk/groq":()=>import('@ai-sdk/groq').then(e=>e.createGroq),"@ai-sdk/deepinfra":()=>import('@ai-sdk/deepinfra').then(e=>e.createDeepInfra),"@ai-sdk/cerebras":()=>import('@ai-sdk/cerebras').then(e=>e.createCerebras),"@ai-sdk/cohere":()=>import('@ai-sdk/cohere').then(e=>e.createCohere),"@ai-sdk/gateway":()=>import('@ai-sdk/gateway').then(e=>e.createGateway),"@ai-sdk/togetherai":()=>import('@ai-sdk/togetherai').then(e=>e.createTogetherAI),"@ai-sdk/perplexity":()=>import('@ai-sdk/perplexity').then(e=>e.createPerplexity),"@ai-sdk/vercel":()=>import('@ai-sdk/vercel').then(e=>e.createVercel),"@ai-sdk/alibaba":()=>import('@ai-sdk/alibaba').then(e=>e.createAlibaba),"@ai-sdk/deepseek":()=>import('@ai-sdk/deepseek').then(e=>e.createDeepSeek),"gitlab-ai-provider":()=>import('gitlab-ai-provider').then(e=>e.createGitLab),"@ai-sdk/github-copilot":()=>import('./chunks/copilot-5N6U442L.cjs').then(e=>e.createOpenaiCompatible),"@easbot/ollama-sdk":()=>import('@easbot/ollama-sdk').then(e=>e.createOllama),"@easbot/local-model-sdk":()=>import('@easbot/local-model-sdk').then(e=>e.createLocal)};exports.Provider=void 0;(ee=>{let e=[];function r(n){let o=e.findIndex(f=>f.providerId===n.providerId);o>=0?e[o]=n:e.push(n);}ee.registerPluginAuthLoader=r;function d(){e.length=0;}ee.clearPluginAuthLoaders=d,ee.DEFAULT_CONTEXT_LIMIT=2e5,ee.DEFAULT_INPUT_LIMIT_RATIO=.9,ee.DEFAULT_OUTPUT_LIMIT=8192;function P(n=ee.DEFAULT_CONTEXT_LIMIT){return Math.floor(n*ee.DEFAULT_INPUT_LIMIT_RATIO)}ee.getDefaultInputLimit=P;let _=utils.Log.create({service:"provider"});function y(n){let o=/^gpt-(\d+)/.exec(n);return o?Number(o[1])>=5:false}function s(n){return y(n)&&!n.startsWith("gpt-5-mini")}let l={async anthropic(){return {autoload:false,options:{headers:{"anthropic-beta":"claude-code-20250219,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14"}}}},async opencode(n){let o=await(async()=>!!(n.env.some(I=>V(I))||await utils.Auth.get(n.id)||(await exports.Config.provider("opencode"))?.options?.apiKey))();if(!o)for(let[f,I]of Object.entries(n.models))I.cost.input!==0&&delete n.models[f];return {autoload:Object.keys(n.models).length>0,options:o?{}:{apiKey:"public"}}},openai:async()=>{let n=V("OPENAI_BASE_URL");return {autoload:false,async getModel(o,f,I){return o.responses(f)},options:n?{baseURL:n}:{}}},"github-copilot":async()=>({autoload:false,async getModel(n,o,f){return n.responses===void 0&&n.chat===void 0?n.languageModel(o):s(o)?n.responses(o):n.chat(o)},options:{}}),"github-copilot-enterprise":async()=>({autoload:false,async getModel(n,o,f){return n.responses===void 0&&n.chat===void 0?n.languageModel(o):s(o)?n.responses(o):n.chat(o)},options:{}}),azure:async()=>({autoload:false,async getModel(n,o,f){return f?.useCompletionUrls?n.chat(o):n.responses(o)},options:{}}),"azure-cognitive-services":async()=>{let n=V("AZURE_COGNITIVE_SERVICES_RESOURCE_NAME");return {autoload:false,async getModel(o,f,I){return I?.useCompletionUrls?o.chat(f):o.responses(f)},options:{baseURL:n?`https://${n}.cognitiveservices.azure.com/openai`:void 0}}},"amazon-bedrock":async()=>{let n=await exports.Config.provider("amazon-bedrock"),o=await utils.Auth.get("amazon-bedrock"),f=n?.options?.region,I=V("AWS_REGION"),S=f??I??"us-east-1",O=n?.options?.profile,B=V("AWS_PROFILE"),q=O??B,R=V("AWS_ACCESS_KEY_ID"),J=utils.iife(()=>{let Q=process.env.AWS_BEARER_TOKEN_BEDROCK;if(Q)return Q;if(o?.type==="api")return process.env.AWS_BEARER_TOKEN_BEDROCK=o.key,o.key}),oe=V("AWS_WEB_IDENTITY_TOKEN_FILE"),fe=!!(process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI||process.env.AWS_CONTAINER_CREDENTIALS_FULL_URI);if(!q&&!R&&!J&&!oe&&!fe)return {autoload:false};let te={region:S};if(!J){let Q=await utils.Shell.install("@aws-sdk/credential-providers"),{pathToFileURL:Z}=await import('url'),xe=Be__default.default.join(Q,"dist-cjs","index.js"),{fromNodeProviderChain:Re}=await import(Z(xe).href),be=q?{profile:q}:{};te.credentialProvider=Re(be);}let ue=n?.options?.endpoint??n?.options?.baseURL;return ue&&(te.baseURL=ue),{autoload:true,options:te,async getModel(Q,Z,xe){if(["global.","us.","eu.","jp.","apac.","au."].some(L=>Z.startsWith(L)))return Q.languageModel(Z);let be=xe?.region??S,re=be.split("-")[0];switch(re){case "us":{let L=["nova-micro","nova-lite","nova-pro","nova-premier","nova-2","claude","deepseek"].some(G=>Z.includes(G)),N=be.startsWith("us-gov");L&&!N&&(Z=`${re}.${Z}`);break}case "eu":{let L=["eu-west-1","eu-west-2","eu-west-3","eu-north-1","eu-central-1","eu-south-1","eu-south-2"].some(G=>be.includes(G)),N=["claude","nova-lite","nova-micro","llama3","pixtral"].some(G=>Z.includes(G));L&&N&&(Z=`${re}.${Z}`);break}case "ap":{let L=["ap-southeast-2","ap-southeast-4"].includes(be),N=be==="ap-northeast-1";L&&["anthropic.claude-sonnet-4-5","anthropic.claude-haiku"].some(G=>Z.includes(G))?(re="au",Z=`${re}.${Z}`):N?["claude","nova-lite","nova-micro","nova-pro"].some(K=>Z.includes(K))&&(re="jp",Z=`${re}.${Z}`):["claude","nova-lite","nova-micro","nova-pro"].some(K=>Z.includes(K))&&(re="apac",Z=`${re}.${Z}`);break}}return Q.languageModel(Z)}}},nvidia:async()=>({autoload:false,options:{headers:{"HTTP-Referer":"https://easbot.cn/","X-Title":"easbot"}}}),openrouter:async()=>({autoload:false,options:{headers:{"HTTP-Referer":"https://easbot.cn/","X-Title":"easbot"}}}),vercel:async()=>({autoload:false,options:{headers:{"http-referer":"https://easbot.cn/","x-title":"easbot"}}}),"google-vertex":async()=>{let n=V("GOOGLE_CLOUD_PROJECT")??V("GCP_PROJECT")??V("GCLOUD_PROJECT"),o=V("GOOGLE_CLOUD_LOCATION")??V("VERTEX_LOCATION")??"us-east5";return !n?{autoload:false}:{autoload:true,vars(I){let S=o==="global"?"aiplatform.googleapis.com":`${o}-aiplatform.googleapis.com`;return {...n&&{GOOGLE_VERTEX_PROJECT:n},GOOGLE_VERTEX_LOCATION:o,GOOGLE_VERTEX_ENDPOINT:S}},options:{project:n,location:o,fetch:async(I,S)=>{let{GoogleAuth:O}=await import('google-auth-library'),R=await(await new O().getApplicationDefault()).credential.getAccessToken(),J=new Headers(S?.headers);return J.set("Authorization",`Bearer ${R.token}`),fetch(I,{...S,headers:J})}},async getModel(I,S){let O=String(S).trim();return I.languageModel(O)}}},"google-vertex-anthropic":async()=>{let n=V("GOOGLE_CLOUD_PROJECT")??V("GCP_PROJECT")??V("GCLOUD_PROJECT"),o=V("GOOGLE_CLOUD_LOCATION")??V("VERTEX_LOCATION")??"global";return !n?{autoload:false}:{autoload:true,options:{project:n,location:o},async getModel(I,S){let O=String(S).trim();return I.languageModel(O)}}},"sap-ai-core":async()=>{let n=await utils.Auth.get("sap-ai-core"),o=utils.iife(()=>{let S=process.env.AICORE_SERVICE_KEY;if(S)return S;if(n?.type==="api")return process.env.AICORE_SERVICE_KEY=n.key,n.key}),f=process.env.AICORE_DEPLOYMENT_ID,I=process.env.AICORE_RESOURCE_GROUP;return {autoload:!!o,options:o?{deploymentId:f,resourceGroup:I}:{},async getModel(S,O){return S(O)}}},zenmux:async()=>({autoload:false,options:{headers:{"HTTP-Referer":"https://easbot.cn/","X-Title":"easbot"}}}),gitlab:async n=>{let o=V("GITLAB_INSTANCE_URL")||"https://gitlab.com",f=await utils.Auth.get(n.id),I=await(async()=>f?.type==="oauth"?f.access:f?.type==="api"?f.key:V("GITLAB_TOKEN"))(),S=await exports.Config.provider("gitlab"),{VERSION:O,createGitLab:B}=await import('gitlab-ai-provider'),q={"User-Agent":`easbot/${Te().getVersion()} gitlab-ai-provider/${O} (${tt__default.default.platform()} ${tt__default.default.release()}; ${tt__default.default.arch()})`,...S?.options?.aiGatewayHeaders||{}};return {autoload:!!I,options:{instanceUrl:o,apiKey:I,aiGatewayHeaders:q,featureFlags:{duo_agent_platform_agentic_chat:true,duo_agent_platform:true,...S?.options?.featureFlags||{}}},async getModel(R,J){return R.agenticChat(J,{aiGatewayHeaders:q,featureFlags:{duo_agent_platform_agentic_chat:true,duo_agent_platform:true,...S?.options?.featureFlags||{}}})}}},"cloudflare-workers-ai":async n=>{let o=V("CLOUDFLARE_ACCOUNT_ID");if(!o)return {autoload:false};let f=await utils.iife(async()=>{let I=V("CLOUDFLARE_API_KEY");if(I)return I;let S=await utils.Auth.get(n.id);if(S?.type==="api")return S.key});return {autoload:!!f,options:{apiKey:f,baseURL:`https://api.cloudflare.com/client/v4/accounts/${o}/ai/v1`},async getModel(I,S){return I.languageModel(S)}}},"cloudflare-ai-gateway":async n=>{let o=V("CLOUDFLARE_ACCOUNT_ID"),f=V("CLOUDFLARE_GATEWAY_ID");if(!o||!f)return {autoload:false};let I=await(async()=>{let R=V("CLOUDFLARE_API_TOKEN")||V("CF_AIG_TOKEN");if(R)return R;let J=await utils.Auth.get(n.id);if(J?.type==="api")return J.key})();if(!I)throw new Error("CLOUDFLARE_API_TOKEN (or CF_AIG_TOKEN) is required for Cloudflare AI Gateway. Set it via environment variable or run `easbot auth cloudflare-ai-gateway`.");let{createAiGateway:S}=await import('ai-gateway-provider'),{createUnified:O}=await import('ai-gateway-provider/providers/unified'),B=S({accountId:o,gateway:f,apiKey:I}),q=O();return {autoload:true,async getModel(R,J,oe){return B(q(J))},options:{}}},cerebras:async()=>({autoload:false,options:{headers:{"X-Cerebras-3rd-Party-Integration":"easbot"}}}),ollama:async()=>({autoload:true,options:{baseURL:V("OLLAMA_BASE_URL")||"http://localhost:11434"},async getModel(o,f,I){return o.languageModel?o.languageModel(f):o(f)}}),"easbot-local":async()=>{let n=V("LOCAL_MODEL_PATH")||Be__default.default.join(Me().cache,"models"),{SUPPORTED_EMBEDDING_MODELS:o}=await import('@easbot/local-model-sdk');return {autoload:true,options:{cacheDir:n,verbose:true},async getModel(f,I,S){return I in o?f.embeddingModel(I,S):I.startsWith("rerank-")?f.rerankingModel?f.rerankingModel(I.slice(6),S):f(I):f.languageModel?f.languageModel(I,S):f(I)}}}};ee.Model=k__default.default.object({id:k__default.default.string(),providerId:k__default.default.string(),api:k__default.default.object({id:k__default.default.string(),url:k__default.default.string(),npm:k__default.default.string()}),name:k__default.default.string(),family:k__default.default.string().optional(),capabilities:k__default.default.object({temperature:k__default.default.boolean(),reasoning:k__default.default.boolean(),attachment:k__default.default.boolean(),toolcall:k__default.default.boolean(),input:k__default.default.object({text:k__default.default.boolean(),audio:k__default.default.boolean(),image:k__default.default.boolean(),video:k__default.default.boolean(),pdf:k__default.default.boolean()}),output:k__default.default.object({text:k__default.default.boolean(),audio:k__default.default.boolean(),image:k__default.default.boolean(),video:k__default.default.boolean(),pdf:k__default.default.boolean()}),interleaved:k__default.default.union([k__default.default.boolean(),k__default.default.object({field:k__default.default.enum(["reasoning_content","reasoning_details"])})])}),cost:k__default.default.object({input:k__default.default.number(),output:k__default.default.number(),cache:k__default.default.object({read:k__default.default.number(),write:k__default.default.number()}),experimentalOver200K:k__default.default.object({input:k__default.default.number(),output:k__default.default.number(),cache:k__default.default.object({read:k__default.default.number(),write:k__default.default.number()})}).optional()}),limit:k__default.default.object({context:k__default.default.number(),input:k__default.default.number().optional(),output:k__default.default.number()}),status:k__default.default.enum(["alpha","beta","deprecated","active"]),options:k__default.default.record(k__default.default.string(),k__default.default.any()),headers:k__default.default.record(k__default.default.string(),k__default.default.string()),release_date:k__default.default.string(),variants:k__default.default.record(k__default.default.string(),k__default.default.record(k__default.default.string(),k__default.default.any())).optional()}).meta({ref:"Model"}),ee.Info=k__default.default.object({id:k__default.default.string(),name:k__default.default.string(),source:k__default.default.enum(["env","config","custom","api"]),env:k__default.default.string().array(),key:k__default.default.string().optional(),options:k__default.default.record(k__default.default.string(),k__default.default.any()),models:k__default.default.record(k__default.default.string(),ee.Model)}).meta({ref:"Provider"});function M(n,o){let f={id:o.id,providerId:n.id,name:o.name,family:o.family,api:{id:o.id,url:n.api,npm:o.provider?.npm??n.npm??"@ai-sdk/openai-compatible"},status:o.status??"active",headers:o.headers??{},options:o.options??{},cost:{input:o.cost?.input??0,output:o.cost?.output??0,cache:{read:o.cost?.cache_read??0,write:o.cost?.cache_write??0},experimentalOver200K:o.cost?.context_over_200k?{cache:{read:o.cost.context_over_200k.cache_read??0,write:o.cost.context_over_200k.cache_write??0},input:o.cost.context_over_200k.input,output:o.cost.context_over_200k.output}:void 0},limit:{context:o.limit.context??ee.DEFAULT_CONTEXT_LIMIT,input:o.limit.input??P(o.limit.context??ee.DEFAULT_CONTEXT_LIMIT),output:o.limit.output??ee.DEFAULT_OUTPUT_LIMIT},capabilities:{temperature:o.temperature,reasoning:o.reasoning,attachment:o.attachment,toolcall:o.tool_call,input:{text:o.modalities?.input?.includes("text")??false,audio:o.modalities?.input?.includes("audio")??false,image:o.modalities?.input?.includes("image")??false,video:o.modalities?.input?.includes("video")??false,pdf:o.modalities?.input?.includes("pdf")??false},output:{text:o.modalities?.output?.includes("text")??false,audio:o.modalities?.output?.includes("audio")??false,image:o.modalities?.output?.includes("image")??false,video:o.modalities?.output?.includes("video")??false,pdf:o.modalities?.output?.includes("pdf")??false},interleaved:o.interleaved??false},release_date:o.release_date,variants:{}};return f.variants=remeda.mapValues(exports.ProviderTransform.variants(f),I=>I),f}function x(n){return {id:n.id,source:"custom",name:n.name,env:n.env??[],options:{},models:remeda.mapValues(n.models,o=>M(n,o))}}ee.fromModelsDevProvider=x;async function j(){var xe=[];try{let n=chunk3IYCLIOJ_cjs.b(xe,_.time("state"));let o=await exports.Config.get();let f=new Set(o.disabled_providers??[]);let I=new Set([...We,...o.enabled_providers??[]]);let S=await exports.ModelsDev.get();let O=remeda.pickBy(S,(L,N)=>I.has(N));let B=remeda.mapValues(O,x);function q(L){return !(I&&!I.has(L)||f.has(L))}let R={};let J=new Map;let oe={};let fe=new Map;let te=new Map;_.info("init");let ue=Object.entries(o.provider??{});if(B["github-copilot"]){let L=B["github-copilot"];B={...B,"github-copilot-enterprise":{...L,id:"github-copilot-enterprise",name:"GitHub Copilot Enterprise",models:remeda.mapValues(L.models,N=>({...N,providerId:"github-copilot-enterprise"}))}};}function Q(L,N){let G=R[L];if(G){R[L]=remeda.mergeDeep(G,N);return}let K=B[L];K&&(R[L]=remeda.mergeDeep(K,N));}for(let[L,N]of ue){let G=B[L],K={id:L,name:N.name??G?.name??L,env:N.env??G?.env??[],options:remeda.mergeDeep(G?.options??{},N.options??{}),source:"config",models:G?.models??{}};for(let[z,D]of Object.entries(N.models??{})){let $=K.models[D.id??z],se=utils.iife(()=>D.name?D.name:D.id&&D.id!==z?z:$?.name??z),we={id:z,api:{id:D.id??$?.api.id??z,npm:D.provider?.npm??N.npm??$?.api.npm??O[L]?.npm??"@ai-sdk/openai-compatible",url:N?.api??$?.api.url??O[L]?.api??""},status:D.status??$?.status??"active",name:se,providerId:L,capabilities:{temperature:D.temperature??$?.capabilities.temperature??!1,reasoning:D.reasoning??$?.capabilities.reasoning??!1,attachment:D.attachment??$?.capabilities.attachment??!1,toolcall:D.tool_call??$?.capabilities.toolcall??!0,input:{text:D.modalities?.input?.includes("text")??$?.capabilities.input.text??!0,audio:D.modalities?.input?.includes("audio")??$?.capabilities.input.audio??!1,image:D.modalities?.input?.includes("image")??$?.capabilities.input.image??!1,video:D.modalities?.input?.includes("video")??$?.capabilities.input.video??!1,pdf:D.modalities?.input?.includes("pdf")??$?.capabilities.input.pdf??!1},output:{text:D.modalities?.output?.includes("text")??$?.capabilities.output.text??!0,audio:D.modalities?.output?.includes("audio")??$?.capabilities.output.audio??!1,image:D.modalities?.output?.includes("image")??$?.capabilities.output.image??!1,video:D.modalities?.output?.includes("video")??$?.capabilities.output.video??!1,pdf:D.modalities?.output?.includes("pdf")??$?.capabilities.output.pdf??!1},interleaved:D.interleaved??!1},cost:{input:D?.cost?.input??$?.cost?.input??0,output:D?.cost?.output??$?.cost?.output??0,cache:{read:D?.cost?.cache_read??$?.cost?.cache.read??0,write:D?.cost?.cache_write??$?.cost?.cache.write??0}},options:remeda.mergeDeep($?.options??{},D.options??{}),limit:{context:D.limit?.context??$?.limit?.context??ee.DEFAULT_CONTEXT_LIMIT,input:D.limit?.input??$?.limit?.input??P(D.limit?.context??ee.DEFAULT_CONTEXT_LIMIT),output:D.limit?.output??$?.limit?.output??ee.DEFAULT_OUTPUT_LIMIT},headers:remeda.mergeDeep($?.headers??{},D.headers??{}),family:D.family??$?.family??"",release_date:D.release_date??$?.release_date??"",variants:{}},me=remeda.mergeDeep(exports.ProviderTransform.variants(we),D.variants??{});we.variants=remeda.mapValues(remeda.pickBy(me,ie=>!ie.disabled),ie=>remeda.omit(ie,["disabled"])),K.models[z]=we;}B={...B,[L]:K};}let Z=await utils.Env.all();for(let[L,N]of Object.entries(B)){if(f.has(L))continue;let G=N.env.map(K=>Z[K]).find(Boolean);G&&Q(L,{source:"env",key:N.env.length===1?G:void 0});}for(let[L,N]of Object.entries(await utils.Auth.all()))f.has(L)||N.type==="api"&&Q(L,{source:"api",key:N.key});for(let L of e){let N=L.providerId;if(f.has(N))continue;let G=!1,K=await utils.Auth.get(N);if(K&&(G=!0),N==="github-copilot"&&!G&&await utils.Auth.get("github-copilot-enterprise")&&(G=!0),!!G){if(K){let z=B[L.authProvider];if(!z){_.error(`Auth provider ${L.authProvider} not found in database`);continue}try{let $=await L.loader(()=>utils.Auth.get(N),z)??{},se=R[N]?{options:$}:{source:"custom",options:$};Q(N,se);}catch(D){_.warn("plugin auth loader failed for provider",{providerId:N,authProvider:L.authProvider,error:D instanceof Error?D.message:String(D)});}}if(N==="github-copilot"){let z="github-copilot-enterprise";if(!f.has(z)&&await utils.Auth.get(z)){let $=B[z];if(!$){_.error(`Enterprise provider ${z} not found in database`);continue}try{let we=await L.loader(()=>utils.Auth.get(z),$)??{},me=R[z]?{options:we}:{source:"custom",options:we};Q(z,me);}catch(se){_.warn("plugin auth loader failed for enterprise provider",{providerId:z,error:se instanceof Error?se.message:String(se)});}}}}}for(let[L,N]of Object.entries(l)){if(f.has(L)||!I.has(L))continue;let G=B[L];if(!G){_.debug("Provider does not exist in model list "+L);continue}let K=await N(G);if(K&&(K.autoload||R[L])){K.getModel&&(oe[L]=K.getModel);let z=K.options??{},D=R[L]?{options:z}:{source:"custom",options:z};Q(L,D);}}for(let[L,N]of ue){let G={source:"config"};N.env&&(G.env=N.env),N.name&&(G.name=N.name),N.options&&(G.options=N.options),Q(L,G);}for(let[L,N]of Object.entries(R)){if(!q(L)){delete R[L];continue}let G=o.provider?.[L];for(let[K,z]of Object.entries(N.models)){z.api.id=z.api.id??z.id??K,(K==="gpt-5-chat-latest"||L==="openrouter"&&K==="openai/gpt-5-chat")&&delete N.models[K],z.status==="alpha"&&!exports.Flag.EASBOT_ENABLE_EXPERIMENTAL_MODELS&&delete N.models[K],z.status==="deprecated"&&delete N.models[K],(G?.blacklist?.includes(K)||G?.whitelist&&!G.whitelist.includes(K))&&delete N.models[K],z.variants=remeda.mapValues(exports.ProviderTransform.variants(z),$=>$);let D=G?.models?.[K]?.variants;if(D&&z.variants){let $=remeda.mergeDeep(z.variants,D);z.variants=remeda.mapValues(remeda.pickBy($,se=>!se.disabled),se=>remeda.omit(se,["disabled"]));}}if(Object.keys(N.models).length===0){delete R[L];continue}_.info("found",{providerId:L});}return {models:J,providers:R,sdk:fe,localProxy:te,modelLoaders:oe}}catch(Re){var be=Re,re=true;}finally{chunk3IYCLIOJ_cjs.c(xe,be,re);}}let h=hr(j);async function p(){return h()}function b(){h.reset();}ee.resetState=b;async function t(){return (await p())?.providers??{}}ee.list=t;async function i(){return (await p())?.localProxy??{}}ee.getLocalProxy=i;async function m(n){try{var o=[];try{let O=chunk3IYCLIOJ_cjs.b(o,_.time("getSDK",{providerId:n.providerId}));let B=await p();if(!B)throw new Error("Provider state not available");let q=B.providers[n.providerId];if(!q)throw new Error(`Provider ${n.providerId} not found`);let R={...q.options};n.api.npm.includes("@ai-sdk/openai-compatible")&&R.includeUsage!==!1&&(R.includeUsage=!0);R.baseURL||(R.baseURL=n.api.url);R.apiKey===void 0&&q.key&&(R.apiKey=q.key);n.headers&&(R.headers={...R.headers,...n.headers});let J={providerId:n.providerId,npm:n.api.npm,baseURL:R.baseURL,apiKey:R.apiKey,region:R.region,endpoint:R.endpoint};let oe=utils.PKG.xxHash32(JSON.stringify(J));let fe=B.sdk.get(oe);if(fe)return fe;let te=R.fetch;R.fetch=async($,se)=>{let we=te??fetch,me=se??{};if(R.timeout!==void 0&&R.timeout!==null){let ie=[];me.signal&&ie.push(me.signal),R.timeout!==!1&&ie.push(AbortSignal.timeout(R.timeout));let mt=ie.length>1?AbortSignal.any(ie):ie[0];me.signal=mt;}if(n.api.npm==="@ai-sdk/openai"&&me.body&&me.method==="POST")try{let ie=JSON.parse(me.body);if(!(n.providerId.includes("azure")&&ie.store===!0)&&Array.isArray(ie.input)){for(let yt of ie.input)"id"in yt&&delete yt.id;me.body=JSON.stringify(ie);}}catch(ie){_.warn("failed to parse openai request body for itemId strip",{providerId:n.providerId,error:ie instanceof Error?ie.message:String(ie)});}return we($,{...me,timeout:!1})};let ue=br[n.api.npm];if(ue){_.info("using bundled provider",{providerId:n.providerId,pkg:n.api.npm});let se=(await ue())({name:n.providerId,...R});return B.sdk.set(oe,se),se}let Q;n.api.npm.startsWith("file://")?Q=n.api.npm:Q=await utils.Shell.install(n.api.npm,"latest");let{pathToFileURL:Z}=await import('url');let xe=await import('path');let Re=await import('fs/promises');let be=xe.join(Q,"package.json");let re=JSON.parse(await Re.readFile(be,"utf-8"));let L;re.exports?.["."]?.import?L=re.exports["."].import:re.exports?.["."]?.require?L=re.exports["."].require:re.module?L=re.module:re.main?L=re.main:L="index.js";let N=xe.join(Q,L);let G=Z(N).href;let K=await import(G);let z=K[Object.keys(K).find($=>$.startsWith("create"))];let D=z({name:n.providerId,...R});B.sdk.set(oe,D);return D}catch(f){var I=f,S=!0;}finally{chunk3IYCLIOJ_cjs.c(o,I,S);}}catch(O){throw new ee.InitError({providerId:n.providerId},{cause:O})}}async function g(n){return (await p())?.providers[n]}ee.getProvider=g;async function a(n,o){let f=await p();if(!f)throw new Error("Provider state not available");let I=f.providers[n];if(!I){let R=Object.keys(f.providers),oe=_t__default.default.go(n,R,{limit:3,threshold:-1e4}).map(fe=>fe.target);throw new ee.ModelNotFoundError({providerId:n,modelId:o,suggestions:oe})}let S=I.models[o];if(S)return S;if(o.includes("/")){let R=o.split("/");for(let J=1;J<R.length;J++){let oe=R.slice(J).join("/");if(S=I.models[oe],S)return S}}let O=Object.keys(I.models),q=_t__default.default.go(o,O,{limit:3,threshold:-1e4}).map(R=>R.target);throw new ee.ModelNotFoundError({providerId:n,modelId:o,suggestions:q})}ee.getModel=a;async function v(n){_.debug("getLanguage called",{providerId:n.providerId,modelId:n.id});let o=await p();if(!o)throw new Error("Provider state not available");let f=`${n.providerId}/${n.id}`;if(o.models.has(f))return o.models.get(f);let I=o.providers[n.providerId];if(!I)throw new Error(`Provider ${n.providerId} not found`);let S=await m(n);try{let O=o.modelLoaders[n.providerId],B=O?await O(S,n.api.id,I.options):S.languageModel(n.api.id);return o.models.set(f,B),B}catch(O){throw _.error("Failed to create language model",{providerId:n.providerId,modelId:n.id,error:O}),O instanceof ai.NoSuchModelError?new ee.ModelNotFoundError({modelId:n.id,providerId:n.providerId},{cause:O}):O}}ee.getLanguage=v;async function T(n,o){_.debug("getEmbedding called",{providerId:n,modelId:o});let f=await p();if(f){let q=`${n}/${o}`,R=f.models.get(q);if(R)return R}let I=await a(n,o),S=await m(I),O,B=S;if(typeof B.embeddingModel=="function")O=B.embeddingModel(I.api.id);else if(typeof B.textEmbeddingModel=="function")O=B.textEmbeddingModel(I.api.id);else throw new Error(`Provider ${n} does not support embedding model. SDK missing both 'embeddingModel' and 'textEmbeddingModel' methods.`);return f&&f.models.set(`${n}/${o}`,O),O}ee.getEmbedding=T;async function U(n,o){_.debug("getRerank called",{providerId:n,modelId:o});let f=await p();if(f){let q=`${n}/${o}`,R=f.models.get(q);if(R)return R}let I=await a(n,o),S=await m(I),O,B=S;if(typeof B.rerankingModel=="function")O=B.rerankingModel(I.api.id),O&&f&&f.models.set(`${n}/${o}`,O);else if(typeof B.languageModel=="function"){let q=await i(),R=`${n}/${o}`;if(R in q)return q[R];let J=await v(I);if(J){let oe=await a("easbot-local","rerank-proxy"),te=await m(oe);O=te.rerankingModel?te.rerankingModel(oe.api.id,{llm:J,useEnhancedPrompt:true,promptLanguage:"cn",totalScore:1}):void 0,O&&(q.set(R,O),f&&f.models.set(R,O));}}if(!O)throw new Error(`Provider ${n} and model ${o} does not support rerank`);return O}ee.getRerank=U;async function W(n,o){let f=await p();if(!f)return;let I=f.providers[n];if(I){for(let S of o)for(let O of Object.keys(I.models))if(O.includes(S))return {providerId:n,modelId:O}}}ee.closest=W;async function ne(n){let o=await exports.Config.get();if(o.small_model){let O=le(o.small_model);if(!O.providerId||!O.modelId)throw new Error("Invalid small_model format");return a(O.providerId,O.modelId)}let f=await p(),I=f?.providers[n];if(I){let O=["claude-haiku-4-5","claude-haiku-4.5","3-5-haiku","3.5-haiku","gemini-3-flash","gemini-2.5-flash","gpt-5-nano"];n.startsWith("easbot")&&(O=["gpt-5-nano"]),n.startsWith("github-copilot")&&(O=["gpt-5-mini","claude-haiku-4.5",...O]);for(let B of O)if(n==="amazon-bedrock"){let q=["global.","us.","eu."],R=Object.keys(I.models).filter(te=>te.includes(B)),J=R.find(te=>te.startsWith("global."));if(J)return a(n,J);let oe=I.options?.region;if(oe){let te=oe.split("-")[0];if(te==="us"||te==="eu"){let ue=R.find(Q=>Q.startsWith(`${te}.`));if(ue)return a(n,ue)}}let fe=R.find(te=>!q.some(ue=>te.startsWith(ue)));if(fe)return a(n,fe)}else for(let q of Object.keys(I.models))if(q.includes(B))return a(n,q)}if(f?.providers.easbot?.models["gpt-5-nano"])return a("easbot","gpt-5-nano")}ee.getSmallModel=ne;let pe=["gpt-5","claude-sonnet-4","gemini-3-pro"];function ge(n){return remeda.sortBy(n,[o=>pe.findIndex(f=>o.id.includes(f)),"desc"],[o=>o.id.includes("latest")?0:1,"asc"],[o=>o.id,"desc"])}ee.sort=ge;async function de(){let n=await exports.Config.get();if(n.model)return le(n.model);let o=await t().then(I=>Object.values(I)).then(I=>I.find(S=>!n.provider||Object.keys(n.provider).includes(S.id)));if(!o)throw new Error("no providers found");let[f]=ge(Object.values(o.models));if(!f)throw new Error("no models found");return {providerId:o.id,modelId:f.id}}ee.defaultModel=de;function le(n){let{provider:o,model:f}=utils.parseModelId(n);if(!o)throw new Error("Invalid model format: "+n);return {providerId:o,modelId:f}}ee.parseModel=le,ee.ModelNotFoundError=utils.NamedError.create("ProviderModelNotFoundError",k__default.default.object({providerId:k__default.default.string(),modelId:k__default.default.string(),suggestions:k__default.default.array(k__default.default.string()).optional()})),ee.InitError=utils.NamedError.create("ProviderInitError",k__default.default.object({providerId:k__default.default.string()}));})(exports.Provider||(exports.Provider={}));exports.ProviderError=void 0;(y=>{let e=[/prompt is too long/i,/input is too long for requested model/i,/exceeds the context window/i,/input token count.*exceeds the maximum/i,/maximum prompt length is \d+/i,/reduce the length of the messages/i,/maximum context length is \d+ tokens/i,/exceeds the limit of \d+/i,/exceeds the available context size/i,/greater than the context length/i,/context window exceeds limit/i,/exceeded model token limit/i,/context[_ ]length[_ ]exceeded/i,/request entity too large/i,/context length is only \d+ tokens/i,/input length.*exceeds.*context length/i,/prompt too long; exceeded (?:max )?context length/i,/too large for model with \d+ maximum context length/i,/model_context_window_exceeded/i];function r(s){let l=s.statusCode;return l&&l===404||s.isRetryable}function d(s){return e.some(l=>l.test(s))?true:/^4(00|13)\s*(status code)?\s*\(no body\)/i.test(s)}function c(s,l){return s.includes("github-copilot")&&l.statusCode===403?"Please reauthenticate with the copilot provider to ensure your credentials work properly with EasBot.":l.message}function E(s,l){return utils.iife(()=>{let u=l.message;if(u===""){if(l.responseBody)return l.responseBody;if(l.statusCode){let M=http.STATUS_CODES[l.statusCode];if(M)return M}return "Unknown error"}let w=c(s,l);if(w!==u)return w;if(!l.responseBody||l.statusCode&&u!==http.STATUS_CODES[l.statusCode])return u;try{let M=JSON.parse(l.responseBody),x=M.message||M.error||M.error?.message;if(x&&typeof x=="string")return `${u}: ${x}`}catch{}return `${u}: ${l.responseBody}`}).trim()}function C(s){if(typeof s=="string")try{let l=JSON.parse(s);return l&&typeof l=="object"?l:void 0}catch{return}if(typeof s=="object"&&s!==null)return s}function P(s){let l=C(s),u=typeof l?.message=="string"?C(l.message)??l:l;if(!u||u.type!=="error")return;let w=JSON.stringify(u);switch(u?.error?.code){case "context_length_exceeded":return {type:"context_overflow",message:"Input exceeds context window of this model",responseBody:w};case "insufficient_quota":return {type:"api_error",message:"Quota exceeded. Check your plan and billing details.",isRetryable:false,responseBody:w};case "usage_not_included":return {type:"api_error",message:"To use Codex with your ChatGPT plan, upgrade to Plus: https://chatgpt.com/explore/plus.",isRetryable:false,responseBody:w};case "invalid_prompt":return {type:"api_error",message:typeof u?.error?.message=="string"?u?.error?.message:"Invalid prompt.",isRetryable:false,responseBody:w};case "server_error":return {type:"api_error",message:typeof u?.error?.message=="string"?u?.error?.message:"Server error.",isRetryable:true,responseBody:w}}}y.parseStreamError=P;function _(s){let l=E(s.providerId,s.error),u=C(s.error.responseBody);if(d(l)||s.error.statusCode===413||u?.error?.code==="context_length_exceeded")return {type:"context_overflow",message:l,responseBody:s.error.responseBody};let w=s.error.url?{url:s.error.url}:void 0;return {type:"api_error",message:l,statusCode:s.error.statusCode,isRetryable:s.providerId.startsWith("openai")?r(s.error):s.error.isRetryable,responseHeaders:s.error.responseHeaders,responseBody:s.error.responseBody,metadata:w}}y.parseAPICallError=_;})(exports.ProviderError||(exports.ProviderError={}));exports.ProviderAuth=void 0;(j=>{let e=[],r=utils.lazyAsync(async()=>{let h={};for(let{providerId:p,methods:b}of e)h[p]={methods:b};return {methods:h,pending:{}}});function d(h){let p=e.findIndex(b=>b.providerId===h.providerId);p>=0?e[p]=h:e.push(h),r.reset();}j.registerPluginAuthProvider=d;function c(){e.length=0,r.reset();}j.clearPluginAuthProviders=c;function E(){return r()}function C(){r.reset();}j.resetState=C,j.Method=k__default.default.object({type:k__default.default.union([k__default.default.literal("oauth"),k__default.default.literal("api")]),label:k__default.default.string()}).meta({ref:"ProviderAuthMethod"});async function _(){let h=await E().then(p=>p.methods);return remeda.mapValues(h,p=>p.methods.map(b=>({type:b.type,label:b.label})))}j.methods=_,j.Authorization=k__default.default.object({url:k__default.default.string(),method:k__default.default.union([k__default.default.literal("auto"),k__default.default.literal("code")]),instructions:k__default.default.string()}).meta({ref:"ProviderAuthAuthorization"}),j.authorize=utils.fn(k__default.default.object({providerId:k__default.default.string(),method:k__default.default.number()}),async h=>{let p=await E().then(t=>t.methods[h.providerId]);if(!p)return;let b=p.methods[h.method];if(b&&b.type==="oauth"&&b.authorize){let t=await b.authorize();return t?(await E().then(i=>i.pending[h.providerId]=t),{url:t.url??"",method:t.method??"",instructions:t.instructions??""}):void 0}}),j.callback=utils.fn(k__default.default.object({providerId:k__default.default.string(),method:k__default.default.number(),code:k__default.default.string().optional()}),async h=>{let p=await E().then(t=>t.pending[h.providerId]);if(!p)throw new j.OauthMissing({providerId:h.providerId});let b;if(p.method==="code"){if(!h.code)throw new j.OauthCodeMissing({providerId:h.providerId});b=await p.callback(h.code);}if(p.method==="auto"&&(b=await p.callback()),b?.type==="success"){"key"in b&&b.key&&await utils.Auth.set(h.providerId,{type:"api",key:b.key??""}),"refresh"in b&&b.refresh&&await utils.Auth.set(h.providerId,{type:"oauth",access:b.access??"",refresh:b.refresh??"",expires:b.expires??0,...b.accountId?{accountId:b.accountId}:{}});return}throw new j.OauthCallbackFailed({})}),j.api=utils.fn(k__default.default.object({providerId:k__default.default.string(),key:k__default.default.string()}),async h=>{await utils.Auth.set(h.providerId,{type:"api",key:h.key});}),j.OauthMissing=utils.NamedError.create("ProviderAuthOauthMissing",k__default.default.object({providerId:k__default.default.string()})),j.OauthCodeMissing=utils.NamedError.create("ProviderAuthOauthCodeMissing",k__default.default.object({providerId:k__default.default.string()})),j.OauthCallbackFailed=utils.NamedError.create("ProviderAuthOauthCallbackFailed",k__default.default.object({}));})(exports.ProviderAuth||(exports.ProviderAuth={}));var Mr=utils.Log.create({service:"rerank"});exports.RerankProvider=void 0;(d=>{async function e(c){if(c&&typeof c=="object"&&"specificationVersion"in c)return c;let E=c??await(async()=>{let C=await exports.Provider.defaultModel();return exports.Provider.getModel(C.providerId,C.modelId)})();return exports.Provider.getRerank(E.providerId,E.id)}async function r(c,E){let{query:C,documents:P,model:_,topN:y}=c,s=E??c.abortSignal;if(P.length===0)return [];let l=await e(_),u=y??Math.min(10,P.length),w=await ai.rerank({model:l,query:C,documents:P,topN:u,abortSignal:s});return Mr.debug("rerank done",{inputCount:P.length,outputCount:w.ranking.length,topN:u}),w.ranking.map(M=>({index:M.originalIndex,document:M.document,score:M.score,reason:M.reason}))}d.rerankDocuments=r;})(exports.RerankProvider||(exports.RerankProvider={}));function Ie(e){return /(\.md|\.ts|\.json|readme|doc|spec|guideline)/i.test(e)?"document":/(deadline|date|day|week|month|year|q[1-4]|sprint)/i.test(e)?"time":/(file|model|dataset|artifact|resource|tool|sdk|ollama|sqlite|embedding|vector|fts)/i.test(e)?"object":/(event|incident|release|meeting|migration|launch)/i.test(e)?"event":/(api|service|system|engine|pipeline|server|db|database|memorysystem|contextengine)/i.test(e)?"process":/(team|group|org|company|inc|ltd|corp)/i.test(e)?"organization":/(concept|principle|policy|method|pattern|strategy)/i.test(e)?"concept":/(score|rate|ratio|latency|accuracy|recall|precision|throughput|kpi)/i.test(e)?"metric":/(task|issue|ticket|todo|action)/i.test(e)?"task":/(process|workflow|procedure|flow|lifecycle)/i.test(e)?"process":/[A-Z]/.test(e)?"object":"keyword"}function Le(e){return e.trim().replace(/^[^\p{L}\p{N}]+|[^\p{L}\p{N}]+$/gu,"").replace(/\s+/g," ").slice(0,120)}var Ir=/([A-Za-z][\w.-]{1,80})\s+(is_a|part_of|has_attribute|located_in|occurs_in|causes|influences|owned_by|member_of|uses|depends_on|related_to)\s+([A-Za-z][\w.-]{1,80})/g;function Fe(e){let r=[],d=[],c=new Set,E=new Set;for(let _ of e.matchAll(Ir)){let y=Le(_[1]??""),s=(_[2]??"related_to").trim(),l=Le(_[3]??"");if(!y||!l||y===l)continue;let u=y.toLowerCase(),w=l.toLowerCase();c.has(u)||(c.add(u),r.push({name:y,type:Ie(y),properties:{source:"rule_extracted"}})),c.has(w)||(c.add(w),r.push({name:l,type:Ie(l),properties:{source:"rule_extracted"}}));let M=`${u}|${w}|${s}`;E.has(M)||(E.add(M),d.push({source:y,target:l,relation:s}));}let C=e.split(/\n\s*\n/);for(let _ of C){if(_.trim().length<20)continue;let y=[];for(let s of _.match(/[\p{L}\p{N}][\p{L}\p{N}_.-]{2,80}/gu)??[]){let l=Le(s);if(!l)continue;let u=l.toLowerCase();c.has(u)&&(y.some(w=>w.key===u)||y.push({key:u,name:l}));}for(let s=0;s<y.length;s++)for(let l=s+1;l<y.length;l++){let u=y[s],w=y[l];if(!u||!w||u.key===w.key)continue;let M=Ie(u.name),x=Ie(w.name),j="related_to";M==="document"&&x==="object"?j="defines":M==="object"&&x==="document"?j="referenced_in":M==="process"&&x==="object"?j="uses":M==="object"&&x==="process"?j="used_by":M==="concept"&&(j="relates_to");let h=`${u.key}|${w.key}|${j}`;E.has(h)||(E.add(h),d.push({source:u.name,target:w.name,relation:j}));}}let P=e.match(/[\p{L}\p{N}][\p{L}\p{N}_.-]{1,80}/gu)??[];for(let _ of P){let y=Le(_);if(!y)continue;let s=y.toLowerCase();c.has(s)||(c.add(s),r.push({name:y,type:Ie(y),properties:{source:"keyword_extracted"}}));}return {summary:"",entities:r,relations:d}}function ze(e,r,d,c={}){let{maxContentLength:E=2e3,maxChunks:C=5,includeSummary:P=true}=c,_=r.map(u=>`- ${u.type}: ${u.rule}`).join(`
|
|
1
|
+
'use strict';var chunkUIFIYRZK_cjs=require('./chunks/chunk-UIFIYRZK.cjs'),chunkKFESJR3T_cjs=require('./chunks/chunk-KFESJR3T.cjs'),k=require('zod'),tt=require('os'),Be=require('path'),_t=require('fuzzysort'),remeda=require('remeda'),ai=require('ai'),utils=require('@easbot/utils'),bt=require('fs/promises'),fs=require('fs'),http=require('http'),types=require('@easbot/types');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var k__default=/*#__PURE__*/_interopDefault(k);var tt__default=/*#__PURE__*/_interopDefault(tt);var Be__default=/*#__PURE__*/_interopDefault(Be);var _t__default=/*#__PURE__*/_interopDefault(_t);var bt__default=/*#__PURE__*/_interopDefault(bt);var We=["openai","anthropic","google","deepseek","alibaba","alibaba-coding-plan","alibaba-token-plan-cn","minimax","minimax-cn","minimax-coding-plan","minimax-cn-coding-plan","nvidia","easbot-local","ollama"],Ne={ollama:{id:"ollama",name:"ollama",npm:"@easbot/ollama-sdk",env:["OLLAMA_API_KEY"],models:{"qwen3.5:0.8b":Se("qwen3.5:0.8b"),"qwen3:0.6b":Se("qwen3:0.6b"),"gemma3:1b":Se("gemma3:1b")}},"easbot-local":{id:"easbot-local",name:"easbot-local",npm:"@easbot/local-model-sdk",env:[],models:{"bge-base-zh-v1.5":Se("bge-base-zh-v1.5"),"rerank-proxy":Se("rerank-proxy")}}},Gt={openai:"OpenAI",anthropic:"Anthropic",google:"Google",deepseek:"DeepSeek",alibaba:"Alibaba Cloud","alibaba-coding-plan":"Alibaba Coding Plan","alibaba-token-plan-cn":"Alibaba Token Plan (CN)",minimax:"MiniMax","minimax-cn":"MiniMax (CN)","minimax-coding-plan":"MiniMax Coding Plan","minimax-cn-coding-plan":"MiniMax Coding Plan (CN)",nvidia:"NVIDIA"};function Se(e){return {id:e,name:e,release_date:"2026-07-01",attachment:false,reasoning:false,temperature:true,tool_call:false,limit:{context:2e5,output:8192},options:{}}}var ht=utils.Log.create({service:"llm:interfaces"});exports.Flag=void 0;(w=>{function e(M){let x=process.env[M]?.toLowerCase();return x==="true"||x==="1"}function r(M,x){let j=process.env[M];if(j===void 0)return x;let h=Number(j);return Number.isNaN(h)?x:h}w.EASBOT_CONFIG=process.env.EASBOT_CONFIG,w.EASBOT_CONFIG_CONTENT=process.env.EASBOT_CONFIG_CONTENT,w.EASBOT_MODELS_FETCH=e("EASBOT_MODELS_FETCH"),w.EASBOT_MODELS_URL=process.env.EASBOT_MODELS_URL,w.EASBOT_MODELS_PATH=process.env.EASBOT_MODELS_PATH,w.EASBOT_OUTPUT_TOKEN_MAX=r("EASBOT_OUTPUT_TOKEN_MAX",32e3),w.EASBOT_ENABLE_EXPERIMENTAL_MODELS=e("EASBOT_ENABLE_EXPERIMENTAL_MODELS"),w.EASBOT_DEFAULT_MODEL=process.env.EASBOT_DEFAULT_MODEL;})(exports.Flag||(exports.Flag={}));var De;function Je(e){De=e,e?ht.debug("adapter registry set",{hasConfig:!!e.config,hasInstance:!!e.instance,hasGlobal:!!e.global,hasInstallation:!!e.installation}):ht.debug("adapter registry cleared");}function Ft(){return De}function He(){return De!==void 0}function je(e,r){let d=De?.[e];if(!d)throw new Error(`[LLM] adapter '${e}' (${r}) not registered. Call setAdapterRegistry({ ${e}: ... }) before using LLM.`);return d}function Xe(){return je("config","IConfigProvider")}function Ye(){return je("instance","IInstanceProvider")}function Me(){return je("global","IGlobalPathProvider")}function Te(){return je("installation","IInstallationProvider")}function zt(e){let r=process.env[e]?.toLowerCase();return r==="true"||r==="1"}function Kt(e,r){let d=process.env[e];if(d===void 0)return r;let c=Number(d);return Number.isFinite(c)?c:r}function V(e){return process.env[e]}exports.ModelsDev=void 0;(s=>{let e=utils.Log.create({service:"models.dev"});function r(){return Be__default.default.join(Me().cache,"models.json")}s.Model=k__default.default.object({id:k__default.default.string(),name:k__default.default.string(),family:k__default.default.string().optional(),release_date:k__default.default.string(),attachment:k__default.default.boolean(),reasoning:k__default.default.boolean(),temperature:k__default.default.boolean(),tool_call:k__default.default.boolean(),interleaved:k__default.default.union([k__default.default.literal(true),k__default.default.object({field:k__default.default.enum(["reasoning_content","reasoning_details"])}).strict()]).optional(),cost:k__default.default.object({input:k__default.default.number(),output:k__default.default.number(),cache_read:k__default.default.number().optional(),cache_write:k__default.default.number().optional(),context_over_200k:k__default.default.object({input:k__default.default.number(),output:k__default.default.number(),cache_read:k__default.default.number().optional(),cache_write:k__default.default.number().optional()}).optional()}).optional(),limit:k__default.default.object({context:k__default.default.number(),input:k__default.default.number().optional(),output:k__default.default.number()}),modalities:k__default.default.object({input:k__default.default.array(k__default.default.enum(["text","audio","image","video","pdf"])),output:k__default.default.array(k__default.default.enum(["text","audio","image","video","pdf"]))}).optional(),experimental:k__default.default.boolean().optional(),status:k__default.default.enum(["alpha","beta","deprecated"]).optional(),options:k__default.default.record(k__default.default.string(),k__default.default.any()),headers:k__default.default.record(k__default.default.string(),k__default.default.string()).optional(),provider:k__default.default.object({npm:k__default.default.string()}).optional(),variants:k__default.default.record(k__default.default.string(),k__default.default.record(k__default.default.string(),k__default.default.any())).optional()}),s.Provider=k__default.default.object({api:k__default.default.string().optional(),name:k__default.default.string(),env:k__default.default.array(k__default.default.string()),id:k__default.default.string(),npm:k__default.default.string().optional(),models:k__default.default.record(k__default.default.string(),s.Model)});function E(){return exports.Flag.EASBOT_MODELS_URL||"https://models.dev/api.json"}s.Data=utils.lazy(async()=>{let l=exports.Flag.EASBOT_MODELS_PATH??r(),u=await bt__default.default.readFile(l,"utf-8").then(x=>JSON.parse(x)).catch(()=>{});if(u)return P(u);let w=await import('./chunks/models-snapshot-L4WLMITS.cjs').then(x=>x.snapshot).catch(()=>{});if(w)return P(w);if(!exports.Flag.EASBOT_MODELS_FETCH)return P({});let M=await utils.Fetch.get(E());return P(M.data??{})});function P(l){return Object.keys(Ne).length===0?l:remeda.mergeDeep(l,Ne)}async function _(){return await(0, s.Data)()}s.get=_;async function y(){try{let l=await utils.Fetch.get(E(),{headers:{"User-Agent":`EasBot/${Te().getVersion()}`},responseType:"text"});l.ok&&(await bt__default.default.writeFile(r(),l.data),s.Data.reset(),e.info("Models from models.dev refreshed successfully"));}catch(l){e.warn("Failed to refresh models from models.dev, using cached or snapshot data",{error:l instanceof Error?l.message:String(l),url:E()});}}s.refresh=y;})(exports.ModelsDev||(exports.ModelsDev={}));function Ht(){exports.Flag.EASBOT_MODELS_FETCH&&exports.ModelsDev.refresh();}var Et=k__default.default.object({type:k__default.default.union([k__default.default.literal("oauth"),k__default.default.literal("api")]),label:k__default.default.string()}).meta({ref:"ProviderAuthMethod"}),Ze=exports.ModelsDev.Provider.partial().extend({whitelist:k__default.default.array(k__default.default.string()).optional(),blacklist:k__default.default.array(k__default.default.string()).optional(),models:k__default.default.record(k__default.default.string(),exports.ModelsDev.Model.partial().extend({variants:k__default.default.record(k__default.default.string(),k__default.default.object({disabled:k__default.default.boolean().optional().describe("Disable this variant for the model")}).catchall(k__default.default.any())).optional().describe("Variant-specific configuration")})).optional(),options:k__default.default.object({apiKey:k__default.default.string().optional(),baseURL:k__default.default.string().optional(),enterpriseUrl:k__default.default.string().optional().describe("GitHub Enterprise URL for copilot authentication"),setCacheKey:k__default.default.boolean().optional().describe("Enable promptCacheKey for this provider (default false)"),timeout:k__default.default.union([k__default.default.number().int().positive().describe("Timeout in milliseconds for requests to this provider. Default is 300000 (5 minutes). Set to false to disable timeout."),k__default.default.literal(false).describe("Disable timeout for this provider entirely.")]).optional().describe("Timeout in milliseconds for requests to this provider. Default is 300000 (5 minutes). Set to false to disable timeout.")}).catchall(k__default.default.any()).optional()}).strict().meta({ref:"ProviderConfig"}),$e=k__default.default.object({provider:k__default.default.record(k__default.default.string(),Ze).optional().describe("Custom provider configurations and model overrides"),disabled_providers:k__default.default.array(k__default.default.string()).optional().describe("Disable providers that are loaded automatically"),enabled_providers:k__default.default.array(k__default.default.string()).optional().describe("When set, ONLY these providers will be enabled. All other providers will be ignored"),model:k__default.default.string().optional().describe("Model to use in the format of provider/model, eg anthropic/claude-2"),small_model:k__default.default.string().optional().describe("Small model to use for tasks like title generation in the format of provider/model"),embedding_model:k__default.default.string().optional().describe("Embedding model, defaults to easbot-local/bge-base-zh-v1.5"),graph_model:k__default.default.string().optional().describe("Graph model for entity and relation extraction, defaults to easbot-local/qwen2.5-7b-instruct"),rerank_model:k__default.default.string().optional().describe("Rerank model for search result reranking, defaults to easbot-local/qwen2.5-7b-instruct")}).meta({ref:"LLMConfig"});var ve=utils.Log.create({service:"llm:config:loader"}),Qe=null;async function et(e){try{if(!fs.existsSync(e))return null;let r=await bt__default.default.readFile(e,"utf-8");r=r.replace(/\{env:([^}]+)\}/g,(P,_)=>{let y=process.env[_];return y===void 0?(ve.debug("Environment variable not found",{varName:_,file:e}),""):y});let d=r,c=!1,E=!1,C=[];for(let P=0;P<r.length;P++){let _=r[P];if(E){C.push(_),E=!1;continue}if(_==="\\"){C.push(_),E=!0;continue}if(_==='"'){c=!c,C.push(_);continue}if(!c&&_==="/"&&r[P+1]==="/"){for(;P<r.length&&r[P]!==`
|
|
2
|
+
`&&r[P]!=="\r";)P++;continue}if(!c&&_==="/"&&r[P+1]==="*"){for(P+=2;P<r.length-1;){if(r[P]==="*"&&r[P+1]==="/"){P+=2;break}P++;}continue}C.push(_);}return d=C.join("").trim(),d?JSON.parse(d):null}catch(r){return ve.warn("Failed to load JSON file",{file:e,error:r instanceof Error?r.message:String(r)}),null}}function er(e){return e.reduce((r,d)=>d?remeda.mergeDeep(r,d):r,{})}function Ge(e){if(!e||typeof e!="object")return {};let r=e,d={};return "provider"in r&&(d.provider=r.provider),"disabled_providers"in r&&(d.disabled_providers=r.disabled_providers),"enabled_providers"in r&&(d.enabled_providers=r.enabled_providers),"model"in r&&(d.model=r.model),"small_model"in r&&(d.small_model=r.small_model),"embedding_model"in r&&(d.embedding_model=r.embedding_model),"graph_model"in r&&(d.graph_model=r.graph_model),"rerank_model"in r&&(d.rerank_model=r.rerank_model),d}async function tr(){let e=Me().config,r=Be__default.default.join(e,"easbot.json");ve.debug("Loading global config",{filePath:r});let d=await et(r);return Ge(d)}async function rr(e){let r=Be__default.default.join(e,".easbot","easbot.json");ve.debug("Loading project config",{filePath:r});let d=await et(r);return Ge(d)}async function nr(){let e=process.env.EASBOT_CONFIG;if(!e)return {};ve.debug("Loading custom config",{filePath:e});try{if(!fs.existsSync(e))throw new Error(`EASBOT_CONFIG file not found: ${e}`);let d=await et(e);if(d===null)throw new Error(`EASBOT_CONFIG file is empty or invalid JSON: ${e}`);return Ge(d)}catch(r){throw ve.error("EASBOT_CONFIG load failed",{filePath:e,error:r instanceof Error?r.message:String(r)}),r}}function or(){let e=process.env.EASBOT_CONFIG_CONTENT;if(!e)return {};ve.debug("Loading inline config",{length:e.length});try{let r=JSON.parse(e);return Ge(r)}catch(r){return ve.warn("Failed to parse EASBOT_CONFIG_CONTENT",{error:r instanceof Error?r.message:String(r)}),{}}}async function ir(){var l=[];try{let e=chunkKFESJR3T_cjs.b(l,ve.time("state"));let r=[];let d=[];let c=await tr();Object.keys(c).length>0&&(d.push(c),r.push(Be__default.default.join(Me().config,"easbot.json")));let E=Ye().getDirectory();let C=await rr(E);Object.keys(C).length>0&&(d.push(C),r.push(Be__default.default.join(E,"easbot.json")));let P=await nr();Object.keys(P).length>0&&(d.push(P),process.env.EASBOT_CONFIG&&r.push(process.env.EASBOT_CONFIG));let _=or();Object.keys(_).length>0&&d.push(_);let y=er(d);let s=$e.safeParse(y);s.success?y=s.data:(ve.warn("Config validation failed, using raw merged config",{issues:s.error.issues.slice(0,5)}),y=remeda.pickBy(y,x=>x!==void 0));Qe=y;return {config:y,directories:r}}catch(u){var w=u,M=true;}finally{chunkKFESJR3T_cjs.c(l,w,M);}}var kt=sr(ir);async function ar(){return kt()}function sr(e){let r,d=0,c=()=>{if(r)return r;let E=d;return r=e().then(C=>E!==d?(r=void 0,c()):C),r};return c.reset=()=>{d++,r=void 0;},c}exports.Config=void 0;(C=>{async function e(){if(He())try{return await Xe().getInfo()}catch(_){ve.debug("IConfigProvider failed, falling back to local loader",{error:_ instanceof Error?_.message:String(_)});}let{config:P}=await ar();return P}C.get=e;async function r(P){return (await e()).provider?.[P]}C.provider=r;async function d(){let P=await e();return (P.enabled_providers??[]).filter(_=>!(P.disabled_providers??[]).includes(_))}C.enabledProviders=d;function c(){return Qe!==null}C.isLoaded=c;function E(){kt.reset(),Qe=null;}C.clearCache=E;})(exports.Config||(exports.Config={}));utils.Log.create({service:"provider-transform"});function lr(e){if(e.startsWith("image/"))return "image";if(e.startsWith("audio/"))return "audio";if(e.startsWith("video/"))return "video";if(e==="application/pdf")return "pdf"}exports.ProviderTransform=void 0;(b=>{function e(){return exports.Flag.EASBOT_OUTPUT_TOKEN_MAX}b.getOutputTokenMax=e;function r(t){switch(t){case "@ai-sdk/github-copilot":return "copilot";case "@ai-sdk/openai":case "@ai-sdk/azure":return "openai";case "@ai-sdk/amazon-bedrock":return "bedrock";case "@ai-sdk/anthropic":case "@ai-sdk/google-vertex/anthropic":return "anthropic";case "@ai-sdk/google-vertex":case "@ai-sdk/google":return "google";case "@ai-sdk/gateway":return "gateway";case "@openrouter/ai-sdk-provider":return "openrouter";case "@easbot/ollama-sdk":return "ollama";case "@easbot/local-model-sdk":return "easbot-local"}}function d(t,i,m){if(i.api.npm==="@ai-sdk/anthropic"&&(t=t.map(g=>{if(typeof g.content=="string")return g.content===""?void 0:g;if(!Array.isArray(g.content))return g;let a=g.content.filter(v=>v.type==="text"||v.type==="reasoning"?v.text!=="":true);if(a.length!==0)return {...g,content:a}}).filter(g=>g!==void 0)),i.api.id.includes("claude"))return t.map(g=>((g.role==="assistant"||g.role==="tool")&&Array.isArray(g.content)&&(g.content=g.content.map(a=>(a.type==="tool-call"||a.type==="tool-result")&&"toolCallId"in a?{...a,toolCallId:a.toolCallId.replace(/[^a-zA-Z0-9_-]/g,"_")}:a)),g));if(i.providerId==="mistral"||i.api.id.toLowerCase().includes("mistral")||i.api.id.toLocaleLowerCase().includes("devstral")){let g=[];for(let a=0;a<t.length;a++){let v=t[a];if(!v)continue;let T=t[a+1];(v.role==="assistant"||v.role==="tool")&&Array.isArray(v.content)&&(v.content=v.content.map(U=>{if((U.type==="tool-call"||U.type==="tool-result")&&"toolCallId"in U){let W=U.toolCallId.replace(/[^a-zA-Z0-9]/g,"").substring(0,9).padEnd(9,"0");return {...U,toolCallId:W}}return U})),g.push(v),v.role==="tool"&&T?.role==="user"&&g.push({role:"assistant",content:[{type:"text",text:"Done."}]});}return g}if(typeof i.capabilities.interleaved=="object"&&i.capabilities.interleaved.field){let g=i.capabilities.interleaved.field;return t.map(a=>{if(a.role==="assistant"&&Array.isArray(a.content)){let T=a.content.filter(W=>W.type==="reasoning").map(W=>W.text).join(""),U=a.content.filter(W=>W.type!=="reasoning");return T?{...a,content:U,providerOptions:{...a.providerOptions,openaiCompatible:{...a.providerOptions?.openaiCompatible,[g]:T}}}:{...a,content:U}}return a})}return t}function c(t,i){let m=t.filter(v=>v.role==="system").slice(0,2),g=t.filter(v=>v.role!=="system").slice(-2),a={anthropic:{cacheControl:{type:"ephemeral"}},openrouter:{cacheControl:{type:"ephemeral"}},bedrock:{cachePoint:{type:"default"}},openaiCompatible:{cache_control:{type:"ephemeral"}},copilot:{copilot_cache_control:{type:"ephemeral"}}};for(let v of remeda.unique([...m,...g])){if(!(i==="anthropic"||i.includes("bedrock"))&&Array.isArray(v.content)&&v.content.length>0){let W=v.content[v.content.length-1];if(W&&typeof W=="object"){W.providerOptions=remeda.mergeDeep(W.providerOptions??{},a);continue}}v.providerOptions=remeda.mergeDeep(v.providerOptions??{},a);}return t}function E(t,i){return t.map(m=>{if(m.role!=="user"||!Array.isArray(m.content))return m;let g=m.content.map(a=>{if(a.type!=="file"&&a.type!=="image")return a;if(a.type==="image"){let ne=a.image.toString();if(ne.startsWith("data:")){let pe=ne.match(/^data:([^;]+);base64,(.*)$/);if(pe&&(!pe[2]||pe[2].length===0))return {type:"text",text:"ERROR: Image file is empty or corrupted. Please provide a valid image."}}}let v=a.type==="image"?a.image?.toString()?.split(";")?.[0]?.replace("data:",""):a.mediaType,T=a.type==="file"?a.filename:void 0,U=lr(v??"");return !U||i.capabilities.input[U]?a:{type:"text",text:`ERROR: Cannot read ${T?`"${T}"`:U} (this model does not support ${U} input). Inform the user.`}});return {...m,content:g}})}function C(t,i,m){t=E(t,i),t=d(t,i),(i.providerId==="anthropic"||i.api.id.includes("anthropic")||i.api.id.includes("claude")||i.id.includes("anthropic")||i.id.includes("claude")||i.api.npm==="@ai-sdk/anthropic")&&(t=c(t,i.providerId));let g=r(i.api.npm);if(g&&g!==i.providerId&&i.api.npm!=="@ai-sdk/azure"){let a=v=>{if(!v||!(i.providerId in v))return v;let T={...v};return T[g]=T[i.providerId],delete T[i.providerId],T};t=t.map(v=>Array.isArray(v.content)?{...v,providerOptions:a(v.providerOptions),content:v.content.map(T=>({...T,providerOptions:a(T.providerOptions)}))}:{...v,providerOptions:a(v.providerOptions)});}return t}b.message=C;function P(t){let i=t.id.toLowerCase();if(i.includes("qwen"))return .55;if(!i.includes("claude")){if(i.includes("gemini")||i.includes("glm-4.6")||i.includes("glm-4.7")||i.includes("minimax-m2"))return 1;if(i.includes("kimi-k2"))return i.includes("thinking")||i.includes("k2.")||i.includes("k2p")?1:.6}}b.temperature=P;function _(t){let i=t.id.toLowerCase();if(i.includes("qwen"))return 1;if(i.includes("minimax-m2")||i.includes("kimi-k2.5")||i.includes("kimi-k2p5")||i.includes("gemini"))return .95}b.topP=_;function y(t){let i=t.id.toLowerCase();if(i.includes("minimax-m2"))return i.includes("m2.1")?40:20;if(i.includes("gemini"))return 64}b.topK=y;let s=["low","medium","high"],l=["none","minimal",...s,"xhigh"];function u(t){if(!t.capabilities.reasoning)return {};let i=t.id.toLowerCase();if(i.includes("deepseek")||i.includes("minimax")||i.includes("glm")||i.includes("mistral")||i.includes("kimi")||i.includes("k2p5"))return {};if(i.includes("grok")&&i.includes("grok-3-mini"))return t.api.npm==="@openrouter/ai-sdk-provider"?{low:{reasoning:{effort:"low"}},high:{reasoning:{effort:"high"}}}:{low:{reasoningEffort:"low"},high:{reasoningEffort:"high"}};if(i.includes("grok"))return {};switch(t.api.npm){case "@openrouter/ai-sdk-provider":return !t.id.includes("gpt")&&!t.id.includes("gemini-3")?{}:Object.fromEntries(l.map(m=>[m,{reasoning:{effort:m}}]));case "@ai-sdk/gateway":return Object.fromEntries(l.map(m=>[m,{reasoningEffort:m}]));case "@ai-sdk/github-copilot":{if(t.id.includes("gemini"))return {};if(t.id.includes("claude"))return {thinking:{thinking_budget:4e3}};let m=utils.iife(()=>i.includes("5.1-codex-max")||i.includes("5.2")||i.includes("5.3")?[...s,"xhigh"]:s);return Object.fromEntries(m.map(g=>[g,{reasoningEffort:g,reasoningSummary:"auto",include:["reasoning.encrypted_content"]}]))}case "@ai-sdk/cerebras":case "@ai-sdk/togetherai":case "@ai-sdk/xai":case "@ai-sdk/deepinfra":case "@ai-sdk/openai-compatible":return Object.fromEntries(s.map(m=>[m,{reasoningEffort:m}]));case "@ai-sdk/azure":{if(i==="o1-mini")return {};let m=["low","medium","high"];return (i.includes("gpt-5-")||i==="gpt-5")&&m.unshift("minimal"),Object.fromEntries(m.map(g=>[g,{reasoningEffort:g,reasoningSummary:"auto",include:["reasoning.encrypted_content"]}]))}case "@ai-sdk/openai":{if(i==="gpt-5-pro")return {};let m=utils.iife(()=>{if(i.includes("codex"))return i.includes("5.2")||i.includes("5.3")?[...s,"xhigh"]:s;let g=[...s];return (i.includes("gpt-5-")||i==="gpt-5")&&g.unshift("minimal"),t.release_date>="2025-11-13"&&g.unshift("none"),t.release_date>="2025-12-04"&&g.push("xhigh"),g});return Object.fromEntries(m.map(g=>[g,{reasoningEffort:g,reasoningSummary:"auto",include:["reasoning.encrypted_content"]}]))}case "@ai-sdk/anthropic":case "@ai-sdk/google-vertex/anthropic":return {high:{thinking:{type:"enabled",budgetTokens:Math.min(16e3,Math.floor(t.limit.output/2-1))}},max:{thinking:{type:"enabled",budgetTokens:Math.min(31999,t.limit.output-1)}}};case "@ai-sdk/amazon-bedrock":return t.api.id.includes("anthropic")?{high:{reasoningConfig:{type:"enabled",budgetTokens:16e3}},max:{reasoningConfig:{type:"enabled",budgetTokens:31999}}}:Object.fromEntries(s.map(m=>[m,{reasoningConfig:{type:"enabled",maxReasoningEffort:m}}]));case "@ai-sdk/google-vertex":case "@ai-sdk/google":return i.includes("2.5")?{high:{thinkingConfig:{includeThoughts:true,thinkingBudget:16e3}},max:{thinkingConfig:{includeThoughts:true,thinkingBudget:24576}}}:Object.fromEntries(["low","high"].map(m=>[m,{includeThoughts:true,thinkingLevel:m}]));case "@ai-sdk/mistral":return {};case "@ai-sdk/cohere":return {};case "@ai-sdk/groq":{let m=["none",...s];return Object.fromEntries(m.map(g=>[g,{includeThoughts:true,thinkingLevel:g}]))}case "@ai-sdk/perplexity":return {};case "@mymediset/sap-ai-provider":case "@jerome-benoit/sap-ai-provider-v2":return t.api.id.includes("anthropic")?{high:{thinking:{type:"enabled",budgetTokens:16e3}},max:{thinking:{type:"enabled",budgetTokens:31999}}}:Object.fromEntries(s.map(m=>[m,{reasoningEffort:m}]))}return {}}b.variants=u;function w(t){let i={};(t.model.providerId==="openai"||t.model.api.npm==="@ai-sdk/openai"||t.model.api.npm==="@ai-sdk/github-copilot")&&(i.store=false),t.model.api.npm==="@openrouter/ai-sdk-provider"&&(i.usage={include:true},t.model.api.id.includes("gemini-3")&&(i.reasoning={effort:"high"})),(t.model.providerId==="baseten"||t.model.providerId==="easbot"&&["kimi-k2-thinking","glm-4.6"].includes(t.model.api.id))&&(i.chat_template_args={enable_thinking:true}),["zai","zhipuai"].includes(t.model.providerId)&&t.model.api.npm==="@ai-sdk/openai-compatible"&&(i.thinking={type:"enabled",clear_thinking:false}),(t.model.providerId==="openai"||t.providerOptions?.setCacheKey)&&(i.promptCacheKey=t.sessionId),(t.model.api.npm==="@ai-sdk/google"||t.model.api.npm==="@ai-sdk/google-vertex")&&(i.thinkingConfig={includeThoughts:true},t.model.api.id.includes("gemini-3")&&(i.thinkingConfig.thinkingLevel="high"));let m=t.model.api.id.toLowerCase();return (t.model.api.npm==="@ai-sdk/anthropic"||t.model.api.npm==="@ai-sdk/google-vertex/anthropic")&&(m.includes("k2p5")||m.includes("kimi-k2.5")||m.includes("kimi-k2p5"))&&(i.thinking={type:"enabled",budgetTokens:Math.min(16e3,Math.floor(t.model.limit.output/2-1))}),t.model.providerId==="alibaba-cn"&&t.model.capabilities.reasoning&&t.model.api.npm==="@ai-sdk/openai-compatible"&&!m.includes("kimi-k2-thinking")&&(i.enable_thinking=true),t.model.api.id.includes("gpt-5")&&!t.model.api.id.includes("gpt-5-chat")&&(t.model.api.id.includes("gpt-5-pro")||(i.reasoningEffort="medium",i.reasoningSummary="auto"),t.model.api.id.includes("gpt-5.")&&!t.model.api.id.includes("codex")&&!t.model.api.id.includes("-chat")&&t.model.providerId!=="azure"&&(i.textVerbosity="low"),t.model.providerId.startsWith("easbot")&&(i.promptCacheKey=t.sessionId,i.include=["reasoning.encrypted_content"],i.reasoningSummary="auto")),t.model.providerId==="venice"&&(i.promptCacheKey=t.sessionId),i}b.options=w;function M(t){return t.providerId==="openai"||t.api.npm==="@ai-sdk/openai"||t.api.npm==="@ai-sdk/github-copilot"?t.api.id.includes("gpt-5")?t.api.id.includes("5.")?{store:false,reasoningEffort:"low"}:{store:false,reasoningEffort:"minimal"}:{store:false}:t.providerId==="google"?t.api.id.includes("gemini-3")?{thinkingConfig:{thinkingLevel:"minimal"}}:{thinkingConfig:{thinkingBudget:0}}:t.providerId==="openrouter"?t.api.id.includes("google")?{reasoning:{enabled:false}}:{reasoningEffort:"minimal"}:{}}b.smallOptions=M;let x={amazon:"bedrock"};function j(t,i){if(t.api.npm==="@ai-sdk/gateway"){let g=t.api.id.indexOf("/"),a=g>0?t.api.id.slice(0,g):void 0,v=a?x[a]??a:void 0,T=i.gateway,U=Object.fromEntries(Object.entries(i).filter(([pe])=>pe!=="gateway")),W=Object.keys(U).length>0,ne={};return T!==void 0&&(ne.gateway=T),W&&(v?ne[v]=U:T&&typeof T=="object"&&!Array.isArray(T)?ne.gateway={...T,...U}:ne.gateway=U),ne}return {[r(t.api.npm)??t.providerId]:i}}b.providerOptions=j;function h(t){let i=e(),m=t.limit.output;return typeof m!="number"||m<=0?i:Math.min(m,i)}b.maxOutputTokens=h;function p(t,i){if(t.providerId==="google"||t.api.id.includes("gemini")){let m=g=>{if(g===null||typeof g!="object")return g;if(Array.isArray(g))return g.map(m);let a={};for(let[v,T]of Object.entries(g))v==="enum"&&Array.isArray(T)?(a[v]=T.map(U=>String(U)),(a.type==="integer"||a.type==="number")&&(a.type="string")):typeof T=="object"&&T!==null?a[v]=m(T):a[v]=T;return a.type==="object"&&a.properties&&Array.isArray(a.required)&&(a.required=a.required.filter(v=>v in a.properties)),a.type==="array"&&(a.items==null&&(a.items={}),typeof a.items=="object"&&!Array.isArray(a.items)&&!a.items.type&&(a.items.type="string")),a.type&&a.type!=="object"&&(delete a.properties,delete a.required),a};i=m(i);}return i}b.schema=p;})(exports.ProviderTransform||(exports.ProviderTransform={}));function hr(e){let r,d=0,c=()=>{if(r)return r;let E=d;return r=e().then(C=>E!==d?(r=void 0,c()):C),r};return c.reset=()=>{d++,r=void 0;},c}var br={"@ai-sdk/amazon-bedrock":()=>import('@ai-sdk/amazon-bedrock').then(e=>e.createAmazonBedrock),"@ai-sdk/anthropic":()=>import('@ai-sdk/anthropic').then(e=>e.createAnthropic),"@ai-sdk/azure":()=>import('@ai-sdk/azure').then(e=>e.createAzure),"@ai-sdk/google":()=>import('@ai-sdk/google').then(e=>e.createGoogleGenerativeAI),"@ai-sdk/google-vertex":()=>import('@ai-sdk/google-vertex').then(e=>e.createVertex),"@ai-sdk/google-vertex/anthropic":()=>import('@ai-sdk/google-vertex/anthropic').then(e=>e.createVertexAnthropic),"@ai-sdk/openai":()=>import('@ai-sdk/openai').then(e=>e.createOpenAI),"@ai-sdk/openai-compatible":()=>import('@ai-sdk/openai-compatible').then(e=>e.createOpenAICompatible),"@openrouter/ai-sdk-provider":()=>import('@openrouter/ai-sdk-provider').then(e=>e.createOpenRouter),"@ai-sdk/xai":()=>import('@ai-sdk/xai').then(e=>e.createXai),"@ai-sdk/mistral":()=>import('@ai-sdk/mistral').then(e=>e.createMistral),"@ai-sdk/groq":()=>import('@ai-sdk/groq').then(e=>e.createGroq),"@ai-sdk/deepinfra":()=>import('@ai-sdk/deepinfra').then(e=>e.createDeepInfra),"@ai-sdk/cerebras":()=>import('@ai-sdk/cerebras').then(e=>e.createCerebras),"@ai-sdk/cohere":()=>import('@ai-sdk/cohere').then(e=>e.createCohere),"@ai-sdk/gateway":()=>import('@ai-sdk/gateway').then(e=>e.createGateway),"@ai-sdk/togetherai":()=>import('@ai-sdk/togetherai').then(e=>e.createTogetherAI),"@ai-sdk/perplexity":()=>import('@ai-sdk/perplexity').then(e=>e.createPerplexity),"@ai-sdk/vercel":()=>import('@ai-sdk/vercel').then(e=>e.createVercel),"@ai-sdk/alibaba":()=>import('@ai-sdk/alibaba').then(e=>e.createAlibaba),"@ai-sdk/deepseek":()=>import('@ai-sdk/deepseek').then(e=>e.createDeepSeek),"gitlab-ai-provider":()=>import('gitlab-ai-provider').then(e=>e.createGitLab),"@ai-sdk/github-copilot":()=>import('./chunks/copilot-R22QW5MH.cjs').then(e=>e.createOpenaiCompatible),"@easbot/ollama-sdk":()=>import('@easbot/ollama-sdk').then(e=>e.createOllama),"@easbot/local-model-sdk":()=>import('@easbot/local-model-sdk').then(e=>e.createLocal)};exports.Provider=void 0;(ee=>{let e=[];function r(n){let o=e.findIndex(f=>f.providerId===n.providerId);o>=0?e[o]=n:e.push(n);}ee.registerPluginAuthLoader=r;function d(){e.length=0;}ee.clearPluginAuthLoaders=d,ee.DEFAULT_CONTEXT_LIMIT=2e5,ee.DEFAULT_INPUT_LIMIT_RATIO=.9,ee.DEFAULT_OUTPUT_LIMIT=8192;function P(n=ee.DEFAULT_CONTEXT_LIMIT){return Math.floor(n*ee.DEFAULT_INPUT_LIMIT_RATIO)}ee.getDefaultInputLimit=P;let _=utils.Log.create({service:"provider"});function y(n){let o=/^gpt-(\d+)/.exec(n);return o?Number(o[1])>=5:false}function s(n){return y(n)&&!n.startsWith("gpt-5-mini")}let l={async anthropic(){return {autoload:false,options:{headers:{"anthropic-beta":"claude-code-20250219,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14"}}}},async opencode(n){let o=await(async()=>!!(n.env.some(I=>V(I))||await utils.Auth.get(n.id)||(await exports.Config.provider("opencode"))?.options?.apiKey))();if(!o)for(let[f,I]of Object.entries(n.models))I.cost.input!==0&&delete n.models[f];return {autoload:Object.keys(n.models).length>0,options:o?{}:{apiKey:"public"}}},openai:async()=>{let n=V("OPENAI_BASE_URL");return {autoload:false,async getModel(o,f,I){return o.responses(f)},options:n?{baseURL:n}:{}}},"github-copilot":async()=>({autoload:false,async getModel(n,o,f){return n.responses===void 0&&n.chat===void 0?n.languageModel(o):s(o)?n.responses(o):n.chat(o)},options:{}}),"github-copilot-enterprise":async()=>({autoload:false,async getModel(n,o,f){return n.responses===void 0&&n.chat===void 0?n.languageModel(o):s(o)?n.responses(o):n.chat(o)},options:{}}),azure:async()=>({autoload:false,async getModel(n,o,f){return f?.useCompletionUrls?n.chat(o):n.responses(o)},options:{}}),"azure-cognitive-services":async()=>{let n=V("AZURE_COGNITIVE_SERVICES_RESOURCE_NAME");return {autoload:false,async getModel(o,f,I){return I?.useCompletionUrls?o.chat(f):o.responses(f)},options:{baseURL:n?`https://${n}.cognitiveservices.azure.com/openai`:void 0}}},"amazon-bedrock":async()=>{let n=await exports.Config.provider("amazon-bedrock"),o=await utils.Auth.get("amazon-bedrock"),f=n?.options?.region,I=V("AWS_REGION"),S=f??I??"us-east-1",O=n?.options?.profile,B=V("AWS_PROFILE"),q=O??B,R=V("AWS_ACCESS_KEY_ID"),J=utils.iife(()=>{let Q=process.env.AWS_BEARER_TOKEN_BEDROCK;if(Q)return Q;if(o?.type==="api")return process.env.AWS_BEARER_TOKEN_BEDROCK=o.key,o.key}),oe=V("AWS_WEB_IDENTITY_TOKEN_FILE"),fe=!!(process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI||process.env.AWS_CONTAINER_CREDENTIALS_FULL_URI);if(!q&&!R&&!J&&!oe&&!fe)return {autoload:false};let te={region:S};if(!J){let Q=await utils.Shell.install("@aws-sdk/credential-providers"),{pathToFileURL:Z}=await import('url'),xe=Be__default.default.join(Q,"dist-cjs","index.js"),{fromNodeProviderChain:Re}=await import(Z(xe).href),be=q?{profile:q}:{};te.credentialProvider=Re(be);}let ue=n?.options?.endpoint??n?.options?.baseURL;return ue&&(te.baseURL=ue),{autoload:true,options:te,async getModel(Q,Z,xe){if(["global.","us.","eu.","jp.","apac.","au."].some(L=>Z.startsWith(L)))return Q.languageModel(Z);let be=xe?.region??S,re=be.split("-")[0];switch(re){case "us":{let L=["nova-micro","nova-lite","nova-pro","nova-premier","nova-2","claude","deepseek"].some(G=>Z.includes(G)),N=be.startsWith("us-gov");L&&!N&&(Z=`${re}.${Z}`);break}case "eu":{let L=["eu-west-1","eu-west-2","eu-west-3","eu-north-1","eu-central-1","eu-south-1","eu-south-2"].some(G=>be.includes(G)),N=["claude","nova-lite","nova-micro","llama3","pixtral"].some(G=>Z.includes(G));L&&N&&(Z=`${re}.${Z}`);break}case "ap":{let L=["ap-southeast-2","ap-southeast-4"].includes(be),N=be==="ap-northeast-1";L&&["anthropic.claude-sonnet-4-5","anthropic.claude-haiku"].some(G=>Z.includes(G))?(re="au",Z=`${re}.${Z}`):N?["claude","nova-lite","nova-micro","nova-pro"].some(K=>Z.includes(K))&&(re="jp",Z=`${re}.${Z}`):["claude","nova-lite","nova-micro","nova-pro"].some(K=>Z.includes(K))&&(re="apac",Z=`${re}.${Z}`);break}}return Q.languageModel(Z)}}},nvidia:async()=>({autoload:false,options:{headers:{"HTTP-Referer":"https://easbot.cn/","X-Title":"easbot"}}}),openrouter:async()=>({autoload:false,options:{headers:{"HTTP-Referer":"https://easbot.cn/","X-Title":"easbot"}}}),vercel:async()=>({autoload:false,options:{headers:{"http-referer":"https://easbot.cn/","x-title":"easbot"}}}),"google-vertex":async()=>{let n=V("GOOGLE_CLOUD_PROJECT")??V("GCP_PROJECT")??V("GCLOUD_PROJECT"),o=V("GOOGLE_CLOUD_LOCATION")??V("VERTEX_LOCATION")??"us-east5";return !n?{autoload:false}:{autoload:true,vars(I){let S=o==="global"?"aiplatform.googleapis.com":`${o}-aiplatform.googleapis.com`;return {...n&&{GOOGLE_VERTEX_PROJECT:n},GOOGLE_VERTEX_LOCATION:o,GOOGLE_VERTEX_ENDPOINT:S}},options:{project:n,location:o,fetch:async(I,S)=>{let{GoogleAuth:O}=await import('google-auth-library'),R=await(await new O().getApplicationDefault()).credential.getAccessToken(),J=new Headers(S?.headers);return J.set("Authorization",`Bearer ${R.token}`),fetch(I,{...S,headers:J})}},async getModel(I,S){let O=String(S).trim();return I.languageModel(O)}}},"google-vertex-anthropic":async()=>{let n=V("GOOGLE_CLOUD_PROJECT")??V("GCP_PROJECT")??V("GCLOUD_PROJECT"),o=V("GOOGLE_CLOUD_LOCATION")??V("VERTEX_LOCATION")??"global";return !n?{autoload:false}:{autoload:true,options:{project:n,location:o},async getModel(I,S){let O=String(S).trim();return I.languageModel(O)}}},"sap-ai-core":async()=>{let n=await utils.Auth.get("sap-ai-core"),o=utils.iife(()=>{let S=process.env.AICORE_SERVICE_KEY;if(S)return S;if(n?.type==="api")return process.env.AICORE_SERVICE_KEY=n.key,n.key}),f=process.env.AICORE_DEPLOYMENT_ID,I=process.env.AICORE_RESOURCE_GROUP;return {autoload:!!o,options:o?{deploymentId:f,resourceGroup:I}:{},async getModel(S,O){return S(O)}}},zenmux:async()=>({autoload:false,options:{headers:{"HTTP-Referer":"https://easbot.cn/","X-Title":"easbot"}}}),gitlab:async n=>{let o=V("GITLAB_INSTANCE_URL")||"https://gitlab.com",f=await utils.Auth.get(n.id),I=await(async()=>f?.type==="oauth"?f.access:f?.type==="api"?f.key:V("GITLAB_TOKEN"))(),S=await exports.Config.provider("gitlab"),{VERSION:O,createGitLab:B}=await import('gitlab-ai-provider'),q={"User-Agent":`easbot/${Te().getVersion()} gitlab-ai-provider/${O} (${tt__default.default.platform()} ${tt__default.default.release()}; ${tt__default.default.arch()})`,...S?.options?.aiGatewayHeaders||{}};return {autoload:!!I,options:{instanceUrl:o,apiKey:I,aiGatewayHeaders:q,featureFlags:{duo_agent_platform_agentic_chat:true,duo_agent_platform:true,...S?.options?.featureFlags||{}}},async getModel(R,J){return R.agenticChat(J,{aiGatewayHeaders:q,featureFlags:{duo_agent_platform_agentic_chat:true,duo_agent_platform:true,...S?.options?.featureFlags||{}}})}}},"cloudflare-workers-ai":async n=>{let o=V("CLOUDFLARE_ACCOUNT_ID");if(!o)return {autoload:false};let f=await utils.iife(async()=>{let I=V("CLOUDFLARE_API_KEY");if(I)return I;let S=await utils.Auth.get(n.id);if(S?.type==="api")return S.key});return {autoload:!!f,options:{apiKey:f,baseURL:`https://api.cloudflare.com/client/v4/accounts/${o}/ai/v1`},async getModel(I,S){return I.languageModel(S)}}},"cloudflare-ai-gateway":async n=>{let o=V("CLOUDFLARE_ACCOUNT_ID"),f=V("CLOUDFLARE_GATEWAY_ID");if(!o||!f)return {autoload:false};let I=await(async()=>{let R=V("CLOUDFLARE_API_TOKEN")||V("CF_AIG_TOKEN");if(R)return R;let J=await utils.Auth.get(n.id);if(J?.type==="api")return J.key})();if(!I)throw new Error("CLOUDFLARE_API_TOKEN (or CF_AIG_TOKEN) is required for Cloudflare AI Gateway. Set it via environment variable or run `easbot auth cloudflare-ai-gateway`.");let{createAiGateway:S}=await import('ai-gateway-provider'),{createUnified:O}=await import('ai-gateway-provider/providers/unified'),B=S({accountId:o,gateway:f,apiKey:I}),q=O();return {autoload:true,async getModel(R,J,oe){return B(q(J))},options:{}}},cerebras:async()=>({autoload:false,options:{headers:{"X-Cerebras-3rd-Party-Integration":"easbot"}}}),ollama:async()=>({autoload:true,options:{baseURL:V("OLLAMA_BASE_URL")||"http://localhost:11434"},async getModel(o,f,I){return o.languageModel?o.languageModel(f):o(f)}}),"easbot-local":async()=>{let n=V("LOCAL_MODEL_PATH")||Be__default.default.join(Me().cache,"models"),{SUPPORTED_EMBEDDING_MODELS:o}=await import('@easbot/local-model-sdk');return {autoload:true,options:{cacheDir:n,verbose:true},async getModel(f,I,S){return I in o?f.embeddingModel(I,S):I.startsWith("rerank-")?f.rerankingModel?f.rerankingModel(I.slice(6),S):f(I):f.languageModel?f.languageModel(I,S):f(I)}}}};ee.Model=k__default.default.object({id:k__default.default.string(),providerId:k__default.default.string(),api:k__default.default.object({id:k__default.default.string(),url:k__default.default.string(),npm:k__default.default.string()}),name:k__default.default.string(),family:k__default.default.string().optional(),capabilities:k__default.default.object({temperature:k__default.default.boolean(),reasoning:k__default.default.boolean(),attachment:k__default.default.boolean(),toolcall:k__default.default.boolean(),input:k__default.default.object({text:k__default.default.boolean(),audio:k__default.default.boolean(),image:k__default.default.boolean(),video:k__default.default.boolean(),pdf:k__default.default.boolean()}),output:k__default.default.object({text:k__default.default.boolean(),audio:k__default.default.boolean(),image:k__default.default.boolean(),video:k__default.default.boolean(),pdf:k__default.default.boolean()}),interleaved:k__default.default.union([k__default.default.boolean(),k__default.default.object({field:k__default.default.enum(["reasoning_content","reasoning_details"])})])}),cost:k__default.default.object({input:k__default.default.number(),output:k__default.default.number(),cache:k__default.default.object({read:k__default.default.number(),write:k__default.default.number()}),experimentalOver200K:k__default.default.object({input:k__default.default.number(),output:k__default.default.number(),cache:k__default.default.object({read:k__default.default.number(),write:k__default.default.number()})}).optional()}),limit:k__default.default.object({context:k__default.default.number(),input:k__default.default.number().optional(),output:k__default.default.number()}),status:k__default.default.enum(["alpha","beta","deprecated","active"]),options:k__default.default.record(k__default.default.string(),k__default.default.any()),headers:k__default.default.record(k__default.default.string(),k__default.default.string()),release_date:k__default.default.string(),variants:k__default.default.record(k__default.default.string(),k__default.default.record(k__default.default.string(),k__default.default.any())).optional()}).meta({ref:"Model"}),ee.Info=k__default.default.object({id:k__default.default.string(),name:k__default.default.string(),source:k__default.default.enum(["env","config","custom","api"]),env:k__default.default.string().array(),key:k__default.default.string().optional(),options:k__default.default.record(k__default.default.string(),k__default.default.any()),models:k__default.default.record(k__default.default.string(),ee.Model)}).meta({ref:"Provider"});function M(n,o){let f={id:o.id,providerId:n.id,name:o.name,family:o.family,api:{id:o.id,url:n.api,npm:o.provider?.npm??n.npm??"@ai-sdk/openai-compatible"},status:o.status??"active",headers:o.headers??{},options:o.options??{},cost:{input:o.cost?.input??0,output:o.cost?.output??0,cache:{read:o.cost?.cache_read??0,write:o.cost?.cache_write??0},experimentalOver200K:o.cost?.context_over_200k?{cache:{read:o.cost.context_over_200k.cache_read??0,write:o.cost.context_over_200k.cache_write??0},input:o.cost.context_over_200k.input,output:o.cost.context_over_200k.output}:void 0},limit:{context:o.limit.context??ee.DEFAULT_CONTEXT_LIMIT,input:o.limit.input??P(o.limit.context??ee.DEFAULT_CONTEXT_LIMIT),output:o.limit.output??ee.DEFAULT_OUTPUT_LIMIT},capabilities:{temperature:o.temperature,reasoning:o.reasoning,attachment:o.attachment,toolcall:o.tool_call,input:{text:o.modalities?.input?.includes("text")??false,audio:o.modalities?.input?.includes("audio")??false,image:o.modalities?.input?.includes("image")??false,video:o.modalities?.input?.includes("video")??false,pdf:o.modalities?.input?.includes("pdf")??false},output:{text:o.modalities?.output?.includes("text")??false,audio:o.modalities?.output?.includes("audio")??false,image:o.modalities?.output?.includes("image")??false,video:o.modalities?.output?.includes("video")??false,pdf:o.modalities?.output?.includes("pdf")??false},interleaved:o.interleaved??false},release_date:o.release_date,variants:{}};return f.variants=remeda.mapValues(exports.ProviderTransform.variants(f),I=>I),f}function x(n){return {id:n.id,source:"custom",name:n.name,env:n.env??[],options:{},models:remeda.mapValues(n.models,o=>M(n,o))}}ee.fromModelsDevProvider=x;async function j(){var xe=[];try{let n=chunkKFESJR3T_cjs.b(xe,_.time("state"));let o=await exports.Config.get();let f=new Set(o.disabled_providers??[]);let I=new Set([...We,...o.enabled_providers??[]]);let S=await exports.ModelsDev.get();let O=remeda.pickBy(S,(L,N)=>I.has(N));let B=remeda.mapValues(O,x);function q(L){return !(I&&!I.has(L)||f.has(L))}let R={};let J=new Map;let oe={};let fe=new Map;let te=new Map;_.info("init");let ue=Object.entries(o.provider??{});if(B["github-copilot"]){let L=B["github-copilot"];B={...B,"github-copilot-enterprise":{...L,id:"github-copilot-enterprise",name:"GitHub Copilot Enterprise",models:remeda.mapValues(L.models,N=>({...N,providerId:"github-copilot-enterprise"}))}};}function Q(L,N){let G=R[L];if(G){R[L]=remeda.mergeDeep(G,N);return}let K=B[L];K&&(R[L]=remeda.mergeDeep(K,N));}for(let[L,N]of ue){let G=B[L],K={id:L,name:N.name??G?.name??L,env:N.env??G?.env??[],options:remeda.mergeDeep(G?.options??{},N.options??{}),source:"config",models:G?.models??{}};for(let[z,D]of Object.entries(N.models??{})){let $=K.models[D.id??z],se=utils.iife(()=>D.name?D.name:D.id&&D.id!==z?z:$?.name??z),we={id:z,api:{id:D.id??$?.api.id??z,npm:D.provider?.npm??N.npm??$?.api.npm??O[L]?.npm??"@ai-sdk/openai-compatible",url:N?.api??$?.api.url??O[L]?.api??""},status:D.status??$?.status??"active",name:se,providerId:L,capabilities:{temperature:D.temperature??$?.capabilities.temperature??!1,reasoning:D.reasoning??$?.capabilities.reasoning??!1,attachment:D.attachment??$?.capabilities.attachment??!1,toolcall:D.tool_call??$?.capabilities.toolcall??!0,input:{text:D.modalities?.input?.includes("text")??$?.capabilities.input.text??!0,audio:D.modalities?.input?.includes("audio")??$?.capabilities.input.audio??!1,image:D.modalities?.input?.includes("image")??$?.capabilities.input.image??!1,video:D.modalities?.input?.includes("video")??$?.capabilities.input.video??!1,pdf:D.modalities?.input?.includes("pdf")??$?.capabilities.input.pdf??!1},output:{text:D.modalities?.output?.includes("text")??$?.capabilities.output.text??!0,audio:D.modalities?.output?.includes("audio")??$?.capabilities.output.audio??!1,image:D.modalities?.output?.includes("image")??$?.capabilities.output.image??!1,video:D.modalities?.output?.includes("video")??$?.capabilities.output.video??!1,pdf:D.modalities?.output?.includes("pdf")??$?.capabilities.output.pdf??!1},interleaved:D.interleaved??!1},cost:{input:D?.cost?.input??$?.cost?.input??0,output:D?.cost?.output??$?.cost?.output??0,cache:{read:D?.cost?.cache_read??$?.cost?.cache.read??0,write:D?.cost?.cache_write??$?.cost?.cache.write??0}},options:remeda.mergeDeep($?.options??{},D.options??{}),limit:{context:D.limit?.context??$?.limit?.context??ee.DEFAULT_CONTEXT_LIMIT,input:D.limit?.input??$?.limit?.input??P(D.limit?.context??ee.DEFAULT_CONTEXT_LIMIT),output:D.limit?.output??$?.limit?.output??ee.DEFAULT_OUTPUT_LIMIT},headers:remeda.mergeDeep($?.headers??{},D.headers??{}),family:D.family??$?.family??"",release_date:D.release_date??$?.release_date??"",variants:{}},me=remeda.mergeDeep(exports.ProviderTransform.variants(we),D.variants??{});we.variants=remeda.mapValues(remeda.pickBy(me,ie=>!ie.disabled),ie=>remeda.omit(ie,["disabled"])),K.models[z]=we;}B={...B,[L]:K};}let Z=await utils.Env.all();for(let[L,N]of Object.entries(B)){if(f.has(L))continue;let G=N.env.map(K=>Z[K]).find(Boolean);G&&Q(L,{source:"env",key:N.env.length===1?G:void 0});}for(let[L,N]of Object.entries(await utils.Auth.all()))f.has(L)||N.type==="api"&&Q(L,{source:"api",key:N.key});for(let L of e){let N=L.providerId;if(f.has(N))continue;let G=!1,K=await utils.Auth.get(N);if(K&&(G=!0),N==="github-copilot"&&!G&&await utils.Auth.get("github-copilot-enterprise")&&(G=!0),!!G){if(K){let z=B[L.authProvider];if(!z){_.error(`Auth provider ${L.authProvider} not found in database`);continue}try{let $=await L.loader(()=>utils.Auth.get(N),z)??{},se=R[N]?{options:$}:{source:"custom",options:$};Q(N,se);}catch(D){_.warn("plugin auth loader failed for provider",{providerId:N,authProvider:L.authProvider,error:D instanceof Error?D.message:String(D)});}}if(N==="github-copilot"){let z="github-copilot-enterprise";if(!f.has(z)&&await utils.Auth.get(z)){let $=B[z];if(!$){_.error(`Enterprise provider ${z} not found in database`);continue}try{let we=await L.loader(()=>utils.Auth.get(z),$)??{},me=R[z]?{options:we}:{source:"custom",options:we};Q(z,me);}catch(se){_.warn("plugin auth loader failed for enterprise provider",{providerId:z,error:se instanceof Error?se.message:String(se)});}}}}}for(let[L,N]of Object.entries(l)){if(f.has(L)||!I.has(L))continue;let G=B[L];if(!G){_.debug("Provider does not exist in model list "+L);continue}let K=await N(G);if(K&&(K.autoload||R[L])){K.getModel&&(oe[L]=K.getModel);let z=K.options??{},D=R[L]?{options:z}:{source:"custom",options:z};Q(L,D);}}for(let[L,N]of ue){let G={source:"config"};N.env&&(G.env=N.env),N.name&&(G.name=N.name),N.options&&(G.options=N.options),Q(L,G);}for(let[L,N]of Object.entries(R)){if(!q(L)){delete R[L];continue}let G=o.provider?.[L];for(let[K,z]of Object.entries(N.models)){z.api.id=z.api.id??z.id??K,(K==="gpt-5-chat-latest"||L==="openrouter"&&K==="openai/gpt-5-chat")&&delete N.models[K],z.status==="alpha"&&!exports.Flag.EASBOT_ENABLE_EXPERIMENTAL_MODELS&&delete N.models[K],z.status==="deprecated"&&delete N.models[K],(G?.blacklist?.includes(K)||G?.whitelist&&!G.whitelist.includes(K))&&delete N.models[K],z.variants=remeda.mapValues(exports.ProviderTransform.variants(z),$=>$);let D=G?.models?.[K]?.variants;if(D&&z.variants){let $=remeda.mergeDeep(z.variants,D);z.variants=remeda.mapValues(remeda.pickBy($,se=>!se.disabled),se=>remeda.omit(se,["disabled"]));}}if(Object.keys(N.models).length===0){delete R[L];continue}_.info("found",{providerId:L});}return {models:J,providers:R,sdk:fe,localProxy:te,modelLoaders:oe}}catch(Re){var be=Re,re=true;}finally{chunkKFESJR3T_cjs.c(xe,be,re);}}let h=hr(j);async function p(){return h()}function b(){h.reset();}ee.resetState=b;async function t(){return (await p())?.providers??{}}ee.list=t;async function i(){return (await p())?.localProxy??{}}ee.getLocalProxy=i;async function m(n){try{var o=[];try{let O=chunkKFESJR3T_cjs.b(o,_.time("getSDK",{providerId:n.providerId}));let B=await p();if(!B)throw new Error("Provider state not available");let q=B.providers[n.providerId];if(!q)throw new Error(`Provider ${n.providerId} not found`);let R={...q.options};n.api.npm.includes("@ai-sdk/openai-compatible")&&R.includeUsage!==!1&&(R.includeUsage=!0);R.baseURL||(R.baseURL=n.api.url);R.apiKey===void 0&&q.key&&(R.apiKey=q.key);n.headers&&(R.headers={...R.headers,...n.headers});let J={providerId:n.providerId,npm:n.api.npm,baseURL:R.baseURL,apiKey:R.apiKey,region:R.region,endpoint:R.endpoint};let oe=utils.PKG.xxHash32(JSON.stringify(J));let fe=B.sdk.get(oe);if(fe)return fe;let te=R.fetch;R.fetch=async($,se)=>{let we=te??fetch,me=se??{};if(R.timeout!==void 0&&R.timeout!==null){let ie=[];me.signal&&ie.push(me.signal),R.timeout!==!1&&ie.push(AbortSignal.timeout(R.timeout));let mt=ie.length>1?AbortSignal.any(ie):ie[0];me.signal=mt;}if(n.api.npm==="@ai-sdk/openai"&&me.body&&me.method==="POST")try{let ie=JSON.parse(me.body);if(!(n.providerId.includes("azure")&&ie.store===!0)&&Array.isArray(ie.input)){for(let yt of ie.input)"id"in yt&&delete yt.id;me.body=JSON.stringify(ie);}}catch(ie){_.warn("failed to parse openai request body for itemId strip",{providerId:n.providerId,error:ie instanceof Error?ie.message:String(ie)});}return we($,{...me,timeout:!1})};let ue=br[n.api.npm];if(ue){_.info("using bundled provider",{providerId:n.providerId,pkg:n.api.npm});let se=(await ue())({name:n.providerId,...R});return B.sdk.set(oe,se),se}let Q;n.api.npm.startsWith("file://")?Q=n.api.npm:Q=await utils.Shell.install(n.api.npm,"latest");let{pathToFileURL:Z}=await import('url');let xe=await import('path');let Re=await import('fs/promises');let be=xe.join(Q,"package.json");let re=JSON.parse(await Re.readFile(be,"utf-8"));let L;re.exports?.["."]?.import?L=re.exports["."].import:re.exports?.["."]?.require?L=re.exports["."].require:re.module?L=re.module:re.main?L=re.main:L="index.js";let N=xe.join(Q,L);let G=Z(N).href;let K=await import(G);let z=K[Object.keys(K).find($=>$.startsWith("create"))];let D=z({name:n.providerId,...R});B.sdk.set(oe,D);return D}catch(f){var I=f,S=!0;}finally{chunkKFESJR3T_cjs.c(o,I,S);}}catch(O){throw new ee.InitError({providerId:n.providerId},{cause:O})}}async function g(n){return (await p())?.providers[n]}ee.getProvider=g;async function a(n,o){let f=await p();if(!f)throw new Error("Provider state not available");let I=f.providers[n];if(!I){let R=Object.keys(f.providers),oe=_t__default.default.go(n,R,{limit:3,threshold:-1e4}).map(fe=>fe.target);throw new ee.ModelNotFoundError({providerId:n,modelId:o,suggestions:oe})}let S=I.models[o];if(S)return S;if(o.includes("/")){let R=o.split("/");for(let J=1;J<R.length;J++){let oe=R.slice(J).join("/");if(S=I.models[oe],S)return S}}let O=Object.keys(I.models),q=_t__default.default.go(o,O,{limit:3,threshold:-1e4}).map(R=>R.target);throw new ee.ModelNotFoundError({providerId:n,modelId:o,suggestions:q})}ee.getModel=a;async function v(n){_.debug("getLanguage called",{providerId:n.providerId,modelId:n.id});let o=await p();if(!o)throw new Error("Provider state not available");let f=`${n.providerId}/${n.id}`;if(o.models.has(f))return o.models.get(f);let I=o.providers[n.providerId];if(!I)throw new Error(`Provider ${n.providerId} not found`);let S=await m(n);try{let O=o.modelLoaders[n.providerId],B=O?await O(S,n.api.id,I.options):S.languageModel(n.api.id);return o.models.set(f,B),B}catch(O){throw _.error("Failed to create language model",{providerId:n.providerId,modelId:n.id,error:O}),O instanceof ai.NoSuchModelError?new ee.ModelNotFoundError({modelId:n.id,providerId:n.providerId},{cause:O}):O}}ee.getLanguage=v;async function T(n,o){_.debug("getEmbedding called",{providerId:n,modelId:o});let f=await p();if(f){let q=`${n}/${o}`,R=f.models.get(q);if(R)return R}let I=await a(n,o),S=await m(I),O,B=S;if(typeof B.embeddingModel=="function")O=B.embeddingModel(I.api.id);else if(typeof B.textEmbeddingModel=="function")O=B.textEmbeddingModel(I.api.id);else throw new Error(`Provider ${n} does not support embedding model. SDK missing both 'embeddingModel' and 'textEmbeddingModel' methods.`);return f&&f.models.set(`${n}/${o}`,O),O}ee.getEmbedding=T;async function U(n,o){_.debug("getRerank called",{providerId:n,modelId:o});let f=await p();if(f){let q=`${n}/${o}`,R=f.models.get(q);if(R)return R}let I=await a(n,o),S=await m(I),O,B=S;if(typeof B.rerankingModel=="function")O=B.rerankingModel(I.api.id),O&&f&&f.models.set(`${n}/${o}`,O);else if(typeof B.languageModel=="function"){let q=await i(),R=`${n}/${o}`;if(R in q)return q[R];let J=await v(I);if(J){let oe=await a("easbot-local","rerank-proxy"),te=await m(oe);O=te.rerankingModel?te.rerankingModel(oe.api.id,{llm:J,useEnhancedPrompt:true,promptLanguage:"cn",totalScore:1}):void 0,O&&(q.set(R,O),f&&f.models.set(R,O));}}if(!O)throw new Error(`Provider ${n} and model ${o} does not support rerank`);return O}ee.getRerank=U;async function W(n,o){let f=await p();if(!f)return;let I=f.providers[n];if(I){for(let S of o)for(let O of Object.keys(I.models))if(O.includes(S))return {providerId:n,modelId:O}}}ee.closest=W;async function ne(n){let o=await exports.Config.get();if(o.small_model){let O=le(o.small_model);if(!O.providerId||!O.modelId)throw new Error("Invalid small_model format");return a(O.providerId,O.modelId)}let f=await p(),I=f?.providers[n];if(I){let O=["claude-haiku-4-5","claude-haiku-4.5","3-5-haiku","3.5-haiku","gemini-3-flash","gemini-2.5-flash","gpt-5-nano"];n.startsWith("easbot")&&(O=["gpt-5-nano"]),n.startsWith("github-copilot")&&(O=["gpt-5-mini","claude-haiku-4.5",...O]);for(let B of O)if(n==="amazon-bedrock"){let q=["global.","us.","eu."],R=Object.keys(I.models).filter(te=>te.includes(B)),J=R.find(te=>te.startsWith("global."));if(J)return a(n,J);let oe=I.options?.region;if(oe){let te=oe.split("-")[0];if(te==="us"||te==="eu"){let ue=R.find(Q=>Q.startsWith(`${te}.`));if(ue)return a(n,ue)}}let fe=R.find(te=>!q.some(ue=>te.startsWith(ue)));if(fe)return a(n,fe)}else for(let q of Object.keys(I.models))if(q.includes(B))return a(n,q)}if(f?.providers.easbot?.models["gpt-5-nano"])return a("easbot","gpt-5-nano")}ee.getSmallModel=ne;let pe=["gpt-5","claude-sonnet-4","gemini-3-pro"];function ge(n){return remeda.sortBy(n,[o=>pe.findIndex(f=>o.id.includes(f)),"desc"],[o=>o.id.includes("latest")?0:1,"asc"],[o=>o.id,"desc"])}ee.sort=ge;async function de(){let n=await exports.Config.get();if(n.model)return le(n.model);let o=await t().then(I=>Object.values(I)).then(I=>I.find(S=>!n.provider||Object.keys(n.provider).includes(S.id)));if(!o)throw new Error("no providers found");let[f]=ge(Object.values(o.models));if(!f)throw new Error("no models found");return {providerId:o.id,modelId:f.id}}ee.defaultModel=de;function le(n){let{provider:o,model:f}=utils.parseModelId(n);if(!o)throw new Error("Invalid model format: "+n);return {providerId:o,modelId:f}}ee.parseModel=le,ee.ModelNotFoundError=utils.NamedError.create("ProviderModelNotFoundError",k__default.default.object({providerId:k__default.default.string(),modelId:k__default.default.string(),suggestions:k__default.default.array(k__default.default.string()).optional()})),ee.InitError=utils.NamedError.create("ProviderInitError",k__default.default.object({providerId:k__default.default.string()}));})(exports.Provider||(exports.Provider={}));exports.ProviderError=void 0;(y=>{let e=[/prompt is too long/i,/input is too long for requested model/i,/exceeds the context window/i,/input token count.*exceeds the maximum/i,/maximum prompt length is \d+/i,/reduce the length of the messages/i,/maximum context length is \d+ tokens/i,/exceeds the limit of \d+/i,/exceeds the available context size/i,/greater than the context length/i,/context window exceeds limit/i,/exceeded model token limit/i,/context[_ ]length[_ ]exceeded/i,/request entity too large/i,/context length is only \d+ tokens/i,/input length.*exceeds.*context length/i,/prompt too long; exceeded (?:max )?context length/i,/too large for model with \d+ maximum context length/i,/model_context_window_exceeded/i];function r(s){let l=s.statusCode;return l&&l===404||s.isRetryable}function d(s){return e.some(l=>l.test(s))?true:/^4(00|13)\s*(status code)?\s*\(no body\)/i.test(s)}function c(s,l){return s.includes("github-copilot")&&l.statusCode===403?"Please reauthenticate with the copilot provider to ensure your credentials work properly with EasBot.":l.message}function E(s,l){return utils.iife(()=>{let u=l.message;if(u===""){if(l.responseBody)return l.responseBody;if(l.statusCode){let M=http.STATUS_CODES[l.statusCode];if(M)return M}return "Unknown error"}let w=c(s,l);if(w!==u)return w;if(!l.responseBody||l.statusCode&&u!==http.STATUS_CODES[l.statusCode])return u;try{let M=JSON.parse(l.responseBody),x=M.message||M.error||M.error?.message;if(x&&typeof x=="string")return `${u}: ${x}`}catch{}return `${u}: ${l.responseBody}`}).trim()}function C(s){if(typeof s=="string")try{let l=JSON.parse(s);return l&&typeof l=="object"?l:void 0}catch{return}if(typeof s=="object"&&s!==null)return s}function P(s){let l=C(s),u=typeof l?.message=="string"?C(l.message)??l:l;if(!u||u.type!=="error")return;let w=JSON.stringify(u);switch(u?.error?.code){case "context_length_exceeded":return {type:"context_overflow",message:"Input exceeds context window of this model",responseBody:w};case "insufficient_quota":return {type:"api_error",message:"Quota exceeded. Check your plan and billing details.",isRetryable:false,responseBody:w};case "usage_not_included":return {type:"api_error",message:"To use Codex with your ChatGPT plan, upgrade to Plus: https://chatgpt.com/explore/plus.",isRetryable:false,responseBody:w};case "invalid_prompt":return {type:"api_error",message:typeof u?.error?.message=="string"?u?.error?.message:"Invalid prompt.",isRetryable:false,responseBody:w};case "server_error":return {type:"api_error",message:typeof u?.error?.message=="string"?u?.error?.message:"Server error.",isRetryable:true,responseBody:w}}}y.parseStreamError=P;function _(s){let l=E(s.providerId,s.error),u=C(s.error.responseBody);if(d(l)||s.error.statusCode===413||u?.error?.code==="context_length_exceeded")return {type:"context_overflow",message:l,responseBody:s.error.responseBody};let w=s.error.url?{url:s.error.url}:void 0;return {type:"api_error",message:l,statusCode:s.error.statusCode,isRetryable:s.providerId.startsWith("openai")?r(s.error):s.error.isRetryable,responseHeaders:s.error.responseHeaders,responseBody:s.error.responseBody,metadata:w}}y.parseAPICallError=_;})(exports.ProviderError||(exports.ProviderError={}));exports.ProviderAuth=void 0;(j=>{let e=[],r=utils.lazyAsync(async()=>{let h={};for(let{providerId:p,methods:b}of e)h[p]={methods:b};return {methods:h,pending:{}}});function d(h){let p=e.findIndex(b=>b.providerId===h.providerId);p>=0?e[p]=h:e.push(h),r.reset();}j.registerPluginAuthProvider=d;function c(){e.length=0,r.reset();}j.clearPluginAuthProviders=c;function E(){return r()}function C(){r.reset();}j.resetState=C,j.Method=k__default.default.object({type:k__default.default.union([k__default.default.literal("oauth"),k__default.default.literal("api")]),label:k__default.default.string()}).meta({ref:"ProviderAuthMethod"});async function _(){let h=await E().then(p=>p.methods);return remeda.mapValues(h,p=>p.methods.map(b=>({type:b.type,label:b.label})))}j.methods=_,j.Authorization=k__default.default.object({url:k__default.default.string(),method:k__default.default.union([k__default.default.literal("auto"),k__default.default.literal("code")]),instructions:k__default.default.string()}).meta({ref:"ProviderAuthAuthorization"}),j.authorize=utils.fn(k__default.default.object({providerId:k__default.default.string(),method:k__default.default.number()}),async h=>{let p=await E().then(t=>t.methods[h.providerId]);if(!p)return;let b=p.methods[h.method];if(b&&b.type==="oauth"&&b.authorize){let t=await b.authorize();return t?(await E().then(i=>i.pending[h.providerId]=t),{url:t.url??"",method:t.method??"",instructions:t.instructions??""}):void 0}}),j.callback=utils.fn(k__default.default.object({providerId:k__default.default.string(),method:k__default.default.number(),code:k__default.default.string().optional()}),async h=>{let p=await E().then(t=>t.pending[h.providerId]);if(!p)throw new j.OauthMissing({providerId:h.providerId});let b;if(p.method==="code"){if(!h.code)throw new j.OauthCodeMissing({providerId:h.providerId});b=await p.callback(h.code);}if(p.method==="auto"&&(b=await p.callback()),b?.type==="success"){"key"in b&&b.key&&await utils.Auth.set(h.providerId,{type:"api",key:b.key??""}),"refresh"in b&&b.refresh&&await utils.Auth.set(h.providerId,{type:"oauth",access:b.access??"",refresh:b.refresh??"",expires:b.expires??0,...b.accountId?{accountId:b.accountId}:{}});return}throw new j.OauthCallbackFailed({})}),j.api=utils.fn(k__default.default.object({providerId:k__default.default.string(),key:k__default.default.string()}),async h=>{await utils.Auth.set(h.providerId,{type:"api",key:h.key});}),j.OauthMissing=utils.NamedError.create("ProviderAuthOauthMissing",k__default.default.object({providerId:k__default.default.string()})),j.OauthCodeMissing=utils.NamedError.create("ProviderAuthOauthCodeMissing",k__default.default.object({providerId:k__default.default.string()})),j.OauthCallbackFailed=utils.NamedError.create("ProviderAuthOauthCallbackFailed",k__default.default.object({}));})(exports.ProviderAuth||(exports.ProviderAuth={}));var Mr=utils.Log.create({service:"rerank"});exports.RerankProvider=void 0;(d=>{async function e(c){if(c&&typeof c=="object"&&"specificationVersion"in c)return c;let E=c??await(async()=>{let C=await exports.Provider.defaultModel();return exports.Provider.getModel(C.providerId,C.modelId)})();return exports.Provider.getRerank(E.providerId,E.id)}async function r(c,E){let{query:C,documents:P,model:_,topN:y}=c,s=E??c.abortSignal;if(P.length===0)return [];let l=await e(_),u=y??Math.min(10,P.length),w=await ai.rerank({model:l,query:C,documents:P,topN:u,abortSignal:s});return Mr.debug("rerank done",{inputCount:P.length,outputCount:w.ranking.length,topN:u}),w.ranking.map(M=>({index:M.originalIndex,document:M.document,score:M.score,reason:M.reason}))}d.rerankDocuments=r;})(exports.RerankProvider||(exports.RerankProvider={}));function Ie(e){return /(\.md|\.ts|\.json|readme|doc|spec|guideline)/i.test(e)?"document":/(deadline|date|day|week|month|year|q[1-4]|sprint)/i.test(e)?"time":/(file|model|dataset|artifact|resource|tool|sdk|ollama|sqlite|embedding|vector|fts)/i.test(e)?"object":/(event|incident|release|meeting|migration|launch)/i.test(e)?"event":/(api|service|system|engine|pipeline|server|db|database|memorysystem|contextengine)/i.test(e)?"process":/(team|group|org|company|inc|ltd|corp)/i.test(e)?"organization":/(concept|principle|policy|method|pattern|strategy)/i.test(e)?"concept":/(score|rate|ratio|latency|accuracy|recall|precision|throughput|kpi)/i.test(e)?"metric":/(task|issue|ticket|todo|action)/i.test(e)?"task":/(process|workflow|procedure|flow|lifecycle)/i.test(e)?"process":/[A-Z]/.test(e)?"object":"keyword"}function Le(e){return e.trim().replace(/^[^\p{L}\p{N}]+|[^\p{L}\p{N}]+$/gu,"").replace(/\s+/g," ").slice(0,120)}var Ir=/([A-Za-z][\w.-]{1,80})\s+(is_a|part_of|has_attribute|located_in|occurs_in|causes|influences|owned_by|member_of|uses|depends_on|related_to)\s+([A-Za-z][\w.-]{1,80})/g;function Fe(e){let r=[],d=[],c=new Set,E=new Set;for(let _ of e.matchAll(Ir)){let y=Le(_[1]??""),s=(_[2]??"related_to").trim(),l=Le(_[3]??"");if(!y||!l||y===l)continue;let u=y.toLowerCase(),w=l.toLowerCase();c.has(u)||(c.add(u),r.push({name:y,type:Ie(y),properties:{source:"rule_extracted"}})),c.has(w)||(c.add(w),r.push({name:l,type:Ie(l),properties:{source:"rule_extracted"}}));let M=`${u}|${w}|${s}`;E.has(M)||(E.add(M),d.push({source:y,target:l,relation:s}));}let C=e.split(/\n\s*\n/);for(let _ of C){if(_.trim().length<20)continue;let y=[];for(let s of _.match(/[\p{L}\p{N}][\p{L}\p{N}_.-]{2,80}/gu)??[]){let l=Le(s);if(!l)continue;let u=l.toLowerCase();c.has(u)&&(y.some(w=>w.key===u)||y.push({key:u,name:l}));}for(let s=0;s<y.length;s++)for(let l=s+1;l<y.length;l++){let u=y[s],w=y[l];if(!u||!w||u.key===w.key)continue;let M=Ie(u.name),x=Ie(w.name),j="related_to";M==="document"&&x==="object"?j="defines":M==="object"&&x==="document"?j="referenced_in":M==="process"&&x==="object"?j="uses":M==="object"&&x==="process"?j="used_by":M==="concept"&&(j="relates_to");let h=`${u.key}|${w.key}|${j}`;E.has(h)||(E.add(h),d.push({source:u.name,target:w.name,relation:j}));}}let P=e.match(/[\p{L}\p{N}][\p{L}\p{N}_.-]{1,80}/gu)??[];for(let _ of P){let y=Le(_);if(!y)continue;let s=y.toLowerCase();c.has(s)||(c.add(s),r.push({name:y,type:Ie(y),properties:{source:"keyword_extracted"}}));}return {summary:"",entities:r,relations:d}}function ze(e,r,d,c={}){let{maxContentLength:E=2e3,maxChunks:C=5,includeSummary:P=true}=c,_=r.map(u=>`- ${u.type}: ${u.rule}`).join(`
|
|
3
3
|
`),y=d.map(u=>`- ${u.type}: ${u.rule}`).join(`
|
|
4
4
|
`),s=e.slice(0,C).join(`
|
|
5
5
|
|
|
@@ -46,7 +46,7 @@ ${s}`}function Ke(e,r,d){try{let c=e.match(/\{[\s\S]*\}/);if(c){let E=JSON.parse
|
|
|
46
46
|
|
|
47
47
|
`));m>6e3&&e.warn("graph input exceeds soft token threshold; will be split into multiple per-call chunks",{estTokens:m,totalChars:i,chunks:t.length});let a=b.includeRules!==false?t.reduce((de,le)=>M(de,Fe(le)),{summary:"",entities:[],relations:[]}):{summary:"",entities:[],relations:[]},v=b.prompt?.maxChunks??r,T=b.prompt?.maxContentLength??d,U=b.prompt?.maxConcurrency??E,W=[];for(let de=0;de<t.length;de+=v)W.push(t.slice(de,de+v));let ne=W.flatMap(de=>{let le=de.join(`
|
|
48
48
|
|
|
49
|
-
`);return le.length<=T?[le]:P([le],T)}),pe=await y(ne,(de,le)=>l(b,de,le),U),ge=_(pe);return M(a,ge)}j.generateGraph=x;})(exports.GraphProvider||(exports.GraphProvider={}));exports.SummaryProvider=void 0;(l=>{utils.Log.create({service:"summary"});let r=utils.loadTextFile("./memory-summary.txt",
|
|
49
|
+
`);return le.length<=T?[le]:P([le],T)}),pe=await y(ne,(de,le)=>l(b,de,le),U),ge=_(pe);return M(a,ge)}j.generateGraph=x;})(exports.GraphProvider||(exports.GraphProvider={}));exports.SummaryProvider=void 0;(l=>{utils.Log.create({service:"summary"});let r=utils.loadTextFile("./memory-summary.txt",chunkKFESJR3T_cjs.d),d=utils.loadTextFile("./knowledge-summary.txt",chunkKFESJR3T_cjs.d);async function C(u,w,M,x,j){return ai.streamText({model:u,system:w,prompt:M,maxOutputTokens:x,abortSignal:j}).text}async function P(u){if(u&&typeof u=="object"&&"specificationVersion"in u)return u;let w=u??await(async()=>{let M=await exports.Provider.defaultModel();return exports.Provider.getModel(M.providerId??"default",M.modelId??"default")})();return exports.Provider.getLanguage(w)}function _(u){return u.map(w=>{let M=[` - node: id=${w.id} type=${w.type} name=${w.name}`];if(w.edges&&w.edges.length>0)for(let x of w.edges){let j=x.targetId!==void 0?` (id=${x.targetId})`:"";M.push(` \u2192 [${x.direction}] ${x.relation} \u2192 target=${x.targetType}:${x.targetName}${j}`);}return M.join(`
|
|
50
50
|
`)}).join(`
|
|
51
51
|
`)}async function y(u,w){let M=w??u.abortSignal,{query:x,chunks:j,model:h,maxLength:p}=u;if(j.length===0)return "";let b=await P(h),t=d()??"Synthesize the following document chunks into a concise summary relevant to the query. Order by Priority descending.",i=j.map((a,v)=>{let T=a.startLine!=null?`#L${a.startLine}-L${a.endLine??a.startLine}`:"",U=a.score??0,W=`[Chunk ${v+1}] Priority: ${U.toFixed(3)}
|
|
52
52
|
Source: [${a.path}](./${a.path}${T})
|
|
@@ -70,4 +70,4 @@ ${W}`}).join(`
|
|
|
70
70
|
${x}
|
|
71
71
|
|
|
72
72
|
[Memory Facts]
|
|
73
|
-
${i}`;return (await C(b,t,m,p??1e3,M)).trim()}l.summarizeMemoryFacts=s;})(exports.SummaryProvider||(exports.SummaryProvider={}));var Tt=utils.Log.create({service:"embedding"});exports.EmbeddingProvider=void 0;(_=>{_.DEFAULT_MODEL="easbot-local/bge-base-zh-v1.5";async function r(y){if(y&&typeof y=="object"&&"specificationVersion"in y)return y;let s=y??await(async()=>{let l=await exports.Provider.defaultModel();return exports.Provider.getModel(l.providerId,l.modelId)})();return exports.Provider.getEmbedding(s.providerId,s.id)}async function d(y,s){let{value:l,model:u}=y,w=s??y.abortSignal;if(!l)return {embedding:[],usage:{tokens:0}};let M=await r(u),x=await ai.embed({model:M,value:l,abortSignal:w});return Tt.debug("embedText done",{dim:x.embedding.length,tokens:x.usage?.tokens}),{embedding:x.embedding,usage:{tokens:x.usage?.tokens??0}}}_.embedText=d;async function c(y,s){let{values:l,model:u}=y,w=s??y.abortSignal;if(l.length===0)return {embeddings:[],usage:{tokens:0}};let M=await r(u),x=await ai.embedMany({model:M,values:l,abortSignal:w});return Tt.debug("embedTexts done",{inputCount:l.length,dim:x.embeddings[0]?.length,tokens:x.usage?.tokens}),{embeddings:x.embeddings,usage:{tokens:x.usage?.tokens??0}}}_.embedTexts=c;function E(y,s){if(y.length!==s.length||y.length===0)return 0;let l=0,u=0,w=0;for(let x=0;x<y.length;x++){let j=y[x]??0,h=s[x]??0;l+=j*h,u+=j*j,w+=h*h;}let M=Math.sqrt(u)*Math.sqrt(w);return M===0?0:l/M}_.cosineSimilarity=E;function C(y,s){if(y.length!==s.length||y.length===0)return 0;let l=0;for(let u=0;u<y.length;u++){let w=y[u]??0,M=s[u]??0,x=w-M;l+=x*x;}return Math.sqrt(l)}_.euclideanDistance=C;function P(y){let s=0;for(let l of y)s+=l*l;return s=Math.sqrt(s),s===0?y:y.map(l=>l/s)}_.normalize=P;})(exports.EmbeddingProvider||(exports.EmbeddingProvider={}));var qe=class extends Error{constructor(d,c){let E=c instanceof Error?c.message:String(c);super(`probeEmbeddingDims failed for model "${d}": ${E}`);
|
|
73
|
+
${i}`;return (await C(b,t,m,p??1e3,M)).trim()}l.summarizeMemoryFacts=s;})(exports.SummaryProvider||(exports.SummaryProvider={}));var Tt=utils.Log.create({service:"embedding"});exports.EmbeddingProvider=void 0;(_=>{_.DEFAULT_MODEL="easbot-local/bge-base-zh-v1.5";async function r(y){if(y&&typeof y=="object"&&"specificationVersion"in y)return y;let s=y??await(async()=>{let l=await exports.Provider.defaultModel();return exports.Provider.getModel(l.providerId,l.modelId)})();return exports.Provider.getEmbedding(s.providerId,s.id)}async function d(y,s){let{value:l,model:u}=y,w=s??y.abortSignal;if(!l)return {embedding:[],usage:{tokens:0}};let M=await r(u),x=await ai.embed({model:M,value:l,abortSignal:w});return Tt.debug("embedText done",{dim:x.embedding.length,tokens:x.usage?.tokens}),{embedding:x.embedding,usage:{tokens:x.usage?.tokens??0}}}_.embedText=d;async function c(y,s){let{values:l,model:u}=y,w=s??y.abortSignal;if(l.length===0)return {embeddings:[],usage:{tokens:0}};let M=await r(u),x=await ai.embedMany({model:M,values:l,abortSignal:w});return Tt.debug("embedTexts done",{inputCount:l.length,dim:x.embeddings[0]?.length,tokens:x.usage?.tokens}),{embeddings:x.embeddings,usage:{tokens:x.usage?.tokens??0}}}_.embedTexts=c;function E(y,s){if(y.length!==s.length||y.length===0)return 0;let l=0,u=0,w=0;for(let x=0;x<y.length;x++){let j=y[x]??0,h=s[x]??0;l+=j*h,u+=j*j,w+=h*h;}let M=Math.sqrt(u)*Math.sqrt(w);return M===0?0:l/M}_.cosineSimilarity=E;function C(y,s){if(y.length!==s.length||y.length===0)return 0;let l=0;for(let u=0;u<y.length;u++){let w=y[u]??0,M=s[u]??0,x=w-M;l+=x*x;}return Math.sqrt(l)}_.euclideanDistance=C;function P(y){let s=0;for(let l of y)s+=l*l;return s=Math.sqrt(s),s===0?y:y.map(l=>l/s)}_.normalize=P;})(exports.EmbeddingProvider||(exports.EmbeddingProvider={}));var qe=class extends Error{constructor(d,c){let E=c instanceof Error?c.message:String(c);super(`probeEmbeddingDims failed for model "${d}": ${E}`);chunkKFESJR3T_cjs.a(this,"modelId");chunkKFESJR3T_cjs.a(this,"cause");this.name="ProbeEmbeddingError",this.modelId=d,this.cause=c;}};async function Nr(e,r){let d=r?.probeText??"probe",c=r?.timeoutMs??5e3,E=[];r?.signal&&E.push(r.signal);let C=new AbortController,P=setTimeout(()=>C.abort(),c);E.push(C.signal);let _=E.length===1?E[0]:AbortSignal.any(E);try{let s=(await ai.embed({model:e,value:d,abortSignal:_})).embedding.length;return typeof s=="number"&&s>0?s:void 0}catch(y){if(y.name==="AbortError")return;let s=e.modelId??"unknown";console.debug(`[probeEmbeddingDims] model=${s} failed:`,y instanceof Error?y.message:String(y)),new qe(s,y);return}finally{clearTimeout(P);}}function Dr(e,r){if(r.length===0)return;let d=e.prepare("INSERT OR REPLACE INTO meta (key, value) VALUES (?, ?)");e.transaction(E=>{for(let[C,P]of E)d.run(C,P);})(r);}var ae=utils.Log.create({service:"llm-bootstrap"}),Ur={embedding:"embedding_model",graph:"graph_model",rerank:"rerank_model"},Fr={embedding:"embedding_llm",graph:"graph_llm",rerank:"rerank_llm"};function gt(e){if(e)try{let r=exports.Provider.parseModel(e);return r.providerId&&r.modelId?{providerId:r.providerId,modelId:r.modelId}:void 0}catch(r){ae.debug("parseModel failed",{raw:e,error:r instanceof Error?r.message:String(r)});return}}async function zr(e,r){if(!r)return {};let d=Be.isAbsolute(r)?r:Be.join(e,r);try{let c=await bt.readFile(d,"utf-8"),E=JSON.parse(c);return !E||typeof E!="object"?{}:E}catch(c){return ae.debug("Subconfig read failed (fail-silent, will fall back to top-level LLMConfig)",{subConfigPath:d,error:c instanceof Error?c.message:String(c)}),{}}}function ft(e,r,d){let c=Ur[e],E=Fr[e],C=r[c];if(typeof C=="string"&&C)return {raw:C,source:"sub"};let P=r[E];if(typeof P=="string"&&P)return {raw:P,source:"sub"};let _=d[c];if(_)return {raw:_,source:"top"}}async function Kr(e){let r=await exports.Config.get(),d=ft("embedding",e,r);if(!d)return ae.debug("embedding model not configured (neither subconfig nor top-level)"),{};let c=gt(d.raw);if(!c)return ae.debug("embedding model id parse failed",{raw:d.raw,source:d.source}),{source:d.source};try{return ae.info("Loading embedding model",{providerId:c.providerId,modelId:c.modelId,source:d.source}),{model:await exports.Provider.getEmbedding(c.providerId,c.modelId),source:d.source}}catch(E){return E instanceof exports.Provider.ModelNotFoundError?ae.warn("Embedding model not found, falling back",{providerId:c.providerId,modelId:c.modelId}):ae.warn("Provider.getEmbedding failed, falling back",{providerId:c.providerId,modelId:c.modelId,error:E instanceof Error?E.message:String(E)}),{source:d.source}}}async function qr(e){let r=await exports.Config.get(),d=ft("graph",e,r);if(!d)return ae.debug("graph model not configured (neither subconfig nor top-level)"),{};let c=gt(d.raw);if(!c)return ae.debug("graph model id parse failed",{raw:d.raw,source:d.source}),{source:d.source};try{ae.info("Loading graph model",{providerId:c.providerId,modelId:c.modelId,source:d.source});let E=await exports.Provider.getModel(c.providerId,c.modelId);return {model:await exports.Provider.getLanguage(E),source:d.source}}catch(E){return ae.warn("Provider.getLanguage failed, falling back",{providerId:c.providerId,modelId:c.modelId,error:E instanceof Error?E.message:String(E)}),{source:d.source}}}async function Vr(e){let r=await exports.Config.get(),d=ft("rerank",e,r);if(!d)return ae.debug("rerank model not configured (neither subconfig nor top-level)"),{};let c=gt(d.raw);if(!c)return ae.debug("rerank model id parse failed",{raw:d.raw,source:d.source}),{source:d.source};try{return ae.info("Loading rerank model",{providerId:c.providerId,modelId:c.modelId,source:d.source}),{model:await exports.Provider.getRerank(c.providerId,c.modelId),source:d.source}}catch(E){return ae.warn("Provider.getRerank failed, falling back",{providerId:c.providerId,modelId:c.modelId,error:E instanceof Error?E.message:String(E)}),{source:d.source}}}async function Nt(e){let{target:r,cwd:d,subConfigPath:c,embedding:E=true,graph:C=false,rerank:P=false}=e;if(r.isInitialized())return ae.debug("Llm already initialized, skip bootstrapLlm"),{loaded:{embedding:false,graph:false,rerank:false},hasFallback:true,sources:{}};let _=await zr(d,c??""),y={},s={},l=[];E&&l.push(Kr(_).then(M=>{M.source&&(s.embedding=M.source),M.model&&(y.embeddingLlm=M.model);})),C&&l.push(qr(_).then(M=>{M.source&&(s.graph=M.source),M.model&&(y.graphLlm=M.model);})),P&&l.push(Vr(_).then(M=>{M.source&&(s.rerank=M.source),M.model&&(y.rerankLlm=M.model);})),await Promise.all(l),r.init({models:y});let u={embedding:!!y.embeddingLlm,graph:!!y.graphLlm,rerank:!!y.rerankLlm},w=!u.embedding&&!u.graph&&!u.rerank;return ae.info("Llm bootstrap completed",{loaded:u,sources:s,hasFallback:w}),{loaded:u,hasFallback:w,sources:s}}function Dt(e){let r={getDirectory:()=>e.instance.directory,getWorktree:()=>e.instance.worktree};Je({global:e.global,instance:r}),ae.debug("standalone adapters injected",{globalConfig:e.global.config,instanceDir:e.instance.directory});}Object.defineProperty(exports,"createOpenaiCompatible",{enumerable:true,get:function(){return chunkUIFIYRZK_cjs.a}});Object.defineProperty(exports,"openaiCompatible",{enumerable:true,get:function(){return chunkUIFIYRZK_cjs.b}});exports.CUSTOM_PROVIDER_DEFINITIONS=Ne;exports.DEFAULT_ENABLED_PROVIDERS=We;exports.LLMConfig=$e;exports.PROVIDER_DISPLAY_NAMES=Gt;exports.ProbeEmbeddingError=qe;exports.ProviderAuthMethod=Et;exports.ProviderConfig=Ze;exports.bootstrapLlm=Nt;exports.bootstrapLlmStandalone=Dt;exports.buildEntityExtractionPrompt=ze;exports.extractEntitiesByRules=Fe;exports.getAdapterRegistry=Ft;exports.getIConfigProvider=Xe;exports.getIGlobalPathProvider=Me;exports.getIInstallationProvider=Te;exports.getIInstanceProvider=Ye;exports.hasAdapterRegistry=He;exports.inferEntityType=Ie;exports.initModelsRefresh=Ht;exports.normalizeExtractionResult=ct;exports.parseEntityExtractionResult=Ke;exports.probeEmbeddingDims=Nr;exports.readEnvString=V;exports.readFlagBool=zt;exports.readFlagNumber=Kt;exports.sanitizeEntityToken=Le;exports.setAdapterRegistry=Je;exports.syncMeta=Dr;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@easbot/llm",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.22",
|
|
4
4
|
"description": "AI model aggregation layer for EASBot ecosystem: multi-vendor SDK dynamic loading, model routing, configuration management, and high-level Model Provider capability wrapping.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -74,12 +74,12 @@
|
|
|
74
74
|
"google-auth-library": "^11.0.2",
|
|
75
75
|
"remeda": "^2.39.0",
|
|
76
76
|
"zod": "^4.4.3",
|
|
77
|
-
"@easbot/
|
|
78
|
-
"@easbot/
|
|
79
|
-
"@easbot/
|
|
80
|
-
"@easbot/
|
|
81
|
-
"@easbot/
|
|
82
|
-
"@easbot/
|
|
77
|
+
"@easbot/types": "0.3.22",
|
|
78
|
+
"@easbot/utils": "0.3.22",
|
|
79
|
+
"@easbot/plugin": "0.3.22",
|
|
80
|
+
"@easbot/ollama-sdk": "0.3.22",
|
|
81
|
+
"@easbot/local-model-sdk": "0.3.22",
|
|
82
|
+
"@easbot/llm": "0.3.22"
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
85
|
"@types/node": "^25.9.5",
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
"format": "biome format .",
|
|
106
106
|
"format:fix": "biome format --write .",
|
|
107
107
|
"type-check": "tsc --noEmit",
|
|
108
|
-
"clean": "
|
|
108
|
+
"clean": "rimraf dist node_modules",
|
|
109
109
|
"publish:npm": "bash scripts/publish.sh",
|
|
110
110
|
"publish:npm:win": "powershell -ExecutionPolicy Bypass -File scripts/publish.ps1",
|
|
111
111
|
"build:snapshot": "tsx scripts/build-models-snapshot.ts"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
'use strict';var chunkYDIWY3EH_cjs=require('./chunk-YDIWY3EH.cjs');require('./chunk-3IYCLIOJ.cjs');Object.defineProperty(exports,"createOpenaiCompatible",{enumerable:true,get:function(){return chunkYDIWY3EH_cjs.a}});Object.defineProperty(exports,"openaiCompatible",{enumerable:true,get:function(){return chunkYDIWY3EH_cjs.b}});
|
|
File without changes
|