@tombcato/ai-selector-react 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,31 @@
1
+ (function(X,v){typeof exports=="object"&&typeof module<"u"?v(exports,require("react"),require("@tombcato/smart-ticker")):typeof define=="function"&&define.amd?define(["exports","react","@tombcato/smart-ticker"],v):(X=typeof globalThis<"u"?globalThis:X||self,v(X.AISelectorReact={},X.React,X.smartTicker))})(this,(function(X,v,st){"use strict";const ie={zh:{save:"保存配置",saved:"保存成功",providerLabel:"Provider",modelLabel:"Model",selectProvider:"选择 Provider...",customBaseUrl:"自定义 Base URL",apiKeyLabel:"API Key",apiKeyPlaceholder:"输入 API Key...",testConnection:"测试模型连接",testing:"测试中...",testSuccess:"连接成功",testFailed:"测试连通性失败",selectModel:"选择 Model...",searchModel:"搜索或自定义模型...",useCustom:"使用自定义",noModels:"暂无模型数据",apiKeyTip:"输入 API Key 后可获取完整模型列表",fetchModelsFailed:"拉取模型列表失败,已使用离线模型列表",refreshingModels:"列表刷新中...",modelListUpdated:"模型列表已刷新",preview:"配置预览",unselected:"(未选择)"},en:{save:"Save Config",saved:"Saved",providerLabel:"Provider",modelLabel:"Model",selectProvider:"Select Provider...",customBaseUrl:"Custom Base URL",apiKeyLabel:"API Key",apiKeyPlaceholder:"Enter API Key...",testConnection:"Test Model Connection",testing:"Testing...",testSuccess:"Connection Successful",testFailed:"Connection Failed",selectModel:"Select Model...",searchModel:"Search or custom models...",useCustom:"Use custom",noModels:"No models found",apiKeyTip:"Enter API Key to fetch full model list",fetchModelsFailed:"Failed to fetch model list, using offline models",refreshingModels:"Refreshing models...",modelListUpdated:"Model list updated",preview:"Config Preview",unselected:"(Unselected)"}},N="https://registry.npmmirror.com/@lobehub/icons-static-svg/1.77.0/files/icons",d={OPENAI:"openai",ANTHROPIC:"anthropic",GEMINI:"gemini",DEEPSEEK:"deepseek",OPENROUTER:"openrouter",GROQ:"groq",MISTRAL:"mistral",MOONSHOT:"moonshot",QWEN:"qwen",ZHIPU:"zhipu",SILICONFLOW:"siliconflow",XAI:"xai",TOGETHER:"together",FIREWORKS:"fireworks",DEEPINFRA:"deepinfra",PERPLEXITY:"perplexity",COHERE:"cohere",OLLAMA:"ollama",DOUBAO:"doubao",MINIMAX:"minimax"},ue={[d.OPENAI]:{id:d.OPENAI,name:"OpenAI",baseUrl:"https://api.openai.com/v1",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!0,icon:`${N}/openai.svg`},[d.ANTHROPIC]:{id:d.ANTHROPIC,name:"Anthropic (Claude)",baseUrl:"https://api.anthropic.com/v1",needsApiKey:!0,apiFormat:"anthropic",supportsModelsApi:!1,icon:`${N}/anthropic.svg`},[d.GEMINI]:{id:d.GEMINI,name:"Google Gemini",baseUrl:"https://generativelanguage.googleapis.com/v1beta",needsApiKey:!0,apiFormat:"gemini",supportsModelsApi:!0,icon:`${N}/gemini.svg`},[d.OPENROUTER]:{id:d.OPENROUTER,name:"OpenRouter",baseUrl:"https://openrouter.ai/api/v1",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!0,icon:`${N}/openrouter.svg`},[d.DEEPSEEK]:{id:d.DEEPSEEK,name:"DeepSeek",baseUrl:"https://api.deepseek.com",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!0,icon:`${N}/deepseek.svg`},[d.MOONSHOT]:{id:d.MOONSHOT,name:"Moonshot (Kimi)",baseUrl:"https://api.moonshot.cn/v1",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!0,icon:`${N}/moonshot.svg`},[d.QWEN]:{id:d.QWEN,name:"通义千问 (Qwen)",baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!0,icon:`${N}/qwen.svg`},[d.ZHIPU]:{id:d.ZHIPU,name:"智谱 AI (GLM)",baseUrl:"https://open.bigmodel.cn/api/paas/v4",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!0,icon:`${N}/zhipu.svg`},[d.SILICONFLOW]:{id:d.SILICONFLOW,name:"硅基流动 (siliconflow)",baseUrl:"https://api.siliconflow.cn/v1",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!0,icon:`${N}/siliconcloud.svg`},[d.DOUBAO]:{id:d.DOUBAO,name:"火山方舟 (Doubao)",baseUrl:"https://ark.cn-beijing.volces.com/api/v3",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!0,icon:`${N}/doubao.svg`},[d.MINIMAX]:{id:d.MINIMAX,name:"MiniMax",baseUrl:"https://api.minimax.io/v1",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!1,icon:`${N}/minimax.svg`},[d.XAI]:{id:d.XAI,name:"xAI (Grok)",baseUrl:"https://api.x.ai/v1",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!0,icon:`${N}/grok.svg`},[d.GROQ]:{id:d.GROQ,name:"Groq",baseUrl:"https://api.groq.com/openai/v1",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!0,icon:`${N}/groq.svg`},[d.MISTRAL]:{id:d.MISTRAL,name:"Mistral AI",baseUrl:"https://api.mistral.ai/v1",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!0,icon:`${N}/mistral.svg`},[d.TOGETHER]:{id:d.TOGETHER,name:"Together AI",baseUrl:"https://api.together.xyz/v1",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!0,icon:`${N}/together.svg`},[d.FIREWORKS]:{id:d.FIREWORKS,name:"Fireworks AI",baseUrl:"https://api.fireworks.ai/inference/v1",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!0,icon:`${N}/fireworks.svg`},[d.DEEPINFRA]:{id:d.DEEPINFRA,name:"DeepInfra",baseUrl:"https://api.deepinfra.com/v1/openai",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!0,icon:`${N}/deepinfra.svg`},[d.PERPLEXITY]:{id:d.PERPLEXITY,name:"Perplexity",baseUrl:"https://api.perplexity.ai",needsApiKey:!0,apiFormat:"openai",supportsModelsApi:!1,icon:`${N}/perplexity.svg`},[d.COHERE]:{id:d.COHERE,name:"Cohere",baseUrl:"https://api.cohere.com/v2",needsApiKey:!0,apiFormat:"cohere",supportsModelsApi:!0,icon:`${N}/cohere.svg`},[d.OLLAMA]:{id:d.OLLAMA,name:"Ollama (Local)",baseUrl:"http://localhost:11434/v1",needsApiKey:!1,apiFormat:"openai",supportsModelsApi:!0,icon:`${N}/ollama.svg`}};function it(t){return ue[t]}function Oe(){return Object.values(ue)}function ot(t){return Oe().filter(a=>a.apiFormat===t)}const Pe={[d.OPENAI]:[{id:"gpt-5.2-pro",name:"GPT-5.2 Pro"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5",name:"GPT-5"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5-nano",name:"GPT-5 Nano"},{id:"gpt-4.1",name:"GPT-4.1"}],[d.ANTHROPIC]:[{id:"claude-opus-4.5-20251101",name:"Claude Opus 4.5"},{id:"claude-opus-4.5-20251101-thinking",name:"Claude Opus 4.5 Thinking"},{id:"claude-sonnet-4.5-20250929",name:"Claude Sonnet 4.5"},{id:"claude-sonnet-4.5-20250929-thinking",name:"Claude Sonnet 4.5 Thinking"},{id:"claude-haiku-4.5-20251001",name:"Claude Haiku 4.5"},{id:"claude-haiku-4.5-20251001-thinking",name:"Claude Haiku 4.5 Thinking"},{id:"claude-opus-4.1-20250805",name:"Claude Opus 4.1"},{id:"claude-opus-4.1-20250805-thinking",name:"Claude Opus 4.1 Thinking"}],[d.GEMINI]:[{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash-Lite"}],[d.DEEPSEEK]:[{id:"deepseek-chat",name:"Deepseek Chat"},{id:"deepseek-reasoner",name:"Deepseek Reasoner"}],[d.MISTRAL]:[{id:"mistral-large-latest",name:"Mistral Large"},{id:"mistral-medium-latest",name:"Mistral Medium"},{id:"mistral-small-latest",name:"Mistral Small"},{id:"codestral-latest",name:"Codestral"},{id:"devstral-latest",name:"Devstral"},{id:"magistral-medium-latest",name:"Magistral Medium"},{id:"pixtral-large-latest",name:"Pixtral Large"},{id:"pixtral-12b-latest",name:"Pixtral 12B"},{id:"ministral-8b-latest",name:"Ministral 8B"},{id:"ministral-3b-latest",name:"Ministral 3B"}],[d.GROQ]:[{id:"canopylabs/orpheus-v1-english",name:"Orpheus V1 English"},{id:"canopylabs/orpheus-arabic-saudi",name:"Orpheus Arabic Saudi"},{id:"moonshotai/kimi-k2-instruct",name:"Kimi K2 Instruct"},{id:"groq/compound-mini",name:"Compound Mini"},{id:"llama-3.3-70b-versatile",name:"Llama 3.3 70B Versatile"},{id:"openai/gpt-oss-120b",name:"Gpt Oss 120B"},{id:"qwen/qwen3-32b",name:"Qwen3 32B"},{id:"groq/compound",name:"Compound"},{id:"meta-llama/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick 17B 128E Instruct"}],[d.XAI]:[{id:"grok-4",name:"Grok 4"},{id:"grok-4-fast",name:"Grok 4 Fast"},{id:"grok-3-latest",name:"Grok 3"},{id:"grok-3-fast",name:"Grok 3 Fast"},{id:"grok-3-mini-latest",name:"Grok 3 Mini"},{id:"grok-3-mini-fast",name:"Grok 3 Mini Fast"},{id:"grok-vision-beta",name:"Grok Vision (Beta)"}],[d.TOGETHER]:[{id:"Qwen/Qwen2.5-72B-Instruct-Turbo",name:"Qwen2.5 72B Instruct Turbo"},{id:"Qwen/Qwen3-235B-A22B-Thinking-2507",name:"Qwen3 235B A22B Thinking 2507"},{id:"deepseek-ai/DeepSeek-R1",name:"Deepseek R1"},{id:"deepseek-ai/DeepSeek-V3.1",name:"Deepseek V3.1"},{id:"meta-llama/Llama-3.2-3B-Instruct-Turbo",name:"Llama 3.2 3B Instruct Turbo"},{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo",name:"Llama 3.3 70B Instruct Turbo"},{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo-Free",name:"Llama 3.3 70B Instruct Turbo Free"}],[d.FIREWORKS]:[{id:"accounts/fireworks/models/llama4-scout-instruct-basic",name:"Llama4 Scout Instruct Basic"},{id:"accounts/fireworks/models/qwen3-vl-235b-a22b-thinking",name:"Qwen3 Vl 235B A22B Thinking"},{id:"accounts/fireworks/models/deepseek-v3p2",name:"Deepseek V3P2"},{id:"accounts/fireworks/models/qwen3-vl-30b-a3b-thinking",name:"Qwen3 Vl 30B A3B Thinking"},{id:"accounts/fireworks/models/qwen3-8b",name:"Qwen3 8B"},{id:"accounts/fireworks/models/qwen3-vl-30b-a3b-instruct",name:"Qwen3 Vl 30B A3B Instruct"},{id:"accounts/fireworks/models/qwen2p5-vl-32b-instruct",name:"Qwen2P5 Vl 32B Instruct"},{id:"accounts/fireworks/models/llama4-maverick-instruct-basic",name:"Llama4 Maverick Instruct Basic"},{id:"accounts/fireworks/models/qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking 2507"},{id:"accounts/fireworks/models/qwen3-coder-480b-a35b-instruct",name:"Qwen3 Coder 480B A35B Instruct"}],[d.DEEPINFRA]:[{id:"meta-llama/Llama-3.2-11B-Vision-Instruct",name:"Llama 3.2 11B Vision Instruct"},{id:"Qwen/Qwen3-32B",name:"Qwen3 32B"},{id:"NousResearch/Hermes-3-Llama-3.1-70B",name:"Hermes 3 Llama 3.1 70B"},{id:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen2.5 72B Instruct"},{id:"deepseek-ai/DeepSeek-V3-0324",name:"Deepseek V3 0324"},{id:"Qwen/Qwen3-VL-235B-A22B-Instruct",name:"Qwen3 Vl 235B A22B Instruct"},{id:"meta-llama/Llama-3.2-3B-Instruct",name:"Llama 3.2 3B Instruct"},{id:"Qwen/Qwen2.5-VL-32B-Instruct",name:"Qwen2.5 Vl 32B Instruct"},{id:"meta-llama/Meta-Llama-3.1-8B-Instruct",name:"Meta Llama 3.1 8B Instruct"},{id:"Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo",name:"Qwen3 Coder 480B A35B Instruct Turbo"}],[d.OPENROUTER]:[{id:"google/gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"mistralai/mistral-small-creative",name:"Mistral Small Creative"},{id:"openai/gpt-5.2-chat",name:"Gpt 5.2 Chat"},{id:"openai/gpt-5.2-pro",name:"Gpt 5.2 Pro"},{id:"openai/gpt-5.2",name:"Gpt 5.2"},{id:"mistralai/devstral-2512",name:"Devstral 2512"},{id:"openai/gpt-5.1-codex-max",name:"Gpt 5.1 Codex Max"},{id:"mistralai/ministral-14b-2512",name:"Ministral 14B 2512"},{id:"mistralai/ministral-8b-2512",name:"Ministral 8B 2512"},{id:"mistralai/ministral-3b-2512",name:"Ministral 3B 2512"},{id:"mistralai/mistral-large-2512",name:"Mistral Large 2512"},{id:"deepseek/deepseek-v3.2-speciale",name:"Deepseek V3.2 Speciale"}],[d.PERPLEXITY]:[{id:"codellama-34b-instruct",name:"Codellama 34B Instruct"},{id:"codellama-70b-instruct",name:"Codellama 70B Instruct"},{id:"llama-2-70b-chat",name:"Llama 2 70B Chat"},{id:"llama-3.1-70b-instruct",name:"Llama 3.1 70B Instruct"},{id:"llama-3.1-8b-instruct",name:"Llama 3.1 8B Instruct"},{id:"llama-3.1-sonar-huge-128k-online",name:"Llama 3.1 Sonar Huge 128K Online"},{id:"llama-3.1-sonar-large-128k-chat",name:"Llama 3.1 Sonar Large 128K Chat"},{id:"llama-3.1-sonar-large-128k-online",name:"Llama 3.1 Sonar Large 128K Online"},{id:"llama-3.1-sonar-small-128k-chat",name:"Llama 3.1 Sonar Small 128K Chat"}],[d.COHERE]:[{id:"command-a-vision-07-2025",name:"Command A Vision 07 2025"},{id:"command-a-reasoning-08-2025",name:"Command A Reasoning 08 2025"},{id:"command-r-08-2024",name:"Command R 08 2024"},{id:"command-r7b-arabic-02-2025",name:"Command R7B Arabic 02 2025"},{id:"command-r7b-12-2024",name:"Command R7B 12 2024"}],[d.MOONSHOT]:[{id:"moonshot-v1-128k",name:"Moonshot 128K"},{id:"moonshot-v1-32k",name:"Moonshot 32K"},{id:"moonshot-v1-8k",name:"Moonshot 8K"},{id:"kimi-k2-0711-chat",name:"Kimi K2 Chat"},{id:"moonshot-v1-auto",name:"Moonshot Auto"}],[d.QWEN]:[{id:"qwen-flash",name:"Qwen Flash"},{id:"qwen3-vl-plus-2025-12-19",name:"Qwen3 Vl Plus 2025 12 19"},{id:"qwen3-tts-vd-realtime-2025-12-16",name:"Qwen3 Tts Vd Realtime 2025 12 16"},{id:"qwen-image-edit-plus-2025-12-15",name:"Qwen Image Edit Plus 2025 12 15"},{id:"qwen3-omni-flash-2025-12-01",name:"Qwen3 Omni Flash 2025 12 01"},{id:"qwen3-omni-flash-realtime-2025-12-01",name:"Qwen3 Omni Flash Realtime 2025 12 01"},{id:"qwen3-livetranslate-flash-2025-12-01",name:"Qwen3 Livetranslate Flash 2025 12 01"},{id:"qwen3-livetranslate-flash",name:"Qwen3 Livetranslate Flash"},{id:"qwen-plus-2025-12-01",name:"Qwen Plus 2025 12 01"},{id:"qwen3-tts-vc-realtime-2025-11-27",name:"Qwen3 Tts Vc Realtime 2025 11 27"}],[d.ZHIPU]:[{id:"glm-4.5",name:"Glm 4.5"},{id:"glm-4.5-air",name:"Glm 4.5 Air"},{id:"glm-4.6",name:"Glm 4.6"},{id:"glm-4.7",name:"Glm 4.7"}],[d.SILICONFLOW]:[{id:"deepseek-ai/DeepSeek-V3.2",name:"Deepseek V3.2"},{id:"deepseek-ai/DeepSeek-V3.1-Terminus",name:"Deepseek V3.1 Terminus"},{id:"deepseek-ai/DeepSeek-R1",name:"Deepseek R1"},{id:"deepseek-ai/DeepSeek-V3",name:"Deepseek V3"},{id:"zai-org/GLM-4.6V",name:"Glm 4.6V"},{id:"zai-org/GLM-4.6",name:"Glm 4.6"},{id:"Pro/zai-org/GLM-4.7",name:"Glm 4.7"},{id:"Qwen/Qwen3-VL-32B-Instruct",name:"Qwen3 Vl 32B Instruct"}],[d.OLLAMA]:[{id:"llama3.3",name:"Llama 3.3"},{id:"llama3.2",name:"Llama 3.2"},{id:"qwq",name:"QwQ (推理)"},{id:"qwen3:32b",name:"Qwen3 32B"},{id:"deepseek-r1:32b",name:"DeepSeek R1 32B"},{id:"deepseek-coder-v2",name:"DeepSeek Coder V2"},{id:"gemma3:27b",name:"Gemma 3 27B"},{id:"mistral:7b",name:"Mistral 7B"},{id:"phi4",name:"Phi 4"},{id:"codellama",name:"Code Llama"}],[d.DOUBAO]:[{id:"doubao-seed-1-8-251215",name:"Doubao 1.8"},{id:"doubao-seed-1-6-251015",name:"Doubao 1.6"},{id:"doubao-seed-1-6-lite-251015",name:"Doubao 1.6 Lite"},{id:"doubao-seed-1-6-flash-250828",name:"Doubao 1.6 Flash"},{id:"doubao-seed-1-6-thinking-250615",name:"Doubao 1.6 Thinking"}],[d.MINIMAX]:[{id:"MiniMax-M2.1",name:"MiniMax M2.1"},{id:"MiniMax-M2.1-lightning",name:"MiniMax M2.1 Lightning"},{id:"MiniMax-M2",name:"MiniMax M2"}]};function be(t){return Pe[t]||[]}const lt=t=>Array.isArray(t==null?void 0:t.data)?t.data.filter(a=>a.id).map(a=>{const i=a.name||(a.id.split("/").pop()??"").replace(/[-_]/g," ").replace(/\b\w/g,l=>l.toUpperCase());return{id:a.id,name:i,created:a.created||0}}).sort((a,i)=>(i.created||0)-(a.created||0)):[],Ie={format:"openai",getModelsEndpoint:t=>`${t}/models`,getChatEndpoint:t=>`${t}/chat/completions`,buildHeaders:t=>({"Content-Type":"application/json",Authorization:`Bearer ${t}`}),buildChatPayload:(t,a,i)=>({model:t,messages:a,max_tokens:i}),parseChatResponse:t=>{var a,i,l;return((l=(i=(a=t.choices)==null?void 0:a[0])==null?void 0:i.message)==null?void 0:l.content)||""}},Ne={openai:Ie,anthropic:{format:"anthropic",getChatEndpoint:t=>`${t}/messages`,buildHeaders:t=>({"Content-Type":"application/json","x-api-key":t,"anthropic-version":"2023-06-01"}),buildChatPayload:(t,a,i)=>({model:t,messages:a,max_tokens:i}),parseChatResponse:t=>{var a,i;return((i=(a=t.content)==null?void 0:a[0])==null?void 0:i.text)||""}},gemini:{format:"gemini",getModelsEndpoint:(t,a)=>`${t}/models?key=${a}`,getChatEndpoint:(t,a,i)=>`${t}/models/${i}:generateContent?key=${a}`,buildHeaders:()=>({"Content-Type":"application/json"}),buildChatPayload:(t,a,i)=>({contents:a.map(p=>({role:p.role==="assistant"?"model":"user",parts:[{text:p.content}]})),generationConfig:{maxOutputTokens:i}}),parseChatResponse:t=>{var a,i,l,p,c;return((c=(p=(l=(i=(a=t.candidates)==null?void 0:a[0])==null?void 0:i.content)==null?void 0:l.parts)==null?void 0:p[0])==null?void 0:c.text)||""},parseModelsResponse:t=>Array.isArray(t.models)?t.models.filter(a=>{var i;return(i=a.supportedGenerationMethods)==null?void 0:i.includes("generateContent")}).map(a=>({id:a.name.replace("models/",""),name:a.displayName||a.name.replace("models/",""),created:a.created||0})).sort((a,i)=>(i.created||0)-(a.created||0)):[]},cohere:{format:"cohere",getModelsEndpoint:t=>`${t}/models`,getChatEndpoint:t=>`${t}/chat`,buildHeaders:t=>({"Content-Type":"application/json",Authorization:`Bearer ${t}`}),buildChatPayload:(t,a,i)=>{const l=a[a.length-1],p=a.slice(0,-1).map(c=>({role:c.role==="assistant"?"CHATBOT":"USER",message:c.content}));return{model:t,message:l.content,chat_history:p,max_tokens:i}},parseChatResponse:t=>t.text||""}};function ye(t){return Ne[t]||Ie}async function Le(t){var b;const{apiFormat:a,baseUrl:i,apiKey:l,model:p,messages:c,maxTokens:y=2048}=t,m=ye(a),s=m.getChatEndpoint(i,l,p),u=m.buildHeaders(l),f=m.buildChatPayload(p,c,y),k=performance.now();try{const j=await fetch(s,{method:"POST",headers:u,body:JSON.stringify(f)}),E=Math.round(performance.now()-k);if(!j.ok)return{success:!1,message:((b=(await j.json().catch(()=>({}))).error)==null?void 0:b.message)||`HTTP ${j.status}: ${j.statusText}`,latencyMs:E};const _=await j.json();return{success:!0,content:m.parseChatResponse(_),latencyMs:E}}catch(j){return{success:!1,message:j instanceof Error?j.message:"网络错误"}}}async function ct(t){const a=await Le({apiFormat:t.apiFormat,baseUrl:t.baseUrl,apiKey:t.apiKey,model:t.model,messages:[{role:"user",content:"Hi"}],maxTokens:5});return{success:a.success,latencyMs:a.latencyMs,message:a.success?void 0:a.message}}async function _e(t){const{provider:a,apiKey:i,model:l,baseUrl:p,proxyUrl:c}=t,y=p||a.baseUrl,m=Date.now();try{if(c){const A=await(await fetch(`${c}/test`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider_id:a.id,api_key:i,model:l||"",base_url:p||a.baseUrl,api_format:a.apiFormat})})).json();return{success:A.success,latencyMs:A.latency_ms||Date.now()-m,message:A.message}}const s=ye(a.apiFormat),u=l||"";if(!u)return{success:!1,latencyMs:0,message:"请先选择模型 (Please select a model)"};const f=s.buildHeaders(i),k=s.buildChatPayload(u,[{role:"user",content:"Hi"}],5),b=s.getChatEndpoint(y,i,u),j=await fetch(b,{method:"POST",headers:f,body:JSON.stringify(k)}),E=Date.now()-m;if(j.ok)return{success:!0,latencyMs:E,message:"连接成功"};{const _=await j.text();return{success:!1,latencyMs:E,message:`HTTP ${j.status}: ${_.slice(0,200)}`}}}catch(s){return{success:!1,latencyMs:Date.now()-m,message:s instanceof Error?s.message:String(s)}}}async function dt(t){var y;const{provider:a,apiKey:i,baseUrl:l,proxyUrl:p,fallbackToStatic:c=!0}=t;if(p)try{const s=await(await fetch(`${p}/models`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider_id:a.id,api_key:i||void 0,base_url:l||a.baseUrl})})).json();if(s.success&&((y=s.models)==null?void 0:y.length)>0)return s.models}catch(m){if(console.warn("Failed to fetch models via proxy:",m),!c)throw m}if(!p&&a.supportsModelsApi)try{const m=ye(a.apiFormat);if(m.getModelsEndpoint){const s=m.getModelsEndpoint(l||a.baseUrl,i||""),u=m.buildHeaders(i||""),f=await fetch(s,{method:"GET",headers:u});if(f.ok){const k=await f.json();return(m.parseModelsResponse||lt)(k)}else if(!c)throw new Error(`HTTP ${f.status}`)}}catch(m){if(console.warn("Failed to fetch models directly:",m),!c)throw m}if(!c&&a.supportsModelsApi)throw new Error("Failed to fetch models");return be(a.id)}const Me="ai_provider_config",Fe={get:t=>typeof window>"u"?null:localStorage.getItem(t),set:(t,a)=>{typeof window>"u"||localStorage.setItem(t,a)},remove:t=>{typeof window>"u"||localStorage.removeItem(t)}};function Be(t=Fe,a={}){const i=a.serialize||JSON.stringify,l=a.deserialize||JSON.parse;return{save(p){try{const c=i(p);t.set(Me,c)}catch(c){console.error("Failed to save config:",c)}},load(){const p=t.get(Me);if(!p)return null;try{return l(p)}catch(c){return console.error("Failed to load config:",c),null}},clear(){t.remove(Me)}}}function Ce(t){if(!t)return{providers:Object.values(ue),getModels:s=>be(s)};const{mode:a,include:i,exclude:l,custom:p}=t;let c=[];if(a==="default"){let s=Object.values(ue);i&&i.length>0&&(s=s.filter(u=>i.includes(u.id))),l&&l.length>0&&(s=s.filter(u=>!l.includes(u.id))),c=[...s]}const y={};if(p)for(const[s,u]of Object.entries(p)){const f={id:s,name:u.name,baseUrl:u.baseUrl,needsApiKey:u.needsApiKey,apiFormat:u.apiFormat,supportsModelsApi:u.supportsModelsApi??!1,icon:u.icon},k=c.findIndex(b=>b.id===s);k>=0?c[k]={...c[k],...f,icon:f.icon||c[k].icon}:c.push(f),u.models&&u.models.length>0&&(y[s]=u.models)}return{providers:c,getModels:s=>y[s]?y[s]:be(s)}}function ut(t,a){const{providers:i}=Ce(a);return i.find(l=>l.id===t)||null}const mt=Object.freeze(Object.defineProperty({__proto__:null,I18N:ie,PROVIDERS:ue,PROVIDER_ID:d,STATIC_MODELS:Pe,createConfigStorage:Be,fetchModels:dt,getAllProviders:Oe,getProvider:it,getProviderFromConfig:ut,getProvidersByFormat:ot,getStaticModels:be,getStrategy:ye,localStorageAdapter:Fe,resolveProviderConfig:Ce,sendDirectChat:Le,strategyRegistry:Ne,testConnection:_e,testDirectConnection:ct},Symbol.toStringTag,{value:"Module"}));function Ue(t={}){var $,q,ee,te,ae;const[a,i]=v.useState((($=t.initialConfig)==null?void 0:$.providerId)||""),[l,p]=v.useState(((q=t.initialConfig)==null?void 0:q.apiKey)||""),[c,y]=v.useState(((ee=t.initialConfig)==null?void 0:ee.model)||""),[m,s]=v.useState(((te=t.initialConfig)==null?void 0:te.modelName)||""),[u,f]=v.useState(((ae=t.initialConfig)==null?void 0:ae.baseUrl)||""),[k,b]=v.useState([]),[j,E]=v.useState("idle"),[_,A]=v.useState(null),[F,S]=v.useState(!1),[T,z]=v.useState(null),B=v.useMemo(()=>Ce(t.providerConfig),[t.providerConfig]),O=B.providers,M=v.useMemo(()=>O.find(g=>g.id===a)||null,[O,a]),H=v.useMemo(()=>Be(void 0,{serialize:t.onSerialize,deserialize:t.onDeserialize}),[t.onSerialize,t.onDeserialize]),Z=v.useRef(new Map);v.useEffect(()=>{const g=H.load();g&&(g.providerId&&i(g.providerId),g.apiKey&&p(g.apiKey),g.model&&y(g.model),g.modelName&&s(g.modelName),g.baseUrl&&f(g.baseUrl))},[H]),v.useEffect(()=>{if(!a||!M){b([]),z(null),S(!1);return}const g=M.supportsModelsApi&&(!M.needsApiKey||!!l),P=u||M.baseUrl,D=`${a}|${P}|${l}`,J=Z.current.get(D);if(J){b(J),z(null),S(!1);return}if(!g){const K=B.getModels(a);b(K),Z.current.set(D,K),z(null),S(!1);return}S(!0),z(null),k.length===0&&b(B.getModels(a));const ne=setTimeout(async()=>{try{let K;t.modelFetcher?K=await t.modelFetcher({type:"fetchModels",providerId:M.id,baseUrl:P,apiKey:l}):K=await Promise.resolve().then(()=>mt).then(re=>re.fetchModels({provider:M,apiKey:l,baseUrl:P,proxyUrl:t.proxyUrl,fallbackToStatic:!1})),b(K),Z.current.set(D,K)}catch(K){console.warn("Model fetch failed:",K),z("fetchModelsFailed");const re=B.getModels(a);b(re)}finally{S(!1)}},500);return()=>clearTimeout(ne)},[a,M,l,u,B,t.proxyUrl,t.modelFetcher]),v.useEffect(()=>{(j==="error"||j==="success")&&(E("idle"),A(null))},[l,u]);const fe=v.useCallback(async()=>{if(!M||M.needsApiKey&&!l)return;E("testing"),A(null);let g;if(t.modelFetcher)try{const P=await t.modelFetcher({type:"checkConnection",providerId:M.id,baseUrl:u||M.baseUrl,apiKey:l,modelId:c});g={success:P.success,latencyMs:P.latency||P.latencyMs,message:P.message}}catch(P){g={success:!1,message:P.message||"Unknown error"}}else g=await _e({provider:M,apiKey:l,baseUrl:u,model:c,proxyUrl:t.proxyUrl});return A(g),E(g.success?"success":"error"),setTimeout(()=>{E("idle")},2e3),g},[M,l,u,c,t.proxyUrl,t.modelFetcher]),he=v.useCallback(()=>{const g=k.find(D=>D.id===c),P=(g==null?void 0:g.name)||m||c;g!=null&&g.name&&g.name!==m&&s(g.name),H.save({providerId:a,apiKey:l,model:c,modelName:P,baseUrl:u})},[a,l,c,m,u,k,H]),oe=v.useCallback(()=>{H.clear(),i(""),p(""),y(""),s(""),f("")},[H]),V=v.useCallback(g=>{i(g),p(""),y(""),s(""),f(""),E("idle"),A(null)},[]),W=v.useCallback((g,P)=>{if(y(g),P)s(P);else{const D=k.find(J=>J.id===g);s((D==null?void 0:D.name)||g)}},[k]),Y=v.useMemo(()=>!(!a||!c||M!=null&&M.needsApiKey&&!l),[a,c,M,l]);return{config:v.useMemo(()=>({providerId:a,apiKey:l,model:c,modelName:m,baseUrl:u||(M==null?void 0:M.baseUrl)||""}),[a,l,c,m,u,M]),providerId:a,apiKey:l,model:c,modelName:m,baseUrl:u,models:k,testStatus:j,testResult:_,isFetchingModels:F,fetchModelError:T,provider:M,providers:O,isValid:Y,setProviderId:V,setApiKey:p,setModel:y,selectModel:W,setBaseUrl:f,runTest:fe,save:he,clear:oe}}var xe={exports:{}},me={};/**
2
+ * @license React
3
+ * react-jsx-runtime.production.min.js
4
+ *
5
+ * Copyright (c) Facebook, Inc. and its affiliates.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */var De;function pt(){if(De)return me;De=1;var t=v,a=Symbol.for("react.element"),i=Symbol.for("react.fragment"),l=Object.prototype.hasOwnProperty,p=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,c={key:!0,ref:!0,__self:!0,__source:!0};function y(m,s,u){var f,k={},b=null,j=null;u!==void 0&&(b=""+u),s.key!==void 0&&(b=""+s.key),s.ref!==void 0&&(j=s.ref);for(f in s)l.call(s,f)&&!c.hasOwnProperty(f)&&(k[f]=s[f]);if(m&&m.defaultProps)for(f in s=m.defaultProps,s)k[f]===void 0&&(k[f]=s[f]);return{$$typeof:a,type:m,key:b,ref:j,props:k,_owner:p.current}}return me.Fragment=i,me.jsx=y,me.jsxs=y,me}var pe={};/**
10
+ * @license React
11
+ * react-jsx-runtime.development.js
12
+ *
13
+ * Copyright (c) Facebook, Inc. and its affiliates.
14
+ *
15
+ * This source code is licensed under the MIT license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ */var Ke;function ft(){return Ke||(Ke=1,process.env.NODE_ENV!=="production"&&(function(){var t=v,a=Symbol.for("react.element"),i=Symbol.for("react.portal"),l=Symbol.for("react.fragment"),p=Symbol.for("react.strict_mode"),c=Symbol.for("react.profiler"),y=Symbol.for("react.provider"),m=Symbol.for("react.context"),s=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),f=Symbol.for("react.suspense_list"),k=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),j=Symbol.for("react.offscreen"),E=Symbol.iterator,_="@@iterator";function A(e){if(e===null||typeof e!="object")return null;var r=E&&e[E]||e[_];return typeof r=="function"?r:null}var F=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function S(e){{for(var r=arguments.length,o=new Array(r>1?r-1:0),h=1;h<r;h++)o[h-1]=arguments[h];T("error",e,o)}}function T(e,r,o){{var h=F.ReactDebugCurrentFrame,C=h.getStackAddendum();C!==""&&(r+="%s",o=o.concat([C]));var R=o.map(function(w){return String(w)});R.unshift("Warning: "+r),Function.prototype.apply.call(console[e],console,R)}}var z=!1,B=!1,O=!1,M=!1,H=!1,Z;Z=Symbol.for("react.module.reference");function fe(e){return!!(typeof e=="string"||typeof e=="function"||e===l||e===c||H||e===p||e===u||e===f||M||e===j||z||B||O||typeof e=="object"&&e!==null&&(e.$$typeof===b||e.$$typeof===k||e.$$typeof===y||e.$$typeof===m||e.$$typeof===s||e.$$typeof===Z||e.getModuleId!==void 0))}function he(e,r,o){var h=e.displayName;if(h)return h;var C=r.displayName||r.name||"";return C!==""?o+"("+C+")":o}function oe(e){return e.displayName||"Context"}function V(e){if(e==null)return null;if(typeof e.tag=="number"&&S("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case l:return"Fragment";case i:return"Portal";case c:return"Profiler";case p:return"StrictMode";case u:return"Suspense";case f:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case m:var r=e;return oe(r)+".Consumer";case y:var o=e;return oe(o._context)+".Provider";case s:return he(e,e.render,"ForwardRef");case k:var h=e.displayName||null;return h!==null?h:V(e.type)||"Memo";case b:{var C=e,R=C._payload,w=C._init;try{return V(w(R))}catch{return null}}}return null}var W=Object.assign,Y=0,ve,$,q,ee,te,ae,g;function P(){}P.__reactDisabledLog=!0;function D(){{if(Y===0){ve=console.log,$=console.info,q=console.warn,ee=console.error,te=console.group,ae=console.groupCollapsed,g=console.groupEnd;var e={configurable:!0,enumerable:!0,value:P,writable:!0};Object.defineProperties(console,{info:e,log:e,warn:e,error:e,group:e,groupCollapsed:e,groupEnd:e})}Y++}}function J(){{if(Y--,Y===0){var e={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:W({},e,{value:ve}),info:W({},e,{value:$}),warn:W({},e,{value:q}),error:W({},e,{value:ee}),group:W({},e,{value:te}),groupCollapsed:W({},e,{value:ae}),groupEnd:W({},e,{value:g})})}Y<0&&S("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var le=F.ReactCurrentDispatcher,ne;function K(e,r,o){{if(ne===void 0)try{throw Error()}catch(C){var h=C.stack.trim().match(/\n( *(at )?)/);ne=h&&h[1]||""}return`
18
+ `+ne+e}}var re=!1,we;{var jt=typeof WeakMap=="function"?WeakMap:Map;we=new jt}function Qe(e,r){if(!e||re)return"";{var o=we.get(e);if(o!==void 0)return o}var h;re=!0;var C=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var R;R=le.current,le.current=null,D();try{if(r){var w=function(){throw Error()};if(Object.defineProperty(w.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(w,[])}catch(G){h=G}Reflect.construct(e,[],w)}else{try{w.call()}catch(G){h=G}e.call(w.prototype)}}else{try{throw Error()}catch(G){h=G}e()}}catch(G){if(G&&h&&typeof G.stack=="string"){for(var x=G.stack.split(`
19
+ `),U=h.stack.split(`
20
+ `),I=x.length-1,L=U.length-1;I>=1&&L>=0&&x[I]!==U[L];)L--;for(;I>=1&&L>=0;I--,L--)if(x[I]!==U[L]){if(I!==1||L!==1)do if(I--,L--,L<0||x[I]!==U[L]){var Q=`
21
+ `+x[I].replace(" at new "," at ");return e.displayName&&Q.includes("<anonymous>")&&(Q=Q.replace("<anonymous>",e.displayName)),typeof e=="function"&&we.set(e,Q),Q}while(I>=1&&L>=0);break}}}finally{re=!1,le.current=R,J(),Error.prepareStackTrace=C}var de=e?e.displayName||e.name:"",se=de?K(de):"";return typeof e=="function"&&we.set(e,se),se}function Rt(e,r,o){return Qe(e,!1)}function St(e){var r=e.prototype;return!!(r&&r.isReactComponent)}function ke(e,r,o){if(e==null)return"";if(typeof e=="function")return Qe(e,St(e));if(typeof e=="string")return K(e);switch(e){case u:return K("Suspense");case f:return K("SuspenseList")}if(typeof e=="object")switch(e.$$typeof){case s:return Rt(e.render);case k:return ke(e.type,r,o);case b:{var h=e,C=h._payload,R=h._init;try{return ke(R(C),r,o)}catch{}}}return""}var ge=Object.prototype.hasOwnProperty,ze={},We=F.ReactDebugCurrentFrame;function Ee(e){if(e){var r=e._owner,o=ke(e.type,e._source,r?r.type:null);We.setExtraStackFrame(o)}else We.setExtraStackFrame(null)}function Tt(e,r,o,h,C){{var R=Function.call.bind(ge);for(var w in e)if(R(e,w)){var x=void 0;try{if(typeof e[w]!="function"){var U=Error((h||"React class")+": "+o+" type `"+w+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof e[w]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw U.name="Invariant Violation",U}x=e[w](r,w,h,o,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(I){x=I}x&&!(x instanceof Error)&&(Ee(C),S("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",h||"React class",o,w,typeof x),Ee(null)),x instanceof Error&&!(x.message in ze)&&(ze[x.message]=!0,Ee(C),S("Failed %s type: %s",o,x.message),Ee(null))}}}var At=Array.isArray;function je(e){return At(e)}function Ot(e){{var r=typeof Symbol=="function"&&Symbol.toStringTag,o=r&&e[Symbol.toStringTag]||e.constructor.name||"Object";return o}}function Pt(e){try{return He(e),!1}catch{return!0}}function He(e){return""+e}function Ye(e){if(Pt(e))return S("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",Ot(e)),He(e)}var Je=F.ReactCurrentOwner,It={key:!0,ref:!0,__self:!0,__source:!0},Xe,Ze;function Nt(e){if(ge.call(e,"ref")){var r=Object.getOwnPropertyDescriptor(e,"ref").get;if(r&&r.isReactWarning)return!1}return e.ref!==void 0}function Lt(e){if(ge.call(e,"key")){var r=Object.getOwnPropertyDescriptor(e,"key").get;if(r&&r.isReactWarning)return!1}return e.key!==void 0}function _t(e,r){typeof e.ref=="string"&&Je.current}function Ft(e,r){{var o=function(){Xe||(Xe=!0,S("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",r))};o.isReactWarning=!0,Object.defineProperty(e,"key",{get:o,configurable:!0})}}function Bt(e,r){{var o=function(){Ze||(Ze=!0,S("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",r))};o.isReactWarning=!0,Object.defineProperty(e,"ref",{get:o,configurable:!0})}}var Ut=function(e,r,o,h,C,R,w){var x={$$typeof:a,type:e,key:r,ref:o,props:w,_owner:R};return x._store={},Object.defineProperty(x._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(x,"_self",{configurable:!1,enumerable:!1,writable:!1,value:h}),Object.defineProperty(x,"_source",{configurable:!1,enumerable:!1,writable:!1,value:C}),Object.freeze&&(Object.freeze(x.props),Object.freeze(x)),x};function Dt(e,r,o,h,C){{var R,w={},x=null,U=null;o!==void 0&&(Ye(o),x=""+o),Lt(r)&&(Ye(r.key),x=""+r.key),Nt(r)&&(U=r.ref,_t(r,C));for(R in r)ge.call(r,R)&&!It.hasOwnProperty(R)&&(w[R]=r[R]);if(e&&e.defaultProps){var I=e.defaultProps;for(R in I)w[R]===void 0&&(w[R]=I[R])}if(x||U){var L=typeof e=="function"?e.displayName||e.name||"Unknown":e;x&&Ft(w,L),U&&Bt(w,L)}return Ut(e,x,U,C,h,Je.current,w)}}var Re=F.ReactCurrentOwner,qe=F.ReactDebugCurrentFrame;function ce(e){if(e){var r=e._owner,o=ke(e.type,e._source,r?r.type:null);qe.setExtraStackFrame(o)}else qe.setExtraStackFrame(null)}var Se;Se=!1;function Te(e){return typeof e=="object"&&e!==null&&e.$$typeof===a}function $e(){{if(Re.current){var e=V(Re.current.type);if(e)return`
22
+
23
+ Check the render method of \``+e+"`."}return""}}function Kt(e){return""}var et={};function Gt(e){{var r=$e();if(!r){var o=typeof e=="string"?e:e.displayName||e.name;o&&(r=`
24
+
25
+ Check the top-level render call using <`+o+">.")}return r}}function tt(e,r){{if(!e._store||e._store.validated||e.key!=null)return;e._store.validated=!0;var o=Gt(r);if(et[o])return;et[o]=!0;var h="";e&&e._owner&&e._owner!==Re.current&&(h=" It was passed a child from "+V(e._owner.type)+"."),ce(e),S('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',o,h),ce(null)}}function at(e,r){{if(typeof e!="object")return;if(je(e))for(var o=0;o<e.length;o++){var h=e[o];Te(h)&&tt(h,r)}else if(Te(e))e._store&&(e._store.validated=!0);else if(e){var C=A(e);if(typeof C=="function"&&C!==e.entries)for(var R=C.call(e),w;!(w=R.next()).done;)Te(w.value)&&tt(w.value,r)}}}function Vt(e){{var r=e.type;if(r==null||typeof r=="string")return;var o;if(typeof r=="function")o=r.propTypes;else if(typeof r=="object"&&(r.$$typeof===s||r.$$typeof===k))o=r.propTypes;else return;if(o){var h=V(r);Tt(o,e.props,"prop",h,e)}else if(r.PropTypes!==void 0&&!Se){Se=!0;var C=V(r);S("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",C||"Unknown")}typeof r.getDefaultProps=="function"&&!r.getDefaultProps.isReactClassApproved&&S("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function Qt(e){{for(var r=Object.keys(e.props),o=0;o<r.length;o++){var h=r[o];if(h!=="children"&&h!=="key"){ce(e),S("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",h),ce(null);break}}e.ref!==null&&(ce(e),S("Invalid attribute `ref` supplied to `React.Fragment`."),ce(null))}}var nt={};function rt(e,r,o,h,C,R){{var w=fe(e);if(!w){var x="";(e===void 0||typeof e=="object"&&e!==null&&Object.keys(e).length===0)&&(x+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var U=Kt();U?x+=U:x+=$e();var I;e===null?I="null":je(e)?I="array":e!==void 0&&e.$$typeof===a?(I="<"+(V(e.type)||"Unknown")+" />",x=" Did you accidentally export a JSX literal instead of a component?"):I=typeof e,S("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",I,x)}var L=Dt(e,r,o,C,R);if(L==null)return L;if(w){var Q=r.children;if(Q!==void 0)if(h)if(je(Q)){for(var de=0;de<Q.length;de++)at(Q[de],e);Object.freeze&&Object.freeze(Q)}else S("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else at(Q,e)}if(ge.call(r,"key")){var se=V(e),G=Object.keys(r).filter(function(Xt){return Xt!=="key"}),Ae=G.length>0?"{key: someKey, "+G.join(": ..., ")+": ...}":"{key: someKey}";if(!nt[se+Ae]){var Jt=G.length>0?"{"+G.join(": ..., ")+": ...}":"{}";S(`A props object containing a "key" prop is being spread into JSX:
26
+ let props = %s;
27
+ <%s {...props} />
28
+ React keys must be passed directly to JSX without using spread:
29
+ let props = %s;
30
+ <%s key={someKey} {...props} />`,Ae,se,Jt,se),nt[se+Ae]=!0}}return e===l?Qt(L):Vt(L),L}}function zt(e,r,o){return rt(e,r,o,!0)}function Wt(e,r,o){return rt(e,r,o,!1)}var Ht=Wt,Yt=zt;pe.Fragment=l,pe.jsx=Ht,pe.jsxs=Yt})()),pe}var Ge;function ht(){return Ge||(Ge=1,process.env.NODE_ENV==="production"?xe.exports=pt():xe.exports=ft()),xe.exports}var n=ht();function Ve({text:t,className:a="",placeholder:i}){return!t&&i?n.jsx("span",{className:`apmsu-placeholder ${a}`,children:i}):t?n.jsx("span",{className:`inline-flex min-w-0 ${a}`,children:n.jsx(st.Ticker,{value:t,charWidth:.8,duration:300})}):null}function vt({providers:t,selectedProviderId:a,onSelect:i,isOpen:l,setIsOpen:p,disabled:c,language:y="zh"}){const m=ie[y],s=v.useRef(null),u=t.find(f=>f.id===a);return v.useEffect(()=>{const f=k=>{s.current&&!s.current.contains(k.target)&&p(!1)};return document.addEventListener("mousedown",f),()=>document.removeEventListener("mousedown",f)},[p]),n.jsxs("div",{className:"apmsu-field",ref:s,children:[n.jsx("label",{className:"apmsu-label",children:m.providerLabel}),n.jsxs("div",{className:"relative",children:[n.jsxs("button",{type:"button",onClick:()=>!c&&p(!l),disabled:c,className:"apmsu-select-trigger",children:[u?n.jsxs("span",{className:"flex items-center gap-2 min-w-0",children:[n.jsx("img",{src:u.icon,alt:u.name,className:"apmsu-provider-icon"}),n.jsx(Ve,{text:u.name})]}):n.jsx("span",{className:"apmsu-placeholder",children:m.selectProvider}),n.jsx(gt,{isOpen:l})]}),n.jsx("div",{className:`apmsu-dropdown max-h-[300px] overflow-auto p-1 origin-top ${l?"apmsu-dropdown-open":""}`,children:t.map(f=>n.jsxs("button",{type:"button",onClick:()=>{i(f.id),p(!1)},className:`apmsu-dropdown-item rounded-sm ${a===f.id?"apmsu-dropdown-item-active":""}`,children:[n.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[n.jsx("img",{src:f.icon,alt:f.name,className:"apmsu-provider-icon"}),n.jsx("span",{className:"font-medium whitespace-nowrap",children:f.name})]}),n.jsx("span",{className:"apmsu-hint-text ml-auto text-right truncate flex-1 min-w-0",children:f.baseUrl.replace("https://","")})]},f.id))})]})]})}const gt=({isOpen:t})=>n.jsx("svg",{className:`apmsu-chevron ${t?"rotate-180":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:n.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})});function bt({provider:t,apiKey:a,onChange:i,testStatus:l,disabled:p,language:c="zh"}){const[y,m]=v.useState(!1),s=ie[c];if(!t||!t.needsApiKey)return null;const u=()=>l==="success"?"apmsu-input apmsu-input-success":"apmsu-input apmsu-input-default";return n.jsxs("div",{className:"space-y-2",children:[n.jsx("label",{className:"apmsu-label",children:s.apiKeyLabel}),n.jsxs("div",{className:"relative",children:[n.jsx("input",{type:y?"text":"password",value:a,onChange:f=>i(f.target.value),onFocus:()=>m(!0),onBlur:()=>m(!1),placeholder:s.apiKeyPlaceholder,disabled:p,className:`${u()} pr-10`}),n.jsx("span",{className:"absolute right-3 top-1/2 -translate-y-1/2 flex items-center justify-center",children:y?n.jsxs("svg",{className:"w-4 h-4 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:[n.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}),n.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"})]}):n.jsx("svg",{className:"w-4 h-4 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:n.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21"})})})]})]})}function yt({provider:t,models:a,selectedModelId:i,onSelect:l,isOpen:p,setIsOpen:c,hasApiKey:y,disabled:m,language:s="zh",isFetchingModels:u,fetchModelError:f,selectedModelName:k}){var S;const b=ie[s],j=v.useRef(null),[E,_]=v.useState("");v.useEffect(()=>{const T=z=>{j.current&&!j.current.contains(z.target)&&(c(!1),_(""))};return document.addEventListener("mousedown",T),()=>document.removeEventListener("mousedown",T)},[c]);const A=a.filter(T=>T.name.toLowerCase().includes(E.toLowerCase())||T.id.toLowerCase().includes(E.toLowerCase())),F=((S=a.find(T=>T.id===i))==null?void 0:S.name)||k||i;return n.jsxs("div",{className:"apmsu-field",ref:j,children:[n.jsx("label",{className:"apmsu-label flex items-center justify-between",children:n.jsx("span",{children:b.modelLabel})}),n.jsxs("div",{className:"relative",children:[n.jsxs("button",{type:"button",onClick:()=>!m&&t&&c(!p),disabled:m||!t,className:"apmsu-select-trigger",children:[n.jsx(Ve,{text:F,placeholder:b.selectModel}),n.jsx(xt,{isOpen:p})]}),n.jsxs("div",{className:`apmsu-dropdown origin-top ${p?"apmsu-dropdown-open":""}`,children:[n.jsx("div",{className:"p-1.5 apmsu-divider",children:n.jsx("input",{type:"text",value:E,onChange:T=>_(T.target.value),placeholder:b.searchModel,className:"apmsu-select-trigger",autoFocus:p})}),n.jsxs("div",{className:"max-h-60 overflow-auto",children:[E&&!A.some(T=>T.id===E)&&n.jsx("button",{type:"button",onClick:()=>{l(E),c(!1),_("")},className:"apmsu-dropdown-item bg-blue-50 dark:bg-blue-900/20 border-b",children:n.jsxs("span",{className:"text-blue-500",children:[b.useCustom,": ",E]})}),A.map(T=>n.jsx("button",{type:"button",onClick:()=>{l(T.id,T.name),c(!1),_("")},className:`apmsu-dropdown-item ${i===T.id?"apmsu-dropdown-item-active":""}`,children:n.jsx("span",{children:T.name})},T.id)),A.length===0&&!E&&n.jsx("div",{className:"p-4 text-center apmsu-hint-text",children:b.noModels})]})]})]}),(t==null?void 0:t.supportsModelsApi)&&n.jsx("div",{className:"min-h-[20px] flex items-center",children:u?n.jsx("p",{className:"apmsu-hint-text animate-pulse",children:b.refreshingModels}):f?n.jsx("p",{className:"apmsu-hint-text dark:text-zinc-500",children:b[f]||f}):t!=null&&t.needsApiKey&&!y?n.jsx("p",{className:"apmsu-hint-text",children:b.apiKeyTip}):n.jsx("p",{className:"apmsu-hint-text",children:b.modelListUpdated})})]})}const xt=({isOpen:t})=>n.jsx("svg",{className:`apmsu-chevron ${t?"rotate-180":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:n.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})});function wt({provider:t,baseUrl:a,onChange:i,disabled:l,language:p="zh"}){const[c,y]=v.useState(!1),m=ie[p];return t?n.jsxs(n.Fragment,{children:[n.jsxs("button",{type:"button",onClick:()=>y(!c),className:"text-xs text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 flex items-center gap-1 transition-colors",children:[n.jsx("svg",{className:`w-3 h-3 transition-transform ${c?"rotate-90":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:n.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})}),m.customBaseUrl]}),n.jsx("div",{className:"grid transition-all duration-200 ease-out",style:{gridTemplateRows:c?"1fr":"0fr"},children:n.jsx("div",{className:"overflow-hidden",children:n.jsx("input",{type:"text",value:a,onChange:s=>i(s.target.value),placeholder:t.baseUrl,disabled:l,className:"apmsu-input apmsu-input-default"})})})]}):null}function kt({proxyUrl:t,config:a,initialConfig:i,title:l,showPreview:p=!1,saveButtonText:c,disabled:y=!1,onSave:m,onTestResult:s,onChange:u,onSerialize:f,onDeserialize:k,language:b="zh",modelFetcher:j}){const E=v.useMemo(()=>ie[b],[b]),{providerId:_,apiKey:A,model:F,modelName:S,baseUrl:T,models:z,testStatus:B,testResult:O,provider:M,providers:H,isValid:Z,setProviderId:fe,setApiKey:he,selectModel:oe,setBaseUrl:V,runTest:W,save:Y,isFetchingModels:ve,fetchModelError:$,config:q}=Ue({proxyUrl:t,providerConfig:a,initialConfig:i,onSerialize:f,onDeserialize:k,modelFetcher:j}),[ee,te]=v.useState(!1),[ae,g]=v.useState(!1),[P,D]=v.useState("idle"),[J,le]=v.useState(!1);v.useEffect(()=>{u==null||u({providerId:_,apiKey:A,model:F,baseUrl:T})},[_,A,F,T,u]),v.useEffect(()=>{O&&(s==null||s(O))},[O,s]);const ne=v.useCallback(()=>{Y(),D("saved"),m==null||m(q),setTimeout(()=>D("idle"),2e3)},[Y,m,q]);return n.jsxs("div",{className:"apmsu-card",children:[l&&n.jsx("h2",{className:"text-lg font-semibold mb-4",children:l}),n.jsxs("div",{className:"space-y-3",children:[n.jsx(vt,{providers:H,selectedProviderId:_,onSelect:fe,isOpen:ee,setIsOpen:te,disabled:y,language:b}),n.jsx(wt,{provider:M,baseUrl:T,onChange:V,disabled:y,language:b}),n.jsx("div",{className:`transition-all duration-500 ease-in-out ${_?"max-h-[1000px] opacity-100 overflow-visible":"max-h-0 opacity-0 overflow-hidden"}`,children:n.jsxs("div",{className:"space-y-4",children:[n.jsx(bt,{provider:M,apiKey:A,onChange:he,testStatus:B,disabled:y,language:b}),n.jsx(yt,{provider:M,models:z,selectedModelId:F,onSelect:oe,isOpen:ae,setIsOpen:g,hasApiKey:!!A,disabled:y,language:b,isFetchingModels:ve,fetchModelError:$,selectedModelName:S})]})}),n.jsxs("div",{className:"pt-2 space-y-2",children:[n.jsxs("div",{className:"flex gap-2",children:[n.jsx("button",{onClick:()=>W(),disabled:!_||!A||!F||y||B==="testing",className:`apmsu-btn flex-1 ${B==="success"?"apmsu-btn-success":B==="error"?"bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400 hover:bg-red-200 dark:hover:bg-red-900/40":"apmsu-btn-ghost border border-gray-200 dark:border-zinc-700"}`,children:B==="testing"?n.jsxs("span",{className:"flex items-center justify-center gap-2",children:[n.jsx(Et,{}),E.testing]}):B==="success"?n.jsxs("span",{className:"flex items-center justify-center gap-2",children:[n.jsx(Mt,{}),E.testSuccess," ",(O==null?void 0:O.latencyMs)&&`${O.latencyMs}ms`]}):B==="error"?n.jsxs("span",{className:"flex items-center justify-center gap-2",children:[n.jsx(Ct,{}),E.testFailed]}):E.testConnection}),n.jsx("button",{onClick:ne,disabled:!Z||y,className:`apmsu-btn flex-1 ${P==="saved"?"apmsu-btn-success":"apmsu-btn-primary"}`,children:P==="saved"?n.jsxs("span",{className:"flex items-center justify-center gap-2",children:[n.jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:n.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2.5,d:"M5 13l4 4L19 7"})}),E.saved]}):c||E.save})]}),n.jsx("div",{className:"grid transition-all duration-200 ease-out",style:{gridTemplateRows:!(O!=null&&O.success)&&(O!=null&&O.message)&&B!=="testing"&&B!=="success"?"1fr":"0fr"},children:n.jsx("div",{className:"overflow-hidden",children:n.jsx("div",{className:"p-2 rounded-md bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800",children:n.jsx("p",{className:"text-xs text-red-600 dark:text-red-400 line-clamp-3 text-left",children:O==null?void 0:O.message})})})})]})]}),p&&M&&n.jsxs("div",{className:"mt-6 border border-gray-200/50 dark:border-zinc-800 rounded-lg overflow-hidden",children:[n.jsxs("button",{type:"button",onClick:()=>le(!J),className:"w-full flex items-center justify-between px-4 py-3 bg-zinc-50 dark:bg-zinc-900/50 hover:bg-zinc-100 dark:hover:bg-zinc-800/50 transition-colors",children:[n.jsx("h3",{className:"text-xs font-medium text-gray-500 dark:text-zinc-500 uppercase tracking-wider",children:E.preview}),n.jsx("svg",{className:`w-4 h-4 text-gray-400 transition-transform duration-200 ${J?"rotate-180":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:n.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]}),n.jsx("div",{className:"grid transition-all duration-200 ease-out",style:{gridTemplateRows:J?"1fr":"0fr"},children:n.jsx("div",{className:"overflow-hidden",children:n.jsx("pre",{className:"text-xs text-gray-600 dark:text-zinc-400 font-mono overflow-x-auto leading-relaxed p-4 bg-zinc-50 dark:bg-zinc-900/50",children:JSON.stringify({provider:M.name,apiFormat:M.apiFormat,baseUrl:T||M.baseUrl,model:F||E.unselected,hasApiKey:!!A},null,2)})})})]})]})}const Et=()=>n.jsxs("svg",{className:"apmsu-icon-spin",viewBox:"0 0 24 24",fill:"none",children:[n.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),n.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"})]}),Mt=()=>n.jsx("svg",{className:"apmsu-icon-success",fill:"currentColor",viewBox:"0 0 24 24",children:n.jsx("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"})}),Ct=()=>n.jsx("svg",{className:"apmsu-icon-error",fill:"currentColor",viewBox:"0 0 24 24",children:n.jsx("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"})});X.AIConfigForm=kt,X.useAIConfig=Ue,Object.defineProperty(X,Symbol.toStringTag,{value:"Module"})}));
31
+ //# sourceMappingURL=index.umd.cjs.map