{"version":3,"sources":["/home/devil/uniai/dist/index.mjs","../interface/Enum.ts","../src/providers/OpenAI.ts","../src/util.ts","../src/providers/Anthropic.ts","../src/providers/GLM.ts","../src/providers/Other.ts","../src/providers/Google.ts","../src/providers/IFlyTek.ts","../src/providers/Baidu.ts","../src/providers/MoonShot.ts","../src/providers/MidJourney.ts","../src/providers/Stability.ts","../src/providers/AliYun.ts","../src/providers/DeepSeek.ts","../src/providers/XAI.ts","../src/providers/Ark.ts","../src/UniAI.ts","../src/Prompt.ts","../src/index.ts"],"names":["ChatModelProvider","EmbedModelProvider","ImagineModelProvider","ModelProvider","OpenAIEmbedModel","OtherEmbedModel","GLMEmbedModel","GoogleEmbedModel","AliEmbedModel","EmbedModel","OpenAIChatModel","AnthropicChatModel","DeepSeekChatModel","GoogleChatModel","GLMChatModel","BaiduChatModel","IFlyTekChatModel","MoonShotChatModel","AliChatModel","XAIChatModel","ArkChatModel","ChatModel","MidJourneyImagineModel","OpenAIImagineModel","StabilityAIImagineModel","IFlyTekImagineModel","ImagineModel","ModelModel","MJTaskType","DETaskType","SDTaskType","SPKTaskType","ImgTaskType","ChatRoleEnum","GPTChatRoleEnum","AnthropicChatRoleEnum","DSChatRoleEnum","SPKChatRoleEnum","GLMChatRoleEnum","GEMChatRoleEnum","BDUChatRoleEnum","PassThrough","Readable","EventSourceStream","writeFileSync","axios","LocalStorage","path","isBase64","localStorage","Infinity","util_default","get","url","params","config","data","post","body","json","str","JSON","parse","e","getRandomKey","arr","Math","floor","random","length","getRandomId","result","rand","toString","getGCD","a","b","getAspect","width","height","gcd","aspectRatioWidth","aspectRatioHeight","setItem","key","value","stringify","getItem","writeFile","filename","filepath","res","join","startsWith","responseType","Buffer","Error","from","allowMime","normalizeImg","imgUrl","hasMimePrefix","test","formatGPTMessage","messages","prompt","role","content","img","tool","audio","contentArr","Array","isArray","text","trim","push","type","normalizedUrl","image_url","input_audio","format","contentTool","filter","v","tool_call_id","contentDev","STORAGE_KEY","API","VER","OpenAI","api","embedding","input","model","dimensions","headers","Authorization","map","object","promptTokens","usage","prompt_tokens","totalTokens","total_tokens","chat","stream","reasoning","top","temperature","maxLength","tools","toolChoice","output","parser","top_p","max_completion_tokens","tool_choice","reasoning_effort","stream_options","include_usage","id","completionTokens","on","obj","choices","delta","tool_calls","completion_tokens","write","destroy","end","pipe","destroyed","message","imagine","n","imgs","i","time","task","tasks","size","response_format","b64_json","Date","now","info","progress","fail","created","taskId","extname","readFileSync","Anthropic","formattedMessages","systemMessage","anthropicTools","anthropicToolChoice","requestBody","textContent","toolUseContent","formatMessage","formatTools","formatToolChoice","max_tokens","system","input_tokens","output_tokens","find","c","function","name","arguments","claudeRole","contentArray","imageContent","formatImage","contents","error","mediaType","base64Data","match","supportedTypes","detectedType","fileExtension","supportedExtensions","supportedMediaTypes","toLowerCase","includes","replace","console","warn","source","media_type","description","input_schema","properties","parameters","required","GLM","proxyAPI","Other","JSONParser","SAFE_SET","category","threshold","Google","request","parts","output_dimensionality","Promise","all","values","block","candidate","system_instruction","generationConfig","topP","maxOutputTokens","safetySettings","candidates","promptFeedback","blockReason","finishReason","base64","mime","toBase64","inline_data","mime_type","createHmac","hostname","CHAT_API","IMAGINE_API","IFlyTek","pass","secret","appid","code","sid","getImagineURL","header","app_id","payload","parameter","domain","host","date","toUTCString","algorithm","signatureOrigin","signatureSha","update","digest","signature","authorizationOrigin","authorization","Baidu","token","getAccessToken","max_output_tokens","error_code","error_msg","cache","expires_in","access_token","grant_type","client_id","client_secret","error_description","USER","ASSISTANT","SYSTEM","MoonShot","MidJourney","proxy","imgProxy","nPrompt","aspect","pro","imageUrl","URL","protocol","port","action","failReason","parseInt","startTime","change","index","Stability","negativePrompt","samples","prompts","weight","text_prompts","Accept","artifacts","AliYun","DeepSeek","XAI","Ark","reasoningEffort","thinking","effort","DEFAULT_MESSAGE","UniAI","openai","anthropic","deepseek","glm","google","fly","apiPassword","appId","apiKey","apiSecret","baidu","secretKey","moon","ali","ark","xai","other","mj","stability","StabilityAI","chatModels","Object","entries","k","provider","models","imgModels","embedModels","setConfig","option","num","Prompt","_Prompt","title","children","getByTitle","deep","child","concat","add","remove","removed","splice","toMarkdown","level","md","repeat","nextLevel","clone","toJSON","getAST","astNode","depth","printTree","indent","isLast","icon","log","split","nextIndent","forEach","fromJSON","jsonObj","fromMarkdown","markdown","lines","root","stack","line","headingMatch","newNode","pop","current","index_default","default"],"mappings":"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","sourcesContent":["// interface/Enum.ts\nvar ChatModelProvider = /* @__PURE__ */ ((ChatModelProvider2) => {\n  ChatModelProvider2[\"OpenAI\"] = \"openai\";\n  ChatModelProvider2[\"Anthropic\"] = \"anthropic\";\n  ChatModelProvider2[\"DeepSeek\"] = \"deepseek\";\n  ChatModelProvider2[\"IFlyTek\"] = \"iflytek\";\n  ChatModelProvider2[\"Baidu\"] = \"baidu\";\n  ChatModelProvider2[\"Google\"] = \"google\";\n  ChatModelProvider2[\"GLM\"] = \"glm\";\n  ChatModelProvider2[\"MoonShot\"] = \"moonshot\";\n  ChatModelProvider2[\"AliYun\"] = \"aliyun\";\n  ChatModelProvider2[\"XAI\"] = \"xai\";\n  ChatModelProvider2[\"ARK\"] = \"ark\";\n  ChatModelProvider2[\"Other\"] = \"other\";\n  return ChatModelProvider2;\n})(ChatModelProvider || {});\nvar EmbedModelProvider = /* @__PURE__ */ ((EmbedModelProvider2) => {\n  EmbedModelProvider2[\"OpenAI\"] = \"openai\";\n  EmbedModelProvider2[\"Google\"] = \"google\";\n  EmbedModelProvider2[\"GLM\"] = \"glm\";\n  EmbedModelProvider2[\"AliYun\"] = \"aliyun\";\n  EmbedModelProvider2[\"Other\"] = \"other\";\n  return EmbedModelProvider2;\n})(EmbedModelProvider || {});\nvar ImagineModelProvider = /* @__PURE__ */ ((ImagineModelProvider2) => {\n  ImagineModelProvider2[\"OpenAI\"] = \"openai\";\n  ImagineModelProvider2[\"MidJourney\"] = \"midjourney\";\n  ImagineModelProvider2[\"StabilityAI\"] = \"stability.ai\";\n  ImagineModelProvider2[\"IFlyTek\"] = \"iflytek\";\n  return ImagineModelProvider2;\n})(ImagineModelProvider || {});\nvar ModelProvider = { ...ChatModelProvider, ...EmbedModelProvider, ...ImagineModelProvider };\nvar OpenAIEmbedModel = /* @__PURE__ */ ((OpenAIEmbedModel2) => {\n  OpenAIEmbedModel2[\"ADA\"] = \"text-embedding-ada-002\";\n  OpenAIEmbedModel2[\"LARGE\"] = \"text-embedding-3-large\";\n  OpenAIEmbedModel2[\"SMALL\"] = \"text-embedding-3-small\";\n  return OpenAIEmbedModel2;\n})(OpenAIEmbedModel || {});\nvar OtherEmbedModel = /* @__PURE__ */ ((OtherEmbedModel2) => {\n  OtherEmbedModel2[\"BGE_M3\"] = \"bge-m3\";\n  OtherEmbedModel2[\"BASE_CHN\"] = \"text2vec-base-chinese\";\n  OtherEmbedModel2[\"LARGE_CHN\"] = \"text2vec-large-chinese\";\n  OtherEmbedModel2[\"BASE_CHN_PARAPH\"] = \"text2vec-base-chinese-paraphrase\";\n  OtherEmbedModel2[\"BASE_CHN_SENTENCE\"] = \"text2vec-base-chinese-sentence\";\n  OtherEmbedModel2[\"BASE_MUL\"] = \"text2vec-base-multilingual\";\n  OtherEmbedModel2[\"PARAPH_MUL_MINI\"] = \"paraphrase-multilingual-MiniLM-L12-v2\";\n  return OtherEmbedModel2;\n})(OtherEmbedModel || {});\nvar GLMEmbedModel = /* @__PURE__ */ ((GLMEmbedModel2) => {\n  GLMEmbedModel2[\"EMBED_2\"] = \"embedding-2\";\n  GLMEmbedModel2[\"EMBED_3\"] = \"embedding-3\";\n  return GLMEmbedModel2;\n})(GLMEmbedModel || {});\nvar GoogleEmbedModel = /* @__PURE__ */ ((GoogleEmbedModel2) => {\n  GoogleEmbedModel2[\"GEM_EMBED\"] = \"gemini-embedding-001\";\n  return GoogleEmbedModel2;\n})(GoogleEmbedModel || {});\nvar AliEmbedModel = /* @__PURE__ */ ((AliEmbedModel2) => {\n  AliEmbedModel2[\"ALI_V3\"] = \"text-embedding-v3\";\n  AliEmbedModel2[\"ALI_V2\"] = \"text-embedding-v2\";\n  AliEmbedModel2[\"ALI_V1\"] = \"text-embedding-v1\";\n  AliEmbedModel2[\"ALI_ASYNC_V2\"] = \"text-embedding-async-v2\";\n  AliEmbedModel2[\"ALI_ASYNC_V1\"] = \"text-embedding-async-v1\";\n  return AliEmbedModel2;\n})(AliEmbedModel || {});\nvar EmbedModel = {\n  ...OpenAIEmbedModel,\n  ...OtherEmbedModel,\n  ...GLMEmbedModel,\n  ...GoogleEmbedModel,\n  ...AliEmbedModel\n};\nvar OpenAIChatModel = /* @__PURE__ */ ((OpenAIChatModel2) => {\n  OpenAIChatModel2[\"GPT3\"] = \"gpt-3.5-turbo\";\n  OpenAIChatModel2[\"GPT4\"] = \"gpt-4\";\n  OpenAIChatModel2[\"GPT4_TURBO\"] = \"gpt-4-turbo\";\n  OpenAIChatModel2[\"GPT_4O_MINI\"] = \"gpt-4o-mini\";\n  OpenAIChatModel2[\"CHAT_GPT_4O\"] = \"chatgpt-4o-latest\";\n  OpenAIChatModel2[\"GPT_4O\"] = \"gpt-4o\";\n  OpenAIChatModel2[\"GPT_4O_AUDIO\"] = \"gpt-4o-audio-preview\";\n  OpenAIChatModel2[\"GPT_4_1\"] = \"gpt-4.1\";\n  OpenAIChatModel2[\"GPT_4_1_MINI\"] = \"gpt-4.1-mini\";\n  OpenAIChatModel2[\"GPT_4_1_NANO\"] = \"gpt-4.1-nano\";\n  OpenAIChatModel2[\"GPT_5\"] = \"gpt-5\";\n  OpenAIChatModel2[\"GPT_5_CODE\"] = \"gpt-5-codex\";\n  OpenAIChatModel2[\"GPT_5_1_CODE\"] = \"gpt-5.1-codex\";\n  OpenAIChatModel2[\"GPT_5_1_CODE_MAX\"] = \"gpt-5.1-codex-max\";\n  OpenAIChatModel2[\"GPT_5_CHAT\"] = \"gpt-5-chat-latest\";\n  OpenAIChatModel2[\"GPT_5_PRO\"] = \"gpt-5-pro\";\n  OpenAIChatModel2[\"GPT_5_MINI\"] = \"gpt-5-mini\";\n  OpenAIChatModel2[\"GPT_5_NANO\"] = \"gpt-5-nano\";\n  OpenAIChatModel2[\"GPT_5_1\"] = \"gpt-5.1\";\n  OpenAIChatModel2[\"GPT_5_1_CHAT\"] = \"gpt-5.1-chat-latest\";\n  OpenAIChatModel2[\"O1\"] = \"o1\";\n  OpenAIChatModel2[\"O1_MINI\"] = \"o1-mini\";\n  OpenAIChatModel2[\"O1_PRO\"] = \"o1-pro\";\n  OpenAIChatModel2[\"O3\"] = \"o3\";\n  OpenAIChatModel2[\"O3_PRO\"] = \"o3-pro\";\n  OpenAIChatModel2[\"O3_DEEP\"] = \"o3-deep-research\";\n  OpenAIChatModel2[\"O3_MINI\"] = \"o3-mini\";\n  OpenAIChatModel2[\"O4_MINI\"] = \"o4-mini\";\n  OpenAIChatModel2[\"O4_DEEP\"] = \"o4-mini-deep-research\";\n  OpenAIChatModel2[\"GPT_OSS_120B\"] = \"gpt-oss-120b\";\n  OpenAIChatModel2[\"GPT_OSS_20B\"] = \"gpt-oss-20b\";\n  return OpenAIChatModel2;\n})(OpenAIChatModel || {});\nvar AnthropicChatModel = /* @__PURE__ */ ((AnthropicChatModel2) => {\n  AnthropicChatModel2[\"CLAUDE_4_5_SONNET\"] = \"claude-sonnet-4-5\";\n  AnthropicChatModel2[\"CLAUDE_4_5_HAIKU\"] = \"claude-haiku-4-5\";\n  AnthropicChatModel2[\"CLAUDE_4_5_OPUS\"] = \"claude-opus-4-5\";\n  AnthropicChatModel2[\"CLAUDE_4_1_OPUS\"] = \"claude-opus-4-1\";\n  AnthropicChatModel2[\"CLAUDE_4_OPUS\"] = \"claude-opus-4-0\";\n  AnthropicChatModel2[\"CLAUDE_4_SONNET\"] = \"claude-sonnet-4-0\";\n  AnthropicChatModel2[\"CLAUDE_3_7_SONNET\"] = \"claude-3-7-sonnet-latest\";\n  AnthropicChatModel2[\"CLAUDE_3_5_HAIKU\"] = \"claude-3-5-haiku-latest\";\n  AnthropicChatModel2[\"CLAUDE_3_HAIKU\"] = \"claude-3-haiku-20240307\";\n  return AnthropicChatModel2;\n})(AnthropicChatModel || {});\nvar DeepSeekChatModel = /* @__PURE__ */ ((DeepSeekChatModel2) => {\n  DeepSeekChatModel2[\"DEEPSEEK_V3\"] = \"deepseek-chat\";\n  DeepSeekChatModel2[\"DEEPSEEK_R1\"] = \"deepseek-reasoner\";\n  return DeepSeekChatModel2;\n})(DeepSeekChatModel || {});\nvar GoogleChatModel = /* @__PURE__ */ ((GoogleChatModel2) => {\n  GoogleChatModel2[\"GEM_FLASH_2\"] = \"gemini-2.0-flash\";\n  GoogleChatModel2[\"GEM_FLASH_2_LITE\"] = \"gemini-2.0-flash-lite\";\n  GoogleChatModel2[\"GEM_PRO_2_5\"] = \"gemini-2.5-pro\";\n  GoogleChatModel2[\"GEM_FLASH_2_5\"] = \"gemini-2.5-flash\";\n  GoogleChatModel2[\"GEM_FLASH_2_5_LITE\"] = \"gemini-2.5-flash-lite\";\n  return GoogleChatModel2;\n})(GoogleChatModel || {});\nvar GLMChatModel = /* @__PURE__ */ ((GLMChatModel2) => {\n  GLMChatModel2[\"GLM_3_TURBO\"] = \"glm-3-turbo\";\n  GLMChatModel2[\"GLM_4\"] = \"glm-4\";\n  GLMChatModel2[\"GLM_4_AIR\"] = \"glm-4-air\";\n  GLMChatModel2[\"GLM_4_AIRX\"] = \"glm-4-airx\";\n  GLMChatModel2[\"GLM_4_FLASH\"] = \"glm-4-flash\";\n  GLMChatModel2[\"GLM_4_FLASHX\"] = \"glm-4-flashx\";\n  GLMChatModel2[\"GLM_4V\"] = \"glm-4v\";\n  GLMChatModel2[\"GLM_4V_PLUS\"] = \"glm-4v-plus\";\n  GLMChatModel2[\"GLM_4_LONG\"] = \"glm-4-long\";\n  GLMChatModel2[\"GLM_4_PLUS\"] = \"glm-4-plus\";\n  return GLMChatModel2;\n})(GLMChatModel || {});\nvar BaiduChatModel = /* @__PURE__ */ ((BaiduChatModel2) => {\n  BaiduChatModel2[\"ERNIE_3_5\"] = \"completions\";\n  BaiduChatModel2[\"ERNIE_3_5_PRE\"] = \"ernie-3.5-8k-preview\";\n  BaiduChatModel2[\"ERNIE_3_5_128K\"] = \"ernie-3.5-128k\";\n  BaiduChatModel2[\"ERNIE_4_0_LATEST\"] = \"ernie-4.0-8k-latest\";\n  BaiduChatModel2[\"ERNIE_4_0_PREVIEW\"] = \"ernie-4.0-8k-preview\";\n  BaiduChatModel2[\"ERNIE_4_0_8K\"] = \"completions_pro\";\n  BaiduChatModel2[\"ERNIE_4_0_TURBO_LATEST\"] = \"ernie-4.0-turbo-8k-latest\";\n  BaiduChatModel2[\"ERNIE_4_0_TURBO_PREVIEW\"] = \"ernie-4.0-turbo-8k-preview\";\n  BaiduChatModel2[\"ERNIE_4_0_TURBO_8K\"] = \"ernie-4.0-turbo-8k\";\n  BaiduChatModel2[\"ERNIE_4_0_TURBO_128K\"] = \"ernie-4.0-turbo-128k\";\n  BaiduChatModel2[\"ERNIE_SPEED_8K\"] = \"ernie_speed\";\n  BaiduChatModel2[\"ERNIE_SPEED_128K\"] = \"ernie-speed-128k\";\n  BaiduChatModel2[\"ERNIE_SPEED_PRO_128K\"] = \"ernie-speed-pro-128k\";\n  BaiduChatModel2[\"ERNIE_LITE_8K\"] = \"ernie-lite-8k\";\n  BaiduChatModel2[\"ERNIE_LITE_PRO_128K\"] = \"ernie-lite-pro-128k\";\n  BaiduChatModel2[\"ERNIE_TINY_8K\"] = \"ernie-tiny-8k\";\n  BaiduChatModel2[\"ERNIE_CHAR_8K\"] = \"ernie-char-8k\";\n  BaiduChatModel2[\"ERNIE_CHAR_FICTION_8K\"] = \"ernie-char-fiction-8k\";\n  BaiduChatModel2[\"ERNIE_NOVEL_8K\"] = \"ernie-novel-8k\";\n  return BaiduChatModel2;\n})(BaiduChatModel || {});\nvar IFlyTekChatModel = /* @__PURE__ */ ((IFlyTekChatModel2) => {\n  IFlyTekChatModel2[\"SPARK_LITE\"] = \"lite\";\n  IFlyTekChatModel2[\"SPARK_PRO\"] = \"generalv3\";\n  IFlyTekChatModel2[\"SPARK_PRO_128K\"] = \"pro-128k\";\n  IFlyTekChatModel2[\"SPARK_MAX\"] = \"generalv3.5\";\n  IFlyTekChatModel2[\"SPARK_MAX_32K\"] = \"max-32k\";\n  IFlyTekChatModel2[\"SPARK_ULTRA\"] = \"4.0Ultra\";\n  return IFlyTekChatModel2;\n})(IFlyTekChatModel || {});\nvar MoonShotChatModel = /* @__PURE__ */ ((MoonShotChatModel2) => {\n  MoonShotChatModel2[\"KIMI_K2_0711_PREVIEW\"] = \"kimi-k2-0711-preview\";\n  MoonShotChatModel2[\"MOON_V1_8K\"] = \"moonshot-v1-8k\";\n  MoonShotChatModel2[\"MOON_V1_32K\"] = \"moonshot-v1-32k\";\n  MoonShotChatModel2[\"MOON_V1_128K\"] = \"moonshot-v1-128k\";\n  MoonShotChatModel2[\"MOON_V1_AUTO\"] = \"moonshot-v1-auto\";\n  MoonShotChatModel2[\"KIMI_LATEST\"] = \"kimi-latest\";\n  MoonShotChatModel2[\"MOON_V1_8K_VISION_PREVIEW\"] = \"moonshot-v1-8k-vision-preview\";\n  MoonShotChatModel2[\"MOON_V1_32K_VISION_PREVIEW\"] = \"moonshot-v1-32k-vision-preview\";\n  MoonShotChatModel2[\"MOON_V1_128K_VISION_PREVIEW\"] = \"moonshot-v1-128k-vision-preview\";\n  MoonShotChatModel2[\"KIMI_THINKING_PREVIEW\"] = \"kimi-thinking-preview\";\n  return MoonShotChatModel2;\n})(MoonShotChatModel || {});\nvar AliChatModel = /* @__PURE__ */ ((AliChatModel2) => {\n  AliChatModel2[\"QWEN3_MAX\"] = \"qwen3-max\";\n  AliChatModel2[\"QWEN_MAX\"] = \"qwen-max\";\n  AliChatModel2[\"QWEN_PLUS\"] = \"qwen-plus\";\n  AliChatModel2[\"QWEN_FLASH\"] = \"qwen-flash\";\n  AliChatModel2[\"QWEN_TURBO\"] = \"qwen-turbo\";\n  AliChatModel2[\"QWQ_PLUS\"] = \"qwq-plus\";\n  AliChatModel2[\"QVQ_MAX\"] = \"qvq-max\";\n  AliChatModel2[\"QVQ_PLUS\"] = \"qvq-plus\";\n  AliChatModel2[\"QWEN_LONG\"] = \"qwen-long\";\n  AliChatModel2[\"QWEN_CODE_TURBO\"] = \"qwen-coder-turbo\";\n  AliChatModel2[\"QWEN_CODE_PLUS\"] = \"qwen3-coder-plus\";\n  AliChatModel2[\"QWEN_CODE_FLASH\"] = \"qwen3-coder-flash\";\n  AliChatModel2[\"QWEN_MATH\"] = \"qwen-math-plus\";\n  AliChatModel2[\"QWEN_VL_MAX\"] = \"qwen-vl-max\";\n  AliChatModel2[\"QWEN_VL_PLUS\"] = \"qwen-vl-plus\";\n  return AliChatModel2;\n})(AliChatModel || {});\nvar XAIChatModel = /* @__PURE__ */ ((XAIChatModel2) => {\n  XAIChatModel2[\"GROK_CODE_FAST_1\"] = \"grok-code-fast-1\";\n  XAIChatModel2[\"GROK4_FAST_REASONING\"] = \"grok-4-fast-reasoning\";\n  XAIChatModel2[\"GROK4_FAST_NON_REASONING\"] = \"grok-4-fast-non-reasoning\";\n  XAIChatModel2[\"GROK4_0709\"] = \"grok-4-0709\";\n  XAIChatModel2[\"GROK3_MINI\"] = \"grok-3-mini\";\n  XAIChatModel2[\"GROK3\"] = \"grok-3\";\n  XAIChatModel2[\"GROK2_VISION_1212_US_EAST_1\"] = \"grok-2-vision-1212us-east-1\";\n  XAIChatModel2[\"GROK2_VISION_1212_EU_WEST_1\"] = \"grok-2-vision-1212eu-west-1\";\n  return XAIChatModel2;\n})(XAIChatModel || {});\nvar ArkChatModel = /* @__PURE__ */ ((ArkChatModel2) => {\n  ArkChatModel2[\"DOUBAO_1_5_THINKING_PRO\"] = \"doubao-1-5-thinking-pro-m-250428\";\n  ArkChatModel2[\"DOUBAO_1_5_THINKING_VISION_PRO\"] = \"doubao-1-5-thinking-vision-pro-250428\";\n  ArkChatModel2[\"DOUBAO_SEED_1_6\"] = \"doubao-seed-1-6-251015\";\n  ArkChatModel2[\"DOUBAO_SEED_1_6_VISION\"] = \"doubao-seed-1-6-vision-250815\";\n  ArkChatModel2[\"DOUBAO_SEED_1_6_FLASH\"] = \"doubao-seed-1-6-flash-250828\";\n  ArkChatModel2[\"DOUBAO_SEED_1_6_LITE\"] = \"doubao-seed-1-6-lite-251015\";\n  ArkChatModel2[\"DOUBAO_SEED_1_6_THINKING\"] = \"doubao-seed-1-6-thinking-250715\";\n  ArkChatModel2[\"DOUBAO_SEED_CODE\"] = \"doubao-seed-code-preview-251028\";\n  ArkChatModel2[\"DEEPSEEK_V3\"] = \"deepseek-v3-250324\";\n  ArkChatModel2[\"DEEPSEEK_V3_1\"] = \"deepseek-v3-1-250821\";\n  ArkChatModel2[\"DEEPSEEK_V3_2\"] = \"deepseek-v3-2-251201\";\n  ArkChatModel2[\"KIMI_K2\"] = \"kimi-k2-250905\";\n  ArkChatModel2[\"KIMI_K2_THINK\"] = \"kimi-k2-thinking-251104\";\n  return ArkChatModel2;\n})(ArkChatModel || {});\nvar ChatModel = {\n  ...OpenAIChatModel,\n  ...AnthropicChatModel,\n  ...DeepSeekChatModel,\n  ...BaiduChatModel,\n  ...GLMChatModel,\n  ...IFlyTekChatModel,\n  ...GoogleChatModel,\n  ...OpenAIChatModel,\n  ...MoonShotChatModel,\n  ...AliChatModel,\n  ...XAIChatModel,\n  ...ArkChatModel\n};\nvar MidJourneyImagineModel = /* @__PURE__ */ ((MidJourneyImagineModel2) => {\n  MidJourneyImagineModel2[\"MJ\"] = \"midjourney\";\n  return MidJourneyImagineModel2;\n})(MidJourneyImagineModel || {});\nvar OpenAIImagineModel = /* @__PURE__ */ ((OpenAIImagineModel2) => {\n  OpenAIImagineModel2[\"DALL_E_2\"] = \"dall-e-2\";\n  OpenAIImagineModel2[\"DALL_E_3\"] = \"dall-e-3\";\n  return OpenAIImagineModel2;\n})(OpenAIImagineModel || {});\nvar StabilityAIImagineModel = /* @__PURE__ */ ((StabilityAIImagineModel2) => {\n  StabilityAIImagineModel2[\"SD_1_6\"] = \"stable-diffusion-v1-6\";\n  StabilityAIImagineModel2[\"SD_XL_1024\"] = \"stable-diffusion-xl-1024-v1-0\";\n  return StabilityAIImagineModel2;\n})(StabilityAIImagineModel || {});\nvar IFlyTekImagineModel = /* @__PURE__ */ ((IFlyTekImagineModel2) => {\n  IFlyTekImagineModel2[\"V2\"] = \"v2.1\";\n  return IFlyTekImagineModel2;\n})(IFlyTekImagineModel || {});\nvar ImagineModel = {\n  ...OpenAIImagineModel,\n  ...MidJourneyImagineModel,\n  ...StabilityAIImagineModel,\n  ...IFlyTekImagineModel\n};\nvar ModelModel = { ...ChatModel, ...ImagineModel, ...EmbedModel };\nvar MJTaskType = /* @__PURE__ */ ((MJTaskType4) => {\n  MJTaskType4[\"IMAGINE\"] = \"IMAGINE\";\n  MJTaskType4[\"UPSCALE\"] = \"UPSCALE\";\n  MJTaskType4[\"VARIATION\"] = \"VARIATION\";\n  MJTaskType4[\"REROLL\"] = \"REROLL\";\n  MJTaskType4[\"DESCRIBE\"] = \"DESCRIBE\";\n  MJTaskType4[\"BLEND\"] = \"BLEND\";\n  return MJTaskType4;\n})(MJTaskType || {});\nvar DETaskType = /* @__PURE__ */ ((DETaskType2) => {\n  DETaskType2[\"GENERATION\"] = \"generations\";\n  DETaskType2[\"EDIT\"] = \"edits\";\n  DETaskType2[\"VARIATION\"] = \"variation\";\n  return DETaskType2;\n})(DETaskType || {});\nvar SDTaskType = /* @__PURE__ */ ((SDTaskType2) => {\n  SDTaskType2[\"GENERATION\"] = \"generation\";\n  return SDTaskType2;\n})(SDTaskType || {});\nvar SPKTaskType = /* @__PURE__ */ ((SPKTaskType2) => {\n  SPKTaskType2[\"GENERATION\"] = \"generation\";\n  return SPKTaskType2;\n})(SPKTaskType || {});\nvar ImgTaskType = { ...MJTaskType, ...DETaskType, ...SDTaskType, ...SPKTaskType };\nvar ChatRoleEnum = /* @__PURE__ */ ((ChatRoleEnum2) => {\n  ChatRoleEnum2[\"SYSTEM\"] = \"system\";\n  ChatRoleEnum2[\"USER\"] = \"user\";\n  ChatRoleEnum2[\"ASSISTANT\"] = \"assistant\";\n  ChatRoleEnum2[\"TOOL\"] = \"tool\";\n  ChatRoleEnum2[\"DEV\"] = \"developer\";\n  return ChatRoleEnum2;\n})(ChatRoleEnum || {});\nvar GPTChatRoleEnum = /* @__PURE__ */ ((GPTChatRoleEnum2) => {\n  GPTChatRoleEnum2[\"SYSTEM\"] = \"system\";\n  GPTChatRoleEnum2[\"USER\"] = \"user\";\n  GPTChatRoleEnum2[\"ASSISTANT\"] = \"assistant\";\n  GPTChatRoleEnum2[\"DEV\"] = \"developer\";\n  GPTChatRoleEnum2[\"TOOL\"] = \"tool\";\n  return GPTChatRoleEnum2;\n})(GPTChatRoleEnum || {});\nvar AnthropicChatRoleEnum = /* @__PURE__ */ ((AnthropicChatRoleEnum2) => {\n  AnthropicChatRoleEnum2[\"USER\"] = \"user\";\n  AnthropicChatRoleEnum2[\"ASSISTANT\"] = \"assistant\";\n  return AnthropicChatRoleEnum2;\n})(AnthropicChatRoleEnum || {});\nvar DSChatRoleEnum = /* @__PURE__ */ ((DSChatRoleEnum2) => {\n  DSChatRoleEnum2[\"SYSTEM\"] = \"system\";\n  DSChatRoleEnum2[\"USER\"] = \"user\";\n  DSChatRoleEnum2[\"ASSISTANT\"] = \"assistant\";\n  DSChatRoleEnum2[\"TOOL\"] = \"tool\";\n  return DSChatRoleEnum2;\n})(DSChatRoleEnum || {});\nvar SPKChatRoleEnum = /* @__PURE__ */ ((SPKChatRoleEnum2) => {\n  SPKChatRoleEnum2[\"USER\"] = \"user\";\n  SPKChatRoleEnum2[\"ASSISTANT\"] = \"assistant\";\n  SPKChatRoleEnum2[\"SYSTEM\"] = \"system\";\n  SPKChatRoleEnum2[\"TOOL\"] = \"tool\";\n  return SPKChatRoleEnum2;\n})(SPKChatRoleEnum || {});\nvar GLMChatRoleEnum = /* @__PURE__ */ ((GLMChatRoleEnum2) => {\n  GLMChatRoleEnum2[\"SYSTEM\"] = \"system\";\n  GLMChatRoleEnum2[\"USER\"] = \"user\";\n  GLMChatRoleEnum2[\"ASSISTANT\"] = \"assistant\";\n  GLMChatRoleEnum2[\"TOOL\"] = \"tool\";\n  return GLMChatRoleEnum2;\n})(GLMChatRoleEnum || {});\nvar GEMChatRoleEnum = /* @__PURE__ */ ((GEMChatRoleEnum2) => {\n  GEMChatRoleEnum2[\"USER\"] = \"user\";\n  GEMChatRoleEnum2[\"MODEL\"] = \"model\";\n  return GEMChatRoleEnum2;\n})(GEMChatRoleEnum || {});\nvar BDUChatRoleEnum = /* @__PURE__ */ ((BDUChatRoleEnum2) => {\n  BDUChatRoleEnum2[\"USER\"] = \"user\";\n  BDUChatRoleEnum2[\"ASSISTANT\"] = \"assistant\";\n  return BDUChatRoleEnum2;\n})(BDUChatRoleEnum || {});\n\n// src/providers/OpenAI.ts\nimport { PassThrough, Readable } from \"stream\";\nimport EventSourceStream from \"@server-sent-stream/node\";\n\n// src/util.ts\nimport { writeFileSync } from \"fs\";\nimport axios from \"axios\";\nimport { LocalStorage } from \"node-localstorage\";\nimport path from \"path\";\nimport isBase64 from \"is-base64\";\nvar localStorage = new LocalStorage(\"./cache\", Infinity);\nvar util_default = {\n  /**\n   * Performs an HTTP GET request.\n   *\n   * @param url - The URL to make the request to.\n   * @param params - Optional request parameters.\n   * @param config - Optional Axios request configuration.\n   * @returns A Promise that resolves with the response data.\n   */\n  async get(url, params, config) {\n    return (await axios.get(url, { params, ...config })).data;\n  },\n  /**\n   * Performs an HTTP POST request.\n   *\n   * @param url - The URL to make the request to.\n   * @param body - The request body.\n   * @param config - Optional Axios request configuration.\n   * @returns A Promise that resolves with the response data.\n   */\n  async post(url, body, config) {\n    return (await axios.post(url, body, config)).data;\n  },\n  /**\n   * Parses JSON from a string and returns it as a generic type T.\n   *\n   * @param str - The JSON string to parse.\n   * @returns The parsed JSON as a generic type T.\n   */\n  json(str) {\n    try {\n      if (!str) return null;\n      return JSON.parse(str);\n    } catch (e) {\n      return null;\n    }\n  },\n  getRandomKey(arr) {\n    return arr[Math.floor(Math.random() * arr.length)];\n  },\n  getRandomId(length = 16) {\n    let result = \"\";\n    while (result.length < length) {\n      let rand = Math.floor(Math.random() * 10);\n      if (result.length === 0 && rand === 0) continue;\n      result += rand.toString();\n    }\n    return result;\n  },\n  /**\n   * Computes the greatest common divisor (GCD) of two numbers using Euclidean algorithm.\n   *\n   * @param a - The first number.\n   * @param b - The second number.\n   * @returns The GCD of the two numbers.\n   */\n  getGCD(a, b) {\n    if (b === 0) return a;\n    return this.getGCD(b, a % b);\n  },\n  /**\n   * Calculates and returns the aspect ratio of a width and height.\n   *\n   * @param width - The width dimension.\n   * @param height - The height dimension.\n   * @returns The aspect ratio in the format \"width:height\".\n   */\n  getAspect(width, height) {\n    if (!width || !height) return \"1:1\";\n    const gcd = this.getGCD(width, height);\n    const aspectRatioWidth = width / gcd;\n    const aspectRatioHeight = height / gcd;\n    return `${aspectRatioWidth}:${aspectRatioHeight}`;\n  },\n  /**\n   * Stores an item in local storage with the specified key.\n   *\n   * @param key - The key under which to store the item.\n   * @param value - The value to be stored.\n   */\n  setItem(key, value) {\n    localStorage.setItem(key, JSON.stringify(value));\n  },\n  /**\n   * Retrieves an item from local storage by its key and parses it as a generic type T.\n   *\n   * @param key - The key of the item to retrieve.\n   * @returns The parsed item as a generic type T.\n   */\n  getItem(key) {\n    return this.json(localStorage.getItem(key));\n  },\n  /**\n   * This method is used to write given data to a file. The data can either be a base64 string or an HTTP/HTTPS URL.\n   * If the data is a URL, the method fetches the data as a readable stream and writes it to the file.\n   * If it's a base64 string, it writes it directly to the file.\n   * @param data - The data to be written to the file. Can be a base64 string or a HTTP/HTTPS img URL.\n   * @param filename - The name of the file where the data will be written. If not provided, a unique filename will be generated.\n   * @returns - The file path where the data was written.\n   */\n  async writeFile(data, filename = \"\") {\n    const filepath = path.join(\"./cache\", filename);\n    if (data.startsWith(\"http://\") || data.startsWith(\"https://\")) {\n      const res = await this.get(data, {}, { responseType: \"arraybuffer\" });\n      if (!(res instanceof Buffer)) throw new Error(\"Img is not a buffer\");\n      writeFileSync(filepath, res);\n    } else writeFileSync(filepath, Buffer.from(data, \"base64\"));\n    return filepath;\n  },\n  /**\n   * Checks if a given string is a valid base64 encoded string.\n   *\n   * @param data - The string to check.\n   * @param allowMime - Whether to allow MIME type prefixes (default: true).\n   * @returns True if the string is a valid base64 encoded string, false otherwise.\n   */\n  isBase64(data, allowMime = true) {\n    return isBase64(data, { allowMime });\n  },\n  /**\n   * Normalizes an image URL by ensuring it has the correct base64 MIME prefix.\n   *\n   * @param imgUrl - The image URL to normalize.\n   * @returns The normalized image URL with the appropriate MIME prefix.\n   */\n  normalizeImg(imgUrl) {\n    const hasMimePrefix = /^data:.*;base64,/.test(imgUrl);\n    if (!hasMimePrefix && isBase64(imgUrl, { allowMime: false })) return `data:image/png;base64,${imgUrl}`;\n    return imgUrl;\n  },\n  /**\n   * Formats chat messages according to the GPT model's message format.\n   *\n   * @param messages - An array of chat messages.\n   * @returns Formatted messages compatible with the GPT model.\n   */\n  formatGPTMessage(messages) {\n    const prompt = [];\n    for (const { role, content, img, tool, audio } of messages) {\n      let contentArr = [];\n      if (img || audio || Array.isArray(content)) {\n        for (const text of Array.isArray(content) ? content : [content])\n          if (text.trim()) contentArr.push({ type: \"text\", text });\n        if (img)\n          for (const url of Array.isArray(img) ? img : [img]) {\n            const normalizedUrl = this.normalizeImg(url);\n            contentArr.push({ type: \"image_url\", image_url: { url: normalizedUrl } });\n          }\n        if (audio)\n          for (const data of Array.isArray(audio) ? audio : [audio])\n            contentArr.push({ type: \"input_audio\", input_audio: { data, format: \"wav\" } });\n      } else contentArr = content;\n      switch (role) {\n        case \"user\" /* USER */:\n          prompt.push({ role, content: contentArr });\n          break;\n        case \"tool\" /* TOOL */:\n          let contentTool = \"\";\n          if (Array.isArray(contentArr))\n            contentTool = contentArr.filter((v) => v.type === \"text\");\n          else contentTool = contentArr;\n          prompt.push({ role, content: contentTool, tool_call_id: tool || \"\" });\n          break;\n        case \"developer\" /* DEV */:\n          let contentDev = \"\";\n          if (Array.isArray(contentArr))\n            contentDev = contentArr.filter((v) => v.type === \"text\");\n          else contentDev = contentArr;\n          prompt.push({ role, content: contentDev });\n          break;\n        default:\n          prompt.push({ role, content });\n          break;\n      }\n    }\n    return prompt;\n  }\n};\n\n// src/providers/OpenAI.ts\nvar STORAGE_KEY = \"task_open_ai\";\nvar API = \"https://api.openai.com\";\nvar VER = \"v1\";\nvar OpenAI = class {\n  /**\n   * Constructor for the OpenAI class.\n   *\n   * @param key - The API key for OpenAI.\n   * @param api - The API endpoint for proxy (optional).\n   */\n  constructor(key, api = API) {\n    this.key = key;\n    this.api = api;\n  }\n  config(key, api = API) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Fetches embeddings for input text.\n   *\n   * @param input - An array of input strings.\n   * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n   * @returns A promise resolving to the embedding response.\n   */\n  async embedding(input, model = \"text-embedding-ada-002\" /* ADA */, dimensions = 1536) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"OpenAI API key is not set in config\");\n    const res = await util_default.post(\n      `${this.api}/${VER}/embeddings`,\n      { model, input, dimensions },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: \"json\" }\n    );\n    const data = {\n      embedding: res.data.map((v) => v.embedding),\n      object: \"embedding\",\n      model,\n      promptTokens: res.usage.prompt_tokens || 0,\n      totalTokens: res.usage.total_tokens || 0\n    };\n    return data;\n  }\n  /**\n   * Sends messages to the GPT chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: gpt-3.5-turbo).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @param tools - Tools for model to use (optional).\n   * @param toolChoice - Controls which (if any) tool is called by the model: none, required, auto (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"gpt-4.1\" /* GPT_4_1 */, stream = false, reasoning, top, temperature, maxLength, tools, toolChoice) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"OpenAI API key is not set in config\");\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature > 1) temperature = 1;\n    }\n    if (typeof top === \"number\") {\n      if (top < 0) top = 0;\n      if (top > 1) top = 1;\n    }\n    const res = await util_default.post(\n      `${this.api}/${VER}/chat/completions`,\n      {\n        model,\n        messages: util_default.formatGPTMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_completion_tokens: maxLength,\n        tools,\n        tool_choice: toolChoice,\n        reasoning_effort: reasoning,\n        stream_options: stream ? { include_usage: true } : void 0\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      id: \"\",\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable) {\n      const output = new PassThrough();\n      const parser = new EventSourceStream();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.id = obj.id;\n          data.content = obj.choices[0]?.delta?.content || \"\";\n          if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls;\n          data.model = obj.model;\n          data.object = obj.object;\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(parser);\n      output.on(\"close\", () => {\n        if (!res.destroyed) res.destroy(new Error(\"Downstream closed, aborting upstream SSE\"));\n        if (!parser.destroyed) parser.destroy();\n      });\n      return output;\n    } else {\n      data.id = res.id;\n      data.content = res.choices[0]?.message?.content || \"\";\n      if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls;\n      data.model = res.model;\n      data.object = res.object;\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n  /**\n   * Generates images based on a prompt.\n   *\n   * @param prompt - The prompt for image generation.\n   * @param width - Image width (default: 1024).\n   * @param height - Image height (default: 1024).\n   * @param n - Number of images to generate (default: 1).\n   * @param model - Model choice (default: dall-e-3).\n   * @returns A promise resolving to the image generation response.\n   */\n  async imagine(prompt, width = 1024, height = 1024, n = 1, model = \"dall-e-3\" /* DALL_E_3 */) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"OpenAI API key is not set in config\");\n    const res = await util_default.post(\n      `${this.api}/${VER}/images/${\"generations\" /* GENERATION */}`,\n      { model, prompt, n, size: `${width}x${height}`, response_format: \"b64_json\" },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: \"json\" }\n    );\n    const id = util_default.getRandomId();\n    const imgs = [];\n    if (res.data) for (const i in res.data) imgs.push(await util_default.writeFile(res.data[i].b64_json, `${id}-${i}.png`));\n    const time = Date.now();\n    const task = {\n      id,\n      type: \"generations\" /* GENERATION */,\n      info: \"success\",\n      progress: 100,\n      imgs,\n      fail: \"\",\n      created: time,\n      model\n    };\n    const tasks = util_default.getItem(STORAGE_KEY) || [];\n    tasks.push(task);\n    util_default.setItem(STORAGE_KEY, tasks);\n    return { taskId: task.id, time };\n  }\n  /**\n   * Simulate tasks.\n   *\n   * @param id - The task ID to retrieve (optional).\n   * @returns An array of task responses or a specific task by ID.\n   */\n  task(id) {\n    const tasks = util_default.getItem(STORAGE_KEY) || [];\n    if (id) return tasks.filter((v) => v.id === id);\n    else return tasks;\n  }\n};\n\n// src/providers/Anthropic.ts\nimport { PassThrough as PassThrough2, Readable as Readable2 } from \"stream\";\nimport EventSourceStream2 from \"@server-sent-stream/node\";\nimport { extname } from \"path\";\nimport { readFileSync } from \"fs\";\nvar API2 = \"https://api.anthropic.com\";\nvar VER2 = \"v1\";\nvar Anthropic = class {\n  /**\n   * Constructor for the Anthropic class.\n   *\n   * @param key - The API key for Anthropic.\n   * @param api - The API endpoint for proxy (optional).\n   */\n  constructor(key, api = API2) {\n    this.key = key;\n    this.api = api;\n  }\n  config(key, api = API2) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Sends messages to the Claude chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: claude-3-5-sonnet).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @param tools - Tools for model to use (optional).\n   * @param toolChoice - Controls which (if any) tool is called by the model (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"claude-sonnet-4-0\" /* CLAUDE_4_SONNET */, stream = false, top, temperature, maxLength, tools, toolChoice) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"Anthropic API key is not set in config\");\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature > 1) temperature = 1;\n    }\n    if (typeof top === \"number\") {\n      if (top < 0) top = 0;\n      if (top > 1) top = 1;\n    }\n    const { formattedMessages, systemMessage } = await this.formatMessage(messages);\n    const anthropicTools = tools ? this.formatTools(tools) : void 0;\n    const anthropicToolChoice = toolChoice ? this.formatToolChoice(toolChoice) : void 0;\n    const requestBody = {\n      model,\n      max_tokens: maxLength || 4096,\n      messages: formattedMessages,\n      stream,\n      temperature,\n      top_p: top,\n      ...systemMessage && { system: systemMessage },\n      ...anthropicTools && { tools: anthropicTools },\n      ...anthropicToolChoice && { tool_choice: anthropicToolChoice }\n    };\n    const res = await util_default.post(\n      `${this.api}/${VER2}/messages`,\n      requestBody,\n      {\n        headers: {\n          \"x-api-key\": key,\n          \"anthropic-version\": \"2023-06-01\",\n          \"Content-Type\": \"application/json\"\n        },\n        responseType: stream ? \"stream\" : \"json\"\n      }\n    );\n    const data = {\n      id: \"\",\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable2) {\n      const output = new PassThrough2();\n      const parser = new EventSourceStream2();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj?.message?.id) data.id = obj.message.id;\n        if (obj) {\n          switch (obj.type) {\n            case \"message_start\":\n              if (obj.message?.usage) {\n                data.promptTokens = obj.message.usage.input_tokens;\n              }\n              break;\n            case \"content_block_delta\":\n              if (obj.delta?.text) {\n                data.content = obj.delta.text;\n                data.object = \"chat.completion.chunk\";\n                output.write(JSON.stringify(data));\n              }\n              break;\n            case \"message_delta\":\n              if (obj.delta?.usage?.output_tokens) {\n                data.completionTokens = obj.delta.usage.output_tokens;\n                data.totalTokens = data.promptTokens + data.completionTokens;\n              }\n              break;\n            case \"message_stop\":\n              break;\n          }\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(parser);\n      output.on(\"close\", () => {\n        if (!res.destroyed) res.destroy(new Error(\"Downstream closed, aborting upstream SSE\"));\n        if (!parser.destroyed) parser.destroy();\n      });\n      return output;\n    } else {\n      if (res.content && res.content.length > 0) {\n        const textContent = res.content.find((c) => c.type === \"text\");\n        if (textContent) data.content = textContent.text || \"\";\n        const toolUseContent = res.content.filter((c) => c.type === \"tool_use\");\n        if (toolUseContent.length > 0) {\n          data.tools = toolUseContent.map((tool) => ({\n            id: tool.id,\n            type: \"function\",\n            function: {\n              name: tool.name,\n              arguments: JSON.stringify(tool.input)\n            }\n          }));\n        }\n      }\n      data.id = res.id;\n      data.model = res.model;\n      data.object = \"chat.completion\";\n      data.promptTokens = res.usage?.input_tokens || 0;\n      data.completionTokens = res.usage?.output_tokens || 0;\n      data.totalTokens = data.promptTokens + data.completionTokens;\n      return data;\n    }\n  }\n  /**\n   * Formats chat messages according to the Claude model's message format.\n   *\n   * @param messages - An array of chat messages.\n   * @returns Formatted messages and system message compatible with the Claude model.\n   */\n  async formatMessage(messages) {\n    const formattedMessages = [];\n    let systemMessage = \"\";\n    for (const { role, content, img, audio } of messages) {\n      if (role === \"system\" /* SYSTEM */) {\n        if (typeof content === \"string\") systemMessage += content + \"\\n\";\n        else if (Array.isArray(content)) {\n          const contentArr = content.map((c) => typeof c === \"string\" ? c : \"\").filter((c) => c);\n          systemMessage += contentArr.join(\"\\n\") + \"\\n\";\n        }\n        continue;\n      }\n      if (role === \"tool\" /* TOOL */) {\n        formattedMessages.push({\n          role: \"user\" /* USER */,\n          content: `Tool result: ${content.toString()}`\n        });\n        continue;\n      }\n      let claudeRole;\n      switch (role) {\n        case \"user\" /* USER */:\n          claudeRole = \"user\" /* USER */;\n          break;\n        case \"assistant\" /* ASSISTANT */:\n          claudeRole = \"assistant\" /* ASSISTANT */;\n          break;\n        default:\n          claudeRole = \"user\" /* USER */;\n          break;\n      }\n      if (img || audio || Array.isArray(content)) {\n        const contentArray = [];\n        for (const text of Array.isArray(content) ? content : [content])\n          if (typeof text === \"string\" && text.trim()) contentArray.push({ type: \"text\", text });\n        if (img) {\n          const imageContent = await this.formatImage(img);\n          if (imageContent) contentArray.push(...imageContent);\n        }\n        if (audio)\n          contentArray.push({ type: \"text\", text: \"[Audio input provided but not supported by Claude API]\" });\n        formattedMessages.push({ role: claudeRole, content: contentArray });\n      } else formattedMessages.push({ role: claudeRole, content });\n    }\n    return { formattedMessages, systemMessage: systemMessage.trim() || void 0 };\n  }\n  /**\n   * Format image for Claude API\n   * Supports: image/jpeg, image/png, image/gif, and image/webp\n   */\n  async formatImage(imgs) {\n    try {\n      const contents = [];\n      for (const img of Array.isArray(imgs) ? imgs : [imgs]) {\n        let mediaType = \"image/png\";\n        let base64Data = \"\";\n        if (util_default.isBase64(img)) {\n          if (util_default.isBase64(img, false)) {\n            base64Data = img;\n            mediaType = \"image/png\";\n          } else {\n            const match = img.match(/^data:image\\/([a-zA-Z]*);base64,([^\\\"']*)$/);\n            if (match) {\n              mediaType = `image/${match[1]}`;\n              base64Data = match[2];\n            }\n          }\n        } else if (img.startsWith(\"http\")) {\n          const res = await util_default.get(img, {}, { responseType: \"arraybuffer\" });\n          const supportedTypes = [\"jpeg\", \"jpg\", \"png\", \"gif\", \"webp\"];\n          const detectedType = supportedTypes.find(\n            (type) => img.toLowerCase().includes(`.${type}`) || img.toLowerCase().includes(`/${type}`)\n          );\n          if (detectedType) mediaType = `image/${detectedType === \"jpg\" ? \"jpeg\" : detectedType}`;\n          else mediaType = \"image/jpeg\";\n          base64Data = res.toString(\"base64\");\n        } else {\n          const fileExtension = extname(img).replace(\".\", \"\").toLowerCase();\n          const supportedExtensions = [\"jpeg\", \"jpg\", \"png\", \"gif\", \"webp\"];\n          if (supportedExtensions.includes(fileExtension)) {\n            mediaType = `image/${fileExtension === \"jpg\" ? \"jpeg\" : fileExtension}`;\n            base64Data = readFileSync(img).toString(\"base64\");\n          } else {\n            throw new Error(\n              `Unsupported image format: ${fileExtension}. Anthropic supports: jpeg, png, gif, webp`\n            );\n          }\n        }\n        if (!base64Data) throw new Error(\"Failed to convert image to base64\");\n        const supportedMediaTypes = [\"image/jpeg\", \"image/png\", \"image/gif\", \"image/webp\"];\n        if (!supportedMediaTypes.includes(mediaType)) {\n          console.warn(`Unsupported media type: ${mediaType}, defaulting to image/png`);\n          mediaType = \"image/png\";\n        }\n        contents.push({\n          type: \"image\",\n          source: { type: \"base64\", media_type: mediaType, data: base64Data }\n        });\n      }\n      return contents;\n    } catch (error) {\n      console.warn(\"Failed to format image for Claude:\", error);\n      return [];\n    }\n  }\n  /**\n   * Convert OpenAI tools format to Anthropic tools format\n   */\n  formatTools(tools) {\n    return tools.map((tool) => ({\n      name: tool.type,\n      description: tool.function.description || \"\",\n      input_schema: {\n        type: \"object\",\n        properties: tool.function.parameters?.properties || {},\n        required: Array.isArray(tool.function.parameters?.required) ? tool.function.parameters.required : []\n      }\n    }));\n  }\n  /**\n   * Convert OpenAI tool choice format to Anthropic tool choice format\n   */\n  formatToolChoice(toolChoice) {\n    if (typeof toolChoice === \"string\") {\n      switch (toolChoice) {\n        case \"none\":\n          return void 0;\n        // Claude doesn't have explicit \"none\" option\n        case \"auto\":\n          return { type: \"auto\" };\n        case \"required\":\n          return { type: \"any\" };\n        default:\n          return { type: \"auto\" };\n      }\n    } else if (typeof toolChoice === \"object\" && toolChoice.type === \"function\") {\n      return {\n        type: \"tool\",\n        name: toolChoice.function.name\n      };\n    }\n    return void 0;\n  }\n};\n\n// src/providers/GLM.ts\nimport { PassThrough as PassThrough3, Readable as Readable3 } from \"stream\";\nimport EventSourceStream3 from \"@server-sent-stream/node\";\nvar API3 = \"https://open.bigmodel.cn\";\nvar GLM = class {\n  constructor(key, proxyAPI = API3) {\n    this.key = key;\n    this.proxyAPI = proxyAPI;\n  }\n  config(key, proxyAPI = API3) {\n    this.key = key;\n    this.proxyAPI = proxyAPI;\n  }\n  /**\n   * Fetches embeddings for input text.\n   *\n   * @param input - An array of input strings.\n   * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n   * @returns A promise resolving to the embedding response.\n   */\n  async embedding(input, model = \"embedding-2\" /* EMBED_2 */, dimensions = 1024) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"ZhiPu GLM API key is not set in config\");\n    const res = await util_default.post(\n      `${this.proxyAPI}/api/paas/v4/embeddings`,\n      { model, input, dimensions },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: \"json\" }\n    );\n    return {\n      embedding: res.data.map((v) => v.embedding),\n      object: \"embedding\",\n      model,\n      promptTokens: res.usage.prompt_tokens,\n      totalTokens: res.usage.total_tokens\n    };\n  }\n  /**\n   * Sends messages to the GLM chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: GLM_6B a local deployed chatglm3-6b-32k).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"glm-3-turbo\" /* GLM_3_TURBO */, stream = false, top, temperature, maxLength, tools, toolChoice) {\n    if (![\"glm-4v\" /* GLM_4V */, \"glm-4v-plus\" /* GLM_4V_PLUS */].includes(model))\n      messages = messages.map(({ role, content }) => ({ role, content }));\n    if (typeof temperature === \"number\") {\n      if (temperature <= 0) temperature = 0.1;\n      if (temperature > 1) temperature = 1;\n    }\n    if (typeof top === \"number\") {\n      if (top <= 0) top = 0.1;\n      if (top >= 1) top = 0.9;\n    }\n    const data = {\n      id: \"\",\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"ZhiPu GLM API key is not set in config\");\n    const res = await util_default.post(\n      `${this.proxyAPI}/api/paas/v4/chat/completions`,\n      {\n        model,\n        messages: util_default.formatGPTMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_tokens: maxLength,\n        tools,\n        tool_choice: toolChoice,\n        stream_options: stream ? { include_usage: true } : void 0\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    if (res instanceof Readable3) {\n      const output = new PassThrough3();\n      const parser = new EventSourceStream3();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.id = obj.id;\n          data.content = obj.choices[0]?.delta?.content || \"\";\n          if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls;\n          data.model = obj.model;\n          data.object = obj.object || \"chat.completion.chunk\";\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          if (data.content) output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(parser);\n      output.on(\"close\", () => {\n        if (!res.destroyed) res.destroy(new Error(\"Downstream closed, aborting upstream SSE\"));\n        if (!parser.destroyed) parser.destroy();\n      });\n      return output;\n    } else {\n      data.id = res.id;\n      data.content = res.choices[0]?.message?.content || \"\";\n      if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls;\n      data.model = res.model;\n      data.object = res.object || \"chat.completion\";\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n};\n\n// src/providers/Other.ts\nimport { PassThrough as PassThrough4, Readable as Readable4 } from \"stream\";\nimport EventSourceStream4 from \"@server-sent-stream/node\";\nvar Other = class {\n  /**\n   * Constructor for the OpenAI class.\n   *\n   * @param api - The API endpoint for the model (optional).\n   * @param key - The API key for the model (Optional).\n   */\n  constructor(api, key) {\n    this.api = api;\n    this.key = key;\n  }\n  config(api, key) {\n    this.api = api;\n    this.key = key;\n  }\n  /**\n   * Fetches embeddings for input text.\n   *\n   * @param input - An array of input strings.\n   * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n   * @returns A promise resolving to the embedding response.\n   */\n  async embedding(input, model = \"\", dimensions = 1024) {\n    if (!this.api) throw new Error(\"Other embed model API is not set in config\");\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    const res = await util_default.post(\n      `${this.api}/v1/embeddings`,\n      { model, input, dimensions },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: \"json\" }\n    );\n    const data = {\n      embedding: res.data.map((v) => v.embedding),\n      object: \"embedding\",\n      model,\n      promptTokens: res.usage.prompt_tokens || 0,\n      totalTokens: res.usage.total_tokens || 0\n    };\n    return data;\n  }\n  /**\n   * Sends messages to the GPT compatible chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: gpt-3.5-turbo).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"\", stream = false, reasoning, top, temperature, maxLength, tools, toolChoice) {\n    if (!this.api) throw new Error(\"Other chat model API is not set in config\");\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    const res = await util_default.post(\n      `${this.api}/v1/chat/completions`,\n      {\n        model,\n        messages: util_default.formatGPTMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_tokens: maxLength,\n        tools,\n        tool_choice: toolChoice,\n        reasoning_effort: reasoning,\n        stream_options: stream ? { include_usage: true } : void 0\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      id: \"\",\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable4) {\n      const output = new PassThrough4();\n      const parser = new EventSourceStream4();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.id = obj.id;\n          data.content = obj.choices[0]?.delta?.content || \"\";\n          if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls;\n          data.model = obj.model || model;\n          data.object = obj.object || \"chat.completion.chunk\";\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(parser);\n      output.on(\"close\", () => {\n        if (!res.destroyed) res.destroy(new Error(\"Downstream closed, aborting upstream SSE\"));\n        if (!parser.destroyed) parser.destroy();\n      });\n      return output;\n    } else {\n      data.id = res.id;\n      data.content = res.choices[0]?.message?.content || \"\";\n      if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls;\n      data.model = res.model || model;\n      data.object = res.object || \"chat.completion\";\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n};\n\n// src/providers/Google.ts\nimport { PassThrough as PassThrough5, Readable as Readable5 } from \"stream\";\nimport { JSONParser } from \"@streamparser/json-node\";\nvar API4 = \"https://generativelanguage.googleapis.com\";\nvar SAFE_SET = [\n  { category: \"HARM_CATEGORY_HARASSMENT\", threshold: \"BLOCK_NONE\" },\n  { category: \"HARM_CATEGORY_HATE_SPEECH\", threshold: \"BLOCK_NONE\" },\n  { category: \"HARM_CATEGORY_SEXUALLY_EXPLICIT\", threshold: \"BLOCK_NONE\" },\n  { category: \"HARM_CATEGORY_DANGEROUS_CONTENT\", threshold: \"BLOCK_NONE\" }\n];\nvar Google = class {\n  /**\n   * Google API client class for chat functionalities.\n   * @param key - The Google API key or an array of keys.\n   * @param api - The API endpoint (default: 'https://generativelanguage.googleapis.com').\n   */\n  constructor(key, api = API4) {\n    this.key = key;\n    this.api = api;\n  }\n  config(key, api = API4) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Fetches embeddings for input text.\n   *\n   * @param input - An array of input strings.\n   * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n   * @returns A promise resolving to the embedding response.\n   */\n  async embedding(input, model = \"gemini-embedding-001\" /* GEM_EMBED */, dimensions = 768) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"Google API key is not set in config\");\n    const request = [];\n    for (const text of input) {\n      request.push(\n        util_default.post(\n          `${this.api}/v1beta/models/${model}:embedContent?key=${key}`,\n          { model: `models/${model}`, content: { parts: [{ text }] }, output_dimensionality: dimensions }\n        )\n      );\n    }\n    const res = await Promise.all(request);\n    const data = {\n      embedding: res.map((v) => v.embedding.values),\n      object: \"embedding\",\n      model,\n      promptTokens: 0,\n      totalTokens: 0\n    };\n    return data;\n  }\n  /**\n   * Sends messages to the Google Gemini chat model.\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: gemini-pro).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"gemini-2.5-pro\" /* GEM_PRO_2_5 */, stream = false, top, temperature, maxLength) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"Google AI API key is not set in config\");\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature > 1) temperature = 1;\n    }\n    if (typeof top === \"number\") {\n      if (top < 0) top = 0;\n      if (top > 1) top = 1;\n    }\n    const res = await util_default.post(\n      `${this.api}/v1beta/models/${model}:${stream ? \"streamGenerateContent\" : \"generateContent\"}?key=${key}`,\n      {\n        contents: await this.formatMessage(messages),\n        system_instruction: {\n          parts: {\n            text: messages.filter((v) => v.role === \"system\" /* SYSTEM */).map((v) => v.content).join(\"\\n\")\n          }\n        },\n        generationConfig: { topP: top, temperature, maxOutputTokens: maxLength },\n        safetySettings: SAFE_SET\n      },\n      { responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      id: \"\",\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable5) {\n      const output = new PassThrough5();\n      const parser = new JSONParser();\n      parser.on(\"data\", ({ value }) => {\n        if (value.candidates || value.promptFeedback) {\n          const obj = value;\n          const block = obj.promptFeedback?.blockReason;\n          if (block) return output.destroy(new Error(`Content blocked, reason: ${block}`));\n          if (!obj.candidates) return output.destroy(new Error(\"Google API error, no candidates\"));\n          const candidate = obj.candidates[0];\n          if (!candidate.content) return output.destroy(new Error(candidate.finishReason));\n          data.content = candidate.content.parts[0].text || \"\";\n          data.object = `chat.completion.chunk`;\n          return output.write(JSON.stringify(data));\n        } else return output;\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(parser);\n      output.on(\"close\", () => {\n        if (!res.destroyed) res.destroy(new Error(\"Downstream closed, aborting upstream SSE\"));\n        if (!parser.destroyed) parser.destroy();\n      });\n      return output;\n    } else {\n      const block = res.promptFeedback?.blockReason;\n      if (block) throw new Error(`Content blocked, reason: ${block}`);\n      if (!res.candidates) throw new Error(\"Google API error, no candidates\");\n      const candidate = res.candidates[0];\n      if (!candidate.content) throw new Error(candidate.finishReason);\n      data.content = candidate.content.parts[0].text || candidate.finishReason;\n      data.object = `chat.completion`;\n      return data;\n    }\n  }\n  /**\n   * Formats chat messages into GEMChatMessage format.\n   * @param messages - An array of chat messages.\n   * @returns A formatted array of GEMChatMessage.\n   */\n  async formatMessage(messages) {\n    const prompt = [];\n    let input = \"\";\n    let base64 = null;\n    for (const { role, content, img } of messages) {\n      let text = \"\";\n      if (!content && !img) continue;\n      if (role === \"system\" /* SYSTEM */) continue;\n      if (Array.isArray(content)) for (const c of content) text += c + \"\\n\";\n      if (img) base64 = (Array.isArray(img) ? img : [img]).map((v) => this.toBase64(v));\n      if (role !== \"assistant\" /* ASSISTANT */) input += `\n${content}`;\n      else {\n        const message2 = { role: \"user\" /* USER */, parts: [] };\n        input = input.trim();\n        message2.parts.push({ text: input || \" \" });\n        if (base64 && base64.length)\n          for (const { mime, data } of base64) message2.parts.push({ inline_data: { mime_type: mime, data } });\n        prompt.push(message2);\n        prompt.push({ role: \"model\" /* MODEL */, parts: [{ text }] });\n        input = \"\";\n      }\n    }\n    const message = { role: \"user\" /* USER */, parts: [] };\n    input = input.trim();\n    message.parts.push({ text: input || \" \" });\n    if (base64 && base64.length)\n      for (const { mime, data } of base64) message.parts.push({ inline_data: { mime_type: mime, data } });\n    prompt.push(message);\n    return prompt;\n  }\n  /**\n   * Convert an image to base64 format object.\n   * @param img The image string to convert.\n   * @returns An object containing the MIME type and base64 data.\n   */\n  toBase64(img) {\n    let mime = \"\";\n    let data = \"\";\n    if (util_default.isBase64(img)) {\n      if (util_default.isBase64(img, false)) {\n        data = img;\n        mime = \"image/png\";\n      } else {\n        const match = img.match(/^data:image\\/([a-zA-Z]*);base64,([^\\\"']*)$/);\n        if (match) {\n          mime = `image/${match[1]}`;\n          data = match[2];\n        }\n      }\n    } else throw new Error(\"Only base64 image is supported for Google Gemini Vision\");\n    if (!mime || !data) throw new Error(\"Can not transfer to base64\");\n    return { mime, data };\n  }\n};\n\n// src/providers/IFlyTek.ts\nimport { createHmac } from \"crypto\";\nimport { hostname } from \"os\";\nimport { PassThrough as PassThrough6, Readable as Readable6 } from \"stream\";\nimport EventSourceStream5 from \"@server-sent-stream/node\";\nvar CHAT_API = \"https://spark-api-open.xf-yun.com\";\nvar IMAGINE_API = \"https://spark-api.cn-huabei-1.xf-yun.com\";\nvar STORAGE_KEY2 = \"task_iflytek\";\nvar IFlyTek = class {\n  /**\n   * Constructor for IFlyTek class.\n   * @param key - The API key for MoonShot.\n   * @param api - The API endpoint for proxy (optional).\n   */\n  constructor(pass, key, secret, appid, api = CHAT_API) {\n    this.pass = pass;\n    this.key = key;\n    this.secret = secret;\n    this.appid = appid;\n    this.api = api;\n  }\n  config(pass, key, secret, appid, api = CHAT_API) {\n    this.pass = pass;\n    this.key = key;\n    this.secret = secret;\n    this.appid = appid;\n    this.api = api;\n  }\n  /**\n   * Initiates a chat conversation with IFLYTEK Spark API.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The Spark model version to use (default: SPARK_DEFAULT_MODEL_VERSION).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"lite\" /* SPARK_LITE */, stream = false, top, temperature, maxLength, tools, toolChoice) {\n    const key = Array.isArray(this.pass) ? util_default.getRandomKey(this.pass) : this.pass;\n    if (!key) throw new Error(\"IFlyTek Spark API Password is not set in config\");\n    if (typeof top === \"number\") {\n      if (top <= 0) top = 0.1;\n      if (top > 1) top = 1;\n    }\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature > 2) temperature = 2;\n    }\n    const res = await util_default.post(\n      `${this.api}/v1/chat/completions`,\n      {\n        model,\n        messages: this.formatMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_tokens: maxLength,\n        tools,\n        tool_choice: toolChoice\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      id: \"\",\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable6) {\n      const output = new PassThrough6();\n      const parser = new EventSourceStream5();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (!obj) return;\n        if (obj.code) {\n          output.destroy(new Error(obj.message));\n          return;\n        }\n        data.id = obj.sid;\n        data.content = obj.choices[0]?.delta?.content || \"\";\n        if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls;\n        data.model = model;\n        data.object = \"chat.completion.chunk\";\n        data.promptTokens = obj.usage?.prompt_tokens || 0;\n        data.completionTokens = obj.usage?.completion_tokens || 0;\n        data.totalTokens = obj.usage?.total_tokens || 0;\n        output.write(JSON.stringify(data));\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(parser);\n      output.on(\"close\", () => {\n        if (!res.destroyed) res.destroy(new Error(\"Downstream closed, aborting upstream SSE\"));\n        if (!parser.destroyed) parser.destroy();\n      });\n      return output;\n    } else {\n      data.id = res.sid;\n      data.content = res.choices[0]?.message?.content || \"\";\n      if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls;\n      data.model = model;\n      data.object = \"chat.completion\";\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n  /**\n   * Generate an image based on the given prompt.\n   * @param prompt The prompt for image generation.\n   * @param width The width of the image, default is 512.\n   * @param height The height of the image, default is 512.\n   * @param model The model to use for generating the image, default is IFlyTekImagineModel.V2.\n   */\n  async imagine(prompt, width = 512, height = 512, model = \"v2.1\" /* V2 */) {\n    if (!this.appid) throw new Error(\"IFlyTek APP ID is not set in config\");\n    const url = this.getImagineURL(model);\n    const res = await util_default.post(url, {\n      header: { app_id: this.appid },\n      payload: { message: { text: [{ role: \"user\", content: prompt }] } },\n      parameter: { chat: { domain: \"general\", width, height } }\n    });\n    if (res.header.code !== 0) throw new Error(res.header.message);\n    if (!res.payload) throw new Error(\"Fail to generate image, empty payload\");\n    const id = util_default.getRandomId();\n    const imgs = [];\n    for (const i in res.payload.choices.text)\n      imgs.push(await util_default.writeFile(res.payload.choices.text[i].content, `${id}-${i}.png`));\n    const time = Date.now();\n    const task = {\n      id,\n      type: \"generation\" /* GENERATION */,\n      info: \"success\",\n      progress: 100,\n      imgs,\n      fail: \"\",\n      created: time,\n      model\n    };\n    const tasks = util_default.getItem(STORAGE_KEY2) || [];\n    tasks.push(task);\n    util_default.setItem(STORAGE_KEY2, tasks);\n    return { taskId: task.id, time };\n  }\n  /**\n   * Simulate tasks.\n   *\n   * @param id - The task ID to retrieve (optional).\n   * @returns An array of task responses or a specific task by ID.\n   */\n  task(id) {\n    const tasks = util_default.getItem(STORAGE_KEY2) || [];\n    if (id) return tasks.filter((v) => v.id === id);\n    else return tasks;\n  }\n  /**\n   * Generates the Imagine API URL.\n   *\n   * @param model - The Spark imagine model.\n   */\n  getImagineURL(model) {\n    if (!this.secret) throw new Error(\"IFlyTek API secret is not set in config\");\n    if (!this.key) throw new Error(\"IFlyTek API key is not set in config\");\n    const host = hostname();\n    const date = (/* @__PURE__ */ new Date()).toUTCString();\n    const algorithm = \"hmac-sha256\";\n    const headers = \"host date request-line\";\n    const signatureOrigin = `host: ${host}\ndate: ${date}\nPOST /${model}/tti HTTP/1.1`;\n    const signatureSha = createHmac(\"sha256\", this.secret).update(signatureOrigin).digest(\"hex\");\n    const signature = Buffer.from(signatureSha, \"hex\").toString(\"base64\");\n    const authorizationOrigin = `api_key=\"${this.key}\", algorithm=\"${algorithm}\", headers=\"${headers}\", signature=\"${signature}\"`;\n    const authorization = Buffer.from(authorizationOrigin).toString(\"base64\");\n    return `${IMAGINE_API}/${model}/tti?authorization=${authorization}&date=${date}&host=${host}`;\n  }\n  /**\n   * Format the chat message for IFlyTek Spark model.\n   *\n   * @param messages - Original chat messages\n   */\n  formatMessage(messages) {\n    const prompt = [];\n    for (const { role, content } of messages) {\n      let text = \"\";\n      if (Array.isArray(content)) for (const c of content) text += c || \"\";\n      if (role === \"developer\" /* DEV */) continue;\n      prompt.push({ role, content: text });\n    }\n    return prompt;\n  }\n};\n\n// src/providers/Baidu.ts\nimport { PassThrough as PassThrough7, Readable as Readable7 } from \"stream\";\nimport EventSourceStream6 from \"@server-sent-stream/node\";\nvar API5 = \"https://aip.baidubce.com\";\nvar STORAGE_KEY3 = \"baidu\";\nvar Baidu = class {\n  constructor(key, secret, api = API5) {\n    this.key = key;\n    this.secret = secret;\n    this.api = api;\n  }\n  config(key, secret, api = API5) {\n    this.key = key;\n    this.secret = secret;\n    this.api = api;\n  }\n  /**\n   * Sends messages to the GLM chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The submodel to use for chat (default: ERNIE 8K).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"completions\" /* ERNIE_3_5 */, stream = false, top, temperature, maxLength) {\n    if (typeof temperature === \"number\") {\n      if (temperature <= 0) temperature = 0.1;\n      if (temperature > 1) temperature = 1;\n    }\n    if (typeof top === \"number\") {\n      if (top < 0) top = 0;\n      if (top > 1) top = 1;\n    }\n    const token = await this.getAccessToken();\n    const { prompt, system } = this.formatMessage(messages);\n    const res = await util_default.post(\n      `${this.api}/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/${model}?access_token=${token}`,\n      {\n        messages: prompt,\n        system,\n        stream,\n        temperature,\n        top_p: top,\n        max_output_tokens: maxLength\n      },\n      { responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      id: \"\",\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable7) {\n      const output = new PassThrough7();\n      const parser = new EventSourceStream6();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.id = obj.id;\n          data.content = obj.result || \"\";\n          data.model = model;\n          data.object = obj.object;\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(parser);\n      output.on(\"close\", () => {\n        if (!res.destroyed) res.destroy(new Error(\"Downstream closed, aborting upstream SSE\"));\n        if (!parser.destroyed) parser.destroy();\n      });\n      return output;\n    } else {\n      if (res.error_code) throw new Error(res.error_msg);\n      data.id = res.id;\n      data.content = res.result || \"\";\n      data.model = model;\n      data.object = res.object;\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n  // get baidu access token\n  async getAccessToken() {\n    if (!this.key) throw new Error(\"Baidu API key is not set in config\");\n    if (!this.secret) throw new Error(\"Baidu API secret is not set in config\");\n    const now = Date.now();\n    const cache = util_default.getItem(STORAGE_KEY3);\n    if (cache && cache.expires_in > now) return cache.access_token;\n    const res = await util_default.get(`${this.api}/oauth/2.0/token`, {\n      grant_type: \"client_credentials\",\n      client_id: this.key,\n      client_secret: this.secret\n    });\n    if (res.error) throw new Error(res.error_description);\n    res.expires_in = now + res.expires_in * 1e3;\n    util_default.setItem(STORAGE_KEY3, res);\n    return res.access_token;\n  }\n  // format to baidu message\n  formatMessage(messages) {\n    const prompt = [];\n    let system = \"\";\n    let input = \"\";\n    const { USER, ASSISTANT, SYSTEM } = ChatRoleEnum;\n    for (const { role, content } of messages) {\n      if (typeof content !== \"string\") continue;\n      if (!content.trim() || role === SYSTEM) {\n        system = content;\n        continue;\n      }\n      if (role !== ASSISTANT) input += `\n${content}`;\n      else {\n        prompt.push({ role: USER, content: input.trim() || \" \" });\n        prompt.push({ role: ASSISTANT, content });\n        input = \"\";\n      }\n    }\n    if (!input.trim()) throw new Error(\"User input nothing\");\n    prompt.push({ role: USER, content: input.trim() });\n    return { system, prompt };\n  }\n};\n\n// src/providers/MoonShot.ts\nimport { PassThrough as PassThrough8, Readable as Readable8 } from \"stream\";\nimport EventSourceStream7 from \"@server-sent-stream/node\";\nvar API6 = \"https://api.moonshot.cn\";\nvar VER3 = \"v1\";\nvar MoonShot = class {\n  /**\n   * Constructor for MoonShot class.\n   * @param key - The API key for MoonShot.\n   * @param api - The API endpoint for proxy (optional).\n   */\n  constructor(key, api = API6) {\n    this.key = key;\n    this.api = api;\n  }\n  config(key, api = API6) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Sends messages to the MoonShot chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: moonshot-v1-8k).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"moonshot-v1-8k\" /* MOON_V1_8K */, stream = false, top, temperature, maxLength) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"MoonShot API key is not set in config\");\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature > 1) temperature = 1;\n    }\n    if (typeof top === \"number\") {\n      if (top < 0) top = 0;\n      if (top > 1) top = 1;\n    }\n    const res = await util_default.post(\n      `${this.api}/${VER3}/chat/completions`,\n      {\n        model,\n        messages: util_default.formatGPTMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_tokens: maxLength,\n        stream_options: stream ? { include_usage: true } : void 0\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      id: \"\",\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable8) {\n      const output = new PassThrough8();\n      const parser = new EventSourceStream7();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.id = obj.id;\n          data.content = obj.choices[0]?.delta?.content || \"\";\n          data.model = obj.model;\n          data.object = obj.object;\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(parser);\n      output.on(\"close\", () => {\n        if (!res.destroyed) res.destroy(new Error(\"Downstream closed, aborting upstream SSE\"));\n        if (!parser.destroyed) parser.destroy();\n      });\n      return output;\n    } else {\n      data.id = res.id;\n      data.content = res.choices[0]?.message?.content || \"\";\n      data.model = res.model;\n      data.object = res.object;\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n};\n\n// src/providers/MidJourney.ts\nvar MidJourney = class {\n  // User token of MidJourney\n  constructor(proxy, token, imgProxy) {\n    this.proxy = proxy;\n    this.token = token;\n    this.imgProxy = imgProxy;\n  }\n  config(proxy, token, imgProxy) {\n    this.proxy = proxy;\n    this.token = token;\n    this.imgProxy = imgProxy;\n  }\n  /**\n   * Call the imagine API of MidJourney to generate text.\n   * @param prompt - The input prompt text.\n   * @param nPrompt - The excluded text.\n   * @param width - The image width. Default value is 1.\n   * @param height - The image height. Default value is 1.\n   * @returns The generated text.\n   */\n  async imagine(prompt, nPrompt = \"\", width = 1024, height = 1024) {\n    if (!this.proxy) throw new Error(\"MidJourney image model proxy is not set in config\");\n    const aspect = util_default.getAspect(width, height);\n    const res = await util_default.post(\n      `${this.proxy}/mj/submit/imagine`,\n      { prompt: `${prompt} --ar ${aspect} ${nPrompt ? \"--no \" + nPrompt : \"\"}` },\n      { headers: { \"mj-api-secret\": this.token } }\n    );\n    if (res.code !== 1) throw new Error(res.description);\n    return { taskId: res.result, time: Date.now() };\n  }\n  /**\n   * Get task information by id or get a list of imagining tasks.\n   * @param id - The task id. If provided, it will return the task information with the specified id. Otherwise, it will return the task list.\n   * @returns The task list or the task information with the specified id.\n   */\n  async task(id) {\n    if (!this.proxy) throw new Error(\"MidJourney image model proxy is not set in config\");\n    if (id) {\n      const res = await util_default.get(`${this.proxy}/mj/task/${id}/fetch`, null, {\n        headers: { \"mj-api-secret\": this.token }\n      });\n      if (res.imageUrl && this.imgProxy) {\n        const url = new URL(res.imageUrl);\n        const pro = new URL(this.imgProxy);\n        url.hostname = pro.hostname;\n        url.protocol = pro.protocol;\n        url.port = pro.port;\n        res.imageUrl = url.toString();\n      }\n      return [\n        {\n          id: res.id,\n          type: res.action,\n          imgs: res.imageUrl ? [await util_default.writeFile(res.imageUrl, `${res.id}.png`)] : [],\n          info: res.description,\n          fail: res.failReason || \"\",\n          progress: parseInt(res.progress) || 0,\n          created: res.startTime,\n          model: \"midjourney\" /* MJ */\n        }\n      ];\n    } else {\n      const res = await util_default.get(`${this.proxy}/mj/task/list`, null, {\n        headers: { \"mj-api-secret\": this.token }\n      });\n      return res.map((v) => ({\n        id: v.id,\n        type: v.action,\n        imgs: v.imageUrl ? [v.imageUrl] : [],\n        info: v.description,\n        fail: v.failReason || \"\",\n        progress: parseInt(v.progress),\n        created: v.startTime,\n        model: \"midjourney\" /* MJ */\n      }));\n    }\n  }\n  /**\n   * Submit a change request for a imagined task.\n   * @param taskId - The task id.\n   * @param action - The action type of the task.\n   * @param index - The index for modification (optional).\n   * @returns The modified task response.\n   */\n  async change(taskId, action, index) {\n    if (!this.proxy) throw new Error(\"MidJourney image model proxy is not set in config\");\n    const res = await util_default.post(\n      `${this.proxy}/mj/submit/change`,\n      { taskId, action, index },\n      { headers: { \"mj-api-secret\": this.token } }\n    );\n    return { taskId: res.result, time: Date.now() };\n  }\n};\n\n// src/providers/Stability.ts\nvar API7 = \"https://api.stability.ai\";\nvar STORAGE_KEY4 = \"task_stability_ai\";\nvar Stability = class {\n  constructor(key, api = API7) {\n    this.key = key;\n    this.api = api;\n  }\n  config(key, api = API7) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Generate images using Stability AI.\n   *\n   * @param prompt - The main text prompt for image generation.\n   * @param negativePrompt - The negative text prompt (optional).\n   * @param width - Image width (default: 1024).\n   * @param height - Image height (default: 1024).\n   * @param samples - Number of images to generate (default: 1).\n   * @param model - The Stability AI model to use (default: StabilityAIImagineModel.SD_1_6).\n   * @returns A promise resolving to the image generation response.\n   */\n  async imagine(prompt, negativePrompt = \"\", width = 1024, height = 1024, samples = 1, model = \"stable-diffusion-v1-6\" /* SD_1_6 */) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"Stability key is not set in config\");\n    const prompts = [{ text: prompt, weight: 1 }];\n    if (negativePrompt) prompts.push({ text: negativePrompt, weight: -1 });\n    const res = await util_default.post(\n      `${this.api}/v1/${\"generation\" /* GENERATION */}/${model}/text-to-image`,\n      { width, height, samples, text_prompts: prompts },\n      { headers: { Accept: \"application/json\", Authorization: `Bearer ${key}` } }\n    );\n    const id = util_default.getRandomId();\n    const imgs = [];\n    for (const i in res.artifacts) imgs.push(await util_default.writeFile(res.artifacts[i].base64, `${id}-${i}.png`));\n    const time = Date.now();\n    const task = {\n      id,\n      type: \"generation\" /* GENERATION */,\n      info: res.artifacts[0].finishReason,\n      progress: 100,\n      imgs,\n      fail: \"\",\n      created: time,\n      model\n    };\n    const tasks = util_default.getItem(STORAGE_KEY4) || [];\n    tasks.push(task);\n    util_default.setItem(STORAGE_KEY4, tasks);\n    return { taskId: task.id, time };\n  }\n  /**\n   * Simulate tasks or retrieve a specific task by ID.\n   *\n   * @param id - The task ID to retrieve (optional).\n   * @returns An array of task responses or a specific task by ID.\n   */\n  task(id) {\n    const tasks = util_default.getItem(STORAGE_KEY4) || [];\n    if (id) return tasks.filter((v) => v.id === id);\n    else return tasks;\n  }\n};\n\n// src/providers/AliYun.ts\nimport { PassThrough as PassThrough9, Readable as Readable9 } from \"stream\";\nimport EventSourceStream8 from \"@server-sent-stream/node\";\nvar API8 = \"https://dashscope.aliyuncs.com\";\nvar VER4 = \"v1\";\nvar AliYun = class {\n  /**\n   * Constructor for AliYun class.\n   * @param key - The API key for MoonShot.\n   * @param api - The API endpoint for proxy (optional).\n   */\n  constructor(key, api = API8) {\n    this.key = key;\n    this.api = api;\n  }\n  config(key, api = API8) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Fetches embeddings for input text.\n   *\n   * @param input - An array of input strings.\n   * @param model - The model to use for embeddings (default: text-embedding-v3).\n   * @param dimensions - The dimensions of output embedding vector (default: 1024)\n   * @returns A promise resolving to the embedding response.\n   */\n  async embedding(input, model = \"text-embedding-v3\" /* ALI_V3 */, dimensions = 1024) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"AliYun API key is not set in config\");\n    const res = await util_default.post(\n      `${this.api}/compatible-mode/${VER4}/embeddings`,\n      { model, input, dimensions },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: \"json\" }\n    );\n    const data = {\n      embedding: res.data.map((v) => v.embedding),\n      object: \"embedding\",\n      model,\n      promptTokens: res.usage.prompt_tokens || 0,\n      totalTokens: res.usage.total_tokens || 0\n    };\n    return data;\n  }\n  /**\n   * Sends messages to the AliYun LLMs.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: moonshot-v1-8k).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"qwen-turbo\" /* QWEN_TURBO */, stream = false, top, temperature, maxLength) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"Qian Wen API key is not set in config\");\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature >= 2) temperature = 1.9;\n    }\n    if (typeof top === \"number\") {\n      if (top <= 0) top = 0.1;\n      if (top > 1) top = 1;\n    }\n    const res = await util_default.post(\n      `${this.api}/compatible-mode/${VER4}/chat/completions`,\n      {\n        model,\n        messages: util_default.formatGPTMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_tokens: maxLength,\n        stream_options: stream ? { include_usage: true } : void 0\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      id: \"\",\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable9) {\n      const output = new PassThrough9();\n      const parser = new EventSourceStream8();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj && obj.error) throw new Error(obj.error.message);\n        if (obj) {\n          data.id = obj.id;\n          data.content = obj.choices[0]?.delta?.content || \"\";\n          data.model = obj.model;\n          data.object = obj.object;\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(parser);\n      output.on(\"close\", () => {\n        if (!res.destroyed) res.destroy(new Error(\"Downstream closed, aborting upstream SSE\"));\n        if (!parser.destroyed) parser.destroy();\n      });\n      return output;\n    } else {\n      data.id = res.id;\n      data.content = res.choices[0]?.message?.content || \"\";\n      if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls;\n      data.model = res.model;\n      data.object = res.object || \"chat.completion\";\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n};\n\n// src/providers/DeepSeek.ts\nimport { PassThrough as PassThrough10, Readable as Readable10 } from \"stream\";\nimport EventSourceStream9 from \"@server-sent-stream/node\";\nvar API9 = \"https://api.deepseek.com\";\nvar DeepSeek = class {\n  /**\n   * Constructor for MoonShot class.\n   * @param key - The API key for MoonShot.\n   * @param api - The API endpoint for proxy (optional).\n   */\n  constructor(key, api = API9) {\n    this.key = key;\n    this.api = api;\n  }\n  config(key, api = API9) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Sends messages to the Ali QianWen chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: moonshot-v1-8k).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"deepseek-chat\" /* DEEPSEEK_V3 */, stream = false, top, temperature, maxLength) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"DeepSeek API key is not set in config\");\n    if (typeof maxLength === \"number\") {\n      if (maxLength < 1) maxLength = 1;\n      if (maxLength > 8192) maxLength = 8192;\n    }\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature > 2) temperature = 2;\n    }\n    if (typeof top === \"number\") {\n      if (top <= 0) top = 0.1;\n      if (top > 1) top = 1;\n    }\n    const res = await util_default.post(\n      `${this.api}/chat/completions`,\n      {\n        model,\n        messages: this.formatMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_tokens: maxLength,\n        stream_options: stream ? { include_usage: true } : void 0\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      id: \"\",\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable10) {\n      const output = new PassThrough10();\n      const parser = new EventSourceStream9();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.id = obj.id;\n          data.content = obj.choices[0]?.delta?.content || \"\";\n          data.model = obj.model;\n          data.object = obj.object;\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(parser);\n      output.on(\"close\", () => {\n        if (!res.destroyed) res.destroy(new Error(\"Downstream closed, aborting upstream SSE\"));\n        if (!parser.destroyed) parser.destroy();\n      });\n      return output;\n    } else {\n      data.id = res.id;\n      data.content = res.choices[0]?.message?.content || \"\";\n      if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls;\n      data.model = res.model;\n      data.object = res.object;\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n  /**\n   * Formats chat messages according to the GPT model's message format.\n   *\n   * @param messages - An array of chat messages.\n   * @returns Formatted messages compatible with the GPT model.\n   */\n  formatMessage(messages) {\n    const prompt = [];\n    for (const { role, content, tool } of messages) {\n      if (role === \"developer\" /* DEV */) continue;\n      else if (role === \"tool\" /* TOOL */) prompt.push({ role, content, tool_call_id: tool });\n      else prompt.push({ role, content });\n    }\n    return prompt;\n  }\n};\n\n// src/providers/XAI.ts\nimport { PassThrough as PassThrough11, Readable as Readable11 } from \"stream\";\nimport EventSourceStream10 from \"@server-sent-stream/node\";\nvar API10 = \"https://api.x.ai\";\nvar VER5 = \"v1\";\nvar XAI = class {\n  /**\n   * Constructor for the OpenAI class.\n   *\n   * @param key - The API key for OpenAI.\n   * @param api - The API endpoint for proxy (optional).\n   */\n  constructor(key, api = API10) {\n    this.key = key;\n    this.api = api;\n  }\n  config(key, api = API10) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Sends messages to the GPT chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: gpt-3.5-turbo).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @param tools - Tools for model to use (optional).\n   * @param toolChoice - Controls which (if any) tool is called by the model: none, required, auto (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"grok-4-fast-non-reasoning\" /* GROK4_FAST_NON_REASONING */, stream = false, top, temperature, maxLength, tools, toolChoice) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"X AI API key is not set in config\");\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature > 2) temperature = 2;\n    }\n    if (typeof top === \"number\") {\n      if (top < 0) top = 0;\n      if (top > 1) top = 1;\n    }\n    const res = await util_default.post(\n      `${this.api}/${VER5}/chat/completions`,\n      {\n        model,\n        messages: util_default.formatGPTMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_tokens: maxLength,\n        tools,\n        tool_choice: toolChoice\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      id: \"\",\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable11) {\n      const output = new PassThrough11();\n      const parser = new EventSourceStream10();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.id = obj.id;\n          data.content = obj.choices[0]?.delta?.content || \"\";\n          data.model = obj.model;\n          data.object = obj.object;\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(parser);\n      output.on(\"close\", () => {\n        if (!res.destroyed) res.destroy(new Error(\"Downstream closed, aborting upstream SSE\"));\n        if (!parser.destroyed) parser.destroy();\n      });\n      return output;\n    } else {\n      data.id = res.id;\n      data.content = res.choices[0]?.message?.content || \"\";\n      if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls;\n      data.model = res.model;\n      data.object = res.object;\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n};\n\n// src/providers/Ark.ts\nimport { PassThrough as PassThrough12, Readable as Readable12 } from \"stream\";\nimport EventSourceStream11 from \"@server-sent-stream/node\";\nvar API11 = \"https://ark.cn-beijing.volces.com/api\";\nvar VER6 = \"v3\";\nvar Ark = class {\n  /**\n   * Constructor for the Ark class.\n   *\n   * @param key - The API key for OpenAI.\n   * @param api - The API endpoint for proxy (optional).\n   */\n  constructor(key, api = API11) {\n    this.key = key;\n    this.api = api;\n  }\n  config(key, api = API11) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Sends messages to the GPT chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: gpt-3.5-turbo).\n   * @param stream - Whether to use stream response (default: false).\n   * @param reasoning - Reasoning effort level (default: 'none').\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @param tools - Tools for model to use (optional).\n   * @param toolChoice - Controls which (if any) tool is called by the model: none, required, auto (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"doubao-seed-1-6-251015\" /* DOUBAO_SEED_1_6 */, stream = false, reasoning, top, temperature, maxLength, tools, toolChoice) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"Ark DouBao API key is not set in config\");\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature > 1) temperature = 1;\n    }\n    if (typeof top === \"number\") {\n      if (top < 0) top = 0;\n      if (top > 1) top = 1;\n    }\n    let reasoningEffort;\n    if (!reasoning || reasoning === \"none\") reasoningEffort = \"minimal\";\n    else if (reasoning === \"xhigh\") reasoningEffort = \"high\";\n    else reasoningEffort = reasoning;\n    const res = await util_default.post(\n      `${this.api}/${VER6}/chat/completions`,\n      {\n        model,\n        messages: util_default.formatGPTMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_completion_tokens: maxLength,\n        tools,\n        tool_choice: toolChoice,\n        thinking: { type: reasoningEffort === \"minimal\" ? \"disabled\" : \"enabled\" },\n        reasoning: { effort: reasoningEffort },\n        stream_options: stream ? { include_usage: true } : void 0\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      id: \"\",\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable12) {\n      const output = new PassThrough12();\n      const parser = new EventSourceStream11();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.id = obj.id;\n          data.content = obj.choices[0]?.delta?.content || \"\";\n          if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls;\n          data.model = obj.model;\n          data.object = obj.object;\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(parser);\n      output.on(\"close\", () => {\n        if (!res.destroyed) res.destroy(new Error(\"Downstream closed, aborting upstream SSE\"));\n        if (!parser.destroyed) parser.destroy();\n      });\n      return output;\n    } else {\n      data.id = res.id;\n      data.content = res.choices[0]?.message?.content || \"\";\n      if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls;\n      data.model = res.model;\n      data.object = res.object;\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n};\n\n// src/UniAI.ts\nvar DEFAULT_MESSAGE = \"Hi, who are you? Answer in short!\";\nvar UniAI = class {\n  constructor(config = {}) {\n    this.config = null;\n    this.config = config;\n    this.openai = new OpenAI(config.OpenAI?.key, config.OpenAI?.proxy);\n    this.anthropic = new Anthropic(config.Anthropic?.key, config.Anthropic?.proxy);\n    this.deepseek = new DeepSeek(config.DeepSeek?.key, config.DeepSeek?.proxy);\n    this.glm = new GLM(config.GLM?.key, config.GLM?.proxy);\n    this.google = new Google(config.Google?.key, config.Google?.proxy);\n    this.fly = new IFlyTek(\n      config.IFlyTek?.apiPassword,\n      config.IFlyTek?.appId,\n      config.IFlyTek?.apiKey,\n      config.IFlyTek?.apiSecret,\n      config.IFlyTek?.proxy\n    );\n    this.baidu = new Baidu(config.Baidu?.apiKey, config.Baidu?.secretKey, config.Baidu?.proxy);\n    this.moon = new MoonShot(config.MoonShot?.key, config.MoonShot?.proxy);\n    this.ali = new AliYun(config.AliYun?.key, config.AliYun?.proxy);\n    this.ark = new Ark(config.Ark?.key, config.Ark?.proxy);\n    this.xai = new XAI(config.XAI?.key, config.XAI?.proxy);\n    this.other = new Other(config.Other?.api, config.Other?.key);\n    this.mj = new MidJourney(config.MidJourney?.proxy, config.MidJourney?.token, config.MidJourney?.imgProxy);\n    this.stability = new Stability(config.StabilityAI?.key, config.StabilityAI?.proxy);\n    this.chatModels = Object.entries(ChatModelProvider).map(([k, v]) => ({\n      provider: k,\n      value: v,\n      models: Object.values(\n        {\n          [\"openai\" /* OpenAI */]: OpenAIChatModel,\n          [\"anthropic\" /* Anthropic */]: AnthropicChatModel,\n          [\"deepseek\" /* DeepSeek */]: DeepSeekChatModel,\n          [\"baidu\" /* Baidu */]: BaiduChatModel,\n          [\"iflytek\" /* IFlyTek */]: IFlyTekChatModel,\n          [\"glm\" /* GLM */]: GLMChatModel,\n          [\"google\" /* Google */]: GoogleChatModel,\n          [\"moonshot\" /* MoonShot */]: MoonShotChatModel,\n          [\"aliyun\" /* AliYun */]: AliChatModel,\n          [\"xai\" /* XAI */]: XAIChatModel,\n          [\"ark\" /* ARK */]: ArkChatModel,\n          [\"other\" /* Other */]: []\n        }[v]\n      )\n    }));\n    this.imgModels = Object.entries(ImagineModelProvider).map(([k, v]) => ({\n      provider: k,\n      value: v,\n      models: Object.values(\n        {\n          [\"openai\" /* OpenAI */]: OpenAIImagineModel,\n          [\"midjourney\" /* MidJourney */]: MidJourneyImagineModel,\n          [\"stability.ai\" /* StabilityAI */]: StabilityAIImagineModel,\n          [\"iflytek\" /* IFlyTek */]: IFlyTekImagineModel\n        }[v]\n      )\n    }));\n    this.embedModels = Object.entries(EmbedModelProvider).map(([k, v]) => ({\n      provider: k,\n      value: v,\n      models: Object.values(\n        {\n          [\"openai\" /* OpenAI */]: OpenAIEmbedModel,\n          [\"glm\" /* GLM */]: GLMEmbedModel,\n          [\"google\" /* Google */]: GoogleEmbedModel,\n          [\"aliyun\" /* AliYun */]: AliEmbedModel,\n          [\"other\" /* Other */]: OtherEmbedModel\n        }[v]\n      )\n    }));\n    this.models = [...this.chatModels, ...this.embedModels, ...this.imgModels];\n  }\n  setConfig(config) {\n    this.config = { ...this.config, ...config };\n    this.openai.config(this.config.OpenAI?.key, this.config.OpenAI?.proxy);\n    this.anthropic.config(this.config.Anthropic?.key, this.config.Anthropic?.proxy);\n    this.deepseek.config(this.config.DeepSeek?.key, this.config.DeepSeek?.proxy);\n    this.glm.config(this.config.GLM?.key, this.config.GLM?.proxy);\n    this.google.config(this.config.Google?.key, this.config.Google?.proxy);\n    this.fly.config(\n      this.config.IFlyTek?.apiPassword,\n      this.config.IFlyTek?.appId,\n      this.config.IFlyTek?.apiKey,\n      this.config.IFlyTek?.apiSecret,\n      this.config.IFlyTek?.proxy\n    );\n    this.baidu.config(this.config.Baidu?.apiKey, this.config.Baidu?.secretKey, this.config.Baidu?.proxy);\n    this.moon.config(this.config.MoonShot?.key, this.config.MoonShot?.proxy);\n    this.ali.config(this.config.AliYun?.key, this.config.AliYun?.proxy);\n    this.ark.config(this.config.Ark?.key, this.config.Ark?.proxy);\n    this.xai.config(this.config.XAI?.key, this.config.XAI?.proxy);\n    this.other.config(this.config.Other?.api, this.config.Other?.key);\n    this.mj.config(this.config.MidJourney?.proxy, this.config.MidJourney?.token, this.config.MidJourney?.imgProxy);\n    this.stability.config(this.config.StabilityAI?.key, this.config.StabilityAI?.proxy);\n    return this;\n  }\n  async chat(messages = DEFAULT_MESSAGE, option = {}) {\n    if (typeof messages === \"string\") messages = [{ role: \"user\" /* USER */, content: messages }];\n    const provider = option.provider || \"openai\" /* OpenAI */;\n    const { model, stream, top, temperature, maxLength, tools, toolChoice, reasoning } = option;\n    switch (provider) {\n      case \"openai\" /* OpenAI */:\n        return await this.openai.chat(\n          messages,\n          model,\n          stream,\n          reasoning,\n          top,\n          temperature,\n          maxLength,\n          tools,\n          toolChoice\n        );\n      case \"anthropic\" /* Anthropic */:\n        return await this.anthropic.chat(\n          messages,\n          model,\n          stream,\n          top,\n          temperature,\n          maxLength,\n          tools,\n          toolChoice\n        );\n      case \"deepseek\" /* DeepSeek */:\n        return await this.deepseek.chat(\n          messages,\n          model,\n          stream,\n          top,\n          temperature,\n          maxLength\n        );\n      case \"google\" /* Google */:\n        return await this.google.chat(messages, model, stream, top, temperature, maxLength);\n      case \"glm\" /* GLM */:\n        return await this.glm.chat(\n          messages,\n          model,\n          stream,\n          top,\n          temperature,\n          maxLength,\n          tools,\n          toolChoice\n        );\n      case \"iflytek\" /* IFlyTek */:\n        return await this.fly.chat(\n          messages,\n          model,\n          stream,\n          top,\n          temperature,\n          maxLength,\n          tools,\n          toolChoice\n        );\n      case \"baidu\" /* Baidu */:\n        return await this.baidu.chat(messages, model, stream, top, temperature, maxLength);\n      case \"moonshot\" /* MoonShot */:\n        return await this.moon.chat(messages, model, stream, top, temperature, maxLength);\n      case \"aliyun\" /* AliYun */:\n        return await this.ali.chat(messages, model, stream, top, temperature, maxLength);\n      case \"ark\" /* ARK */:\n        return await this.ark.chat(\n          messages,\n          model,\n          stream,\n          reasoning,\n          top,\n          temperature,\n          maxLength\n        );\n      case \"xai\" /* XAI */:\n        return await this.xai.chat(\n          messages,\n          model,\n          stream,\n          top,\n          temperature,\n          maxLength,\n          tools,\n          toolChoice\n        );\n      case \"other\" /* Other */:\n        return await this.other.chat(\n          messages,\n          model,\n          stream,\n          reasoning,\n          top,\n          temperature,\n          maxLength,\n          tools,\n          toolChoice\n        );\n      default:\n        throw new Error(\"Chat model Provider not found\");\n    }\n  }\n  async embedding(content, option = {}) {\n    const provider = option.provider || ModelProvider.OpenAI;\n    const { model, dimensions } = option;\n    if (typeof content === \"string\") content = [content];\n    switch (provider) {\n      case \"openai\" /* OpenAI */:\n        return await this.openai.embedding(content, model, dimensions);\n      case \"glm\" /* GLM */:\n        return await this.glm.embedding(content, model, dimensions);\n      case \"google\" /* Google */:\n        return await this.google.embedding(content, model, dimensions);\n      case \"aliyun\" /* AliYun */:\n        return await this.ali.embedding(content, model, dimensions);\n      case \"other\" /* Other */:\n        return await this.other.embedding(content, model, dimensions);\n      default:\n        throw new Error(\"Embedding model provider not found\");\n    }\n  }\n  async imagine(prompt, option = {}) {\n    const provider = option.provider || \"openai\" /* OpenAI */;\n    const { negativePrompt, width, height, num, model } = option;\n    if (provider === \"openai\" /* OpenAI */)\n      return await this.openai.imagine(prompt, width, height, num, model);\n    else if (provider === \"midjourney\" /* MidJourney */)\n      return await this.mj.imagine(prompt, negativePrompt, width, height);\n    else if (provider === \"stability.ai\" /* StabilityAI */)\n      return await this.stability.imagine(\n        prompt,\n        negativePrompt,\n        width,\n        height,\n        num,\n        model\n      );\n    else if (provider === \"iflytek\" /* IFlyTek */)\n      return await this.fly.imagine(prompt, width, height, model);\n    else throw new Error(\"Imagine model provider not found\");\n  }\n  async task(provider, id) {\n    if (provider === \"openai\" /* OpenAI */) return this.openai.task(id);\n    else if (provider === \"midjourney\" /* MidJourney */) return await this.mj.task(id);\n    else if (provider === \"stability.ai\" /* StabilityAI */) return this.stability.task(id);\n    else if (provider === \"iflytek\" /* IFlyTek */) return this.fly.task(id);\n    else throw new Error(\"Imagine model provider not found\");\n  }\n  async change(provider, taskId, action, index) {\n    if (provider === \"midjourney\" /* MidJourney */) return this.mj.change(taskId, action, index);\n    else throw new Error(\"Imagine model provider not found\");\n  }\n};\n\n// src/Prompt.ts\nvar Prompt = class _Prompt {\n  /**\n   * Constructs a new Prompt instance.\n   * @param title - The heading/title of the node.\n   * @param content - The content/body text of the node. Defaults to an empty string.\n   * @param children - An array of Prompt children. Defaults to an empty array.\n   */\n  constructor(title, content = \"\", children = []) {\n    this.title = title;\n    this.content = content;\n    this.children = children;\n  }\n  /**\n   * Recursively finds all descendant nodes (including direct children) whose title matches the given string.\n   * @param title - The title to search for.\n   * @param deep - Whether to search recursively in all descendants. Defaults to false (only immediate children).\n   * @returns An array of all matching Prompt nodes.\n   */\n  getByTitle(title, deep = false) {\n    let result = [];\n    for (const child of this.children) {\n      if (child.title === title) result.push(child);\n      if (deep) result = result.concat(child.getByTitle(title, true));\n    }\n    return result;\n  }\n  /**\n   * Adds a child prompt node to the children of this node.\n   * Supports chainable calls.\n   * @param child - The Prompt instance to add.\n   * @returns This Prompt instance (for chaining).\n   */\n  add(child) {\n    this.children.push(child);\n    return this;\n  }\n  /**\n   * Recursively removes all nodes (including direct and indirect children) whose title matches the given string.\n   * @param title - The title of the nodes to remove.\n   * @param deep - Whether to remove matching nodes at any depth. Defaults to false (only immediate children).\n   * @returns An array of all removed Prompt nodes.\n   */\n  remove(title, deep = false) {\n    const removed = [];\n    for (let i = this.children.length - 1; i >= 0; i--)\n      if (this.children[i].title === title) removed.push(...this.children.splice(i, 1));\n    if (deep) for (const child of this.children) removed.push(...child.remove(title, true));\n    return removed;\n  }\n  /**\n   * Recursively exports the structure as Markdown text.\n   * @param level - The Markdown heading level (used internally for recursion).\n   * @returns The generated Markdown string.\n   */\n  toMarkdown(level = 1) {\n    let md = \"\";\n    if (this.title) md += `${\"#\".repeat(level)} ${this.title}\n\n`;\n    if (this.content) md += this.content.trim() + \"\\n\\n\";\n    const nextLevel = this.title ? level + 1 : level;\n    for (const child of this.children) md += child.toMarkdown(nextLevel);\n    return md;\n  }\n  /**\n   * Creates a deep copy (clone) of this Prompt node, including all descendants.\n   * @returns A new Prompt instance that is a deep copy of this node.\n   */\n  clone() {\n    return new _Prompt(\n      this.title,\n      this.content,\n      this.children.map((child) => child.clone())\n    );\n  }\n  /**\n   * Serializes this node and all descendants into a plain JSON object structure.\n   * Only the title, content, and children structure are preserved.\n   * @returns The JSON representation of this Prompt tree.\n   */\n  toJSON() {\n    return {\n      title: this.title,\n      content: this.content,\n      children: this.children.map((child) => child.toJSON())\n    };\n  }\n  /**\n   * Converts this Prompt node and all descendants into a Markdown string.\n   * @returns The Markdown representation of this Prompt tree.\n   */\n  toString() {\n    return this.toMarkdown();\n  }\n  /**\n   * Deserializes a JSON object (or string) into a Prompt tree.\n   * @param jsonObj - The structured data (from toJSON) or a compatible JSON string.\n   * @returns The root Prompt instance.\n   */\n  static fromJSON(jsonObj) {\n    if (typeof jsonObj === \"string\") jsonObj = JSON.parse(jsonObj);\n    return new _Prompt(\n      jsonObj.title,\n      jsonObj.content,\n      (jsonObj.children || []).map((child) => _Prompt.fromJSON(child))\n    );\n  }\n  /**\n   * Parses a Markdown source string and constructs a Prompt tree representing its structure.\n   * Only basic heading recognition (# ... ######) is implemented.\n   * @param markdown - The Markdown source string.\n   * @returns The root Prompt node parsed from the document.\n   */\n  static fromMarkdown(markdown) {\n    const lines = markdown.split(/\\r?\\n/);\n    const root = new _Prompt(\"\", \"\", []);\n    const stack = [{ prompt: root, level: 0 }];\n    for (const line of lines) {\n      const headingMatch = line.match(/^(#{1,6})\\s+(.*)$/);\n      if (headingMatch) {\n        const level = headingMatch[1].length;\n        const title = headingMatch[2].trim();\n        const newNode = new _Prompt(title, \"\");\n        while (stack.length && stack[stack.length - 1].level >= level) stack.pop();\n        stack[stack.length - 1].prompt.add(newNode);\n        stack.push({ prompt: newNode, level });\n      } else if (line.trim() !== \"\") {\n        if (stack.length > 0) {\n          const current = stack[stack.length - 1].prompt;\n          if (current.content) current.content += \"\\n\";\n          current.content += line;\n        }\n      }\n    }\n    if (root.children.length === 1 && !root.content) return root.children[0];\n    return root;\n  }\n  /**\n   * Generates an Abstract Syntax Tree (AST) representing this node and all descendants,\n   * compatible with mdast structure.\n   * @returns The generated AST object.\n   */\n  getAST() {\n    const astNode = {\n      type: this.title ? \"heading\" : \"root\",\n      depth: this.title ? 1 : void 0,\n      children: []\n    };\n    if (this.title) astNode.children.push({ type: \"text\", value: this.title });\n    if (this.content)\n      astNode.children.push({\n        type: \"paragraph\",\n        children: [{ type: \"text\", value: this.content }]\n      });\n    for (const child of this.children) astNode.children.push(child.getAST());\n    return astNode;\n  }\n  /**\n   * Prints the tree structure of this Prompt node and all descendants to the console,\n   * with clear indentation and branch markers for visualization.\n   * @param indent - The indentation prefix for current level (for internal recursion use).\n   * @param isLast - Whether this is the last child node (for internal recursion use).\n   */\n  printTree(indent = \"\", isLast = true) {\n    const icon = indent ? isLast ? \"\\u2514\\u2500\" : \"\\u251C\\u2500\" : \"\";\n    if (this.title || this.content)\n      console.log(\n        `${indent}${icon}${this.title ? `\\u300C${this.title}\\u300D` : \"\"}${this.content ? `: ${this.content.split(\"\\n\")[0]}${this.content.length > 40 ? \"...\" : \"\"}` : \"\"}`\n      );\n    const nextIndent = indent + (isLast ? \"  \" : \"\\u2502 \");\n    this.children.forEach((child, i) => child.printTree(nextIndent, i === this.children.length - 1));\n  }\n};\n\n// src/index.ts\nvar index_default = UniAI;\nexport {\n  AliChatModel,\n  AliEmbedModel,\n  AnthropicChatModel,\n  AnthropicChatRoleEnum,\n  ArkChatModel,\n  BDUChatRoleEnum,\n  BaiduChatModel,\n  ChatModel,\n  ChatModelProvider,\n  ChatRoleEnum,\n  DETaskType,\n  DSChatRoleEnum,\n  DeepSeekChatModel,\n  EmbedModel,\n  EmbedModelProvider,\n  GEMChatRoleEnum,\n  GLMChatModel,\n  GLMChatRoleEnum,\n  GLMEmbedModel,\n  GPTChatRoleEnum,\n  GoogleChatModel,\n  GoogleEmbedModel,\n  IFlyTekChatModel,\n  IFlyTekImagineModel,\n  ImagineModel,\n  ImagineModelProvider,\n  ImgTaskType,\n  MJTaskType,\n  MidJourneyImagineModel,\n  ModelModel,\n  ModelProvider,\n  MoonShotChatModel,\n  OpenAIChatModel,\n  OpenAIEmbedModel,\n  OpenAIImagineModel,\n  OtherEmbedModel,\n  Prompt,\n  SDTaskType,\n  SPKChatRoleEnum,\n  SPKTaskType,\n  StabilityAIImagineModel,\n  XAIChatModel,\n  index_default as default\n};\n","/** @format */\n\n// model providers\n\nexport enum ChatModelProvider {\n    OpenAI = 'openai',\n    Anthropic = 'anthropic',\n    DeepSeek = 'deepseek',\n    IFlyTek = 'iflytek',\n    Baidu = 'baidu',\n    Google = 'google',\n    GLM = 'glm',\n    MoonShot = 'moonshot',\n    AliYun = 'aliyun',\n    XAI = 'xai',\n    ARK = 'ark', // 火山\n    Other = 'other'\n}\n\nexport enum EmbedModelProvider {\n    OpenAI = 'openai',\n    Google = 'google',\n    GLM = 'glm',\n    AliYun = 'aliyun',\n    Other = 'other'\n}\n\nexport enum ImagineModelProvider {\n    OpenAI = 'openai',\n    MidJourney = 'midjourney',\n    StabilityAI = 'stability.ai',\n    IFlyTek = 'iflytek'\n}\n\nexport type ModelProvider = ChatModelProvider | EmbedModelProvider | ImagineModelProvider\nexport const ModelProvider = { ...ChatModelProvider, ...EmbedModelProvider, ...ImagineModelProvider }\n\n// openai embed models\nexport enum OpenAIEmbedModel {\n    ADA = 'text-embedding-ada-002',\n    LARGE = 'text-embedding-3-large',\n    SMALL = 'text-embedding-3-small'\n}\n\n// local embedding models\nexport enum OtherEmbedModel {\n    BGE_M3 = 'bge-m3',\n    BASE_CHN = 'text2vec-base-chinese',\n    LARGE_CHN = 'text2vec-large-chinese',\n    BASE_CHN_PARAPH = 'text2vec-base-chinese-paraphrase',\n    BASE_CHN_SENTENCE = 'text2vec-base-chinese-sentence',\n    BASE_MUL = 'text2vec-base-multilingual',\n    PARAPH_MUL_MINI = 'paraphrase-multilingual-MiniLM-L12-v2'\n}\n\nexport enum GLMEmbedModel {\n    EMBED_2 = 'embedding-2',\n    EMBED_3 = 'embedding-3'\n}\n\nexport enum GoogleEmbedModel {\n    GEM_EMBED = 'gemini-embedding-001'\n}\n\nexport enum AliEmbedModel {\n    ALI_V3 = 'text-embedding-v3',\n    ALI_V2 = 'text-embedding-v2',\n    ALI_V1 = 'text-embedding-v1',\n    ALI_ASYNC_V2 = 'text-embedding-async-v2',\n    ALI_ASYNC_V1 = 'text-embedding-async-v1'\n}\n\nexport type EmbedModel = OpenAIEmbedModel | OtherEmbedModel | GLMEmbedModel | GoogleEmbedModel | AliEmbedModel | string\nexport const EmbedModel = {\n    ...OpenAIEmbedModel,\n    ...OtherEmbedModel,\n    ...GLMEmbedModel,\n    ...GoogleEmbedModel,\n    ...AliEmbedModel\n}\n\n// openai chat models\nexport enum OpenAIChatModel {\n    // 3 series\n    GPT3 = 'gpt-3.5-turbo',\n    // 4 series\n    GPT4 = 'gpt-4',\n    GPT4_TURBO = 'gpt-4-turbo',\n    GPT_4O_MINI = 'gpt-4o-mini',\n    CHAT_GPT_4O = 'chatgpt-4o-latest',\n    GPT_4O = 'gpt-4o',\n    GPT_4O_AUDIO = 'gpt-4o-audio-preview',\n    GPT_4_1 = 'gpt-4.1',\n    GPT_4_1_MINI = 'gpt-4.1-mini',\n    GPT_4_1_NANO = 'gpt-4.1-nano',\n\n    // 5 series\n    GPT_5 = 'gpt-5',\n    GPT_5_CODE = 'gpt-5-codex',\n    GPT_5_1_CODE = 'gpt-5.1-codex',\n    GPT_5_1_CODE_MAX = 'gpt-5.1-codex-max',\n    GPT_5_CHAT = 'gpt-5-chat-latest',\n    GPT_5_PRO = 'gpt-5-pro',\n    GPT_5_MINI = 'gpt-5-mini',\n    GPT_5_NANO = 'gpt-5-nano',\n    GPT_5_1 = 'gpt-5.1',\n    GPT_5_1_CHAT = 'gpt-5.1-chat-latest',\n\n    // Reasoning models\n    O1 = 'o1',\n    O1_MINI = 'o1-mini',\n    O1_PRO = 'o1-pro',\n    O3 = 'o3',\n    O3_PRO = 'o3-pro',\n    O3_DEEP = 'o3-deep-research',\n    O3_MINI = 'o3-mini',\n    O4_MINI = 'o4-mini',\n    O4_DEEP = 'o4-mini-deep-research',\n\n    // open sourced\n    GPT_OSS_120B = 'gpt-oss-120b',\n    GPT_OSS_20B = 'gpt-oss-20b'\n}\n\nexport enum AnthropicChatModel {\n    CLAUDE_4_5_SONNET = 'claude-sonnet-4-5',\n    CLAUDE_4_5_HAIKU = 'claude-haiku-4-5',\n    CLAUDE_4_5_OPUS = 'claude-opus-4-5',\n    CLAUDE_4_1_OPUS = 'claude-opus-4-1',\n    CLAUDE_4_OPUS = 'claude-opus-4-0',\n    CLAUDE_4_SONNET = 'claude-sonnet-4-0',\n    CLAUDE_3_7_SONNET = 'claude-3-7-sonnet-latest',\n    CLAUDE_3_5_HAIKU = 'claude-3-5-haiku-latest',\n    CLAUDE_3_HAIKU = 'claude-3-haiku-20240307'\n}\n\nexport enum DeepSeekChatModel {\n    DEEPSEEK_V3 = 'deepseek-chat',\n    DEEPSEEK_R1 = 'deepseek-reasoner'\n}\n\n// google chat models\nexport enum GoogleChatModel {\n    // current models\n    GEM_FLASH_2 = 'gemini-2.0-flash',\n    GEM_FLASH_2_LITE = 'gemini-2.0-flash-lite',\n    GEM_PRO_2_5 = 'gemini-2.5-pro',\n    GEM_FLASH_2_5 = 'gemini-2.5-flash',\n    GEM_FLASH_2_5_LITE = 'gemini-2.5-flash-lite'\n}\n\n// glm chat models\nexport enum GLMChatModel {\n    GLM_3_TURBO = 'glm-3-turbo',\n    GLM_4 = 'glm-4',\n    GLM_4_AIR = 'glm-4-air',\n    GLM_4_AIRX = 'glm-4-airx',\n    GLM_4_FLASH = 'glm-4-flash',\n    GLM_4_FLASHX = 'glm-4-flashx',\n    GLM_4V = 'glm-4v',\n    GLM_4V_PLUS = 'glm-4v-plus',\n    GLM_4_LONG = 'glm-4-long',\n    GLM_4_PLUS = 'glm-4-plus'\n}\n\n// https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\nexport enum BaiduChatModel {\n    ERNIE_3_5 = 'completions', // 'ernie-3.5-8k', // ERNIE 3.5 8K\n    ERNIE_3_5_PRE = 'ernie-3.5-8k-preview', // ERNIE 3.5 8K Preview\n    ERNIE_3_5_128K = 'ernie-3.5-128k', // ERNIE 3.5 128K\n    ERNIE_4_0_LATEST = 'ernie-4.0-8k-latest', // ERNIE 4.0 8K Latest\n    ERNIE_4_0_PREVIEW = 'ernie-4.0-8k-preview', // ERNIE 4.0 8K Preview\n    ERNIE_4_0_8K = 'completions_pro', // 'ernie-4.0-8k', // ERNIE 4.0 8K\n    ERNIE_4_0_TURBO_LATEST = 'ernie-4.0-turbo-8k-latest', // ERNIE 4.0 Turbo 8K Latest\n    ERNIE_4_0_TURBO_PREVIEW = 'ernie-4.0-turbo-8k-preview', // ERNIE 4.0 Turbo 8K Preview\n    ERNIE_4_0_TURBO_8K = 'ernie-4.0-turbo-8k', // ERNIE 4.0 Turbo 8K\n    ERNIE_4_0_TURBO_128K = 'ernie-4.0-turbo-128k', // ERNIE 4.0 Turbo 128K\n    ERNIE_SPEED_8K = 'ernie_speed', // ERNIE Speed 8K\n    ERNIE_SPEED_128K = 'ernie-speed-128k', // ERNIE Speed 128K\n    ERNIE_SPEED_PRO_128K = 'ernie-speed-pro-128k', // ERNIE Speed Pro 128K\n    ERNIE_LITE_8K = 'ernie-lite-8k', // ERNIE Lite 8K\n    ERNIE_LITE_PRO_128K = 'ernie-lite-pro-128k', // ERNIE Lite Pro 128K\n    ERNIE_TINY_8K = 'ernie-tiny-8k', // ERNIE Tiny 8K\n    ERNIE_CHAR_8K = 'ernie-char-8k', // ERNIE Character 8K\n    ERNIE_CHAR_FICTION_8K = 'ernie-char-fiction-8k', // ERNIE Character Fiction 8K\n    ERNIE_NOVEL_8K = 'ernie-novel-8k' // ERNIE Novel 8K\n}\n\n// iFlyTek spark model\nexport enum IFlyTekChatModel {\n    SPARK_LITE = 'lite',\n    SPARK_PRO = 'generalv3',\n    SPARK_PRO_128K = 'pro-128k',\n    SPARK_MAX = 'generalv3.5',\n    SPARK_MAX_32K = 'max-32k',\n    SPARK_ULTRA = '4.0Ultra'\n}\n\nexport enum MoonShotChatModel {\n    KIMI_K2_0711_PREVIEW = 'kimi-k2-0711-preview',\n    MOON_V1_8K = 'moonshot-v1-8k',\n    MOON_V1_32K = 'moonshot-v1-32k',\n    MOON_V1_128K = 'moonshot-v1-128k',\n    MOON_V1_AUTO = 'moonshot-v1-auto',\n    KIMI_LATEST = 'kimi-latest',\n    MOON_V1_8K_VISION_PREVIEW = 'moonshot-v1-8k-vision-preview',\n    MOON_V1_32K_VISION_PREVIEW = 'moonshot-v1-32k-vision-preview',\n    MOON_V1_128K_VISION_PREVIEW = 'moonshot-v1-128k-vision-preview',\n    KIMI_THINKING_PREVIEW = 'kimi-thinking-preview'\n}\n\nexport enum AliChatModel {\n    QWEN3_MAX = 'qwen3-max',\n    QWEN_MAX = 'qwen-max',\n    QWEN_PLUS = 'qwen-plus',\n    QWEN_FLASH = 'qwen-flash',\n    QWEN_TURBO = 'qwen-turbo',\n    QWQ_PLUS = 'qwq-plus',\n    QVQ_MAX = 'qvq-max',\n    QVQ_PLUS = 'qvq-plus',\n    QWEN_LONG = 'qwen-long',\n    QWEN_CODE_TURBO = 'qwen-coder-turbo',\n    QWEN_CODE_PLUS = 'qwen3-coder-plus',\n    QWEN_CODE_FLASH = 'qwen3-coder-flash',\n    QWEN_MATH = 'qwen-math-plus',\n    QWEN_VL_MAX = 'qwen-vl-max',\n    QWEN_VL_PLUS = 'qwen-vl-plus'\n}\n\nexport enum XAIChatModel {\n    GROK_CODE_FAST_1 = 'grok-code-fast-1',\n    GROK4_FAST_REASONING = 'grok-4-fast-reasoning',\n    GROK4_FAST_NON_REASONING = 'grok-4-fast-non-reasoning',\n    GROK4_0709 = 'grok-4-0709',\n    GROK3_MINI = 'grok-3-mini',\n    GROK3 = 'grok-3',\n    GROK2_VISION_1212_US_EAST_1 = 'grok-2-vision-1212us-east-1',\n    GROK2_VISION_1212_EU_WEST_1 = 'grok-2-vision-1212eu-west-1'\n}\n\nexport enum ArkChatModel {\n    DOUBAO_1_5_THINKING_PRO = 'doubao-1-5-thinking-pro-m-250428',\n    DOUBAO_1_5_THINKING_VISION_PRO = 'doubao-1-5-thinking-vision-pro-250428',\n    DOUBAO_SEED_1_6 = 'doubao-seed-1-6-251015',\n    DOUBAO_SEED_1_6_VISION = 'doubao-seed-1-6-vision-250815',\n    DOUBAO_SEED_1_6_FLASH = 'doubao-seed-1-6-flash-250828',\n    DOUBAO_SEED_1_6_LITE = 'doubao-seed-1-6-lite-251015',\n    DOUBAO_SEED_1_6_THINKING = 'doubao-seed-1-6-thinking-250715',\n    DOUBAO_SEED_CODE = 'doubao-seed-code-preview-251028',\n\n    // Other open source models in Ark platform\n    DEEPSEEK_V3 = 'deepseek-v3-250324',\n    DEEPSEEK_V3_1 = 'deepseek-v3-1-250821',\n    DEEPSEEK_V3_2 = 'deepseek-v3-2-251201',\n    KIMI_K2 = 'kimi-k2-250905',\n    KIMI_K2_THINK = 'kimi-k2-thinking-251104'\n}\n\n// All chat models\nexport type ChatModel =\n    | OpenAIChatModel\n    | AnthropicChatModel\n    | DeepSeekChatModel\n    | BaiduChatModel\n    | GLMChatModel\n    | IFlyTekChatModel\n    | GoogleChatModel\n    | MoonShotChatModel\n    | AliChatModel\n    | XAIChatModel\n    | ArkChatModel\n    | string\n\nexport const ChatModel = {\n    ...OpenAIChatModel,\n    ...AnthropicChatModel,\n    ...DeepSeekChatModel,\n    ...BaiduChatModel,\n    ...GLMChatModel,\n    ...IFlyTekChatModel,\n    ...GoogleChatModel,\n    ...OpenAIChatModel,\n    ...MoonShotChatModel,\n    ...AliChatModel,\n    ...XAIChatModel,\n    ...ArkChatModel\n}\n\n// image models\nexport enum MidJourneyImagineModel {\n    MJ = 'midjourney'\n}\nexport enum OpenAIImagineModel {\n    DALL_E_2 = 'dall-e-2',\n    DALL_E_3 = 'dall-e-3'\n}\nexport enum StabilityAIImagineModel {\n    SD_1_6 = 'stable-diffusion-v1-6',\n    SD_XL_1024 = 'stable-diffusion-xl-1024-v1-0'\n}\nexport enum IFlyTekImagineModel {\n    V2 = 'v2.1'\n}\n\nexport const ImagineModel = {\n    ...OpenAIImagineModel,\n    ...MidJourneyImagineModel,\n    ...StabilityAIImagineModel,\n    ...IFlyTekImagineModel\n}\nexport type ImagineModel = OpenAIImagineModel | MidJourneyImagineModel | StabilityAIImagineModel | IFlyTekImagineModel\n\nexport type ModelModel = ChatModel | ImagineModel | EmbedModel\nexport const ModelModel = { ...ChatModel, ...ImagineModel, ...EmbedModel }\n\nexport enum MJTaskType {\n    IMAGINE = 'IMAGINE',\n    UPSCALE = 'UPSCALE',\n    VARIATION = 'VARIATION',\n    REROLL = 'REROLL',\n    DESCRIBE = 'DESCRIBE',\n    BLEND = 'BLEND'\n}\n\nexport enum DETaskType {\n    GENERATION = 'generations',\n    EDIT = 'edits',\n    VARIATION = 'variation'\n}\n\nexport enum SDTaskType {\n    GENERATION = 'generation'\n}\n\nexport enum SPKTaskType {\n    GENERATION = 'generation'\n}\n\nexport const ImgTaskType = { ...MJTaskType, ...DETaskType, ...SDTaskType, ...SPKTaskType }\nexport type ImgTaskType = MJTaskType | DETaskType | SDTaskType | SPKTaskType\n\n// UniAI specified model roles\nexport enum ChatRoleEnum {\n    SYSTEM = 'system',\n    USER = 'user',\n    ASSISTANT = 'assistant',\n    TOOL = 'tool',\n    DEV = 'developer'\n}\n\n// OpenAI GPT model roles\nexport enum GPTChatRoleEnum {\n    SYSTEM = 'system',\n    USER = 'user',\n    ASSISTANT = 'assistant',\n    DEV = 'developer',\n    TOOL = 'tool'\n}\n\n// Anthropic Claude model roles\nexport enum AnthropicChatRoleEnum {\n    USER = 'user',\n    ASSISTANT = 'assistant'\n}\n\n// DeepSeek model roles\nexport enum DSChatRoleEnum {\n    SYSTEM = 'system',\n    USER = 'user',\n    ASSISTANT = 'assistant',\n    TOOL = 'tool'\n}\n\n// IflyTek Spark model roles\nexport enum SPKChatRoleEnum {\n    USER = 'user',\n    ASSISTANT = 'assistant',\n    SYSTEM = 'system',\n    TOOL = 'tool'\n}\n\n// ChatGLM model roles\nexport enum GLMChatRoleEnum {\n    SYSTEM = 'system',\n    USER = 'user',\n    ASSISTANT = 'assistant',\n    TOOL = 'tool'\n}\n\n// Google Gemini\nexport enum GEMChatRoleEnum {\n    USER = 'user',\n    MODEL = 'model'\n}\n\n// Baidu WenXin Workshop\nexport enum BDUChatRoleEnum {\n    USER = 'user',\n    ASSISTANT = 'assistant'\n}\n","/**\n * Utility for connecting to the OpenAI model API.\n *\n * @format prettier\n * @author devilyouwei\n */\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\n\nimport type {\n    GPTChatRequest,\n    GPTChatResponse,\n    GPTChatStreamRequest,\n    GPTImagineSize,\n    GPTChatStreamResponse,\n    OpenAIEmbedRequest,\n    OpenAIEmbedResponse,\n    OpenAIImagineRequest,\n    OpenAIImagineResponse\n} from '../../interface/IOpenAI'\nimport type {\n    ChatResponse,\n    ChatMessage,\n    TaskResponse,\n    ImagineResponse,\n    EmbeddingResponse,\n    ReasoningLevel\n} from '../../interface/IModel'\nimport type { ChatCompletionTool, ChatCompletionToolChoiceOption } from 'openai/resources'\n\nimport { DETaskType, OpenAIChatModel, OpenAIEmbedModel, OpenAIImagineModel } from '../../interface/Enum'\nimport $ from '../util'\n\nconst STORAGE_KEY = 'task_open_ai'\nconst API = 'https://api.openai.com'\nconst VER = 'v1'\n\nexport default class OpenAI {\n    private api: string\n    private key?: string | string[]\n\n    /**\n     * Constructor for the OpenAI class.\n     *\n     * @param key - The API key for OpenAI.\n     * @param api - The API endpoint for proxy (optional).\n     */\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    public config(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Fetches embeddings for input text.\n     *\n     * @param input - An array of input strings.\n     * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n     * @returns A promise resolving to the embedding response.\n     */\n    async embedding(input: string[], model: OpenAIEmbedModel = OpenAIEmbedModel.ADA, dimensions = 1536) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('OpenAI API key is not set in config')\n\n        const res = await $.post<OpenAIEmbedRequest, OpenAIEmbedResponse>(\n            `${this.api}/${VER}/embeddings`,\n            { model, input, dimensions },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: 'json' }\n        )\n\n        const data: EmbeddingResponse = {\n            embedding: res.data.map(v => v.embedding),\n            object: 'embedding',\n            model,\n            promptTokens: res.usage.prompt_tokens || 0,\n            totalTokens: res.usage.total_tokens || 0\n        }\n        return data\n    }\n\n    /**\n     * Sends messages to the GPT chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: gpt-3.5-turbo).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @param tools - Tools for model to use (optional).\n     * @param toolChoice - Controls which (if any) tool is called by the model: none, required, auto (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: OpenAIChatModel = OpenAIChatModel.GPT_4_1,\n        stream: boolean = false,\n        reasoning?: ReasoningLevel,\n        top?: number,\n        temperature?: number,\n        maxLength?: number,\n        tools?: ChatCompletionTool[],\n        toolChoice?: ChatCompletionToolChoiceOption\n    ) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('OpenAI API key is not set in config')\n\n        // temperature is float in [0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature > 1) temperature = 1\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top < 0) top = 0\n            if (top > 1) top = 1\n        }\n\n        const res = await $.post<GPTChatRequest | GPTChatStreamRequest, Readable | GPTChatResponse>(\n            `${this.api}/${VER}/chat/completions`,\n            {\n                model,\n                messages: $.formatGPTMessage(messages),\n                stream,\n                temperature,\n                top_p: top,\n                max_completion_tokens: maxLength,\n                tools,\n                tool_choice: toolChoice,\n                reasoning_effort: reasoning,\n                stream_options: stream ? { include_usage: true } : undefined\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n\n        const data: ChatResponse = {\n            id: '',\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<GPTChatStreamResponse>(e.data)\n                if (obj) {\n                    data.id = obj.id\n                    data.content = obj.choices[0]?.delta?.content || ''\n                    if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls\n                    data.model = obj.model\n                    data.object = obj.object\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(parser)\n\n            // output closed, close parser & LLM response\n            output.on('close', () => {\n                if (!res.destroyed) res.destroy(new Error('Downstream closed, aborting upstream SSE'))\n                if (!parser.destroyed) parser.destroy()\n            })\n            return output as Readable\n        } else {\n            data.id = res.id\n            data.content = res.choices[0]?.message?.content || ''\n            if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls\n            data.model = res.model\n            data.object = res.object\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n\n    /**\n     * Generates images based on a prompt.\n     *\n     * @param prompt - The prompt for image generation.\n     * @param width - Image width (default: 1024).\n     * @param height - Image height (default: 1024).\n     * @param n - Number of images to generate (default: 1).\n     * @param model - Model choice (default: dall-e-3).\n     * @returns A promise resolving to the image generation response.\n     */\n    async imagine(\n        prompt: string,\n        width: number = 1024,\n        height: number = 1024,\n        n: number = 1,\n        model: OpenAIImagineModel = OpenAIImagineModel.DALL_E_3\n    ): Promise<ImagineResponse> {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('OpenAI API key is not set in config')\n\n        const res = await $.post<OpenAIImagineRequest, OpenAIImagineResponse>(\n            `${this.api}/${VER}/images/${DETaskType.GENERATION}`,\n            { model, prompt, n, size: `${width}x${height}` as GPTImagineSize, response_format: 'b64_json' },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: 'json' }\n        )\n\n        const id = $.getRandomId()\n        const imgs: string[] = []\n        if (res.data) for (const i in res.data) imgs.push(await $.writeFile(res.data[i].b64_json!, `${id}-${i}.png`))\n\n        const time = Date.now()\n        const task: TaskResponse = {\n            id,\n            type: DETaskType.GENERATION,\n            info: 'success',\n            progress: 100,\n            imgs,\n            fail: '',\n            created: time,\n            model\n        }\n\n        const tasks: TaskResponse[] = $.getItem(STORAGE_KEY) || []\n        tasks.push(task)\n        $.setItem(STORAGE_KEY, tasks)\n        return { taskId: task.id, time }\n    }\n\n    /**\n     * Simulate tasks.\n     *\n     * @param id - The task ID to retrieve (optional).\n     * @returns An array of task responses or a specific task by ID.\n     */\n    task(id?: string) {\n        const tasks: TaskResponse[] = $.getItem(STORAGE_KEY) || []\n\n        if (id) return tasks.filter(v => v.id === id)\n        else return tasks\n    }\n}\n","/**\n * @author devilyouwei\n * @format prettier\n * Utils for UniAI\n **/\n\nimport { writeFileSync } from 'fs'\nimport axios, { AxiosRequestConfig } from 'axios'\nimport { LocalStorage } from 'node-localstorage'\nimport path from 'path'\nimport isBase64 from 'is-base64'\nimport { ChatCompletionContentPart, ChatCompletionContentPartText } from 'openai/resources'\nimport { ChatMessage } from '../interface/IModel'\nimport { GPTChatMessage } from '../interface/IOpenAI'\nimport { ChatRoleEnum } from '../interface/Enum'\n\n// Initialize local storage\nconst localStorage = new LocalStorage('./cache', Infinity)\n\nexport default {\n    /**\n     * Performs an HTTP GET request.\n     *\n     * @param url - The URL to make the request to.\n     * @param params - Optional request parameters.\n     * @param config - Optional Axios request configuration.\n     * @returns A Promise that resolves with the response data.\n     */\n    async get<RequestT, ResponseT>(url: string, params?: RequestT, config?: AxiosRequestConfig) {\n        return (await axios.get<ResponseT>(url, { params, ...config })).data\n    },\n\n    /**\n     * Performs an HTTP POST request.\n     *\n     * @param url - The URL to make the request to.\n     * @param body - The request body.\n     * @param config - Optional Axios request configuration.\n     * @returns A Promise that resolves with the response data.\n     */\n    async post<RequestT, ResponseT>(url: string, body?: RequestT, config?: AxiosRequestConfig) {\n        return (await axios.post<ResponseT>(url, body, config)).data\n    },\n    /**\n     * Parses JSON from a string and returns it as a generic type T.\n     *\n     * @param str - The JSON string to parse.\n     * @returns The parsed JSON as a generic type T.\n     */\n    json<T>(str?: string | null) {\n        try {\n            if (!str) return null\n            return JSON.parse(str) as T\n        } catch (e) {\n            return null\n        }\n    },\n    getRandomKey<T>(arr: T[]): T {\n        return arr[Math.floor(Math.random() * arr.length)]\n    },\n    getRandomId(length = 16): string {\n        let result = ''\n        while (result.length < length) {\n            let rand = Math.floor(Math.random() * 10)\n            // Ensure the number doesn't start with zero\n            if (result.length === 0 && rand === 0) continue\n            // Append the number to the result string\n            result += rand.toString()\n        }\n        return result\n    },\n    /**\n     * Computes the greatest common divisor (GCD) of two numbers using Euclidean algorithm.\n     *\n     * @param a - The first number.\n     * @param b - The second number.\n     * @returns The GCD of the two numbers.\n     */\n    getGCD(a: number, b: number): number {\n        if (b === 0) return a\n        return this.getGCD(b, a % b)\n    },\n    /**\n     * Calculates and returns the aspect ratio of a width and height.\n     *\n     * @param width - The width dimension.\n     * @param height - The height dimension.\n     * @returns The aspect ratio in the format \"width:height\".\n     */\n    getAspect(width: number, height: number) {\n        if (!width || !height) return '1:1'\n\n        const gcd = this.getGCD(width, height)\n        const aspectRatioWidth = width / gcd\n        const aspectRatioHeight = height / gcd\n\n        return `${aspectRatioWidth}:${aspectRatioHeight}`\n    },\n    /**\n     * Stores an item in local storage with the specified key.\n     *\n     * @param key - The key under which to store the item.\n     * @param value - The value to be stored.\n     */\n    setItem<T>(key: string, value: T) {\n        localStorage.setItem(key, JSON.stringify(value))\n    },\n    /**\n     * Retrieves an item from local storage by its key and parses it as a generic type T.\n     *\n     * @param key - The key of the item to retrieve.\n     * @returns The parsed item as a generic type T.\n     */\n    getItem<T>(key: string) {\n        return this.json<T>(localStorage.getItem(key))\n    },\n    /**\n     * This method is used to write given data to a file. The data can either be a base64 string or an HTTP/HTTPS URL.\n     * If the data is a URL, the method fetches the data as a readable stream and writes it to the file.\n     * If it's a base64 string, it writes it directly to the file.\n     * @param data - The data to be written to the file. Can be a base64 string or a HTTP/HTTPS img URL.\n     * @param filename - The name of the file where the data will be written. If not provided, a unique filename will be generated.\n     * @returns - The file path where the data was written.\n     */\n    async writeFile(data: string, filename = '') {\n        // Generate a unique filename for the output\n        const filepath = path.join('./cache', filename)\n\n        if (data.startsWith('http://') || data.startsWith('https://')) {\n            // Use the get method to fetch the image\n            const res: Buffer = await this.get(data, {}, { responseType: 'arraybuffer' })\n            if (!(res instanceof Buffer)) throw new Error('Img is not a buffer')\n            // write to file\n            writeFileSync(filepath, res)\n        } else writeFileSync(filepath, Buffer.from(data, 'base64'))\n\n        return filepath\n    },\n\n    /**\n     * Checks if a given string is a valid base64 encoded string.\n     *\n     * @param data - The string to check.\n     * @param allowMime - Whether to allow MIME type prefixes (default: true).\n     * @returns True if the string is a valid base64 encoded string, false otherwise.\n     */\n    isBase64(data: string, allowMime: boolean = true) {\n        return isBase64(data, { allowMime })\n    },\n    /**\n     * Normalizes an image URL by ensuring it has the correct base64 MIME prefix.\n     *\n     * @param imgUrl - The image URL to normalize.\n     * @returns The normalized image URL with the appropriate MIME prefix.\n     */\n    normalizeImg(imgUrl: string) {\n        const hasMimePrefix = /^data:.*;base64,/.test(imgUrl)\n        if (!hasMimePrefix && isBase64(imgUrl, { allowMime: false })) return `data:image/png;base64,${imgUrl}`\n        return imgUrl\n    },\n    /**\n     * Formats chat messages according to the GPT model's message format.\n     *\n     * @param messages - An array of chat messages.\n     * @returns Formatted messages compatible with the GPT model.\n     */\n    formatGPTMessage(messages: ChatMessage[]) {\n        const prompt: GPTChatMessage[] = []\n\n        for (const { role, content, img, tool, audio } of messages) {\n            // support string content and multi part content\n            let contentArr: string | ChatCompletionContentPart[] = []\n\n            // handle multi modal and user multi part content\n            if (img || audio || Array.isArray(content)) {\n                for (const text of Array.isArray(content) ? content : [content])\n                    if (text.trim()) contentArr.push({ type: 'text', text })\n\n                if (img)\n                    for (const url of Array.isArray(img) ? img : [img]) {\n                        const normalizedUrl = this.normalizeImg(url)\n                        contentArr.push({ type: 'image_url', image_url: { url: normalizedUrl } })\n                    }\n\n                if (audio)\n                    for (const data of Array.isArray(audio) ? audio : [audio])\n                        contentArr.push({ type: 'input_audio', input_audio: { data, format: 'wav' } })\n            } else contentArr = content\n\n            // with image\n            switch (role) {\n                case ChatRoleEnum.USER:\n                    prompt.push({ role, content: contentArr })\n                    break\n                case ChatRoleEnum.TOOL:\n                    // remove non-text part for tool role\n                    let contentTool: string | Array<ChatCompletionContentPartText> = ''\n                    if (Array.isArray(contentArr))\n                        contentTool = contentArr.filter(v => v.type === 'text') as ChatCompletionContentPartText[]\n                    else contentTool = contentArr\n                    prompt.push({ role, content: contentTool, tool_call_id: tool || '' })\n                    break\n                case ChatRoleEnum.DEV:\n                    let contentDev: string | Array<ChatCompletionContentPartText> = ''\n                    if (Array.isArray(contentArr))\n                        contentDev = contentArr.filter(v => v.type === 'text') as ChatCompletionContentPartText[]\n                    else contentDev = contentArr\n                    prompt.push({ role, content: contentDev })\n                    break\n                default:\n                    // system and assistant role\n                    prompt.push({ role, content: content as string })\n                    break\n            }\n        }\n\n        return prompt\n    }\n}\n","/**\n * Utility for connecting to the Anthropic Claude model API.\n *\n * @format prettier\n * @author devilyouwei\n */\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\n\nimport {\n    AnthropicChatRequest,\n    AnthropicChatResponse,\n    AnthropicChatStreamResponse,\n    AnthropicChatMessage,\n    AnthropicContent,\n    AnthropicTool,\n    AnthropicToolChoice\n} from '../../interface/IAnthropic'\n\nimport { ChatRoleEnum, AnthropicChatRoleEnum, AnthropicChatModel } from '../../interface/Enum'\n\nimport { ChatResponse, ChatMessage } from '../../interface/IModel'\nimport { extname } from 'path'\nimport { readFileSync } from 'fs'\nimport $ from '../util'\nimport { ChatCompletionFunctionTool, ChatCompletionTool, ChatCompletionToolChoiceOption } from 'openai/resources'\n\nconst API = 'https://api.anthropic.com'\nconst VER = 'v1'\n\nexport default class Anthropic {\n    private api: string\n    private key?: string | string[]\n\n    /**\n     * Constructor for the Anthropic class.\n     *\n     * @param key - The API key for Anthropic.\n     * @param api - The API endpoint for proxy (optional).\n     */\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    public config(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Sends messages to the Claude chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: claude-3-5-sonnet).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @param tools - Tools for model to use (optional).\n     * @param toolChoice - Controls which (if any) tool is called by the model (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: AnthropicChatModel = AnthropicChatModel.CLAUDE_4_SONNET,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number,\n        tools?: ChatCompletionTool[],\n        toolChoice?: ChatCompletionToolChoiceOption\n    ) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('Anthropic API key is not set in config')\n\n        // temperature is float in [0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature > 1) temperature = 1\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top < 0) top = 0\n            if (top > 1) top = 1\n        }\n\n        const { formattedMessages, systemMessage } = await this.formatMessage(messages)\n        const anthropicTools = tools ? this.formatTools(tools as ChatCompletionFunctionTool[]) : undefined\n        const anthropicToolChoice = toolChoice ? this.formatToolChoice(toolChoice) : undefined\n\n        const requestBody: AnthropicChatRequest = {\n            model,\n            max_tokens: maxLength || 4096,\n            messages: formattedMessages,\n            stream,\n            temperature,\n            top_p: top,\n            ...(systemMessage && { system: systemMessage }),\n            ...(anthropicTools && { tools: anthropicTools }),\n            ...(anthropicToolChoice && { tool_choice: anthropicToolChoice })\n        }\n\n        const res = await $.post<AnthropicChatRequest, Readable | AnthropicChatResponse>(\n            `${this.api}/${VER}/messages`,\n            requestBody,\n            {\n                headers: {\n                    'x-api-key': key,\n                    'anthropic-version': '2023-06-01',\n                    'Content-Type': 'application/json'\n                },\n                responseType: stream ? 'stream' : 'json'\n            }\n        )\n\n        const data: ChatResponse = {\n            id: '',\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<AnthropicChatStreamResponse>(e.data)\n                if (obj?.message?.id) data.id = obj.message.id\n                if (obj) {\n                    // Handle different stream event types\n                    switch (obj.type) {\n                        case 'message_start':\n                            if (obj.message?.usage) {\n                                data.promptTokens = obj.message.usage.input_tokens\n                            }\n                            break\n                        case 'content_block_delta':\n                            if (obj.delta?.text) {\n                                data.content = obj.delta.text\n                                data.object = 'chat.completion.chunk'\n                                output.write(JSON.stringify(data))\n                            }\n                            break\n                        case 'message_delta':\n                            if (obj.delta?.usage?.output_tokens) {\n                                data.completionTokens = obj.delta.usage.output_tokens\n                                data.totalTokens = data.promptTokens + data.completionTokens\n                            }\n                            break\n                        case 'message_stop':\n                            // Stream ended\n                            break\n                    }\n                }\n            })\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(parser)\n\n            // output closed, close parser & LLM response\n            output.on('close', () => {\n                if (!res.destroyed) res.destroy(new Error('Downstream closed, aborting upstream SSE'))\n                if (!parser.destroyed) parser.destroy()\n            })\n            return output as Readable\n        } else {\n            // Handle non-stream response\n            if (res.content && res.content.length > 0) {\n                const textContent = res.content.find(c => c.type === 'text')\n                if (textContent) data.content = textContent.text || ''\n\n                // Handle tool calls\n                const toolUseContent = res.content.filter(c => c.type === 'tool_use')\n                if (toolUseContent.length > 0) {\n                    data.tools = toolUseContent.map(tool => ({\n                        id: tool.id,\n                        type: 'function',\n                        function: {\n                            name: tool.name,\n                            arguments: JSON.stringify(tool.input)\n                        }\n                    }))\n                }\n            }\n\n            data.id = res.id\n            data.model = res.model\n            data.object = 'chat.completion'\n            data.promptTokens = res.usage?.input_tokens || 0\n            data.completionTokens = res.usage?.output_tokens || 0\n            data.totalTokens = data.promptTokens + data.completionTokens\n            return data\n        }\n    }\n\n    /**\n     * Formats chat messages according to the Claude model's message format.\n     *\n     * @param messages - An array of chat messages.\n     * @returns Formatted messages and system message compatible with the Claude model.\n     */\n    private async formatMessage(messages: ChatMessage[]) {\n        const formattedMessages: AnthropicChatMessage[] = []\n        let systemMessage = ''\n\n        for (const { role, content, img, audio } of messages) {\n            // Extract system messages\n            if (role === ChatRoleEnum.SYSTEM) {\n                if (typeof content === 'string') systemMessage += content + '\\n'\n                else if (Array.isArray(content)) {\n                    const contentArr = content.map(c => (typeof c === 'string' ? c : '')).filter(c => c)\n                    systemMessage += contentArr.join('\\n') + '\\n'\n                }\n                continue\n            }\n\n            // Handle tool responses\n            if (role === ChatRoleEnum.TOOL) {\n                // Claude doesn't have a separate tool role, so we add it as user message\n                formattedMessages.push({\n                    role: AnthropicChatRoleEnum.USER,\n                    content: `Tool result: ${content.toString()}`\n                })\n                continue\n            }\n\n            // Map roles\n            let claudeRole: AnthropicChatRoleEnum\n            switch (role) {\n                case ChatRoleEnum.USER:\n                    claudeRole = AnthropicChatRoleEnum.USER\n                    break\n                case ChatRoleEnum.ASSISTANT:\n                    claudeRole = AnthropicChatRoleEnum.ASSISTANT\n                    break\n                default:\n                    claudeRole = AnthropicChatRoleEnum.USER\n                    break\n            }\n\n            // Handle messages with images\n            if (img || audio || Array.isArray(content)) {\n                const contentArray: AnthropicContent[] = []\n\n                for (const text of Array.isArray(content) ? content : [content])\n                    if (typeof text === 'string' && text.trim()) contentArray.push({ type: 'text', text })\n\n                if (img) {\n                    const imageContent = await this.formatImage(img)\n                    if (imageContent) contentArray.push(...imageContent)\n                }\n\n                // Note: Claude doesn't support audio input directly like GPT-4o\n                if (audio)\n                    contentArray.push({ type: 'text', text: '[Audio input provided but not supported by Claude API]' })\n\n                formattedMessages.push({ role: claudeRole, content: contentArray })\n            } else formattedMessages.push({ role: claudeRole, content })\n        }\n\n        return { formattedMessages, systemMessage: systemMessage.trim() || undefined }\n    }\n\n    /**\n     * Format image for Claude API\n     * Supports: image/jpeg, image/png, image/gif, and image/webp\n     */\n    private async formatImage(imgs: string | string[]): Promise<AnthropicContent[]> {\n        try {\n            const contents: AnthropicContent[] = []\n\n            for (const img of Array.isArray(imgs) ? imgs : [imgs]) {\n                let mediaType: string = 'image/png'\n                let base64Data: string = ''\n\n                if ($.isBase64(img)) {\n                    // Handle pure base64 data\n                    if ($.isBase64(img, false)) {\n                        base64Data = img\n                        mediaType = 'image/png' // Default to PNG for pure base64\n                    } else {\n                        const match = img.match(/^data:image\\/([a-zA-Z]*);base64,([^\\\"']*)$/)\n                        if (match) {\n                            mediaType = `image/${match[1]}`\n                            base64Data = match[2]\n                        }\n                    }\n                } else if (img.startsWith('http')) {\n                    // Handle remote URLs - download and convert to base64\n                    const res: Buffer = await $.get(img, {}, { responseType: 'arraybuffer' })\n\n                    // Determine MIME type based on URL extension or default to supported formats\n                    const supportedTypes = ['jpeg', 'jpg', 'png', 'gif', 'webp']\n                    const detectedType = supportedTypes.find(\n                        type => img.toLowerCase().includes(`.${type}`) || img.toLowerCase().includes(`/${type}`)\n                    )\n\n                    if (detectedType) mediaType = `image/${detectedType === 'jpg' ? 'jpeg' : detectedType}`\n                    // Default to jpeg if type cannot be determined\n                    else mediaType = 'image/jpeg'\n\n                    base64Data = res.toString('base64')\n                } else {\n                    // Handle local file paths\n                    const fileExtension = extname(img).replace('.', '').toLowerCase()\n                    const supportedExtensions = ['jpeg', 'jpg', 'png', 'gif', 'webp']\n\n                    if (supportedExtensions.includes(fileExtension)) {\n                        mediaType = `image/${fileExtension === 'jpg' ? 'jpeg' : fileExtension}`\n                        base64Data = readFileSync(img).toString('base64')\n                    } else {\n                        throw new Error(\n                            `Unsupported image format: ${fileExtension}. Anthropic supports: jpeg, png, gif, webp`\n                        )\n                    }\n                }\n\n                // Validate that we have base64 data\n                if (!base64Data) throw new Error('Failed to convert image to base64')\n\n                // Validate media type is supported by Anthropic\n                const supportedMediaTypes = ['image/jpeg', 'image/png', 'image/gif', 'image/webp']\n                if (!supportedMediaTypes.includes(mediaType)) {\n                    console.warn(`Unsupported media type: ${mediaType}, defaulting to image/png`)\n                    mediaType = 'image/png'\n                }\n\n                contents.push({\n                    type: 'image',\n                    source: { type: 'base64', media_type: mediaType, data: base64Data }\n                })\n            }\n            return contents\n        } catch (error) {\n            console.warn('Failed to format image for Claude:', error)\n            return []\n        }\n    }\n\n    /**\n     * Convert OpenAI tools format to Anthropic tools format\n     */\n    private formatTools(tools: ChatCompletionFunctionTool[]): AnthropicTool[] {\n        return tools.map(tool => ({\n            name: tool.type,\n            description: tool.function.description || '',\n            input_schema: {\n                type: 'object',\n                properties: tool.function.parameters?.properties || {},\n                required: Array.isArray(tool.function.parameters?.required) ? tool.function.parameters.required : []\n            }\n        }))\n    }\n\n    /**\n     * Convert OpenAI tool choice format to Anthropic tool choice format\n     */\n    private formatToolChoice(toolChoice: ChatCompletionToolChoiceOption): AnthropicToolChoice | undefined {\n        if (typeof toolChoice === 'string') {\n            switch (toolChoice) {\n                case 'none':\n                    return undefined // Claude doesn't have explicit \"none\" option\n                case 'auto':\n                    return { type: 'auto' }\n                case 'required':\n                    return { type: 'any' }\n                default:\n                    return { type: 'auto' }\n            }\n        } else if (typeof toolChoice === 'object' && toolChoice.type === 'function') {\n            return {\n                type: 'tool',\n                name: toolChoice.function.name\n            }\n        }\n        return undefined\n    }\n}\n","/** @format */\n\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { GLMEmbedRequest, GLMEmbedResponse } from '../../interface/IGLM'\nimport { GLMChatModel, GLMEmbedModel } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse, EmbeddingResponse } from '../../interface/IModel'\nimport $ from '../util'\nimport { GPTChatRequest, GPTChatResponse, GPTChatStreamRequest, GPTChatStreamResponse } from '../../interface/IOpenAI'\nimport { ChatCompletionTool, ChatCompletionToolChoiceOption } from 'openai/resources.js'\n\nconst API = 'https://open.bigmodel.cn'\n\nexport default class GLM {\n    private key?: string | string[]\n    private proxyAPI: string\n\n    constructor(key?: string | string[], proxyAPI: string = API) {\n        this.key = key\n        this.proxyAPI = proxyAPI\n    }\n\n    public config(key?: string | string[], proxyAPI: string = API) {\n        this.key = key\n        this.proxyAPI = proxyAPI\n    }\n\n    /**\n     * Fetches embeddings for input text.\n     *\n     * @param input - An array of input strings.\n     * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n     * @returns A promise resolving to the embedding response.\n     */\n    async embedding(input: string[], model: GLMEmbedModel = GLMEmbedModel.EMBED_2, dimensions = 1024) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('ZhiPu GLM API key is not set in config')\n\n        const res = await $.post<GLMEmbedRequest, GLMEmbedResponse>(\n            `${this.proxyAPI}/api/paas/v4/embeddings`,\n            { model, input, dimensions },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: 'json' }\n        )\n\n        return {\n            embedding: res.data.map(v => v.embedding),\n            object: 'embedding',\n            model,\n            promptTokens: res.usage.prompt_tokens,\n            totalTokens: res.usage.total_tokens\n        } as EmbeddingResponse\n    }\n\n    /**\n     * Sends messages to the GLM chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: GLM_6B a local deployed chatglm3-6b-32k).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: GLMChatModel = GLMChatModel.GLM_3_TURBO,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number,\n        tools?: ChatCompletionTool[],\n        toolChoice?: ChatCompletionToolChoiceOption\n    ) {\n        // filter images\n        if (![GLMChatModel.GLM_4V, GLMChatModel.GLM_4V_PLUS].includes(model))\n            messages = messages.map(({ role, content }) => ({ role, content }))\n\n        // temperature is float in (0,1]\n        if (typeof temperature === 'number') {\n            if (temperature <= 0) temperature = 0.1\n            if (temperature > 1) temperature = 1\n        }\n        // top is float in (0,1)\n        if (typeof top === 'number') {\n            if (top <= 0) top = 0.1\n            if (top >= 1) top = 0.9\n        }\n\n        const data: ChatResponse = {\n            id: '',\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n\n        // ZhiPu GLM official API\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('ZhiPu GLM API key is not set in config')\n\n        const res = await $.post<GPTChatRequest | GPTChatStreamRequest, Readable | GPTChatResponse>(\n            `${this.proxyAPI}/api/paas/v4/chat/completions`,\n            {\n                model,\n                messages: $.formatGPTMessage(messages),\n                stream,\n                temperature,\n                top_p: top,\n                max_tokens: maxLength,\n                tools,\n                tool_choice: toolChoice,\n                stream_options: stream ? { include_usage: true } : undefined\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<GPTChatStreamResponse>(e.data)\n                if (obj) {\n                    data.id = obj.id\n                    data.content = obj.choices[0]?.delta?.content || ''\n                    if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls\n                    data.model = obj.model\n                    data.object = obj.object || 'chat.completion.chunk'\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    if (data.content) output.write(JSON.stringify(data))\n                }\n            })\n\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(parser)\n\n            // output closed, close parser & LLM response\n            output.on('close', () => {\n                if (!res.destroyed) res.destroy(new Error('Downstream closed, aborting upstream SSE'))\n                if (!parser.destroyed) parser.destroy()\n            })\n            return output as Readable\n        } else {\n            data.id = res.id\n            data.content = res.choices[0]?.message?.content || ''\n            if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls\n            data.model = res.model\n            data.object = res.object || 'chat.completion'\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n}\n","/**\n * Other.ts - A class for accessing the Other model's chat and embedding functionality.\n * Such as models from hugging face, text2vec\n *\n * @format by prettier\n * @author devilyouwei\n */\n\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { ChatModel, EmbedModel } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse, EmbeddingResponse } from '../../interface/IModel'\nimport $ from '../util'\nimport {\n    GPTChatRequest,\n    GPTChatResponse,\n    GPTChatStreamRequest,\n    GPTChatStreamResponse,\n    OpenAIEmbedRequest,\n    OpenAIEmbedResponse\n} from '../../interface/IOpenAI'\nimport { ChatCompletionTool, ChatCompletionToolChoiceOption, ReasoningEffort } from 'openai/resources'\n\nexport default class Other {\n    private api?: string\n    private key?: string | string[]\n\n    /**\n     * Constructor for the OpenAI class.\n     *\n     * @param api - The API endpoint for the model (optional).\n     * @param key - The API key for the model (Optional).\n     */\n    constructor(api?: string, key?: string | string[]) {\n        this.api = api\n        this.key = key\n    }\n\n    public config(api?: string, key?: string | string[]) {\n        this.api = api\n        this.key = key\n    }\n\n    /**\n     * Fetches embeddings for input text.\n     *\n     * @param input - An array of input strings.\n     * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n     * @returns A promise resolving to the embedding response.\n     */\n    async embedding(input: string[], model: EmbedModel = '', dimensions = 1024) {\n        if (!this.api) throw new Error('Other embed model API is not set in config')\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n\n        const res = await $.post<OpenAIEmbedRequest, OpenAIEmbedResponse>(\n            `${this.api}/v1/embeddings`,\n            { model, input, dimensions },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: 'json' }\n        )\n\n        const data: EmbeddingResponse = {\n            embedding: res.data.map(v => v.embedding),\n            object: 'embedding',\n            model,\n            promptTokens: res.usage.prompt_tokens || 0,\n            totalTokens: res.usage.total_tokens || 0\n        }\n        return data\n    }\n\n    /**\n     * Sends messages to the GPT compatible chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: gpt-3.5-turbo).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: ChatModel | string = '',\n        stream: boolean = false,\n        reasoning?: ReasoningEffort,\n        top?: number,\n        temperature?: number,\n        maxLength?: number,\n        tools?: ChatCompletionTool[],\n        toolChoice?: ChatCompletionToolChoiceOption\n    ) {\n        if (!this.api) throw new Error('Other chat model API is not set in config')\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n\n        const res = await $.post<GPTChatRequest | GPTChatStreamRequest, Readable | GPTChatResponse>(\n            `${this.api}/v1/chat/completions`,\n            {\n                model,\n                messages: $.formatGPTMessage(messages),\n                stream,\n                temperature,\n                top_p: top,\n                max_tokens: maxLength,\n                tools,\n                tool_choice: toolChoice,\n                reasoning_effort: reasoning,\n                stream_options: stream ? { include_usage: true } : undefined\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n\n        const data: ChatResponse = {\n            id: '',\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<GPTChatStreamResponse>(e.data)\n                if (obj) {\n                    data.id = obj.id\n                    data.content = obj.choices[0]?.delta?.content || ''\n                    if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls\n                    data.model = obj.model || model\n                    data.object = obj.object || 'chat.completion.chunk'\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(parser)\n\n            // output closed, close parser & LLM response\n            output.on('close', () => {\n                if (!res.destroyed) res.destroy(new Error('Downstream closed, aborting upstream SSE'))\n                if (!parser.destroyed) parser.destroy()\n            })\n            return output as Readable\n        } else {\n            data.id = res.id\n            data.content = res.choices[0]?.message?.content || ''\n            if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls\n            data.model = res.model || model\n            data.object = res.object || 'chat.completion'\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n}\n","/** @format */\n\nimport { PassThrough, Readable } from 'stream'\nimport { JSONParser } from '@streamparser/json-node'\nimport {\n    GEMChatRequest,\n    GEMChatResponse,\n    GEMChatMessage,\n    GoogleEmbedRequest,\n    GoogleEmbedResponse\n} from '../../interface/IGoogle'\nimport { ChatRoleEnum, GEMChatRoleEnum, GoogleChatModel, GoogleEmbedModel } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse, EmbeddingResponse } from '../../interface/IModel'\nimport $ from '../util'\n\nconst API = 'https://generativelanguage.googleapis.com'\nconst SAFE_SET = [\n    { category: 'HARM_CATEGORY_HARASSMENT', threshold: 'BLOCK_NONE' },\n    { category: 'HARM_CATEGORY_HATE_SPEECH', threshold: 'BLOCK_NONE' },\n    { category: 'HARM_CATEGORY_SEXUALLY_EXPLICIT', threshold: 'BLOCK_NONE' },\n    { category: 'HARM_CATEGORY_DANGEROUS_CONTENT', threshold: 'BLOCK_NONE' }\n]\n\nexport default class Google {\n    private key?: string | string[]\n    private api: string\n\n    /**\n     * Google API client class for chat functionalities.\n     * @param key - The Google API key or an array of keys.\n     * @param api - The API endpoint (default: 'https://generativelanguage.googleapis.com').\n     */\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    public config(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Fetches embeddings for input text.\n     *\n     * @param input - An array of input strings.\n     * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n     * @returns A promise resolving to the embedding response.\n     */\n    async embedding(input: string[], model: GoogleEmbedModel = GoogleEmbedModel.GEM_EMBED, dimensions = 768) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('Google API key is not set in config')\n\n        const request: Promise<GoogleEmbedResponse>[] = []\n        for (const text of input) {\n            request.push(\n                $.post<GoogleEmbedRequest, GoogleEmbedResponse>(\n                    `${this.api}/v1beta/models/${model}:embedContent?key=${key}`,\n                    { model: `models/${model}`, content: { parts: [{ text }] }, output_dimensionality: dimensions }\n                )\n            )\n        }\n        const res = await Promise.all(request)\n\n        const data: EmbeddingResponse = {\n            embedding: res.map(v => v.embedding.values),\n            object: 'embedding',\n            model,\n            promptTokens: 0,\n            totalTokens: 0\n        }\n        return data\n    }\n\n    /**\n     * Sends messages to the Google Gemini chat model.\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: gemini-pro).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: GoogleChatModel = GoogleChatModel.GEM_PRO_2_5,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number\n    ) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('Google AI API key is not set in config')\n\n        // temperature is float in [0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature > 1) temperature = 1\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top < 0) top = 0\n            if (top > 1) top = 1\n        }\n\n        const res = await $.post<GEMChatRequest, GEMChatResponse | Readable>(\n            `${this.api}/v1beta/models/${model}:${stream ? 'streamGenerateContent' : 'generateContent'}?key=${key}`,\n            {\n                contents: await this.formatMessage(messages),\n                system_instruction: {\n                    parts: {\n                        text: messages\n                            .filter(v => v.role === ChatRoleEnum.SYSTEM)\n                            .map(v => v.content)\n                            .join('\\n')\n                    }\n                },\n                generationConfig: { topP: top, temperature, maxOutputTokens: maxLength },\n                safetySettings: SAFE_SET\n            },\n            { responseType: stream ? 'stream' : 'json' }\n        )\n        const data: ChatResponse = {\n            id: '',\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new JSONParser()\n\n            parser.on('data', ({ value }) => {\n                if (value.candidates || value.promptFeedback) {\n                    const obj: GEMChatResponse = value\n                    const block = obj.promptFeedback?.blockReason\n                    if (block) return output.destroy(new Error(`Content blocked, reason: ${block}`))\n                    if (!obj.candidates) return output.destroy(new Error('Google API error, no candidates'))\n                    const candidate = obj.candidates[0]\n                    if (!candidate.content) return output.destroy(new Error(candidate.finishReason))\n                    data.content = candidate.content.parts[0].text || ''\n                    data.object = `chat.completion.chunk`\n                    return output.write(JSON.stringify(data))\n                } else return output\n            })\n\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(parser)\n\n            // output closed, close parser & LLM response\n            output.on('close', () => {\n                if (!res.destroyed) res.destroy(new Error('Downstream closed, aborting upstream SSE'))\n                if (!parser.destroyed) parser.destroy()\n            })\n            return output as Readable\n        } else {\n            const block = res.promptFeedback?.blockReason\n            if (block) throw new Error(`Content blocked, reason: ${block}`)\n            if (!res.candidates) throw new Error('Google API error, no candidates')\n\n            const candidate = res.candidates[0]\n            if (!candidate.content) throw new Error(candidate.finishReason)\n            data.content = candidate.content.parts[0].text || candidate.finishReason\n            data.object = `chat.completion`\n            return data\n        }\n    }\n\n    /**\n     * Formats chat messages into GEMChatMessage format.\n     * @param messages - An array of chat messages.\n     * @returns A formatted array of GEMChatMessage.\n     */\n    private async formatMessage(messages: ChatMessage[]) {\n        const prompt: GEMChatMessage[] = []\n        let input = ''\n        let base64: { mime: string; data: string }[] | null = null\n\n        for (const { role, content, img } of messages) {\n            let text = ''\n            if (!content && !img) continue\n            if (role === ChatRoleEnum.SYSTEM) continue\n            if (Array.isArray(content)) for (const c of content) text += c + '\\n'\n            if (img) base64 = (Array.isArray(img) ? img : [img]).map(v => this.toBase64(v))\n\n            if (role !== ChatRoleEnum.ASSISTANT) input += `\\n${content}`\n            else {\n                const message: GEMChatMessage = { role: GEMChatRoleEnum.USER, parts: [] }\n                // input text\n                input = input.trim()\n                message.parts.push({ text: input || ' ' })\n                // input images (base64)\n                if (base64 && base64.length)\n                    for (const { mime, data } of base64) message.parts.push({ inline_data: { mime_type: mime, data } })\n                prompt.push(message)\n                prompt.push({ role: GEMChatRoleEnum.MODEL, parts: [{ text }] })\n                input = ''\n            }\n        }\n\n        const message: GEMChatMessage = { role: GEMChatRoleEnum.USER, parts: [] }\n        input = input.trim()\n        message.parts.push({ text: input || ' ' })\n        if (base64 && base64.length)\n            for (const { mime, data } of base64) message.parts.push({ inline_data: { mime_type: mime, data } })\n        prompt.push(message)\n\n        return prompt\n    }\n\n    /**\n     * Convert an image to base64 format object.\n     * @param img The image string to convert.\n     * @returns An object containing the MIME type and base64 data.\n     */\n    private toBase64(img: string): { mime: string; data: string } {\n        let mime: string = ''\n        let data: string = ''\n\n        if ($.isBase64(img)) {\n            if ($.isBase64(img, false)) {\n                // Handle pure base64 data\n                data = img\n                mime = 'image/png' // default to png\n            } else {\n                // Handle base64 data with mime info\n                const match = img.match(/^data:image\\/([a-zA-Z]*);base64,([^\\\"']*)$/)\n                if (match) {\n                    mime = `image/${match[1]}`\n                    data = match[2]\n                }\n            }\n        } else throw new Error('Only base64 image is supported for Google Gemini Vision')\n\n        if (!mime || !data) throw new Error('Can not transfer to base64')\n\n        return { mime, data }\n    }\n}\n","/** @format */\n\nimport { createHmac } from 'crypto'\nimport { hostname } from 'os'\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { ChatMessage, ChatResponse, TaskResponse } from '../../interface/IModel'\nimport {\n    SparkChatRequest,\n    SparkChatResponse,\n    SPKChatMessage,\n    SPKImagineRequest,\n    SPKImagineResponse,\n    SPKTool,\n    SPKToolChoice\n} from '../../interface/IFlyTek'\nimport { ChatRoleEnum, IFlyTekChatModel, IFlyTekImagineModel, SPKTaskType } from '../../interface/Enum'\nimport $ from '../util'\n\nconst CHAT_API = 'https://spark-api-open.xf-yun.com'\nconst IMAGINE_API = 'https://spark-api.cn-huabei-1.xf-yun.com'\nconst STORAGE_KEY = 'task_iflytek'\n\nexport default class IFlyTek {\n    private pass?: string | string[]\n    private key?: string\n    private secret?: string\n    private appid?: string\n    private api?: string\n\n    /**\n     * Constructor for IFlyTek class.\n     * @param key - The API key for MoonShot.\n     * @param api - The API endpoint for proxy (optional).\n     */\n    constructor(pass?: string | string[], key?: string, secret?: string, appid?: string, api: string = CHAT_API) {\n        this.pass = pass\n        this.key = key\n        this.secret = secret\n        this.appid = appid\n        this.api = api\n    }\n\n    public config(pass?: string | string[], key?: string, secret?: string, appid?: string, api: string = CHAT_API) {\n        this.pass = pass\n        this.key = key\n        this.secret = secret\n        this.appid = appid\n        this.api = api\n    }\n\n    /**\n     * Initiates a chat conversation with IFLYTEK Spark API.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The Spark model version to use (default: SPARK_DEFAULT_MODEL_VERSION).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: IFlyTekChatModel = IFlyTekChatModel.SPARK_LITE,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number,\n        tools?: SPKTool[],\n        toolChoice?: SPKToolChoice\n    ) {\n        const key = Array.isArray(this.pass) ? $.getRandomKey(this.pass) : this.pass\n        if (!key) throw new Error('IFlyTek Spark API Password is not set in config')\n\n        // top is integer in [1,6]\n        if (typeof top === 'number') {\n            if (top <= 0) top = 0.1\n            if (top > 1) top = 1\n        }\n        // temperature is float in (0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature > 2) temperature = 2\n        }\n\n        const res = await $.post<SparkChatRequest, Readable | SparkChatResponse>(\n            `${this.api}/v1/chat/completions`,\n            {\n                model,\n                messages: this.formatMessage(messages),\n                stream,\n                temperature,\n                top_p: top,\n                max_tokens: maxLength,\n                tools,\n                tool_choice: toolChoice\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n        const data: ChatResponse = {\n            id: '',\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<SparkChatResponse>(e.data)\n                if (!obj) return\n                if (obj.code) {\n                    output.destroy(new Error(obj.message))\n                    return\n                }\n                data.id = obj.sid\n                data.content = obj.choices[0]?.delta?.content || ''\n                if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls\n                data.model = model\n                data.object = 'chat.completion.chunk'\n                data.promptTokens = obj.usage?.prompt_tokens || 0\n                data.completionTokens = obj.usage?.completion_tokens || 0\n                data.totalTokens = obj.usage?.total_tokens || 0\n                output.write(JSON.stringify(data))\n            })\n\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(parser)\n\n            // output closed, close parser & LLM response\n            output.on('close', () => {\n                if (!res.destroyed) res.destroy(new Error('Downstream closed, aborting upstream SSE'))\n                if (!parser.destroyed) parser.destroy()\n            })\n            return output as Readable\n        } else {\n            data.id = res.sid\n            data.content = res.choices[0]?.message?.content || ''\n            if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls\n            data.model = model\n            data.object = 'chat.completion'\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n\n    /**\n     * Generate an image based on the given prompt.\n     * @param prompt The prompt for image generation.\n     * @param width The width of the image, default is 512.\n     * @param height The height of the image, default is 512.\n     * @param model The model to use for generating the image, default is IFlyTekImagineModel.V2.\n     */\n    async imagine(\n        prompt: string,\n        width: number = 512,\n        height: number = 512,\n        model: IFlyTekImagineModel = IFlyTekImagineModel.V2\n    ) {\n        if (!this.appid) throw new Error('IFlyTek APP ID is not set in config')\n        // get specific generated URL\n        const url = this.getImagineURL(model)\n        const res = await $.post<SPKImagineRequest, SPKImagineResponse>(url, {\n            header: { app_id: this.appid },\n            payload: { message: { text: [{ role: 'user', content: prompt }] } },\n            parameter: { chat: { domain: 'general', width, height } }\n        })\n        if (res.header.code !== 0) throw new Error(res.header.message)\n        if (!res.payload) throw new Error('Fail to generate image, empty payload')\n\n        const id = $.getRandomId()\n        const imgs: string[] = []\n        for (const i in res.payload.choices.text)\n            imgs.push(await $.writeFile(res.payload.choices.text[i].content, `${id}-${i}.png`))\n\n        const time = Date.now()\n        const task: TaskResponse = {\n            id,\n            type: SPKTaskType.GENERATION,\n            info: 'success',\n            progress: 100,\n            imgs,\n            fail: '',\n            created: time,\n            model\n        }\n\n        const tasks: TaskResponse[] = $.getItem(STORAGE_KEY) || []\n        tasks.push(task)\n        $.setItem(STORAGE_KEY, tasks)\n        return { taskId: task.id, time }\n    }\n\n    /**\n     * Simulate tasks.\n     *\n     * @param id - The task ID to retrieve (optional).\n     * @returns An array of task responses or a specific task by ID.\n     */\n    task(id?: string) {\n        const tasks: TaskResponse[] = $.getItem(STORAGE_KEY) || []\n\n        if (id) return tasks.filter(v => v.id === id)\n        else return tasks\n    }\n\n    /**\n     * Generates the Imagine API URL.\n     *\n     * @param model - The Spark imagine model.\n     */\n    private getImagineURL(model: IFlyTekImagineModel) {\n        if (!this.secret) throw new Error('IFlyTek API secret is not set in config')\n        if (!this.key) throw new Error('IFlyTek API key is not set in config')\n\n        const host = hostname()\n        const date = new Date().toUTCString()\n        const algorithm = 'hmac-sha256'\n        const headers = 'host date request-line'\n        const signatureOrigin = `host: ${host}\\ndate: ${date}\\nPOST /${model}/tti HTTP/1.1`\n        const signatureSha = createHmac('sha256', this.secret).update(signatureOrigin).digest('hex')\n        const signature = Buffer.from(signatureSha, 'hex').toString('base64')\n        const authorizationOrigin = `api_key=\"${this.key}\", algorithm=\"${algorithm}\", headers=\"${headers}\", signature=\"${signature}\"`\n        const authorization = Buffer.from(authorizationOrigin).toString('base64')\n        return `${IMAGINE_API}/${model}/tti?authorization=${authorization}&date=${date}&host=${host}`\n    }\n\n    /**\n     * Format the chat message for IFlyTek Spark model.\n     *\n     * @param messages - Original chat messages\n     */\n    private formatMessage(messages: ChatMessage[]) {\n        const prompt: SPKChatMessage[] = []\n\n        for (const { role, content } of messages) {\n            let text = ''\n            if (Array.isArray(content)) for (const c of content) text += c || ''\n            if (role === ChatRoleEnum.DEV) continue\n            prompt.push({ role, content: text })\n        }\n\n        return prompt\n    }\n}\n","/** @format */\n\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport {\n    BaiduAccessTokenRequest,\n    BaiduAccessTokenResponse,\n    BaiduChatMessage,\n    BaiduChatRequest,\n    BaiduChatResponse\n} from '../../interface/IBaidu'\nimport { BaiduChatModel, ChatRoleEnum } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse } from '../../interface/IModel'\nimport $ from '../util'\n\nconst API = 'https://aip.baidubce.com'\nconst STORAGE_KEY = 'baidu'\n\nexport default class Baidu {\n    private key?: string\n    private secret?: string\n    private api?: string\n\n    constructor(key?: string, secret?: string, api: string = API) {\n        this.key = key\n        this.secret = secret\n        this.api = api\n    }\n\n    public config(key?: string, secret?: string, api: string = API) {\n        this.key = key\n        this.secret = secret\n        this.api = api\n    }\n    /**\n     * Sends messages to the GLM chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The submodel to use for chat (default: ERNIE 8K).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: BaiduChatModel = BaiduChatModel.ERNIE_3_5,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number\n    ) {\n        // temperature is float in (0,1]\n        if (typeof temperature === 'number') {\n            if (temperature <= 0) temperature = 0.1\n            if (temperature > 1) temperature = 1\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top < 0) top = 0\n            if (top > 1) top = 1\n        }\n\n        const token = await this.getAccessToken()\n        const { prompt, system } = this.formatMessage(messages)\n\n        const res = await $.post<BaiduChatRequest, BaiduChatResponse | Readable>(\n            `${this.api}/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/${model}?access_token=${token}`,\n            {\n                messages: prompt,\n                system,\n                stream,\n                temperature,\n                top_p: top,\n                max_output_tokens: maxLength\n            },\n            { responseType: stream ? 'stream' : 'json' }\n        )\n\n        const data: ChatResponse = {\n            id: '',\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n            parser.on('data', (e: MessageEvent<string>) => {\n                const obj = $.json<BaiduChatResponse>(e.data)\n                if (obj) {\n                    data.id = obj.id\n                    data.content = obj.result || ''\n                    data.model = model\n                    data.object = obj.object\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(parser)\n\n            // output closed, close parser & LLM response\n            output.on('close', () => {\n                if (!res.destroyed) res.destroy(new Error('Downstream closed, aborting upstream SSE'))\n                if (!parser.destroyed) parser.destroy()\n            })\n            return output as Readable\n        } else {\n            if (res.error_code) throw new Error(res.error_msg)\n            data.id = res.id\n            data.content = res.result || ''\n            data.model = model\n            data.object = res.object\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n\n    // get baidu access token\n    private async getAccessToken() {\n        if (!this.key) throw new Error('Baidu API key is not set in config')\n        if (!this.secret) throw new Error('Baidu API secret is not set in config')\n\n        const now = Date.now()\n\n        // load access token\n        const cache = $.getItem<BaiduAccessTokenResponse>(STORAGE_KEY)\n        if (cache && cache.expires_in > now) return cache.access_token\n\n        // get new access token\n        const res = await $.get<BaiduAccessTokenRequest, BaiduAccessTokenResponse>(`${this.api}/oauth/2.0/token`, {\n            grant_type: 'client_credentials',\n            client_id: this.key,\n            client_secret: this.secret\n        })\n        if (res.error) throw new Error(res.error_description)\n\n        res.expires_in = now + res.expires_in * 1000\n\n        $.setItem(STORAGE_KEY, res)\n\n        return res.access_token\n    }\n\n    // format to baidu message\n    private formatMessage(messages: ChatMessage[]) {\n        const prompt: BaiduChatMessage[] = []\n        let system = ''\n        let input = ''\n        const { USER, ASSISTANT, SYSTEM } = ChatRoleEnum\n        for (const { role, content } of messages) {\n            // must be string\n            if (typeof content !== 'string') continue\n\n            if (!content.trim() || role === SYSTEM) {\n                system = content\n                continue\n            }\n            if (role !== ASSISTANT) input += `\\n${content}`\n            else {\n                prompt.push({ role: USER, content: input.trim() || ' ' })\n                prompt.push({ role: ASSISTANT, content })\n                input = ''\n            }\n        }\n        if (!input.trim()) throw new Error('User input nothing')\n        prompt.push({ role: USER, content: input.trim() })\n        return { system, prompt }\n    }\n}\n","/** @format */\n\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { MoonShotChatModel } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse } from '../../interface/IModel'\nimport { GPTChatRequest, GPTChatResponse, GPTChatStreamRequest, GPTChatStreamResponse } from '../../interface/IOpenAI'\nimport $ from '../util'\n\nconst API = 'https://api.moonshot.cn'\nconst VER = 'v1'\n\nexport default class MoonShot {\n    private key?: string | string[]\n    private api?: string\n\n    /**\n     * Constructor for MoonShot class.\n     * @param key - The API key for MoonShot.\n     * @param api - The API endpoint for proxy (optional).\n     */\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    public config(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Sends messages to the MoonShot chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: moonshot-v1-8k).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: MoonShotChatModel = MoonShotChatModel.MOON_V1_8K,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number\n    ) {\n        // if (!Object.values(MoonShotChatModel).includes(model)) throw new Error('MoonShot chat model not found')\n\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('MoonShot API key is not set in config')\n\n        // temperature is float in [0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature > 1) temperature = 1\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top < 0) top = 0\n            if (top > 1) top = 1\n        }\n\n        const res = await $.post<GPTChatRequest | GPTChatStreamRequest, Readable | GPTChatResponse>(\n            `${this.api}/${VER}/chat/completions`,\n            {\n                model,\n                messages: $.formatGPTMessage(messages),\n                stream,\n                temperature,\n                top_p: top,\n                max_tokens: maxLength,\n                stream_options: stream ? { include_usage: true } : undefined\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n        const data: ChatResponse = {\n            id: '',\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<GPTChatStreamResponse>(e.data)\n                if (obj) {\n                    data.id = obj.id\n                    data.content = obj.choices[0]?.delta?.content || ''\n                    data.model = obj.model\n                    data.object = obj.object\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(parser)\n\n            // output closed, close parser & LLM response\n            output.on('close', () => {\n                if (!res.destroyed) res.destroy(new Error('Downstream closed, aborting upstream SSE'))\n                if (!parser.destroyed) parser.destroy()\n            })\n            return output as Readable\n        } else {\n            data.id = res.id\n            data.content = res.choices[0]?.message?.content || ''\n            data.model = res.model\n            data.object = res.object\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n}\n","/**\n * Class for interacting with MidJourney using the midjourney-proxy API.\n *\n * Make sure to have the midjourney-proxy deployed before using this class.\n *\n * The midjourney-proxy project can be found at: https://github.com/novicezk/midjourney-proxy.git\n * If you already have a deployed proxy, provide the proxy URL when initializing the Midjourney class.\n *\n * @format by prettier\n * @author devilyouwei\n */\n\nimport { MJTaskType, MidJourneyImagineModel } from '../../interface/Enum'\nimport { MJChangeRequest, MJImagineRequest, MJImagineResponse, MJTaskResponse } from '../../interface/IMidJourney'\nimport { ImagineResponse, TaskResponse } from '../../interface/IModel'\nimport $ from '../util'\n\nexport default class MidJourney {\n    private proxy?: string // Proxy address of MidJourney\n    private token?: string // User token of MidJourney\n    private imgProxy?: string // User token of MidJourney\n\n    constructor(proxy?: string, token?: string, imgProxy?: string) {\n        this.proxy = proxy\n        this.token = token\n        this.imgProxy = imgProxy\n    }\n\n    public config(proxy?: string, token?: string, imgProxy?: string) {\n        this.proxy = proxy\n        this.token = token\n        this.imgProxy = imgProxy\n    }\n\n    /**\n     * Call the imagine API of MidJourney to generate text.\n     * @param prompt - The input prompt text.\n     * @param nPrompt - The excluded text.\n     * @param width - The image width. Default value is 1.\n     * @param height - The image height. Default value is 1.\n     * @returns The generated text.\n     */\n    async imagine(\n        prompt: string,\n        nPrompt: string = '',\n        width: number = 1024,\n        height: number = 1024\n    ): Promise<ImagineResponse> {\n        if (!this.proxy) throw new Error('MidJourney image model proxy is not set in config')\n\n        const aspect = $.getAspect(width, height)\n        const res = await $.post<MJImagineRequest, MJImagineResponse>(\n            `${this.proxy}/mj/submit/imagine`,\n            { prompt: `${prompt} --ar ${aspect} ${nPrompt ? '--no ' + nPrompt : ''}` },\n            { headers: { 'mj-api-secret': this.token } }\n        )\n        if (res.code !== 1) throw new Error(res.description)\n        return { taskId: res.result, time: Date.now() }\n    }\n\n    /**\n     * Get task information by id or get a list of imagining tasks.\n     * @param id - The task id. If provided, it will return the task information with the specified id. Otherwise, it will return the task list.\n     * @returns The task list or the task information with the specified id.\n     */\n    async task(id?: string): Promise<TaskResponse[]> {\n        if (!this.proxy) throw new Error('MidJourney image model proxy is not set in config')\n\n        if (id) {\n            const res = await $.get<null, MJTaskResponse>(`${this.proxy}/mj/task/${id}/fetch`, null, {\n                headers: { 'mj-api-secret': this.token }\n            })\n            // image proxy, replace hostname\n            if (res.imageUrl && this.imgProxy) {\n                const url = new URL(res.imageUrl)\n                const pro = new URL(this.imgProxy)\n                url.hostname = pro.hostname\n                url.protocol = pro.protocol\n                url.port = pro.port\n                res.imageUrl = url.toString()\n            }\n            return [\n                {\n                    id: res.id,\n                    type: res.action,\n                    imgs: res.imageUrl ? [await $.writeFile(res.imageUrl, `${res.id}.png`)] : [],\n                    info: res.description,\n                    fail: res.failReason || '',\n                    progress: parseInt(res.progress) || 0,\n                    created: res.startTime,\n                    model: MidJourneyImagineModel.MJ\n                }\n            ]\n        } else {\n            const res = await $.get<null, MJTaskResponse[]>(`${this.proxy}/mj/task/list`, null, {\n                headers: { 'mj-api-secret': this.token }\n            })\n            return res.map(v => ({\n                id: v.id,\n                type: v.action,\n                imgs: v.imageUrl ? [v.imageUrl] : [],\n                info: v.description,\n                fail: v.failReason || '',\n                progress: parseInt(v.progress),\n                created: v.startTime,\n                model: MidJourneyImagineModel.MJ\n            }))\n        }\n    }\n\n    /**\n     * Submit a change request for a imagined task.\n     * @param taskId - The task id.\n     * @param action - The action type of the task.\n     * @param index - The index for modification (optional).\n     * @returns The modified task response.\n     */\n    async change(taskId: string, action: MJTaskType, index?: number): Promise<ImagineResponse> {\n        if (!this.proxy) throw new Error('MidJourney image model proxy is not set in config')\n\n        const res = await $.post<MJChangeRequest, MJImagineResponse>(\n            `${this.proxy}/mj/submit/change`,\n            { taskId, action, index },\n            { headers: { 'mj-api-secret': this.token } }\n        )\n        return { taskId: res.result, time: Date.now() }\n    }\n}\n","/**\n * Class for interacting with Stability AI.\n *\n * To interact with Stability AI, refer to the documentation at: https://platform.stability.ai/docs/getting-started\n * You need to create an account and generate an API key to use this class.\n *\n * @format by prettier\n * @author devilyouwei\n */\nimport { SDTaskType, StabilityAIImagineModel } from '../../interface/Enum'\nimport { ImagineResponse, TaskResponse } from '../../interface/IModel'\nimport { StabilityImagineRequest, StabilityImagineResponse } from '../../interface/IStability'\nimport $ from '../util'\n\nconst API = 'https://api.stability.ai'\nconst STORAGE_KEY = 'task_stability_ai'\n\nexport default class Stability {\n    private api?: string\n    private key?: string | string[]\n\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    public config(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Generate images using Stability AI.\n     *\n     * @param prompt - The main text prompt for image generation.\n     * @param negativePrompt - The negative text prompt (optional).\n     * @param width - Image width (default: 1024).\n     * @param height - Image height (default: 1024).\n     * @param samples - Number of images to generate (default: 1).\n     * @param model - The Stability AI model to use (default: StabilityAIImagineModel.SD_1_6).\n     * @returns A promise resolving to the image generation response.\n     */\n    async imagine(\n        prompt: string,\n        negativePrompt: string = '',\n        width: number = 1024,\n        height: number = 1024,\n        samples: number = 1,\n        model: StabilityAIImagineModel = StabilityAIImagineModel.SD_1_6\n    ): Promise<ImagineResponse> {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('Stability key is not set in config')\n        const prompts = [{ text: prompt, weight: 1 }]\n        if (negativePrompt) prompts.push({ text: negativePrompt, weight: -1 })\n\n        const res = await $.post<StabilityImagineRequest, StabilityImagineResponse>(\n            `${this.api}/v1/${SDTaskType.GENERATION}/${model}/text-to-image`,\n            { width, height, samples, text_prompts: prompts },\n            { headers: { Accept: 'application/json', Authorization: `Bearer ${key}` } }\n        )\n\n        const id = $.getRandomId()\n        const imgs: string[] = []\n        for (const i in res.artifacts) imgs.push(await $.writeFile(res.artifacts[i].base64, `${id}-${i}.png`))\n\n        const time = Date.now()\n        const task: TaskResponse = {\n            id,\n            type: SDTaskType.GENERATION,\n            info: res.artifacts[0].finishReason,\n            progress: 100,\n            imgs,\n            fail: '',\n            created: time,\n            model\n        }\n\n        const tasks: TaskResponse[] = $.getItem(STORAGE_KEY) || []\n        tasks.push(task)\n        $.setItem(STORAGE_KEY, tasks)\n        return { taskId: task.id, time }\n    }\n\n    /**\n     * Simulate tasks or retrieve a specific task by ID.\n     *\n     * @param id - The task ID to retrieve (optional).\n     * @returns An array of task responses or a specific task by ID.\n     */\n    task(id?: string) {\n        const tasks: TaskResponse[] = $.getItem(STORAGE_KEY) || []\n\n        if (id) return tasks.filter(v => v.id === id)\n        else return tasks\n    }\n}\n","/** @format */\n\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { AliChatModel, AliEmbedModel } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse, EmbeddingResponse } from '../../interface/IModel'\nimport {\n    GPTChatRequest,\n    GPTChatResponse,\n    GPTChatStreamRequest,\n    OpenAIEmbedRequest,\n    OpenAIEmbedResponse\n} from '../../interface/IOpenAI'\nimport $ from '../util'\nimport type { AliStreamResponse } from '../../interface/IAliyun'\n\nconst API = 'https://dashscope.aliyuncs.com'\nconst VER = 'v1'\n\nexport default class AliYun {\n    private key?: string | string[]\n    private api?: string\n\n    /**\n     * Constructor for AliYun class.\n     * @param key - The API key for MoonShot.\n     * @param api - The API endpoint for proxy (optional).\n     */\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    public config(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Fetches embeddings for input text.\n     *\n     * @param input - An array of input strings.\n     * @param model - The model to use for embeddings (default: text-embedding-v3).\n     * @param dimensions - The dimensions of output embedding vector (default: 1024)\n     * @returns A promise resolving to the embedding response.\n     */\n    async embedding(input: string[], model: AliEmbedModel = AliEmbedModel.ALI_V3, dimensions = 1024) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('AliYun API key is not set in config')\n\n        const res = await $.post<OpenAIEmbedRequest, OpenAIEmbedResponse>(\n            `${this.api}/compatible-mode/${VER}/embeddings`,\n            { model, input, dimensions },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: 'json' }\n        )\n\n        const data: EmbeddingResponse = {\n            embedding: res.data.map(v => v.embedding),\n            object: 'embedding',\n            model,\n            promptTokens: res.usage.prompt_tokens || 0,\n            totalTokens: res.usage.total_tokens || 0\n        }\n        return data\n    }\n\n    /**\n     * Sends messages to the AliYun LLMs.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: moonshot-v1-8k).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: AliChatModel = AliChatModel.QWEN_TURBO,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number\n    ) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('Qian Wen API key is not set in config')\n\n        // temperature is float in [0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature >= 2) temperature = 1.9\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top <= 0) top = 0.1\n            if (top > 1) top = 1.0\n        }\n\n        const res = await $.post<GPTChatRequest | GPTChatStreamRequest, Readable | GPTChatResponse>(\n            `${this.api}/compatible-mode/${VER}/chat/completions`,\n            {\n                model,\n                messages: $.formatGPTMessage(messages),\n                stream,\n                temperature,\n                top_p: top,\n                max_tokens: maxLength,\n                stream_options: stream ? { include_usage: true } : undefined\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n        const data: ChatResponse = {\n            id: '',\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<AliStreamResponse>(e.data)\n                if (obj && obj.error) throw new Error(obj.error.message)\n\n                if (obj) {\n                    data.id = obj.id\n                    data.content = obj.choices[0]?.delta?.content || ''\n                    data.model = obj.model\n                    data.object = obj.object\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(parser)\n\n            // output closed, close parser & LLM response\n            output.on('close', () => {\n                if (!res.destroyed) res.destroy(new Error('Downstream closed, aborting upstream SSE'))\n                if (!parser.destroyed) parser.destroy()\n            })\n            return output as Readable\n        } else {\n            data.id = res.id\n            data.content = res.choices[0]?.message?.content || ''\n            if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls\n            data.model = res.model\n            data.object = res.object || 'chat.completion'\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n}\n","/** @format */\n\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { ChatRoleEnum, DeepSeekChatModel } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse } from '../../interface/IModel'\nimport $ from '../util'\nimport { DSChatMessage, DSChatRequest, DSChatResponse } from '../../interface/IDeepSeek'\n\nconst API = 'https://api.deepseek.com'\n\nexport default class DeepSeek {\n    private key?: string | string[]\n    private api?: string\n\n    /**\n     * Constructor for MoonShot class.\n     * @param key - The API key for MoonShot.\n     * @param api - The API endpoint for proxy (optional).\n     */\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    public config(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Sends messages to the Ali QianWen chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: moonshot-v1-8k).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: DeepSeekChatModel = DeepSeekChatModel.DEEPSEEK_V3,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number\n    ) {\n        // if (!Object.values(AliChatModel).includes(model)) throw new Error('Qian Wen chat model not found')\n\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('DeepSeek API key is not set in config')\n\n        if (typeof maxLength === 'number') {\n            if (maxLength < 1) maxLength = 1\n            if (maxLength > 8192) maxLength = 8192\n        }\n\n        // temperature is float in [0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature > 2) temperature = 2\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top <= 0) top = 0.1\n            if (top > 1) top = 1.0\n        }\n\n        const res = await $.post<DSChatRequest, Readable | DSChatResponse>(\n            `${this.api}/chat/completions`,\n            {\n                model,\n                messages: this.formatMessage(messages),\n                stream,\n                temperature,\n                top_p: top,\n                max_tokens: maxLength,\n                stream_options: stream ? { include_usage: true } : undefined\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n\n        const data: ChatResponse = {\n            id: '',\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<DSChatResponse>(e.data)\n                if (obj) {\n                    data.id = obj.id\n                    data.content = obj.choices[0]?.delta?.content || ''\n                    data.model = obj.model\n                    data.object = obj.object\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(parser)\n\n            // output closed, close parser & LLM response\n            output.on('close', () => {\n                if (!res.destroyed) res.destroy(new Error('Downstream closed, aborting upstream SSE'))\n                if (!parser.destroyed) parser.destroy()\n            })\n            return output as Readable\n        } else {\n            data.id = res.id\n            data.content = res.choices[0]?.message?.content || ''\n            if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls\n            data.model = res.model\n            data.object = res.object\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n\n    /**\n     * Formats chat messages according to the GPT model's message format.\n     *\n     * @param messages - An array of chat messages.\n     * @returns Formatted messages compatible with the GPT model.\n     */\n    private formatMessage(messages: ChatMessage[]) {\n        const prompt: DSChatMessage[] = []\n\n        for (const { role, content, tool } of messages) {\n            // DeepSeek not support develop role\n            if (role === ChatRoleEnum.DEV) continue\n            else if (role === ChatRoleEnum.TOOL) prompt.push({ role, content: content as string, tool_call_id: tool! })\n            // DeepSeek not support image, only text\n            else prompt.push({ role, content: content as string })\n        }\n\n        return prompt\n    }\n}\n","/**\n * Utility for connecting to the OpenAI model API.\n *\n * @format prettier\n * @author devilyouwei\n */\n\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { XAIChatModel } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse } from '../../interface/IModel'\nimport {\n    GrokChatMessage,\n    GrokChatRequest,\n    GrokChatResponse,\n    GrokChatResponseChunk,\n    GrokTool,\n    GrokToolChoice\n} from '../../interface/IX'\nimport $ from '../util'\n\nconst API = 'https://api.x.ai'\nconst VER = 'v1'\n\nexport default class XAI {\n    private api: string\n    private key?: string | string[]\n\n    /**\n     * Constructor for the OpenAI class.\n     *\n     * @param key - The API key for OpenAI.\n     * @param api - The API endpoint for proxy (optional).\n     */\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    public config(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Sends messages to the GPT chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: gpt-3.5-turbo).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @param tools - Tools for model to use (optional).\n     * @param toolChoice - Controls which (if any) tool is called by the model: none, required, auto (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: XAIChatModel = XAIChatModel.GROK4_FAST_NON_REASONING,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number,\n        tools?: GrokTool[],\n        toolChoice?: GrokToolChoice\n    ) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('X AI API key is not set in config')\n\n        // temperature is float in [0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature > 2) temperature = 2\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top < 0) top = 0\n            if (top > 1) top = 1\n        }\n\n        const res = await $.post<GrokChatRequest, Readable | GrokChatResponse>(\n            `${this.api}/${VER}/chat/completions`,\n            {\n                model,\n                messages: $.formatGPTMessage(messages) as GrokChatMessage[],\n                stream,\n                temperature,\n                top_p: top,\n                max_tokens: maxLength,\n                tools,\n                tool_choice: toolChoice\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n\n        const data: ChatResponse = {\n            id: '',\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<GrokChatResponseChunk>(e.data)\n                if (obj) {\n                    data.id = obj.id\n                    data.content = obj.choices[0]?.delta?.content || ''\n                    data.model = obj.model\n                    data.object = obj.object\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(parser)\n\n            // output closed, close parser & LLM response\n            output.on('close', () => {\n                if (!res.destroyed) res.destroy(new Error('Downstream closed, aborting upstream SSE'))\n                if (!parser.destroyed) parser.destroy()\n            })\n            return output as Readable\n        } else {\n            data.id = res.id\n            data.content = res.choices[0]?.message?.content || ''\n            if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls\n            data.model = res.model\n            data.object = res.object\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n}\n","/**\n * @format prettier\n * Utility for connecting to the Ark (火山豆包) model API.\n * @author devilyouwei\n */\nimport type { GPTChatResponse, GPTChatStreamResponse } from '../../interface/IOpenAI'\nimport type { ARKChatRequest, ARKChatRequestStream, ARKReasoningEffort } from '../../interface/IArk'\nimport type { ChatResponse, ChatMessage, ReasoningLevel } from '../../interface/IModel'\nimport type { ChatCompletionTool, ChatCompletionToolChoiceOption } from 'openai/resources'\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { ArkChatModel } from '../../interface/Enum'\nimport $ from '../util'\n\nconst API = 'https://ark.cn-beijing.volces.com/api'\nconst VER = 'v3'\n\nexport default class Ark {\n    private api: string\n    private key?: string | string[]\n\n    /**\n     * Constructor for the Ark class.\n     *\n     * @param key - The API key for OpenAI.\n     * @param api - The API endpoint for proxy (optional).\n     */\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    public config(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Sends messages to the GPT chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: gpt-3.5-turbo).\n     * @param stream - Whether to use stream response (default: false).\n     * @param reasoning - Reasoning effort level (default: 'none').\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @param tools - Tools for model to use (optional).\n     * @param toolChoice - Controls which (if any) tool is called by the model: none, required, auto (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: ArkChatModel = ArkChatModel.DOUBAO_SEED_1_6,\n        stream: boolean = false,\n        reasoning?: ReasoningLevel,\n        top?: number,\n        temperature?: number,\n        maxLength?: number,\n        tools?: ChatCompletionTool[],\n        toolChoice?: ChatCompletionToolChoiceOption\n    ) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('Ark DouBao API key is not set in config')\n\n        // temperature is float in [0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature > 1) temperature = 1\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top < 0) top = 0\n            if (top > 1) top = 1\n        }\n\n        let reasoningEffort: ARKReasoningEffort\n        if (!reasoning || reasoning === 'none') reasoningEffort = 'minimal'\n        else if (reasoning === 'xhigh') reasoningEffort = 'high'\n        else reasoningEffort = reasoning as 'low' | 'medium' | 'high'\n\n        const res = await $.post<ARKChatRequest | ARKChatRequestStream, Readable | GPTChatResponse>(\n            `${this.api}/${VER}/chat/completions`,\n            {\n                model,\n                messages: $.formatGPTMessage(messages),\n                stream,\n                temperature,\n                top_p: top,\n                max_completion_tokens: maxLength,\n                tools,\n                tool_choice: toolChoice,\n                thinking: { type: reasoningEffort === 'minimal' ? 'disabled' : 'enabled' },\n                reasoning: { effort: reasoningEffort },\n                stream_options: stream ? { include_usage: true } : undefined\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n\n        const data: ChatResponse = {\n            id: '',\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<GPTChatStreamResponse>(e.data)\n                if (obj) {\n                    data.id = obj.id\n                    data.content = obj.choices[0]?.delta?.content || ''\n                    if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls\n                    data.model = obj.model\n                    data.object = obj.object\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(parser)\n\n            // output closed, close parser & LLM response\n            output.on('close', () => {\n                if (!res.destroyed) res.destroy(new Error('Downstream closed, aborting upstream SSE'))\n                if (!parser.destroyed) parser.destroy()\n            })\n            return output as Readable\n        } else {\n            data.id = res.id\n            data.content = res.choices[0]?.message?.content || ''\n            if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls\n            data.model = res.model\n            data.object = res.object\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n}\n","/** @format */\nimport {\n    AliChatModel,\n    AliEmbedModel,\n    AnthropicChatModel,\n    ArkChatModel,\n    BaiduChatModel,\n    ChatModel,\n    ChatModelProvider,\n    ChatRoleEnum,\n    DeepSeekChatModel,\n    EmbedModel,\n    EmbedModelProvider,\n    GLMChatModel,\n    GLMEmbedModel,\n    GoogleChatModel,\n    GoogleEmbedModel,\n    IFlyTekChatModel,\n    IFlyTekImagineModel,\n    ImagineModel,\n    ImagineModelProvider,\n    MJTaskType,\n    MidJourneyImagineModel,\n    ModelProvider,\n    MoonShotChatModel,\n    OpenAIChatModel,\n    OpenAIEmbedModel,\n    OpenAIImagineModel,\n    OtherEmbedModel,\n    StabilityAIImagineModel,\n    XAIChatModel\n} from '../interface/Enum'\nimport type { UniAIConfig } from '../interface/IConfig'\nimport type { ChatMessage, ChatOption, EmbedOption, ImagineOption, ModelList, Provider } from '../interface/IModel'\nimport type { ChatCompletionTool, ChatCompletionToolChoiceOption } from 'openai/resources'\nimport type { SPKTool, SPKToolChoice } from '../interface/IFlyTek'\nimport type { GrokTool, GrokToolChoice } from '../interface/IX'\nimport OpenAI from './providers/OpenAI'\nimport Anthropic from './providers/Anthropic'\nimport GLM from './providers/GLM'\nimport Other from './providers/Other'\nimport Google from './providers/Google'\nimport IFlyTek from './providers/IFlyTek'\nimport Baidu from './providers/Baidu'\nimport MoonShot from './providers/MoonShot'\nimport MidJourney from './providers/MidJourney'\nimport Stability from './providers/Stability'\nimport AliYun from './providers/AliYun'\nimport DeepSeek from './providers/DeepSeek'\nimport XAI from './providers/XAI'\nimport Ark from './providers/Ark'\n\nconst DEFAULT_MESSAGE = 'Hi, who are you? Answer in short!'\n\nexport default class UniAI {\n    public config: UniAIConfig | null = null\n    public models: ModelList\n    public embedModels: ModelList\n    public chatModels: ModelList\n    public imgModels: ModelList\n\n    private openai: OpenAI\n    private anthropic: Anthropic\n    private deepseek: DeepSeek\n    private google: Google\n    private glm: GLM\n    private fly: IFlyTek\n    private baidu: Baidu\n    private other: Other\n    private moon: MoonShot\n    private ali: AliYun\n    private mj: MidJourney\n    private xai: XAI\n    private ark: Ark\n    private stability: Stability\n\n    constructor(config: UniAIConfig = {}) {\n        this.config = config\n        // OpenAI key, your OpenAI proxy API (optional)\n        this.openai = new OpenAI(config.OpenAI?.key, config.OpenAI?.proxy)\n        // Anthropic Claude key\n        this.anthropic = new Anthropic(config.Anthropic?.key, config.Anthropic?.proxy)\n        // DeepSeek Key\n        this.deepseek = new DeepSeek(config.DeepSeek?.key, config.DeepSeek?.proxy)\n        // ZhiPu AI with ChatGLM6B(local)\n        this.glm = new GLM(config.GLM?.key, config.GLM?.proxy)\n        // Google AI key, your Google AI API proxy (optional)\n        this.google = new Google(config.Google?.key, config.Google?.proxy)\n        // IFlyTek appid, API key, API secret\n        this.fly = new IFlyTek(\n            config.IFlyTek?.apiPassword,\n            config.IFlyTek?.appId,\n            config.IFlyTek?.apiKey,\n            config.IFlyTek?.apiSecret,\n            config.IFlyTek?.proxy\n        )\n        // Baidu WenXin Workshop, baidu api key, baidu secret key\n        this.baidu = new Baidu(config.Baidu?.apiKey, config.Baidu?.secretKey, config.Baidu?.proxy)\n        // MoonShot, moonshot API key\n        this.moon = new MoonShot(config.MoonShot?.key, config.MoonShot?.proxy)\n        // AliYun, QWen API key\n        this.ali = new AliYun(config.AliYun?.key, config.AliYun?.proxy)\n        // Ark, Doubao API key\n        this.ark = new Ark(config.Ark?.key, config.Ark?.proxy)\n        // XAI Grok, XAI API key\n        this.xai = new XAI(config.XAI?.key, config.XAI?.proxy)\n        // Other model text2vec\n        this.other = new Other(config.Other?.api, config.Other?.key)\n        // Midjourney, proxy\n        this.mj = new MidJourney(config.MidJourney?.proxy, config.MidJourney?.token, config.MidJourney?.imgProxy)\n        // Stability AI, key, proxy\n        this.stability = new Stability(config.StabilityAI?.key, config.StabilityAI?.proxy)\n\n        // expand chat models to list\n        this.chatModels = Object.entries(ChatModelProvider).map<Provider>(([k, v]) => ({\n            provider: k as keyof typeof ChatModelProvider,\n            value: v,\n            models: Object.values<ChatModel>(\n                {\n                    [ChatModelProvider.OpenAI]: OpenAIChatModel,\n                    [ChatModelProvider.Anthropic]: AnthropicChatModel,\n                    [ChatModelProvider.DeepSeek]: DeepSeekChatModel,\n                    [ChatModelProvider.Baidu]: BaiduChatModel,\n                    [ChatModelProvider.IFlyTek]: IFlyTekChatModel,\n                    [ChatModelProvider.GLM]: GLMChatModel,\n                    [ChatModelProvider.Google]: GoogleChatModel,\n                    [ChatModelProvider.MoonShot]: MoonShotChatModel,\n                    [ChatModelProvider.AliYun]: AliChatModel,\n                    [ChatModelProvider.XAI]: XAIChatModel,\n                    [ChatModelProvider.ARK]: ArkChatModel,\n                    [ChatModelProvider.Other]: []\n                }[v]\n            )\n        }))\n\n        // expand chat models to list\n        this.imgModels = Object.entries(ImagineModelProvider).map<Provider>(([k, v]) => ({\n            provider: k as keyof typeof ImagineModelProvider,\n            value: v,\n            models: Object.values<ImagineModel>(\n                {\n                    [ImagineModelProvider.OpenAI]: OpenAIImagineModel,\n                    [ImagineModelProvider.MidJourney]: MidJourneyImagineModel,\n                    [ImagineModelProvider.StabilityAI]: StabilityAIImagineModel,\n                    [ImagineModelProvider.IFlyTek]: IFlyTekImagineModel\n                }[v]\n            )\n        }))\n\n        // expand chat models to list\n        this.embedModels = Object.entries(EmbedModelProvider).map<Provider>(([k, v]) => ({\n            provider: k as keyof typeof EmbedModelProvider,\n            value: v,\n            models: Object.values<EmbedModel>(\n                {\n                    [EmbedModelProvider.OpenAI]: OpenAIEmbedModel,\n                    [EmbedModelProvider.GLM]: GLMEmbedModel,\n                    [EmbedModelProvider.Google]: GoogleEmbedModel,\n                    [EmbedModelProvider.AliYun]: AliEmbedModel,\n                    [EmbedModelProvider.Other]: OtherEmbedModel\n                }[v]\n            )\n        }))\n\n        this.models = [...this.chatModels, ...this.embedModels, ...this.imgModels]\n    }\n\n    public setConfig(config: UniAIConfig) {\n        this.config = { ...this.config, ...config }\n        this.openai.config(this.config.OpenAI?.key, this.config.OpenAI?.proxy)\n        this.anthropic.config(this.config.Anthropic?.key, this.config.Anthropic?.proxy)\n        this.deepseek.config(this.config.DeepSeek?.key, this.config.DeepSeek?.proxy)\n        this.glm.config(this.config.GLM?.key, this.config.GLM?.proxy)\n        this.google.config(this.config.Google?.key, this.config.Google?.proxy)\n        this.fly.config(\n            this.config.IFlyTek?.apiPassword,\n            this.config.IFlyTek?.appId,\n            this.config.IFlyTek?.apiKey,\n            this.config.IFlyTek?.apiSecret,\n            this.config.IFlyTek?.proxy\n        )\n        this.baidu.config(this.config.Baidu?.apiKey, this.config.Baidu?.secretKey, this.config.Baidu?.proxy)\n        this.moon.config(this.config.MoonShot?.key, this.config.MoonShot?.proxy)\n        this.ali.config(this.config.AliYun?.key, this.config.AliYun?.proxy)\n        this.ark.config(this.config.Ark?.key, this.config.Ark?.proxy)\n        this.xai.config(this.config.XAI?.key, this.config.XAI?.proxy)\n        this.other.config(this.config.Other?.api, this.config.Other?.key)\n        this.mj.config(this.config.MidJourney?.proxy, this.config.MidJourney?.token, this.config.MidJourney?.imgProxy)\n        this.stability.config(this.config.StabilityAI?.key, this.config.StabilityAI?.proxy)\n        return this\n    }\n\n    async chat(messages: ChatMessage[] | string = DEFAULT_MESSAGE, option: ChatOption = {}) {\n        if (typeof messages === 'string') messages = [{ role: ChatRoleEnum.USER, content: messages }]\n        const provider = option.provider || ChatModelProvider.OpenAI\n        const { model, stream, top, temperature, maxLength, tools, toolChoice, reasoning } = option\n\n        switch (provider) {\n            case ChatModelProvider.OpenAI:\n                return await this.openai.chat(\n                    messages,\n                    model as OpenAIChatModel,\n                    stream,\n                    reasoning,\n                    top,\n                    temperature,\n                    maxLength,\n                    tools as ChatCompletionTool[],\n                    toolChoice as ChatCompletionToolChoiceOption\n                )\n            case ChatModelProvider.Anthropic:\n                return await this.anthropic.chat(\n                    messages,\n                    model as AnthropicChatModel,\n                    stream,\n                    top,\n                    temperature,\n                    maxLength,\n                    tools as ChatCompletionTool[],\n                    toolChoice as ChatCompletionToolChoiceOption\n                )\n            case ChatModelProvider.DeepSeek:\n                return await this.deepseek.chat(\n                    messages,\n                    model as DeepSeekChatModel,\n                    stream,\n                    top,\n                    temperature,\n                    maxLength\n                )\n            case ChatModelProvider.Google:\n                return await this.google.chat(messages, model as GoogleChatModel, stream, top, temperature, maxLength)\n            case ChatModelProvider.GLM:\n                return await this.glm.chat(\n                    messages,\n                    model as GLMChatModel,\n                    stream,\n                    top,\n                    temperature,\n                    maxLength,\n                    tools as ChatCompletionTool[],\n                    toolChoice as ChatCompletionToolChoiceOption\n                )\n            case ChatModelProvider.IFlyTek:\n                return await this.fly.chat(\n                    messages,\n                    model as IFlyTekChatModel,\n                    stream,\n                    top,\n                    temperature,\n                    maxLength,\n                    tools as SPKTool[],\n                    toolChoice as SPKToolChoice\n                )\n            case ChatModelProvider.Baidu:\n                return await this.baidu.chat(messages, model as BaiduChatModel, stream, top, temperature, maxLength)\n            case ChatModelProvider.MoonShot:\n                return await this.moon.chat(messages, model as MoonShotChatModel, stream, top, temperature, maxLength)\n            case ChatModelProvider.AliYun:\n                return await this.ali.chat(messages, model as AliChatModel, stream, top, temperature, maxLength)\n            case ChatModelProvider.ARK:\n                return await this.ark.chat(\n                    messages,\n                    model as ArkChatModel,\n                    stream,\n                    reasoning,\n                    top,\n                    temperature,\n                    maxLength\n                )\n            case ChatModelProvider.XAI:\n                return await this.xai.chat(\n                    messages,\n                    model as XAIChatModel,\n                    stream,\n                    top,\n                    temperature,\n                    maxLength,\n                    tools as GrokTool[],\n                    toolChoice as GrokToolChoice\n                )\n            case ChatModelProvider.Other:\n                return await this.other.chat(\n                    messages,\n                    model,\n                    stream,\n                    reasoning,\n                    top,\n                    temperature,\n                    maxLength,\n                    tools as ChatCompletionTool[],\n                    toolChoice as ChatCompletionToolChoiceOption\n                )\n            default:\n                throw new Error('Chat model Provider not found')\n        }\n    }\n\n    async embedding(content: string | string[], option: EmbedOption = {}) {\n        const provider = option.provider || ModelProvider.OpenAI\n        const { model, dimensions } = option\n        if (typeof content === 'string') content = [content]\n\n        switch (provider) {\n            case EmbedModelProvider.OpenAI:\n                return await this.openai.embedding(content, model as OpenAIEmbedModel, dimensions)\n            case EmbedModelProvider.GLM:\n                return await this.glm.embedding(content, model as GLMEmbedModel, dimensions)\n            case EmbedModelProvider.Google:\n                return await this.google.embedding(content, model as GoogleEmbedModel, dimensions)\n            case EmbedModelProvider.AliYun:\n                return await this.ali.embedding(content, model as AliEmbedModel, dimensions)\n            case EmbedModelProvider.Other:\n                return await this.other.embedding(content, model as OtherEmbedModel, dimensions)\n            default:\n                throw new Error('Embedding model provider not found')\n        }\n    }\n\n    async imagine(prompt: string, option: ImagineOption = {}) {\n        const provider = option.provider || ImagineModelProvider.OpenAI\n        const { negativePrompt, width, height, num, model } = option\n        if (provider === ImagineModelProvider.OpenAI)\n            return await this.openai.imagine(prompt, width, height, num, model as OpenAIImagineModel)\n        else if (provider === ImagineModelProvider.MidJourney)\n            return await this.mj.imagine(prompt, negativePrompt, width, height)\n        else if (provider === ImagineModelProvider.StabilityAI)\n            return await this.stability.imagine(\n                prompt,\n                negativePrompt,\n                width,\n                height,\n                num,\n                model as StabilityAIImagineModel\n            )\n        else if (provider === ImagineModelProvider.IFlyTek)\n            return await this.fly.imagine(prompt, width, height, model as IFlyTekImagineModel)\n        else throw new Error('Imagine model provider not found')\n    }\n\n    async task(provider: ImagineModelProvider, id?: string) {\n        if (provider === ImagineModelProvider.OpenAI) return this.openai.task(id)\n        else if (provider === ImagineModelProvider.MidJourney) return await this.mj.task(id)\n        else if (provider === ImagineModelProvider.StabilityAI) return this.stability.task(id)\n        else if (provider === ImagineModelProvider.IFlyTek) return this.fly.task(id)\n        else throw new Error('Imagine model provider not found')\n    }\n\n    async change(provider: ImagineModelProvider, taskId: string, action: string, index?: number) {\n        if (provider === ImagineModelProvider.MidJourney) return this.mj.change(taskId, action as MJTaskType, index)\n        else throw new Error('Imagine model provider not found')\n    }\n}\n","/** @format */\n\nimport { IAST } from '../interface/IPrompt'\n\n/** @format\n * Represents a node in a recursive Markdown tree structure,\n * containing a title, content, and any number of sub-sections (children).\n */\nexport default class Prompt {\n    // The heading/title of this prompt node, corresponding to a Markdown heading.\n    title: string\n\n    // The main content/body text of this prompt node. Does not include content under sub-headings.\n    content: string\n\n    // The immediate child prompt nodes (sub-sections).\n    children: Prompt[]\n\n    /**\n     * Constructs a new Prompt instance.\n     * @param title - The heading/title of the node.\n     * @param content - The content/body text of the node. Defaults to an empty string.\n     * @param children - An array of Prompt children. Defaults to an empty array.\n     */\n    constructor(title: string, content: string = '', children: Prompt[] = []) {\n        this.title = title\n        this.content = content\n        this.children = children\n    }\n\n    /**\n     * Recursively finds all descendant nodes (including direct children) whose title matches the given string.\n     * @param title - The title to search for.\n     * @param deep - Whether to search recursively in all descendants. Defaults to false (only immediate children).\n     * @returns An array of all matching Prompt nodes.\n     */\n    getByTitle(title: string, deep: boolean = false): Prompt[] {\n        let result: Prompt[] = []\n        for (const child of this.children) {\n            if (child.title === title) result.push(child)\n            if (deep) result = result.concat(child.getByTitle(title, true))\n        }\n        return result\n    }\n\n    /**\n     * Adds a child prompt node to the children of this node.\n     * Supports chainable calls.\n     * @param child - The Prompt instance to add.\n     * @returns This Prompt instance (for chaining).\n     */\n    add(child: Prompt): this {\n        this.children.push(child)\n        return this\n    }\n\n    /**\n     * Recursively removes all nodes (including direct and indirect children) whose title matches the given string.\n     * @param title - The title of the nodes to remove.\n     * @param deep - Whether to remove matching nodes at any depth. Defaults to false (only immediate children).\n     * @returns An array of all removed Prompt nodes.\n     */\n    remove(title: string, deep: boolean = false): Prompt[] {\n        // Remove from immediate children\n        const removed: Prompt[] = []\n        for (let i = this.children.length - 1; i >= 0; i--)\n            if (this.children[i].title === title) removed.push(...this.children.splice(i, 1))\n\n        // Recursively remove from descendants\n        if (deep) for (const child of this.children) removed.push(...child.remove(title, true))\n        return removed\n    }\n\n    /**\n     * Recursively exports the structure as Markdown text.\n     * @param level - The Markdown heading level (used internally for recursion).\n     * @returns The generated Markdown string.\n     */\n    toMarkdown(level: number = 1): string {\n        let md = ''\n        if (this.title) md += `${'#'.repeat(level)} ${this.title}\\n\\n`\n        if (this.content) md += this.content.trim() + '\\n\\n'\n\n        const nextLevel = this.title ? level + 1 : level\n        for (const child of this.children) md += child.toMarkdown(nextLevel)\n        return md\n    }\n\n    /**\n     * Creates a deep copy (clone) of this Prompt node, including all descendants.\n     * @returns A new Prompt instance that is a deep copy of this node.\n     */\n    clone(): Prompt {\n        return new Prompt(\n            this.title,\n            this.content,\n            this.children.map(child => child.clone())\n        )\n    }\n\n    /**\n     * Serializes this node and all descendants into a plain JSON object structure.\n     * Only the title, content, and children structure are preserved.\n     * @returns The JSON representation of this Prompt tree.\n     */\n    toJSON(): object {\n        return {\n            title: this.title,\n            content: this.content,\n            children: this.children.map(child => child.toJSON())\n        }\n    }\n\n    /**\n     * Converts this Prompt node and all descendants into a Markdown string.\n     * @returns The Markdown representation of this Prompt tree.\n     */\n    toString(): string {\n        return this.toMarkdown()\n    }\n\n    /**\n     * Deserializes a JSON object (or string) into a Prompt tree.\n     * @param jsonObj - The structured data (from toJSON) or a compatible JSON string.\n     * @returns The root Prompt instance.\n     */\n    static fromJSON(jsonObj: any): Prompt {\n        if (typeof jsonObj === 'string') jsonObj = JSON.parse(jsonObj)\n\n        return new Prompt(\n            jsonObj.title,\n            jsonObj.content,\n            (jsonObj.children || []).map((child: any) => Prompt.fromJSON(child))\n        )\n    }\n\n    /**\n     * Parses a Markdown source string and constructs a Prompt tree representing its structure.\n     * Only basic heading recognition (# ... ######) is implemented.\n     * @param markdown - The Markdown source string.\n     * @returns The root Prompt node parsed from the document.\n     */\n    static fromMarkdown(markdown: string): Prompt {\n        // Split lines in a cross-platform way (supports both LF and CRLF)\n        const lines = markdown.split(/\\r?\\n/)\n        const root = new Prompt('', '', [])\n        const stack: { prompt: Prompt; level: number }[] = [{ prompt: root, level: 0 }]\n\n        for (const line of lines) {\n            const headingMatch = line.match(/^(#{1,6})\\s+(.*)$/)\n            if (headingMatch) {\n                const level = headingMatch[1].length\n                const title = headingMatch[2].trim()\n                const newNode = new Prompt(title, '')\n                while (stack.length && stack[stack.length - 1].level >= level) stack.pop()\n                stack[stack.length - 1].prompt.add(newNode)\n                stack.push({ prompt: newNode, level })\n            } else if (line.trim() !== '') {\n                if (stack.length > 0) {\n                    const current = stack[stack.length - 1].prompt\n                    if (current.content) current.content += '\\n'\n                    current.content += line\n                }\n            }\n        }\n        if (root.children.length === 1 && !root.content) return root.children[0]\n        return root\n    }\n\n    /**\n     * Generates an Abstract Syntax Tree (AST) representing this node and all descendants,\n     * compatible with mdast structure.\n     * @returns The generated AST object.\n     */\n    getAST(): IAST {\n        const astNode: IAST = {\n            type: this.title ? 'heading' : 'root',\n            depth: this.title ? 1 : undefined,\n            children: []\n        }\n        if (this.title) astNode.children!.push({ type: 'text', value: this.title })\n        if (this.content)\n            astNode.children!.push({\n                type: 'paragraph',\n                children: [{ type: 'text', value: this.content }]\n            })\n        for (const child of this.children) astNode.children!.push(child.getAST())\n        return astNode\n    }\n\n    /**\n     * Prints the tree structure of this Prompt node and all descendants to the console,\n     * with clear indentation and branch markers for visualization.\n     * @param indent - The indentation prefix for current level (for internal recursion use).\n     * @param isLast - Whether this is the last child node (for internal recursion use).\n     */\n    printTree(indent: string = '', isLast: boolean = true): void {\n        const icon = indent ? (isLast ? '└─' : '├─') : ''\n        if (this.title || this.content)\n            // Only print non-empty nodes\n            console.log(\n                `${indent}${icon}${this.title ? `「${this.title}」` : ''}${this.content ? `: ${this.content.split('\\n')[0]}${this.content.length > 40 ? '...' : ''}` : ''}`\n            )\n        const nextIndent = indent + (isLast ? '  ' : '│ ')\n        this.children.forEach((child, i) => child.printTree(nextIndent, i === this.children.length - 1))\n    }\n}\n","/** @format */\nexport * from '../interface/Enum'\nexport * from '../interface/IConfig'\nexport * from '../interface/IModel'\nexport * from '../interface/IOpenAI'\nexport * from '../interface/IAnthropic'\nexport * from '../interface/IArk'\nexport * from '../interface/IGoogle'\nexport * from '../interface/IDeepSeek'\nexport * from '../interface/IX'\nexport * from '../interface/IGLM'\nexport * from '../interface/IFlyTek'\nexport * from '../interface/IBaidu'\nexport * from '../interface/IMidJourney'\nexport * from '../interface/IStability'\n\nimport UniAI from './UniAI'\nimport Prompt from './Prompt'\nexport default UniAI\nexport { Prompt }\n"]}