PageSourceSearch

https://nickz.ai/assets/js/index-Dcu8CtEK.js

js nickz.ai collected 2026-10-05 14:21:04 UTC 434,830 bytes, 1 lines download raw bytes

1import{u as e,r as s,j as t,L as a,f as i}from"./vendor-react-DejgYtBM.js";import{F as r,l as o,E as n,f as l,B as d,Y as c,z as m,M as p,a1 as u,k as x,b8 as g,r as h,b9 as v}from"./vendor-semi-D8d7bTtM.js";import{u as _,A as f,b1 as b,aF as j,D as y,b8 as k}from"./index-BeIIFw6E.js";import{Z as N,X as w,f as S,aa as C,a9 as T,a8 as P,P as R,bP as z,a7 as I,ad as $,aO as O,Q as M,k as A,b6 as E,aM as U,C as D,I as F,ba as q,aW as L,bQ as G,a3 as V,K as B,aj as K,bR as H,x as J,T as W,R as Q}from"./vendor-icons-EJvJ5X-w.js";import"./vendor-highlight-CaHTjBxz.js";import"./vendor-katex-BuQuj6Fv.js";import{M as Y}from"./index-B_PxGnmD.js";import{r as X,a as Z,b as ee,c as se}from"./index-DcbB2zxU.js";import"./vendor-motion-Chfy_MiU.js";function te(e){if(!e)return"";let s=String(e).trim();if(s.startsWith("{")&&s.includes('"path"'))try{const e=JSON.parse(s);e&&"string"==typeof e.path&&(s=e.path)}catch(t){}return s=s.split("?")[0],s.length>1&&s.endsWith("/")&&(s=s.slice(0,-1)),s&&!s.startsWith("/")&&(s="/"+s),s.toLowerCase()}const ae={CHAT:"chat",IMAGE:"image",VIDEO:"video",AUDIO:"audio",AVATAR:"avatar",ADMIN:"admin"},ie="sync",re="async",oe="query",ne=[{exact:["/v1/chat/completions","/v1/completions","/v1/messages","/v1/responses","/v1/responses/compact","/v1/embeddings","/v1/rerank","/v1/moderations"],category:ae.CHAT,mode:ie},{exact:["/v1/audio/speech"],category:ae.AUDIO,mode:ie},{exact:["/v1/audio/transcriptions","/v1/audio/translations"],category:ae.AUDIO,mode:ie},{exact:["/v1/images/generations","/v1/images/edits","/v1/images/variations"],category:ae.IMAGE,mode:ie},{exact:["/v1/video/create","/v1/video/generations","/v1/video/extend","/v1/videos","/v1/videos/remix"],category:ae.VIDEO,mode:re},{exact:["/v1/videos/generations","/v1/videos/edits"],category:ae.VIDEO,mode:re},{exact:["/v1/video/query"],category:ae.VIDEO,mode:oe},{exact:["/kling/v1/videos/image-recognize"],category:ae.IMAGE,mode:re},{prefix:"/v1/videos/",category:ae.VIDEO,mode:oe},{prefix:"/sora/",category:ae.VIDEO,mode:re},{exact:["/v1beta/models/gemini-embedding-001:embedcontent"],category:ae.CHAT,mode:ie},{prefix:"/v1beta/models/imagen",category:ae.IMAGE,mode:ie},{prefix:"/v1beta/",category:ae.CHAT,mode:ie,ambiguous:!0},{prefix:"/mj/",category:ae.IMAGE,mode:re},{prefix:"/ideogram/",category:ae.IMAGE,mode:re},{prefix:"/fal-ai/veo3",category:ae.VIDEO,mode:re},{prefix:"/fal-ai/kling-video",category:ae.VIDEO,mode:re},{prefix:"/fal-ai/",category:ae.IMAGE,mode:re},{prefix:"/replicate/v1/models/minimax/video",category:ae.VIDEO,mode:re},{prefix:"/replicate/v1/models/riffusion/",category:ae.AUDIO,mode:re},{prefix:"/replicate/",category:ae.IMAGE,mode:re},{prefix:"/kling/v1/images/",category:ae.IMAGE,mode:re},{prefix:"/kling/v1/videos/",category:ae.VIDEO,mode:re},{prefix:"/kling/v1/audio/",category:ae.AUDIO,mode:re},{prefix:"/kling/v1/general/custom-voices",category:ae.AUDIO,mode:re},{prefix:"/kling/",category:ae.VIDEO,mode:re,ambiguous:!0},{prefix:"/luma/",category:ae.VIDEO,mode:re},{prefix:"/runwayml/",category:ae.VIDEO,mode:re},{prefix:"/jimeng/",category:ae.VIDEO,mode:re},{prefix:"/openapi/v2/video/lip_sync/tts_list",category:ae.AUDIO,mode:oe},{prefix:"/openapi/v2/video/sound_effect",category:ae.AUDIO,mode:re},{prefix:"/openapi/v2/video/",category:ae.VIDEO,mode:re},{prefix:"/openapi/v2/image/",category:ae.IMAGE,mode:re},{exact:["/minimax/v1/video_generation"],category:ae.VIDEO,mode:re},{exact:["/minimax/v1/t2a_v2"],category:ae.AUDIO,mode:ie},{exact:["/minimax/v1/t2a_async_v2"],category:ae.AUDIO,mode:re},{prefix:"/minimax/v1/voice",category:ae.AUDIO,mode:re},{prefix:"/minimax/",category:ae.AUDIO,mode:re,ambiguous:!0},{prefix:"/suno/",category:ae.AUDIO,mode:re},{exact:["/ent/v2/reference2image"],category:ae.IMAGE,mode:re},{exact:["/ent/v2/text2audio"],category:ae.AUDIO,mode:re},{exact:["/ent/v2/audio-tts"],category:ae.AUDIO,mode:ie},{prefix:"/ent/v2/",category:ae.VIDEO,mode:re},{prefix:"/vidu-native/",category:ae.VIDEO,mode:re},{prefix:"/api/v3/contents/generations",category:ae.VIDEO,mode:re},{prefix:"/volc/",category:ae.VIDEO,mode:re},{prefix:"/alibailian/api/v1/services/aigc/video-generation",category:ae.VIDEO,mode:re},{prefix:"/alibailian/api/v1/services/aigc/multimodal-generation",category:ae.AUDIO,mode:re},{prefix:"/alibailian/",category:ae.VIDEO,mode:re,ambiguous:!0},{exact:["/tencent-vod/v1/aigc-image"],category:ae.IMAGE,mode:re},{exact:["/tencent-vod/v1/aigc-video"],category:ae.VIDEO,mode:re},{prefix:"/tencent-vod/",category:ae.VIDEO,mode:re,ambiguous:!0},{prefix:"/v1/private-avatar/",category:ae.AVATAR,mode:ie},{prefix:"/v1/real-avatar/",category:ae.AVATAR,mode:ie},{prefix:"/api/token",category:ae.ADMIN,mode:ie},{exact:["/api/upload","/api/user/self","/v1/models"],category:ae.ADMIN,mode:ie},{prefix:"/api/usage",category:ae.ADMIN,mode:ie}],le=new Map,de=[];
1for(const Tt of ne)(Tt.exact||[]).forEach(e=>le.set(te(e),Tt)),Tt.prefix&&de.push({...Tt,_prefix:te(Tt.prefix)});function ce(e){return e?{category:e.category,mode:e.mode,ambiguous:!!e.ambiguous}:null}function me(e){const s=te(e);if(!s)return null;if(le.has(s))return ce(le.get(s));for(const t of de)if(s===t._prefix||s.startsWith(t._prefix))return ce(t);return null}de.sort((e,s)=>s._prefix.length-e._prefix.length);const pe=ae,ue={"对话":pe.CHAT,chat:pe.CHAT,text:pe.CHAT,"嵌入":pe.CHAT,embedding:pe.CHAT,embeddings:pe.CHAT,"检索":pe.CHAT,rerank:pe.CHAT,"jina-rerank":pe.CHAT,"审核":pe.CHAT,moderation:pe.CHAT,"图像":pe.IMAGE,image:pe.IMAGE,images:pe.IMAGE,"视频":pe.VIDEO,video:pe.VIDEO,"音视频":pe.VIDEO,"audio-video":pe.VIDEO,"音频":pe.AUDIO,audio:pe.AUDIO,tts:pe.AUDIO,stt:pe.AUDIO,asr:pe.AUDIO,"语音":pe.AUDIO,"音乐":pe.AUDIO,music:pe.AUDIO,"数字人":pe.AVATAR,avatar:pe.AVATAR};function xe(e){const s=function({modelType:e,endpointConfigs:s}={}){const t=function(e){if(!e)return null;const s=String(e).trim();return ue[s]||ue[s.toLowerCase()]||null}(e);let a=null,i=!1;for(const r of function(e={}){const s=[];return Object.values(e||{}).forEach(e=>{"string"==typeof e?s.push(e):e&&"object"==typeof e&&"string"==typeof e.path&&s.push(e.path)}),s}(s)){const e=me(r);if(e&&"query"!==e.mode&&!e.ambiguous&&e.category!==pe.ADMIN){if(e.category!==pe.CHAT){a=e.category;break}i=!0}}return a||(t&&t!==pe.CHAT?t:i?pe.CHAT:t||pe.CHAT)}(e);return s===pe.AVATAR?pe.CHAT:s}const ge=["openai","openai-response","anthropic","gemini","jina-rerank","embedding","moderation","tts","stt"],he={chat:"对话",Chat:"对话",CHAT:"对话",text:"对话",Text:"对话",image:"图像",Image:"图像",IMAGE:"图像",images:"图像",video:"视频",Video:"视频",VIDEO:"视频",audio:"音频",Audio:"音频",tts:"TTS",stt:"STT",asr:"STT",embedding:"嵌入",Embedding:"嵌入",embeddings:"嵌入",rerank:"检索",Rerank:"检索","jina-rerank":"检索",moderation:"审核",Moderation:"审核"};function ve(e){return e?he[e]||e:"对话"}function _e({model:e,vendor:s,onClick:a}){const i=(e.model_name_display||e.model_name||"").slice(0,2).toUpperCase(),r=!!e.cover_image,o=e.icon||s?.icon;return t.jsxs("div",{onClick:a,className:"group relative flex flex-col rounded-2xl border border-border bg-background transition-all duration-200 cursor-pointer hover:shadow-md hover:-translate-y-0.5 overflow-hidden hover:border-foreground
1/20",children:[r&&t.jsxs("div",{className:"relative h-28 overflow-hidden bg-muted/30 flex-shrink-0",children:[t.jsx("img",{src:e.cover_image,alt:e.model_name_display||e.model_name,className:"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"}),t.jsx("div",{className:"absolute inset-0 bg-gradient-to-t from-black/30 to-transparent"})]}),t.jsxs("div",{className:"flex flex-col flex-1 p-3",children:[t.jsxs("div",{className:"flex items-start gap-2.5 mb-2",children:[!r&&t.jsx("div",{className:"flex-shrink-0",children:o?t.jsx("div",{className:"w-8 h-8 rounded-lg overflow-hidden border border-border/40 bg-muted/20 flex items-center justify-center",children:b(o,24)}):t.jsx("div",{className:"w-8 h-8 rounded-lg bg-gradient-to-br from-primary/20 to-primary/5 border border-border/40 flex items-center justify-center text-[10px] font-bold text-primary/60",children:i})}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsx("p",{className:"text-xs font-semibold text-foreground truncate leading-tight",children:e.model_name_display||e.model_name}),s?.name&&t.jsx("p",{className:"text-[10px] text-muted-foreground truncate mt-0.5",children:s.name})]})]}),e.description&&t.jsx("p",{className:"text-[11px] text-muted-foreground line-clamp-2 mb-2 flex-1 leading-relaxed",children:e.description}),e.model_type&&t.jsx("div",{className:"mt-auto pt-1",children:t.jsx("span",{className:"text-[9px] px-1.5 py-0.5 rounded-md border border-border/50 text-muted-foreground bg-muted/40",children:ve(e.model_type)})})]})]})}function fe({onSelect:a}={}){const{t:i}=_(),l=e(),[d,c]=s.useState([]),[m,p]=s.useState({}),[u,x]=s.useState(!0),[g,h]=s.useState(""),[v,b]=s.useState("all");s.useEffect(()=>{(async()=>{x(!0);try{const e=await f.get("/api/pricing_new");if(e?.data?.success){const{data:s=[],vendors:t=[]}=e.data,a={};(t||[]).forEach(e=>{a[e.id]=e}),p(a),c(s||[])}}catch(e){}x(!1)})()},[]);const j=s.useMemo(()=>{const e={};d.forEach(s=>{const t=ve(s.model_type);e[t]=(e[t]||0)+1});const s=Object.entries(e).sort((e,s)=>s[1]-e[1]);return[["all",d.length],...s]},[d]),y=s.useMemo(()=>{const e=g.toLowerCase().trim();return d.filter(s=>{if(e){const t=(s.model_name_display||s.model_name||"").toLowerCase(),a=(s.description||"").toLowerCase(),i=(m[s.vendor_id]?.name||"").toLowerCase();if(!t.includes(e)&&!a.includes(e)&&!i.includes(e))return!1}return"all"===v||ve(s.model_type)===v})},[d,m,g,v]),k=s.useMemo(()=>{if("all"!==v&&!g)return null;const e=new Map;y.forEach(s=>{const t=ve(s.model_type);e.has(t)||e.set(t,[]),e.get(t).push(s)});const s=j.slice(1).map(([e])=>e),t=[];return s.forEach(s=>{e.has(s)&&t.push([s,e.get(s)])}),e.forEach((e,a)=>{s.includes(a)||t.push([a,e])}),t},[y,v,g,j]),S=s.useCallback(e=>{if(a)return void a(e);const s=e.supported_endpoint_types||[],t=xe({modelType:e.model_type}),i=s.filter(e=>ge.includes(e)),r=new URLSearchParams({model:e.model_name,type:t});i.length&&r.set("endpoints",i.join(",")),s.length&&r.set("etypes",s.join(",")),l(`/lab?${r.toString()}`)},[l,a]);return t.jsx("div",{className:a?"":"min-h-screen bg-background",children:t.jsxs("div",{className:a?"px-4 py-4":"max-w-[1400px] mx-auto px-4 sm:px-6 py-10",children:[!a&&t.jsxs("div",{className:"text-center mb-8",children:[t.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full border border-primary/20 bg-primary/5 text-primary text-xs font-medium mb-3",children:[t.jsx(N,{size:11}),i("模型体验中心")]}),t.jsx("h1",{className:"text-2xl font-bold text-foreground mb-2",children:i("选择体验模型")}),t.jsx("p",{className:"text-sm text-muted-foreground",children:i("从下方选择一个模型,开始体验各种 AI 能力")})]}),t.jsx("div",{className:"max-w-md mx-auto mb-6",children:t.jsx(r,{prefix:t.jsx(w,{size:14,className:"text-muted-foreground"}),placeholder:i("搜索模型名称、描述、供应商..."),value:g,onChange:h,showClear:!0,size:"large",className:"w-full"})}),t.jsx("div",{className:"flex flex-wrap items-center justify-center gap-2 mb-8",children:j.map(([e,s])=>{const a=v===e,r="all"===e?i("全部"):e;return t.jsxs("button",{onClick:()=>b(e),className:"flex items-center gap-1 px-3.5 py-1.5 rounded-full border text-xs font-medium transition-all",style:{background:a?"hsl(var(--primary))":"hsl(var(--background))",borderColor:a?"hsl(var(--primary))":"hsl(var(--border))",color:a?"#fff":"hsl(var(--foreground) / 0.70)"},children:[r,t.jsxs("span",{className:"opacity-60",children:["(",s,")"]})]},e)})}),u?t.jsx("div",{className:"flex items-center justify-center py-24",children:t.jsx(o,{size:"large"})}):0===y.length?t.jsx(n,{description:i("没有找到匹配的模型"),className:"py-24"}):k?t.jsx("div",{className:"space-y-10",children:k.map(([e,s])=>t.jsxs("div",{children:[t.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[t.jsx("h2",{className:"text-sm font-semibold text-foreground",children:e}),t.jsxs("span",{className:"text-xs text-muted-foreground",children:["(",s.length,")"]}),t.jsx("div",{className:"flex-1 h-px bg-border"}),s.length>6&&t.jsxs("button",{onClick:()=>b(e),className:"text-xs text-primary hover:underline flex-shrink-0",children:[i("查看全部")," →"]})]}),t.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-3",children:s.slice(0,6).map(e=>t.jsx(_e,{model:e,vendor:m[e.vendor_id],onClick:()=>S(e)},e.model_name))})]},e))}):t.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-3",children:y.map(e=>t.jsx(_e,{model:e,vendor:m[e.vendor_id],onClick:()=>S(e)},e.model_name))}),!u&&y.length>0&&t.jsx("p",{className:"text-center text-xs text-muted-foreground mt-8",children:i("共 {{
1count}} 个模型",{count:y.length})})]})})}const be={"openai-response":{hasSystem:!0,hasTemperature:!0,hasMaxTokens:!0,maxTokensLabel:"Max Output Tokens",maxTokensField:"max_output_tokens",hasTopP:!0,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!0,note:"OpenAI Responses API:max_output_tokens 替代 max_tokens,不支持 frequency/presence_penalty。"},anthropic:{hasSystem:!0,hasTemperature:!0,hasMaxTokens:!0,maxTokensLabel:"Max Tokens",maxTokensField:"max_tokens",hasTopP:!0,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!0,note:"Anthropic 格式:max_tokens 为必填字段,不支持 frequency/presence_penalty。"},gemini:{hasSystem:!0,hasTemperature:!0,hasMaxTokens:!0,maxTokensLabel:"Max Output Tokens",maxTokensField:"max_tokens",hasTopP:!0,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!0,note:"Gemini 原生接口:参数会映射到 generationConfig,不支持 frequency/presence_penalty。"},"openai-chat":{hasSystem:!0,hasTemperature:!0,hasMaxTokens:!0,maxTokensLabel:"Max Tokens",maxTokensField:"max_tokens",hasTopP:!0,hasFreqPenalty:!0,hasPresencePenalty:!0,hasStream:!0,note:null},"jina-rerank":{hasSystem:!1,hasTemperature:!1,hasMaxTokens:!0,maxTokensLabel:"Top N",maxTokensField:"top_n",hasTopP:!1,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!1,note:"Rerank API:在 Query 中输入查询语句,在下方 Documents 中每行输入一个候选文档,返回按相关性降序排列的结果。"},embedding:{hasSystem:!1,hasTemperature:!1,hasMaxTokens:!1,hasTopP:!1,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!1,note:"Embeddings API:输入文本,返回高维向量表示,可用于语义搜索、聚类、分类等场景。"},moderation:{hasSystem:!1,hasTemperature:!1,hasMaxTokens:!1,hasTopP:!1,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!1,note:"Moderations API:检测文本内容是否违反内容政策,返回各违规类别的置信度分数。"},tts:{hasSystem:!1,hasTemperature:!1,hasMaxTokens:!1,hasTopP:!1,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!1,note:"TTS API:将文本转换为语音,支持选择音色、格式和语速,输出可直接播放的音频。"},stt:{hasSystem:!1,hasTemperature:!1,hasMaxTokens:!1,hasTopP:!1,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!1,note:"STT API:上传音频文件(mp3/wav/m4a 等),返回转录文本,支持时间戳和多语言。"},"minimax-tts":{hasSystem:!1,hasTemperature:!1,hasMaxTokens:!1,hasTopP:!1,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!1,note:"MiniMax TTS(/minimax/v1/t2a_v2):同步语音合成,支持 voice_id 音色、情感、格式与语速;结果为 hex 音频数据,前端解码播放。"},"suno-music":{hasSystem:!1,hasTemperature:!1,hasMaxTokens:!1,hasTopP:!1,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!1,note:"Suno 音乐(/suno/submit/music):异步生成,提交后轮询 /suno/fetch/{task_id},每次默认返回 2 首候选;支持灵感模式与自定义歌词模式。"},"replicate-task":{hasSystem:!1,hasTemperature:!1,hasMaxTokens:!1,hasTopP:!1,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!1,note:"Replicate 音频(如 riffusion 音乐):统一 { input: { prompt } } 提交,轮询 /replicate/v1/predictions/{id},结果取 output(音频 URL)。"},"kling-audio":{hasSystem:!1,hasTemperature:!1,hasMaxTokens:!1,hasTopP:!1,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!1,note:"Kling 音频(/kling/v1/audio/text-to-audio):文生音效,prompt + duration(默认5s),异步轮询 task_result.audios[0].url_mp3。"},"vidu-audio":{hasSystem:!1,hasTemperature:!1,hasMaxTokens:!1,hasTopP:!1,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!1,note:"Vidu 音频(/ent/v2/audio-tts、/ent/v2/text2audio):prompt 提交,异步轮询 /ent/v2/tasks/{id}/creations,取 creations[0].url。"},"gemini-tts":{hasSystem:!1,hasTemperature:!1,hasMaxTokens:!1,hasTopP:!1,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!1,note:'Gemini TTS(/v1beta/models/{model}-tts:generateContent):responseModalities=["AUDIO"],speechConfig.voiceConfig.prebuiltVoiceConfig.voiceName,返回 candidates[0].content.parts[0].inlineData.data(base64 L16 PCM at 24kHz),前端封装 WAV 播放。'},"minimax-tts-async":{hasSystem:!1,hasTemperature:!1,hasMaxTokens:!1,hasTopP:!1,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!1,note:"MiniMax 异步 TTS(/minimax/v1/t2a_async_v2):POST 提交 → task_id;GET /query/t2a_async_query_v2?task_id 轮询 → status/file_id;GET /files/retrieve?file_id 取 file.download_url。"},"kling-tts":{hasSystem:!1,hasTemperature:!1,hasMaxTokens:!1,hasTopP:!1,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!1,note:"Kling TTS(/kling/v1/audio/tts):{text, voice_id, voice_language, voice_speed?},异步轮询 task_result.audios[0].url_mp3。"},"kling-video-audio":{hasSystem:!1,hasTemperature:!1,hasMaxTokens:!1,hasTopP:!1,hasFreqPenalty:!1,hasPresencePenalty:!1,hasStream:!1,note:"Kling 视频配音(/kling/v1/audio/video-to-audio):{video_id|video_url, sound_effect_prompt?, bgm_prompt?, asmr_mode?},异步轮询 task_result.audios[0].url_mp3。"}},je={"gpt-image-2":{sizes:["auto","1024x1024","1536x1024","1024x1536","2048x2048","2048x1152","3840x2160","2160x3840"],qualities:["auto","high","medium","low"],maxN:10,maxPromptLength:1e3,supportsBackgroun
1d:!0,supportsStyle:!1,supportsOutputFormat:!1,supportsImageFormat:!0,supportsModeration:!0,supportsEdits:!0,maxEditImages:16,backgroundOptions:["auto","transparent","opaque"],imageFormats:["jpeg","png","webp"],moderationOptions:["auto","low"],note:"支持 /v1/images/generations 生成接口与 /v1/images/edits multipart 编辑接口;format 可选 jpeg/png/webp。"},"gemini-3.1-flash-image-preview":{sizes:[],qualities:["auto"],maxN:1,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!1,geminiNative:!0,supportsImageInput:!0,imageInputFormat:"base64",geminiAspectRatios:["1:1","16:9","9:16","4:3","3:4","2:3","3:2","4:5","5:4","1:4","4:1","1:8","8:1","21:9"],geminiImageSizes:["1K","2K","4K","512"],note:"Gemini 3.1 Flash 原生接口:通过 generationConfig.imageConfig 设置 aspectRatio / imageSize,支持 base64 图片输入。"},"gemini-3.1-flash-image":{sizes:[],qualities:["auto"],maxN:1,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!1,geminiNative:!0,supportsImageInput:!0,imageInputFormat:"base64",geminiAspectRatios:["1:1","16:9","9:16","4:3","3:4","2:3","3:2","4:5","5:4","1:4","4:1","1:8","8:1","21:9"],geminiImageSizes:["1K","2K","4K","512"],note:"Gemini 3.1 Flash Image 原生接口:通过 generationConfig.imageConfig 设置 aspectRatio / imageSize,支持 base64 图片输入。"},"gemini-3-pro-image-preview":{sizes:[],qualities:["auto"],maxN:1,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!1,geminiNative:!0,supportsImageInput:!0,imageInputFormat:"base64",geminiAspectRatios:["1:1","16:9","9:16","4:3","3:4","2:3","3:2","4:5","5:4"],geminiImageSizes:["1K","2K","4K","512"],note:"Gemini 3 Pro 原生接口:通过 generationConfig.imageConfig 设置 aspectRatio / imageSize,支持 base64 图片输入。"},"gemini-3-pro-image":{sizes:[],qualities:["auto"],maxN:1,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!1,geminiNative:!0,supportsImageInput:!0,imageInputFormat:"base64",geminiAspectRatios:["1:1","16:9","9:16","4:3","3:4","2:3","3:2","4:5","5:4"],geminiImageSizes:["1K","2K","4K","512"],note:"Gemini 3 Pro Image 原生接口:通过 generationConfig.imageConfig 设置 aspectRatio / imageSize,支持 base64 图片输入。"},"gemini-2.5-flash-image":{sizes:[],qualities:["auto"],maxN:1,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!1,geminiNative:!0,supportsImageInput:!0,imageInputFormat:"base64",geminiAspectRatios:["1:1","16:9","9:16","4:3","3:4","2:3","3:2","4:5","5:4"],geminiImageSizes:["1K","2K","4K","512"],note:"Gemini 2.5 Flash Image 原生接口:通过 generationConfig.imageConfig 设置 aspectRatio / imageSize,支持 base64 图片输入。"},"doubao-seedream-3-0-t2i-250415":{sizes:["2K","4K","2048x2048","2848x1600","1600x2848","2304x1728","1728x2304","2496x1664","1664x2496"],qualities:["auto"],maxN:4,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!1,supportsWatermark:!0,supportsImageInput:!0,imageInputFormat:"url",doubaoStyle:!0,doubaoImageField:"image",supportsSeed:!0,supportsGuidanceScale:!0,note:"豆包 Seedream 3.0 文生图:可选图生图(单图 image),支持 seed [-1,2^31-1] 和 guidance_scale [1,10]。"},"doubao-seededit-3-0-i2i-250628":{sizes:["adaptive","2048x2048","2848x1600","1600x2848","2304x1728","1728x2304"],qualities:["auto"],maxN:1,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!1,supportsWatermark:!0,supportsImageInput:!0,imageInputRequired:!0,imageInputFormat:"url",doubaoStyle:!0,doubaoImageField:"image",supportsSeed:!0,supportsGuidanceScale:!0,note:"豆包 Seededit 3.0 图片编辑:image 为必填(URL 或 Base64),size 支持 adaptive,seed/guidance_scale 控制编辑强度。"},"doubao-seedream-4-0-250828":{sizes:["1K","2K","4K","2048x2048","2848x1600","1600x2848","2304x1728","1728x2304"],qualities:["auto"],maxN:4,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!1,supportsWatermark:!0,supportsImageInput:!0,imageInputFormat:"url",doubaoStyle:!0,doubaoImageField:"image",supportsMultiImage:!0,supportsSequentialGen:!0,note:"豆包 Seedream 4.0:文生图/图生图/多图融合(image 字符串或数组),sequential_image_generation 批量生成。"},"doubao-seedream-4-5-251128":{sizes:["2K","4K","2048x2048","2848x1600","1600x2848","2304x1728","1728x2304"],qualities:["auto"],maxN:4,supportsBackgroun
1d:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!1,supportsWatermark:!0,supportsImageInput:!0,imageInputFormat:"url",doubaoStyle:!0,doubaoImageField:"image",supportsMultiImage:!0,supportsSequentialGen:!0,note:"豆包 Seedream 4.5:增强版,参数同 4.0,image 字符串或数组,支持 sequential_image_generation。"},"doubao-seedream-5-0-260128":{sizes:["2K","4K","2048x2048","2848x1600","1600x2848","2304x1728","1728x2304","2496x1664","1664x2496","3136x1344"],qualities:["auto"],maxN:4,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!0,outputFormats:["jpeg","png"],supportsEdits:!1,supportsWatermark:!0,supportsImageInput:!0,imageInputFormat:"url",doubaoStyle:!0,doubaoImageField:"images",supportsMultiImage:!0,supportsSequentialGen:!0,note:"豆包 Seedream 5.0:size 支持 2K/4K 或像素尺寸,output_format 可选 jpeg/png,最多 14 张参考图(images 数组)。"},"doubao-seedream-5-0-pro-260628":{sizes:["2K","1K","1024x1024","1152x864","864x1152","1424x800","800x1424","1248x832","832x1248","1568x672","2048x2048","2368x1776","1776x2368","2816x1584","1584x2816","2496x1664","1664x2496","3136x1344"],qualities:["auto"],maxN:1,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!0,outputFormats:["jpeg","png"],supportsEdits:!1,supportsWatermark:!0,supportsImageInput:!0,imageInputFormat:"url",doubaoStyle:!0,doubaoImageField:"image",supportsMultiImage:!0,supportsSequentialGen:!1,note:"豆包 Seedream 5.0 Pro:size 支持 1K/2K 或像素尺寸,支持交互编辑与最多 10 张参考图;按输出像素档+参考图计费。"},"grok-imagine-image":{sizes:[],qualities:["auto"],maxN:10,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!0,outputFormats:["url","b64_json"],supportsEdits:!1,grokStyle:!0,aspectRatios:["1:1","16:9","9:16","4:3","3:4","3:2","2:3","2:1","1:2","9:19.5","19.5:9","9:20","20:9","auto"],resolutions:["1k","2k"],note:"xAI Grok Aurora:用 aspect_ratio 控制比例、resolution 控制分辨率(1k/2k),最多一次生成 10 张。"},"wan2.7-image-pro":{sizes:["2K","1K","4K"],qualities:["auto"],maxN:4,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!1,wanStyle:!0,aspectRatios:["1:1","16:9","9:16","4:3","3:4","3:2","2:3","4:5","5:4","1:4","4:1","1:8","8:1","21:9"],supportsWatermark:!0,note:"Wan 2.7 Image Pro:size 为 1K/2K/4K,额外支持 aspect_ratio 宽高比(4K 仅文生图)。"},"qwen-image-3.0":{sizes:["1024x1024","1328x1328","1664x928","928x1664","1472x1140","1140x1472","1584x1056","1056x1584"],qualities:["auto"],maxN:6,maxEditImages:3,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!0,supportsWatermark:!0,supportsImageInput:!0,supportsPromptExtend:!0,supportsPromptExtendMode:!0,supportsNegativePrompt:!0,imageInputFormat:"url",note:"千问图像 3.0 标准版:T2I/I2I(参考图 1-3 张),size 512²–2048² / 宽高比 1:8–8:1,n=1-6。计费:输出×18 + 参考图×2/张(相对基价 0.01)。"},"qwen-image-3.0-pro":{sizes:["1024x1024","1328x1328","1664x928","928x1664","1472x1140","1140x1472","1584x1056","1056x1584"],qualities:["auto"],maxN:6,maxEditImages:3,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!0,supportsWatermark:!0,supportsImageInput:!0,supportsPromptExtend:!0,supportsPromptExtendMode:!0,supportsNegativePrompt:!0,imageInputFormat:"url",note:"千问图像 3.0 Pro:T2I/I2I(参考图 1-3 张),size 512²–2048²。计费:输出 1K×25 / 2K×50 + 参考图×2/张(相对基价 0.01;面积≤225万为 1k)。"},"flux-kontext-pro":{sizes:[],qualities:["auto"],maxN:1,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!1,fluxStyle:!0,aspectRatios:["1:1","16:9","9:16","3:2","2:3","4:5","5:4","21:9","9:21"],supportsImageInput:!0,imageInputFormat:"url",note:"Flux Kontext Pro:文生图传 aspect_ratio;图片编辑传 image(URL)。走 /v1/images/generations。"},"flux-kontext-max":{sizes:[],qualities:["auto"],maxN:1,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!1,fluxStyle:!0,aspectRatios:["1:1","16:9","9:16","3:2","2:3","4:5","5:4","21:9","9:21"],supportsImageInput:!0,imageInputFormat:"url",n
1ote:"Flux Kontext Max:多主体图片编辑,image 传 URL;支持文生图(aspect_ratio)。走 /v1/images/generations。"},"flux-dev":{sizes:[],qualities:["auto"],maxN:1,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!1,fluxStyle:!0,aspectRatios:["1:1","16:9","9:16","3:2","2:3","4:5","5:4","21:9","9:21"],supportsImageInput:!1,note:"Flux Dev:开源文生图基座,aspect_ratio 控制比例。走 /v1/images/generations。"},"fal-ai/flux-pro/kontext/text-to-image":{sizes:[],qualities:["auto"],maxN:1,falaiStyle:!0,aspectRatios:["1:1","16:9","9:16","3:2","2:3","4:5","5:4","21:9","9:21"],supportsImageInput:!1,note:"Flux Pro Kontext 文生图(fal.ai 异步)。"},"fal-ai/flux-pro/kontext":{sizes:[],qualities:["auto"],maxN:1,falaiStyle:!0,aspectRatios:["1:1","16:9","9:16","3:2","2:3","4:5","5:4","21:9","9:21"],supportsImageInput:!0,imageInputFormat:"url",note:"Flux Pro Kontext 图片编辑(fal.ai 异步),需提供 image_url。"},"fal-ai/flux-pro/kontext/max":{sizes:[],qualities:["auto"],maxN:1,falaiStyle:!0,aspectRatios:["1:1","16:9","9:16","3:2","2:3","4:5","5:4","21:9","9:21"],supportsImageInput:!0,imageInputFormat:"url",note:"Flux Pro Kontext Max 高质量图片编辑(fal.ai 异步),需提供 image_url。"},"fal-ai/flux-1/dev":{sizes:[],qualities:["auto"],maxN:1,falaiStyle:!0,aspectRatios:["1:1","16:9","9:16","3:2","2:3","4:5","5:4","21:9","9:21"],supportsImageInput:!1,note:"Flux 1 Dev(fal.ai 异步),开源文生图,aspect_ratio 控制比例。"},"fal-ai/nano-banana":{sizes:[],qualities:["auto"],maxN:1,falaiStyle:!0,aspectRatios:["1:1","16:9","9:16","4:3","3:4"],supportsImageInput:!1,note:"Nano Banana(fal.ai 异步),极速文生图。"},"fal-ai/bytedance/seedream/v4/text-to-image":{sizes:[],qualities:["auto"],maxN:1,falaiStyle:!0,aspectRatios:["1:1","16:9","9:16","4:3","3:4","2:3","3:2"],supportsImageInput:!1,note:"ByteDance Seedream v4 文生图(fal.ai 异步)。"},_default:{sizes:["1024x1024","1024x1792","1792x1024","512x512"],qualities:["auto"],maxN:4,supportsBackground:!1,supportsStyle:!1,supportsOutputFormat:!1,supportsEdits:!1,note:null}},ye=(e,s)=>Array.from({length:s-e+1},(s,t)=>e+t),ke={"sora-2":{modes:["text2video","image2video"],sizes:["1280x720","720x1280","1920x1080","1080x1920","1024x1024"],durations:[5,10,15],aspectRatios:null,maxDuration:15,endpoint:"/v1/videos",pollMode:"openai-video",note:"OpenAI Sora 2:POST /v1/videos 提交,seconds 为字符串,图生视频用 input_reference(兼容 image_url)传公网 URL。"},"kling-v3":{modes:["text2video","image2video"],sizes:[],durations:[5,10],aspectRatios:["16:9","9:16","1:1"],maxDuration:10,endpoint:"/v1/videos",pollMode:"openai-video",note:"Kling 3.0:POST /v1/videos 提交,seconds 字符串,aspect_ratio 控制比例,image_url 传公网 URL。"},"wan-2.6":{modes:["text2video","image2video"],sizes:["1280x720","720x1280","1024x1024"],durations:[5,10,15],aspectRatios:["16:9","9:16","1:1"],maxDuration:15,endpoint:"/v1/videos",pollMode:"openai-video",note:"Alibaba Wan 2.6:POST /v1/videos 提交,支持 5/10/15s,image_url 传公网 URL 图生视频,支持 16:9/9:16/1:1。"},"doubao-seedance-1-5-pro-251215":{modes:["text2video","image2video"],sizes:["1280x720","720x1280","960x960"],durations:[5,10],aspectRatios:null,maxDuration:10,endpoint:"/volc/v1/contents/generations/tasks",pollMode:"doubao",note:"字节豆包 Seedance:支持文生视频和图生视频,最长 10 秒。"},"fal-ai/veo3":{modes:["text2video"],sizes:["720p","1080p"],durations:[8],aspectRatios:["16:9","9:16","1:1"],maxDuration:8,endpoint:"/fal-ai/veo3",pollMode:"falai",note:"fal-ai Veo3:文生视频,resolution 720p/1080p,duration 8s,默认含音频。"},"fal-ai/veo3/fast":{modes:["text2video"],sizes:["720p","1080p"],durations:[8],aspectRatios:["16:9","9:16","1:1"],maxDuration:8,endpoint:"/fal-ai/veo3/fast",pollMode:"falai",note:"fal-ai Veo3 Fast:快速文生视频,resolution 720p/1080p,duration 8s。"},"fal-ai/veo3/image-to-video":{modes:["image2video"],sizes:["720p","1080p"],durations:[8],aspectRatios:["16:9","9:16","1:1"],maxDuration:8,supportsImageInput:!0,endpoint:"/fal-ai/veo3/image-to-vi
1deo",pollMode:"falai",note:"fal-ai Veo3 图生视频:需参考图 image_url,resolution 720p/1080p,duration 8s。"},"fal-ai/veo3/fast/image-to-video":{modes:["image2video"],sizes:["720p","1080p"],durations:[8],aspectRatios:["16:9","9:16","1:1"],maxDuration:8,supportsImageInput:!0,endpoint:"/fal-ai/veo3/fast/image-to-video",pollMode:"falai",note:"fal-ai Veo3 Fast 图生视频:需参考图 image_url,resolution 720p/1080p,duration 8s。"},"fal-ai/kling-video/v2.5-turbo/pro/text-to-video":{modes:["text2video"],sizes:[],durations:[5,10],aspectRatios:["16:9","9:16","1:1"],maxDuration:10,endpoint:"/fal-ai/kling-video/v2.5-turbo/pro/text-to-video",pollMode:"falai",note:"fal-ai Kling v2.5 Turbo Pro:文生视频,duration 5/10s,aspect 16:9/9:16/1:1。"},"fal-ai/kling-video/v2.5-turbo/pro/image-to-video":{modes:["image2video"],sizes:[],durations:[5,10],aspectRatios:["16:9","9:16","1:1"],maxDuration:10,supportsImageInput:!0,endpoint:"/fal-ai/kling-video/v2.5-turbo/pro/image-to-video",pollMode:"falai",note:"fal-ai Kling v2.5 Turbo Pro 图生视频:需参考图 image_url,duration 5/10s。"},"veo3.1-4k":{modes:["text2video"],sizes:["3840x2160","1920x1080","1280x720"],durations:[5,8],aspectRatios:["16:9","9:16","1:1"],maxDuration:8,endpoint:"/v1/video/create",pollMode:"veo",note:"Google Veo 3.1:仅支持文生视频,4K 高清输出。POST /v1/video/create,GET /v1/video/query?id={id} 轮询。"},veo2:{modes:["text2video"],sizes:["1280x720","720x1280","640x480"],durations:[5,8],aspectRatios:["16:9","9:16","1:1"],maxDuration:8,endpoint:"/v1/video/create",pollMode:"veo",note:"Google Veo 2:仅支持文生视频。POST /v1/video/create,GET /v1/video/query?id={id} 轮询。"},"veo2-fast":{modes:["text2video"],sizes:["1280x720","720x1280","640x480"],durations:[5,8],aspectRatios:["16:9","9:16","1:1"],maxDuration:8,endpoint:"/v1/video/create",pollMode:"veo",note:"Google Veo 2 Fast:快速文生视频。POST /v1/video/create,GET /v1/video/query?id={id} 轮询。"},"veo2-pro":{modes:["text2video"],sizes:["1280x720","720x1280","1920x1080"],durations:[5,8],aspectRatios:["16:9","9:16","1:1"],maxDuration:8,endpoint:"/v1/video/create",pollMode:"veo",note:"Google Veo 2 Pro:高质量文生视频。POST /v1/video/create,GET /v1/video/query?id={id} 轮询。"},"doubao-seedance-1-0-pro-250528":{modes:["text2video","image2video"],sizes:["1280x720","720x1280","960x960"],durations:[5,10],aspectRatios:null,maxDuration:10,endpoint:"/volc/v1/contents/generations/tasks",pollMode:"doubao",note:"豆包 Seedance 1.0 专业版,最长 10s。"},"doubao-seedance-1-0-lite-t2v-250428":{modes:["text2video"],sizes:["1280x720","720x1280","960x960"],durations:[5,10],aspectRatios:null,maxDuration:10,endpoint:"/volc/v1/contents/generations/tasks",pollMode:"doubao",note:"豆包 Seedance 1.0 Lite 文生视频版。"},"doubao-seedance-1-0-lite-i2v-250428":{modes:["image2video"],sizes:["1280x720","720x1280","960x960"],durations:[5,10],aspectRatios:null,maxDuration:10,endpoint:"/volc/v1/contents/generations/tasks",pollMode:"doubao",note:"豆包 Seedance 1.0 Lite 图生视频版(仅支持图生视频)。"},"doubao-seedance-1-0-pro-fast-251015":{modes:["text2video","image2video"],sizes:["1280x720","720x1280","960x960"],durations:[5,10],aspectRatios:null,maxDuration:10,endpoint:"/volc/v1/contents/generations/tasks",pollMode:"doubao",note:"豆包 Seedance 1.0 Pro 快速版,最长 10s。"},"MiniMax-Hailuo-2.3-fast":{modes:["text2video","image2video"],sizes:["768P","1080P"],durations:[6,10],durationBySize:{"768P":[6,10],"1080P":[6]},aspectRatios:null,maxDuration:10,endpoint:"/minimax/v1/video_generation",pollMode:"minimax",supportsPromptOptimizer:!0,supportsAigcWatermark:!0,note:"MiniMax 海螺 2.3 Fast:快速版文生/图生视频。"},"aigc-video-kling-3.0":{modes:["text2video","image2video"],sizes:["720P","1080P"],durations:[3,5,8,10,15],aspectRatios:["16:9","9:16","1:1"],maxDuration:15,endpoint:"/tencent-vod/v1/aigc-video",pollMode:"tencentvod",tencentModelName:"Kling",tencentModelVersion:"3.0",note:"可灵 3.0(腾讯VOD),3-15s,720P/1080P,文生/图生视频。"},"aigc-video-kling-2.6":{modes:["text2video","image2video"],sizes:["720P","1080P"],durations:[5,10],aspectRatios:["16:9","9:16","1:1"],maxDuration:10,endpoint:"/tencent-vod/v1/aigc-video",pollMode:"tencentvod",tencentModelName:"Kling",tencentModelVersion:"2.6",note:"可灵 2.6(腾讯VOD),5/10s,720P/1080P,文生/图生视频。"},"aigc-video-veo-3.1":{modes:["text2video"],sizes:["720P","1080P"],durations:[8],aspectRatios:["16:9","9:16"],maxDuration:8,endpoint:"/tencent-vod/v1/aigc-video",pollMode:"tencentvod",tencentModelName:"GV",tencentModelVersion:"3.1",note:"Google Veo 3.1(腾讯VOD),仅支持文生视频,8s,720P/1080P。"},"aigc-video-veo-3.1-fast":{modes:["text2video"],sizes:["720P","1080P"],durations:[8],aspectRatios:["16:9","9:16"],maxDuration:8,endpoint:"/tencent-vod/v1/aigc-video",pollMode:"tencentvod",tencentModelName:"GV",tencentModelVersion:"3.1-Fast",note:"Google Veo 3.1 Fast(腾讯VOD),仅支持文生视频,8s,快速版。"},"aigc-video-sora-2.0":{modes:["text2video"],sizes:["720P"],durations:[4,8,12],aspectRatios:["16:9","9:16"],maxDuration:12,endpoint:"/tencent-vod/v1/aigc-video",pollMode:"tencentvod",tencentModelName:"OS",tencentModelVersion:"2.0",note:"OpenAI Sora 2.0(腾讯VOD),仅支持文生视频,4/8/12s。"},"aigc-video-hailuo-02":{modes:["text2video","image2video"],sizes:["768P","1080P"],durations:[6,10],aspectRatios:null,maxDuration:10,endpoint:"/tencent-vod/v1/aigc-video",pollMode:"tencentvod",tencentModelName:"Hailuo",tencentModelVersion:"02",note:"海螺 02(腾讯VOD),6/10s,768P/1080P。"},"aigc-video-hunyuan-1.5":{modes:["text2video"],sizes:["720P","1080P"],durations:[5],aspectRatios:["16:9","9:16","1:1"],maxDuration:5,endpoint:"/tencent-vod/v1/aigc-video",pollMode:"tencentvod",tencentModelName:"Hunyuan",tencentModelVersion:"1.5",note:"混元视频 1.5(腾讯VOD),仅支持文生视频,5s。"},"aigc-video-jimeng-3.0pro":{modes:["text2video","image2video"],sizes:["1080P"],durations:[5,10],aspectRatios:["16:9","4:3","1:1","3:4","9:16","21:9"],maxDuration:10,endpoint:"/tencent-vod/v1/aigc-video",pollMode:"tencentvod",tencentModelName:"Jimeng",tencentModelVersion:"3.0pro",note:"即梦 3.0 Pro(腾讯VOD),5/10s,1080P。"}
1,"aigc-video-mingmou-1.0":{modes:["text2video"],sizes:["720P","1080P"],durations:[5],aspectRatios:["16:9","9:16","1:1"],maxDuration:5,endpoint:"/tencent-vod/v1/aigc-video",pollMode:"tencentvod",tencentModelName:"Mingmou",tencentModelVersion:"1.0",note:"明眸 1.0(腾讯VOD),仅支持文生视频,5s。"},"MiniMax-Hailuo-2.3":{modes:["text2video","image2video"],sizes:["768P","1080P"],durations:[6,10],durationBySize:{"768P":[6,10],"1080P":[6]},aspectRatios:null,maxDuration:10,endpoint:"/minimax/v1/video_generation",pollMode:"minimax",supportsPromptOptimizer:!0,supportsFastPretreatment:!0,supportsAigcWatermark:!0,supportsCallbackUrl:!0,note:"MiniMax 海螺视频:支持文生/图生,resolution 传 768P/1080P;768P 支持 6/10 秒,1080P 仅支持 6 秒。"},"wan2.6-i2v":{modes:["image2video"],sizes:["1080P","720P","480P"],durations:[5,10],aspectRatios:null,maxDuration:10,supportsParameterWatermark:!0,bailianMode:"i2v",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",note:"wan2.6-i2v:图生视频,必传起始帧图片(input.img_url),分辨率 480P/720P/1080P,时长 5/10 秒,仅支持有声视频。"},"wan2.6-i2v-flash":{modes:["image2video"],sizes:["1080P","720P","480P"],durations:[5,10],aspectRatios:null,maxDuration:10,supportsParameterWatermark:!0,bailianMode:"i2v",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",note:"wan2.6-i2v-flash:图生视频极速版,必传起始帧图片(input.img_url),分辨率 480P/720P/1080P,时长 5/10 秒。"},"wan2.5-i2v-preview":{modes:["image2video"],sizes:["1080P","720P","480P"],durations:[5,10],aspectRatios:null,maxDuration:10,supportsParameterWatermark:!0,bailianMode:"i2v",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",note:"wan2.5-i2v-preview:图生视频预览版,必传起始帧图片(input.img_url),分辨率 480P/720P/1080P,时长 5/10 秒。"},"happyhorse-1.0-t2v":{modes:["text2video"],sizes:["1080P","720P"],durations:ye(3,15),aspectRatios:["16:9","9:16","1:1","4:3","3:4","4:5","5:4","9:21","21:9"],maxDuration:15,supportsParameterWatermark:!0,bailianMode:"t2v",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",note:"HappyHorse T2V:文生视频,支持 3-15 秒,720P/1080P,可选宽高比。"},"happyhorse-1.1-t2v":{modes:["text2video"],sizes:["1080P","720P"],durations:ye(3,15),aspectRatios:["16:9","9:16","1:1","4:3","3:4","4:5","5:4","9:21","21:9"],maxDuration:15,supportsParameterWatermark:!0,bailianMode:"t2v",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",note:"HappyHorse 1.1 T2V:文生视频,支持 3-15 秒,720P/1080P,可选宽高比。"},"happyhorse-1.0-i2v":{modes:["image2video"],sizes:["1080P","720P"],durations:ye(3,15),aspectRatios:null,maxDuration:15,supportsParameterWatermark:!0,bailianMode:"i2v",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",note:"HappyHorse I2V:图生视频,上传起始帧图片,支持 3-15 秒,720P/1080P。"},"happyhorse-1.1-i2v":{modes:["image2video"],sizes:["1080P","720P"],durations:ye(3,15),aspectRatios:null,maxDuration:15,supportsParameterWatermark:!0,bailianMode:"i2v",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",note:"HappyHorse 1.1 I2V:图生视频,上传起始帧图片,支持 3-15 秒,720P/1080P。"},"happyhorse-1.0-r2v":{modes:["image2video"],sizes:["1080P","720P"],durations:ye(3,15),aspectRatios:["16:9","9:16","1:1","4:3","3:4","4:5","5:4","9:21","21:9"],maxDuration:15,maxRefImages:3,supportsParameterWatermark:!0,bailianMode:"r2v",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",note:"HappyHorse R2V:参考图生视频,支持 1-3 张参考图、3-15 秒、720P/1080P 和可选宽高比。"},"happyhorse-1.1-r2v":{modes:["image2video"],sizes:["1080P","720P"],durations:ye(3,15),aspectRatios:["16:9","9:16","1:1","4:3","3:4","4:5","5:4","9:21","21:9"],maxDuration:15,maxRefImages:9,supportsParameterWatermark:!0,bailianMode:"r2v",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",note:"HappyHorse 1.1 R2V:参考图生视频,支持 1-9 张参考图、3-15 秒、720P/1080P 和可选宽高比。"},"happyhorse-1.0-video-edit":{modes:["video_edit"],sizes:["1080P","720P"],durations:[],aspectRatios:null,maxDuration:null,audioSettings:["auto","origin"],bailianMode:"video-edit",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",note:"HappyHorse VideoEdit:视频编辑,输入原始视频 URL,可选参考图;时长由输入视频决定。"},veo3:{modes:["text2video","image2video"],sizes:["1280x720","720x1280","1920x1080","1080x1920","1024x1024"],durations:[5,8],aspectRatios:["16:9","9:16","1:1","4:3","3:4"],maxDuration:8,endpoint:"/v1/video/create",pollMode:"veo",note:"Google Veo 3:支持文生/图生(images 数组),POST /v1/video/create,GET /v1/video/query?id={id} 轮询。"},"veo3-fast":{modes:["text2video","image2video"],sizes:["1280x720","720x1280","1920x1080","1080x1920","1024x1024"],durations:[5,8],aspectRatios:["16:9","9:16","1:1","4:3","3:4"],maxDuration:8,endpoint:"/v1/video/create",pollMode:"veo",note:"Google Veo 3 Fast:快速生成变体,参数同 veo3。"},"veo3-pro":{modes:["text2video","image2video"],sizes:["1280x720","720x1280","1920x1080","1080x1920","1024x1024"],durations:[5,8],aspectRatios:["16:9","9:16","1:1","4:3","3:4"],maxDuration:8,endpoint:"/v1/video/create",pollMode:"veo",note:"Google Veo 3 Pro:专业生成变体,参数同 veo3。"},"MiniMax-Hailuo-02":{modes:["text2video","image2video"],sizes:["768P","1080P"],durations:[6,10],durationBySize:{"768P":[6,10],"1080P":[6]},aspectRatios:null,maxDuration:10,endpoint:"/minimax/v1/video_generation",pollMode:"minimax",supportsPromptOptimizer:!0,supportsAigcWatermark:!0,supportsCallbackUrl:!0,note:"MiniMax 海螺视频 02:支持文生/图生,resolution 传 768P/1080P;768P 支持 6/10 秒,1080P 仅 6 秒。"},"doubao-seedance-2-0-260128":{modes:["text2video","image2video"],sizes:["1280x720","720x1280","960x960"],durations:[5,10],aspectRatios:null,maxDuration:10,endpoint:"/api/v3/contents/generations/tasks",pollMode:"seedance2",note:"字节豆包 Seedance 2.0:POST /api/v3/contents/generations/tasks 提交,GET 轮询,status: succeeded/failed。"},"doubao-seedance-2-0-fast-260128":{modes:["text2video","image2video"],sizes:["1280x720","720x1280","960x960"],durations:[5,10],aspectRatios:null,maxDuration:10,endpoint:"/api/v3/contents/generations/tasks",pollMode:"seedance2",note:"字节豆包 Seedance 2.0 Fast:快速生成变体,参数同 Seedance 2.0。"},"ray-2":{modes:["text2video","image2video"],sizes:["720p","1080p"],durations:["5s"],aspectRatios:["16:9","9:16","4:3","3:4","1:1"],maxDuration:null,endpoint:"/luma/generations",pollMode:"luma",lumaModelName:"ray-v2",note:"Luma Ray 2:POST /luma/generations(网关格式 user_prompt/model_name/resolution/duration),model_name=ray-v2。"},"ray-flash-2":{modes:["text2video","image2video"],sizes:["720p","1080p"],durations:["5s"],aspectRatios:["16:9","9:16","4:3","3:4","1:1"],maxDuration:null,endpoint:"/luma/generations",pollMode:"luma",lumaModelName:"ray-flash-2",note:"Luma Ray Flash 2:快速生成变体,网关格式同 Ray 2;model_name=ray-flash-2(文档仅列 ray-v1/ray-v2,待实测确认)。"},gen4_turbo:{modes:["image2video"],sizes:[],durations:[5,10],aspectRatios:["1280:720","720:1280","1024:576","576:1024"],maxDuration:10,endpoint:"/runwayml/v1/image_to_video",pollMode:"runway",note:'Runway Gen4 Turbo:仅图生视频,ratio="宽:高",duration 5/10 秒,POST /runwayml/v1/image_to_video。'},gen3a_turbo:{modes:["image2video"],sizes:[],durations:[5,10],aspectRatios:["1280:720","720:1280","1024:576","576:1024"],maxDuration:10,endpoint:"/runwayml/v1/image_to_video",pollMode:"runway",note:'Runway Gen3 Alpha Turbo:仅图生视频,ratio="宽:高",duration 5/10 秒。'},"jimeng-videos":{modes:["text2video","image2video"],sizes:[],durations:[5,10],aspectRatios:["16:9","9:16","1:1","4:3","3:4","21:9"],maxDuration:10,endpoint:"/jimeng/submit/videos",pollMode:"jimeng",note:"即梦 V3:POST /jimeng/submit/videos 提交,GET /jimeng/fetch/{task_id} 轮询,status: SUCCESS/FAILURE。"},"viduq3-mix":{modes:["text2video","image2video"],sizes:["720p","1080p"],durations:[5,8,10,16],aspectRatios:["16:9","9:16","1:1","4:3","3:4"],maxDuration:16,endpoint:"/ent/v2/text2video",endpointI2V:"/ent/v2/img2video",pollMode:"vidu",note:"Vidu Q3 Mix:旗舰混合模型,支持 720p/1080p,最长 16s。"},viduq3:{modes:["text2video","image2video"],sizes:["540p","720p","1080p"],durations:[5,8,10,16],aspectRatios:["16:9","9:16","1:1","4:3","3:4"],maxDuration:16,endpoint:"/ent/v2/text2video",endpointI2V:"/ent/v2/img2video",pollMode:"vidu",note:"Vidu Q3:标准质量,540p/720p/1080p,最长 16s。"},"viduq3-pro":{modes:["text2video","image2video","firstlast"],sizes:["540p","720p","1080p"],durations:[5,8,10,16],aspectRatios:["16:9","9:16","1:1","4:3","3:4"],maxDuration:16,endpoint:"/ent/v2/text2video",endpointI2V:"/ent/v2/img2video",endpointSE:"/ent/v2/start-end2video",pollMode:"vidu",note:"Vidu Q3 Pro:专业质量,540p/720p/1080p,最长 16s。"},"viduq3-turbo":{modes:["text2video","image2video","firstlast"],sizes:["540p","720p","1080p"],durations:[5,8,10,16],aspectRatios:["16:9","9:16","1:1","4:3","3:4"],maxDuration:16,endpoint:"/ent/v2/text2video",endpointI2V:"/ent/v2/img2video",endpointSE:"/ent/v2/start-end2video",pollMode:"vidu",note:"Vidu Q3 Turbo:快速生成,540p/720p/1080p,最长 16s。"},viduq2:{modes:["text2video","image2video","reference2video"],sizes:["540p","720p","1080p"],durations:[5,8,10],aspectRatios:["16:9","9:16","1:1","4:3","3:4","21:9"],maxDuration:10,endpoint:"/ent/v2/text2video",endpointI2V:"/ent/v2/img2video",endpointRef:"/ent/v2/reference2video",pollMode:"vidu",note:"Vidu Q2:支持更多宽高比(含 21:9),540p/720p/1080p,最长 10s。"},v6:{modes:["text2video"],sizes:["360p","540p","720p","1080p"],durations:[5,8,10],aspectRatios:["16:9","9:16","1:1","4:3","3:4"],maxDuration:10,endpoint:"/openapi/v2/video/text/generate",pollMode:"pixverse",note:"PixVerse v6:文生视频,quality=分辨率(360p~1080p),渠道需配置 pixverse-video 内部模型。"},c1:{modes:["text2video"],sizes:["360p","540p","720p","1080p"],durations:[5,8,10],aspectRatios:["16:9","9:16","1:1","4:3","3:4"],maxDuration:10,endpoint:"/openapi/v2/video/text/generate",pollMode:"pixverse",note:"PixVerse C1:旗舰按秒计费模型,quality=分辨率,渠道需配置 pixverse-video 内部模型。"},"v5.6":{modes:["text2video"],sizes:["360p","540p","720p","1080p"],durations:[5,8,10],aspectRatios:["16:9","9:16","1:1","4:3","3:4"],maxDuration:10,endpoint:"/openapi/v2/video/text/generate",pollMode:"pixverse",note:"PixVerse v5.6:稳定版本,quality=分辨率,渠道需配置 pixverse-video 内部模型。"},"omni-flash":{modes:["text2video","firstlast","image2video"],sizes:[],durations:[6,8,10],aspectRatios:["16:9","9:16"],maxDuration:10,endpoint:"/v1/video/create",pollMode:"omni",maxFirstlastImages:2,maxRefImages:3,supportsEnableUpsample:!0,supportsEnableSample:!0,note:"Omni Flash:文生视频(type=1)、首尾帧(type=2, 1-2张)、垫图参考(type=3, 1-3张),POST /v1/video/create,seconds 字符串。"},"omni-flash-edit":{modes:["video_edit"],sizes:[],durations:[6,8,10],aspectRatios:["16:9","9:16"],maxDuration:10,endpoint:"/v1/video/create",pollMode:"omni",note:"Omni Flash Edit:视频编辑(type=4),input_reference 传参考视频 URL 或 dataURI,POST /v1/video/create。"},_default:{modes:["text2video"],sizes:["1280x720","720x1280","1024x1024"],durations:[5,10],aspectRatios:null,maxDuration:10,endpoint:"/v1/video/generations",note:null}},Ne=["16:9","9:16","1:1","4:3","3:4","auto"],we=(e,s)=>"vidu"===e?.pollMode&&"reference2video"===s?(e.aspectRatios||[]).filter(e=>Ne.includes(e)):e?.aspectRatios,Se="openai-response",Ce="anthropic",Te="gemini",Pe="openai-chat",Re=[{id:"price",label:"价格优先",emoji:"💰",description:"成本最低",suffix:":floor",color:"#10b981"}
1,{id:"speed",label:"速度优先",emoji:"⚡",description:"响应最快",suffix:":nitro",color:"#3b82f6"},{id:"success_rate",label:"成功率优先",emoji:"🛡",description:"最稳定",suffix:":stable",color:"#8b5cf6"},{id:"custom",label:"自定义",emoji:"🎯",description:"手动选择令牌",suffix:"",color:"#f59e0b"}],{Text:ze}=l,{Text:Ie}=l,$e=[{id:"chat",label:"AI 对话",icon:S},{id:"image",label:"AI 绘画",icon:C},{id:"video",label:"AI 视频",icon:T},{id:"audio",label:"AI 语音",icon:P}],Oe={chat:"gpt-4.1-mini",image:"gpt-image-2",video:"doubao-seedance-1-5-pro-251215",audio:"gpt-4o-mini-tts"},Me=[{key:"playground",label:"Playground",icon:R},{key:"examples",label:"Examples",icon:z},{key:"api",label:"API",icon:I},{key:"logs",label:"History",icon:$}],Ae='量子纠缠是量子力学中最神奇的现象之一。\n\n**打个比方 🎯**\n\n想象你有一双手套,随机装进两个盒子,分别寄给地球两端的人。当甲打开盒子发现是左手套,他立刻知道乙的是右手套——不管相距多远。\n\n**量子纠缠与此类似,但更神奇:**\n\n- 在被测量之前,粒子的状态是**完全不确定的**(同时处于多种可能的叠加)\n- 一旦你测量其中一个粒子,另一个粒子**瞬间**就确定了对应状态\n- 这种"同步"不受距离限制,哪怕相隔宇宙的两端\n\n**爱因斯坦的困惑**\n\n爱因斯坦把这称为"鬼魅般的超距作用",认为这不可能是真实的。但后来的实验一次次证实:量子纠缠确实存在。\n\n> 💡 量子纠缠不能用于超光速通信,因为测量结果是随机的,你无法主动控制它传递信息。',Ee="image_preview",Ue="video_preview",De={chat:["用通俗易懂的语言解释量子纠缠","帮我用 Python 写一个快速排序算法","分析人工智能对就业市场的影响","给我讲一个有趣的脑筋急转弯"],image:["A futuristic city skyline at sunset with neon lights","A cute cat wearing sunglasses relaxing on the beach","Abstract watercolor painting of misty mountains","A cozy bookshop interior with warm golden lighting"],video:["Sunrise over a calm ocean, waves gently lapping the shore","Cherry blossoms drifting in a gentle spring breeze","A snowy forest scene with falling snowflakes, peaceful and quiet","Time-lapse of a busy city intersection at night with light trails"]},Fe={openai:{id:"openai-chat",label:"OpenAI Chat",note:"/v1/chat/completions"},"openai-response":{id:"openai-response",label:"Responses API",note:"/v1/responses"},anthropic:{id:"anthropic",label:"Anthropic",note:"/v1/messages"},gemini:{id:"gemini",label:"Gemini",note:"/v1beta/models/{model}:generateContent"},"jina-rerank":{id:"jina-rerank",label:"Rerank",note:"/v1/rerank"},embedding:{id:"embedding",label:"Embeddings",note:"/v1/embeddings"},moderation:{id:"moderation",label:"Moderations",note:"/v1/moderations"},tts:{id:"tts",label:"TTS",note:"/v1/audio/speech"},stt:{id:"stt",label:"STT",note:"/v1/audio/transcriptions"},"gpt-audio":{id:"gpt-audio",label:"GPT Audio",note:'/v1/chat/completions(modalities=["text","audio"])'},"minimax-tts":{id:"minimax-tts",label:"MiniMax TTS",note:"/minimax/v1/t2a_v2"},"suno-music":{id:"suno-music",label:"Suno 音乐",note:"/suno/submit/music"},"replicate-task":{id:"replicate-task",label:"Replicate",note:"/replicate/v1/predictions"},"kling-audio":{id:"kling-audio",label:"Kling 音频",note:"/kling/v1/audio/text-to-audio"},"vidu-audio":{id:"vidu-audio",label:"Vidu 音频",note:"/ent/v2/audio-tts"},"gemini-tts":{id:"gemini-tts",label:"Gemini TTS",note:"/v1beta/models/{model}-tts:generateContent"},"minimax-tts-async":{id:"minimax-tts-async",label:"MiniMax 异步TTS",note:"/minimax/v1/t2a_async_v2"}
1,"kling-tts":{id:"kling-tts",label:"Kling TTS",note:"/kling/v1/audio/tts"},"kling-video-audio":{id:"kling-video-audio",label:"Kling 视频配音",note:"/kling/v1/audio/video-to-audio"},"kling-custom-voice":{id:"kling-custom-voice",label:"Kling 自定义音色",note:"/kling/v1/general/custom-voices"}},qe=[{prefix:"/replicate/",proto:{id:"replicate-task",label:"Replicate"}},{prefix:"/kling/v1/audio/tts",proto:{id:"kling-tts",label:"Kling TTS"}},{prefix:"/kling/v1/audio/video-to-audio",proto:{id:"kling-video-audio",label:"Kling 视频配音"}},{prefix:"/kling/v1/audio/",proto:{id:"kling-audio",label:"Kling 音频"}},{prefix:"/kling/v1/general/custom-voices",proto:{id:"kling-custom-voice",label:"Kling 自定义音色"}},{prefix:"/ent/v2/audio-tts",proto:{id:"vidu-audio",label:"Vidu 音频"}},{prefix:"/ent/v2/text2audio",proto:{id:"vidu-audio",label:"Vidu 音频"}}],Le={"/v1/chat/completions":{id:"openai-chat",label:"OpenAI Chat"},"/v1/responses":{id:"openai-response",label:"Responses API"},"/v1/messages":{id:"anthropic",label:"Anthropic"},"/v1beta/models/{model}:generateContent":{id:"gemini",label:"Gemini"},"/rerank":{id:"jina-rerank",label:"Rerank"},"/v1/embeddings":{id:"embedding",label:"Embeddings"},"/v1/moderations":{id:"moderation",label:"Moderations"},"/v1/audio/speech":{id:"tts",label:"TTS"},"/v1/audio/transcriptions":{id:"stt",label:"STT"},"/minimax/v1/t2a_v2":{id:"minimax-tts",label:"MiniMax TTS"},"/minimax/v1/t2a_async_v2":{id:"minimax-tts-async",label:"MiniMax 异步TTS"},"/suno/submit/music":{id:"suno-music",label:"Suno 音乐"}},Ge=[{id:"openai-chat",label:"OpenAI Chat",note:"/v1/chat/completions"}],Ve={id:"gpt-audio",label:"GPT Audio",note:'/v1/chat/completions(modalities=["text","audio"])'},{Text:Be}=l,Ke="lab_usage_logs",He=()=>{try{const e=localStorage.getItem(Ke);if(!e)return[];const s=JSON.parse(e),t=Date.now();return s.filter(e=>t-e._savedAt<864e5)}catch(e){return[]}},Je=e=>e.status||(e.success?"success":"failed"),We=e=>"pending"===Je(e)?102:e.success?200:500,Qe=e=>{return{id:`${Date.now()}-${Math.random().toString(36).slice(2,7)}`,_savedAt:Date.now(),created_at:Math.floor(Date.now()/1e3),model_name:(s=e.model,"string"==typeof s&&(s.startsWith("data:")||s.length>512)?"[data]":e.model||"—"),model_type:e.type||"chat",prompt_tokens:e.promptTokens??null,completion_tokens:e.completionTokens??null,quota:e.quota??null,status:Je(e),code:We(e),duration_ms:e.durationMs??null};var s},Ye=e=>{try{const s=He(),t=Qe(e);return s.unshift(t),localStorage.setItem(Ke,JSON.stringify(s.slice(0,200))),t.id}catch(s){if(s&&"QuotaExceededError"===s.name)try{const s=He().slice(0,19),t=Qe(e);return localStorage.setItem(Ke,JSON.stringify([t,...s])),t.id}catch(t){}}return null},Xe=(e,s)=>{if(!e)return!1;try{const t=He(),a=t.findIndex(s=>s.id===e);if(a<0)return!1;const i=s.status||(s.success?"success":"failed");return t[a]={...t[a],status:i,code:"pending"===i?102:s.success?200:500,duration_ms:s.durationMs??t[a].duration_ms,prompt_tokens:s.promptTokens??t[a].prompt_tokens,completion_tokens:s.completionTokens??t[a].completion_tokens,quota:s.quota??t[a].quota},localStorage.setItem(Ke,JSON.stringify(t.slice(0,200))),!0}catch(t){return!1}},Ze=e=>{if(!e)return"—";const s=new Date(1e3*e),t=e=>String(e).padStart(2,"0");return`${t(s.getHours())}:${t(s.getMinutes())}:${t(s.getSeconds())}`},es={chat:{label:"对话",cls:"bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300"},image:{label:"绘画",cls:"bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300"},video:{label:"视频",cls:"bg-rose-100 text-rose-700 dark:bg-rose-900/30 dark:text-rose-300"}},ss=({pageSize:e=5,refreshTrigger:i=0})=>{const{t:r}=_(),[o,n]=s.useState([]);return s.useEffect(()=>{n(He().slice(0,e))},[e,i]),t.jsxs("div",{className:"space-y-2",children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-1.5",children:[t.jsx(O,{size:14,className:"text-muted-foreground"}),t.jsx(Be,{size:"small",strong:!0,children:r("使用记录")}
1),t.jsx("span",{className:"text-[10px] text-muted-foreground/60 font-normal",children:r("(本地缓存 24h)")})]}),t.jsx(a,{to:"/console/log",children:t.jsxs(d,{size:"small",type:"tertiary",theme:"borderless",children:[r("查看全部"),t.jsx(M,{size:13,className:"ml-0.5"})]})})]}),0===o.length&&t.jsx("div",{className:"flex items-center justify-center h-16 text-xs text-muted-foreground border border-dashed border-border rounded-lg",children:r("暂无记录,发起第一次请求后自动记录")}),o.length>0&&t.jsx("div",{className:"rounded-xl border border-border overflow-hidden",children:t.jsxs("table",{className:"w-full text-xs",children:[t.jsx("thead",{children:t.jsxs("tr",{className:"bg-muted/50 border-b border-border",children:[t.jsx("th",{className:"text-left px-3 py-2 text-muted-foreground font-medium",children:r("时间")}),t.jsx("th",{className:"text-left px-3 py-2 text-muted-foreground font-medium",children:r("模型")}),t.jsx("th",{className:"text-right px-3 py-2 text-muted-foreground font-medium",children:r("耗时")}),t.jsx("th",{className:"text-center px-3 py-2 text-muted-foreground font-medium",children:r("状态")})]})}),t.jsx("tbody",{children:o.map((e,s)=>{const a="pending"===e.status||102===e.code,i=e.status?"success"===e.status:200===e.code,o=es[e.model_type]||es.chat;return t.jsxs("tr",{className:"border-b border-border/50 last:border-0 hover:bg-muted/30 transition-colors",children:[t.jsx("td",{className:"px-3 py-2 text-muted-foreground whitespace-nowrap",children:Ze(e.created_at)}),t.jsx("td",{className:"px-3 py-2 max-w-[140px]",children:t.jsxs("div",{className:"flex items-center gap-1.5",children:[t.jsx("span",{className:`inline-block px-1 py-0.5 rounded text-[10px] font-medium flex-shrink-0 ${o.cls}`,children:r(o.label)}),t.jsx("span",{className:"truncate font-mono text-[11px]",title:e.model_name,children:e.model_name||"—"})]})}),t.jsx("td",{className:"px-3 py-2 text-right text-muted-foreground",children:(n=e.duration_ms,n?n>=1e3?`${(n/1e3).toFixed(1)}s`:`${n}ms`:"—")}),t.jsx("td",{className:"px-3 py-2 text-center",children:t.jsx("div",{className:"flex items-center justify-center",children:i?t.jsx(A,{size:13,className:"text-green-500"}):a?t.jsx(O,{size:13,className:"text-blue-500 animate-pulse"}):t.jsx(E,{size:13,className:"text-red-500"})})})]},e.id||s);var n})})]})})]})},ts=["curl","Python","JavaScript"],as=e=>"price"===e?":floor":"speed"===e?":nitro":"success_rate"===e?":stable":"",is={"gpt-image-2":{label:"OpenAI Images API",endpoint:"/v1/images/generations",color:"#10a37f",isOpenAI:!0,supportsEdits:!0},"gemini-3.1-flash-image-preview":{label:"Gemini 原生接口",endpoint:"/v1beta/models/{model}:generateContent",color:"#4285f4",isGemini:!0},"gemini-3-pro-image-preview":{label:"Gemini 原生接口",endpoint:"/v1beta/models/{model}:generateContent",color:"#4285f4",isGemini:!0},"doubao-seedream-5-0-260128":{label:"字节豆包 Images API",endpoint:"/v1/images/generations",color:"#3b82f6",isOpenAI:!0},"doubao-seedream-5-0-pro-260628":{label:"字节豆包 Images API",endpoint:"/api/v3/images/generations",color:"#3b82f6",isOpenAI:!0},"grok-imagine-image":{label:"OpenAI 兼容 Images",endpoint:"/v1/images/generations",color:"#6366f1",isOpenAI:!0},"wan2.7-image-pro":{label:"Images API(标准)",endpoint:"/v1/images/generations",color:"#8b5cf6",isOpenAI:!0},"qwen-image-3.0":{label:"Images API(标准)",endpoint:"/v1/images/generations",color:"#8b5cf6",isOpenAI:!0},"qwen-image-3.0-pro":{label:"Images API(标准)",endpoint:"/v1/images/generations",color:"#8b5cf6",isOpenAI:!0},_default:{label:"OpenAI Images API",endpoint:"/v1/images/generations",color:"#94a3b8",isOpenAI:!0}},rs={"happyhorse-1.0-t2v":{label:"HappyHorse T2V API",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",color:"#f59e0b",pollEndpoint:"/alibailian/tasks/{task_id}"},"happyhorse-1.0-i2v":{label:"HappyHorse I2V API",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",color:"#f59e0b",pollEndpoint:"/alibailian/tasks/{task_id}"},"happyhorse-1.0-r2v":{label:"HappyHorse R2V API",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",color:"#f59e0b",pollEndpoint:"/alibailian/tasks/{task_id}"},"happyhorse-1.0-video-edit":{label:"HappyHorse VideoEdit",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",color:"#f59e0b",pollEndpoint:"/alibailian/tasks/{task_id}"},"happyhorse-1.1-i2v":{label:"HappyHorse 1.1 I2V API",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",color:"#f59e0b",pollEndpoint:"/alibailian/tasks/{task_id}"},"happyhorse-1.1-t2v":{label:"HappyHorse 1.1 T2V API",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",color:"#f59e0b",pollEndpoint:"/alibailian/tasks/{task_id}"},"happyhorse-1.1-r2v":{label:"HappyHorse 1.1 R2V API",endpoint:"/alibailian/api/v1/services/aigc/video-generation/video-synthesis",color:"#f59e0b",pollEndpoint:"/alibailian/tasks/{task_id}"},"doubao-seedance-1-5-pro-251215":{label:"字节豆包 Seedance API",endpoint:"/volc/v1/contents/generations/tasks",color:"#3b82f6",pollEndpoint:"/volc/v1/contents/generations/tasks/{task_id}"},"veo3.1-4k":{label:"Google Veo 视频 API",endpoint:"/v1/video/create",color:"#4285f4",pollEndpoint:"/v1/video/tasks/{task_id}"},"MiniMax-Hailuo-2.3":{label:"MiniMax 海螺视频 API",endpoint:"/minimax/v1/video_generation",color:"#ec4899",pollEndpoint:"/minimax/v1/query/video_generation?task_id={task_id}"},_default:{label:"视频生成任务 API",endpoint:"/v1/video/generations",color:"#94a3b8",pollEndpoint:"/v1/video/tasks/{task_id}"}},os=e=>is[e]||is._default,ns=(e,s)=>rs[e]||rs._default,ls={[Se]:{label:"OpenAI Responses API",endpoint:"/v1/responses",color:"#10a37f"},[Ce]:{label:"Anthropic Messages API",endpoint:"/v1/messages",color:"#d97706"},[Te]:{label:"Gemini 原生接口",endpoint:"/v1beta/models/{model}:generateContent",color:"#4285f4"},[Pe]:{label:"OpenAI Chat 兼容",endpoint:"/v1/chat/completions",color:"#6366f1"}},ds=({model:e,prompt:a,routingMode:i,group:r,type:o="chat",format:n,forceProviderSort:l,videoMode:m,request:p})=>{const{t:u}=_(),[x,g]=s.useState("curl"),[h,v]=s.useState(!1),f=window.location.origin,b="sk-YOUR_TOKEN",j={baseUrl:f,model:e,prompt:a,routingMode:l?null:i,group:l?null:r,providerSortOverride:l||void 0,videoMode:m,apiKey:b,lang:x,t:u},y=(()=>
1{if(p&&p.endpoint)return(({baseUrl:e,apiKey:s,lang:t,request:a,t:i=e=>e})=>{const{endpoint:r,method:o="POST",body:n={},async:l,pollPath:d}=a||{},c=JSON.stringify(n,null,2);if("curl"===t){let t=`${l?`# ${i("第一步:提交任务")}\n`:""}curl ${e}${r} \\\n  -H "Content-Type: application/json" \\\n  -H "Authorization: Bearer ${s}" \\\n  -d '${c}'`;return l&&d&&(t+=`\n\n# ${i("第二步:轮询任务状态,直到完成")}\ncurl ${e}${d} \\\n  -H "Authorization: Bearer ${s}"`),t}if("Python"===t){let t=`import requests\n\nAPI_KEY, BASE_URL = "${s}", "${e}"\nheaders = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}\n\nresp = requests.${o.toLowerCase()}(f"{BASE_URL}${r}", headers=headers, json=${m=n,JSON.stringify(m,null,4).replace(/\btrue\b/g,"True").replace(/\bfalse\b/g,"False").replace(/\bnull\b/g,"None")}).json()\nprint(resp)`;return l&&d&&(t+=`\n\n# ${i("轮询任务状态")}(GET ${d})直到状态为终态\n# data = requests.get(f"{BASE_URL}${d}", headers=headers).json()`),t}var m;let p=`const API_KEY = "${s}", BASE_URL = "${e}";\nconst headers = { Authorization: \`Bearer \${API_KEY}\`, "Content-Type": "application/json" };\n\nconst resp = await fetch(\`\${BASE_URL}${r}\`, {\n  method: "${o}",\n  headers,\n  body: JSON.stringify(${c}),\n}).then(r => r.json());\nconsole.log(resp);`;return l&&d&&(p+=`\n\n// ${i("轮询任务状态")}(GET ${d})直到状态为终态\n// const data = await fetch(\`\${BASE_URL}${d}\`, { headers }).then(r => r.json());`),p})({baseUrl:f,apiKey:b,lang:x,request:p,t:u});if("image"===o)return(({baseUrl:e,model:s,prompt:t,apiKey:a,lang:i,t:r=e=>e})=>{const o=os(s);if(o.isGemini)return(({baseUrl:e,model:s,prompt:t,apiKey:a,lang:i,t:r=e=>e})=>{const o=t||r("一只可爱的猫咪在樱花树下漫步");return"curl"===i?`curl "${e}/v1beta/models/${s}:generateContent" \\\n  -H "Content-Type: application/json" \\\n  -H "Authorization: Bearer ${a}" \\\n  -d '{\n    "contents": [\n      { "role": "user", "parts": [{ "text": "${o}" }] }\n    ],\n    "generationConfig": {\n      "response_modalities": ["IMAGE", "TEXT"]\n    }\n  }'`:"Python"===i?`import google.generativeai as genai\n\ngenai.configure(api_key="${a}", client_options={"api_endpoint": "${e}"})\nmodel = genai.GenerativeModel("${s}")\n\nresponse = model.generate_content(\n    "${o}",\n    generation_config=genai.GenerationConfig(\n        response_modalities=["IMAGE", "TEXT"],\n    ),\n)\nfor part in response.candidates[0].content.parts:\n    if part.inline_data:\n        with open("output.png", "wb") as f:\n            f.write(part.inline_data.data)\n        print("${r("图片已保存 output.png")}")`:`import { GoogleGenerativeAI } from "@google/generative-ai";\n\nconst genAI = new GoogleGenerativeAI("${a}");\nconst model = genAI.getGenerativeModel({ model: "${s}" });\n\nconst result = await model.generateContent({\n  contents: [{ role: "user", parts: [{ text: "${o}" }] }],\n  generationConfig: { responseModalities: ["IMAGE", "TEXT"] },\n});\n\nconst imageData = result.response.candidates[0].content.parts\n  .find(p => p.inlineData)?.inlineData?.data;\nconsole.log("${r("Base64 图片数据长度:")}", imageData?.length);`})({baseUrl:e,model:s,prompt:t,apiKey:a,lang:i,t:r});const n=t||r("一只可爱的猫咪在樱花树下漫步"),l=o.endpoint;return"gpt-image-2"===s?"curl"===i?`# ${r("图像生成")}\ncurl ${e}/v1/images/generations   -H "Content-Type: application/json"   -H "Authorization: Bearer ${a}"   -d '{\n    "model": "gpt-image-2",\n    "prompt": "${n}",\n    "n": 1,\n    "size": "1024x1024",\n    "quality": "low",\n    "format": "jpeg"\n  }'\n\n# ${r("图像编辑")}\ncurl ${e}/v1/images/edits   -H "Authorization: Bearer ${a}"   -F "model=gpt-image-2"   -F "prompt=将他们合并在一个图片里面"   -F "[email protected]"   -F "[email protected]"   -F "n=1"   -F "size=1024x1536"   -F "quality=auto"   -F "format=jpeg"   -F "background=auto"   -F "moderation=auto"`:"Python"===i?`import requests\n\nAPI_KEY, BASE_URL = "${a}", "${e}"\nheaders = {"Authorization": f"Bearer {API_KEY}"}\n\n# ${r("图像生成")}\ncreate_body = {\n    "model": "gpt-image-2",\n    "prompt": "${n}",\n    "n": 1,\n    "size": "1024x1024",\n    "quality": "low",\n    "format": "jpeg",\n}\ncreate_resp = requests.post(f"{BASE_URL}/v1/images/generations", headers={**headers, "Content-Type": "application/json"}, json=create_body).json()\nprint(create_resp)\n\n# ${r("图像编辑")}\nedit_data = {\n    "model": "gpt-image-2",\n    "prompt": "将他们合并在一个图片里面",\n    "n": "1",\n    "size": "1024x1536",\n    "quality": "auto",\n    "format": "jpeg",\n    "background": "auto",\n    "moderation": "auto",\n}\nwith open("input.png", "rb") as image_file, open("scene2.png", "rb") as second_image_file:\n    edit_resp = requests.post(\n        f"{BASE_URL}/v1/images/edits",\n        headers=headers,\n        data=edit_data,\n    files=[("image", image_file), ("image", second_image_file)],\n    ).json()\nprint(edit_resp)`:`const API_KEY = "${a}", BASE_URL = "${e}";\n\n// ${r("图像生成")}\nconst createResp = await fetch(\`${e}/v1/images/generations\`, {\n  method: "POST",\n  headers: { Authorization: \`Bearer \${API_KEY}\`, "Content-Type": "application/json" },\n  body: JSON.stringify({\n    model: "gpt-image-2",\n    prompt: "${n}",\n    n: 1,\n    size: "1024x1024",\n    quality: "low",\n    format: "jpeg",\n  }),\n}).then(r => r.json());\nconsole.log(createResp);\n\n// ${r("图像编辑")}\nconst editForm = new FormData();
1\neditForm.append("model", "gpt-image-2");\neditForm.append("prompt", "将他们合并在一个图片里面");\neditForm.append("image", imageFile); // File 对象,例如 <input type="file" /> 选中的文件\neditForm.append("image", secondImageFile); // 可重复追加,最多 16 张\neditForm.append("n", "1");\neditForm.append("size", "1024x1536");\neditForm.append("quality", "auto");\neditForm.append("format", "jpeg");\neditForm.append("background", "auto");\neditForm.append("moderation", "auto");\n\nconst editResp = await fetch(\`${e}/v1/images/edits\`, {\n  method: "POST",\n  headers: { Authorization: \`Bearer \${API_KEY}\` },\n  body: editForm,\n}).then(r => r.json());\nconsole.log(editResp);`:"curl"===i?`curl ${e}${l} \\\n  -H "Content-Type: application/json" \\\n  -H "Authorization: Bearer ${a}" \\\n  -d '{\n    "model": "${s}",\n    "prompt": "${n}",\n    "n": 1,\n    "size": "1024x1024"\n  }'`:"Python"===i?`from openai import OpenAI\n\nclient = OpenAI(api_key="${a}", base_url="${e}/v1")\n\nresponse = client.images.generate(\n    model="${s}",\n    prompt="${n}",\n    n=1,\n  size="1024x1024",\n)\n\nprint(response.data[0].url)`:`import OpenAI from "openai";\n\nconst client = new OpenAI({ apiKey: "${a}", baseURL: "${e}/v1" });\n\nconst response = await client.images.generate({\n  model: "${s}",\n  prompt: "${n}",\n  n: 1,\n  size: "1024x1024",\n});\n\nconsole.log(response.data[0].url);`})(j);if("video"===o)return(({baseUrl:e,model:s,prompt:t,apiKey:a,lang:i,videoMode:r,t:o=e=>e})=>{const n=t||o("一只熊猫在竹林里漫步"),l=ns(s),d=l.endpoint,c=l.pollEndpoint||"/v1/video/tasks/{task_id}",m=s?.startsWith("MiniMax"),p=s?.startsWith("happyhorse-1.0-")||s?.startsWith("happyhorse-1.1-"),u=e=>JSON.stringify(e,null,4).replace(/\btrue\b/g,"True").replace(/\bfalse\b/g,"False").replace(/\bnull\b/g,"None"),x=p?(()=>{const e={model:s,input:{prompt:n},parameters:{resolution:"720P"}};return"happyhorse-1.0-t2v"!==s&&"happyhorse-1.1-t2v"!==s||(e.parameters.ratio="16:9",e.parameters.duration=5,e.parameters.watermark=!0),"happyhorse-1.0-i2v"!==s&&"happyhorse-1.1-i2v"!==s||(e.input.media=[{type:"first_frame",url:"https://example.com/start-frame.png"}],e.parameters.duration=5,e.parameters.watermark=!0),"happyhorse-1.0-r2v"!==s&&"happyhorse-1.1-r2v"!==s||(e.input.media=[{type:"reference_image",url:"https://example.com/reference-1.png"},{type:"reference_image",url:"https://example.com/reference-2.png"}],e.parameters.ratio="16:9",e.parameters.duration=5,e.parameters.watermark=!0),"happyhorse-1.0-video-edit"===s&&(e.input.media=[{type:"video",url:"https://example.com/input.mp4"},{type:"reference_image",url:"https://example.com/reference.png"}],e.parameters.audio_setting="auto"),e})():null,g={model:s,prompt:n,duration:6,resolution:"768P",prompt_optimizer:!0,fast_pretreatment:!1,aigc_watermark:!1};m&&"image2video"===r&&(g.first_frame_image="https://example.com/start-frame.png");const h=p?Object.entries(x).map(([e,s])=>`"${e}": ${JSON.stringify(s)}`).join(",\n    "):m?Object.entries(g).map(([e,s])=>`"${e}": ${JSON.stringify(s)}`).join(",\n    "):`"model": "${s}",\n    "prompt": "${n}",\n    "size": "1280x720",\n    "duration": 5`;if("curl"===i)return`# ${o("第一步:提交视频生成任务")}\ncurl ${e}${d} \\\n  -H "Content-Type: application/json" \\\n  -H "Authorization: Bearer ${a}" \\\n  -d '{\n    ${h}\n  }'\n# ${o("响应:")}${m?'{ "task_id": "106916112212032", "base_resp": { "status_code": 0, "status_msg": "success" } }':p?'{ "request_id": "req_abc123", "output": { "task_id": "task_abc123", "task_status": "PENDING" } }':'{ "task_id": "task_abc123", "status": "pending" }'}\n\n# ${o("第二步:轮询任务状态")}\ncurl ${e}${c} \\\n  -H "Authorization: Bearer ${a}"\n# ${m?"status: Preparing/Processing → Success":p?"task_status: PENDING/RUNNING → SUCCEEDED":"status: pending → processing → succeeded"}\n# ${o(m?"Success 时 file.download_url 即为视频地址":p?"SUCCEEDED 时 output.video_url 即为视频地址":"succeeded 时 result.videos[0].url 即为视频地址")}`;const v=p?u(x):m?u(g):`{"model": "${s}", "prompt": "${n}", "size": "1280x720", "duration": 5}`,_=p?JSON.stringify(x,null,2):m?JSON.stringify(g,null,2):`{ model: "${s}", prompt: "${n}", size: "1280x720", duration: 5 }`,f=p?'task["output"]["task_id"]':'task["task_id"]',b=m?'data.get("file", {}).get("download_url") or data.get("file", {}).get("backup_download_url")':p?'data.get("output", {}).get("video_url")':'data["result"]["videos"][0]["url"]';if("Python"===i)return`import requests, time\n\nAPI_KEY, BASE_URL = "${a}", "${e}"\nheaders = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}\n\n# ${o("提交任务")}\ntask = requests.post(f"{BASE_URL}${d}", headers=headers, json=${v}).json()\ntask_id = ${f}\nprint(f"${o("任务已提交:")}{task_id}")\n\n# ${o("轮询状态")}\nwhile True:\n    data = requests.get(f"{BASE_URL}${c.replace("{task_id}","{task_id}")}", headers=headers).json()\n    status = data.get("status") or data.get("state") or data.get("output", {}).get("task_status")\n    print(f"${o("状态:")}{status}")\n    if status in ("succeeded", "success", "Success", "SUCCEEDED"):\n        print("${o("视频地址:")}", ${b}); break\n    if status in ("failed", "cancelled", "Failed", "Cancelled", "FAILED", "CANCELED"):\n        print("${o("任务失败")}"); break\n    time.sleep(3)`.replace("{task_id}","{task_id}");const j=p?"task.output.task_id":"task.task_id",y=m?"data.file?.download_url ?? data.file?.backup_download_url":p?"data.output?.video_url":"data.result.videos[0].url";return`const API_KEY = "${a}", BASE_URL = "${e}";\nconst headers = { Authorization: \`Bearer \${API_KEY}\`, "Content-Type": "application/json" };\n\n// ${o("提交任务")}\nconst task = await fetch(\`\${BASE_URL}${d}\`, {\n  method: "POST", headers,\n  body: JSON.stringify(${_}),\n}).then(r => r.json());\nconst task_id = ${j};\nconsole.log("${o("任务已提交:")}", task_id);\n\n// ${o("轮询状态")}\nconst pollUrl = \`\${BASE_URL}${c.replace("{task_id}","${task_id}")}\`;\nwhile (true) {\n  const data = await fetch(pollUrl, { headers }).then(r => r.json());\n  const status = data.status ?? data.state ?? data.output?.task_status;\n  console.log("${o("状态:")}", status);\n  if (["succeeded", "success", "Success", "SUCCEEDED"].includes(status)) { console.log("${o("视频地址:")}", ${y}); break; }\n  if (["failed", "cancelled", "Failed", "Cancelled", "FAILED", "CANCELED"].includes(status)) { console.error("${o("任务失败")}"); break; }\n  await new Promise(r => setTimeout(r, 3000));\n}`})(j);
1switch(n){case Se:return(({baseUrl:e,model:s,prompt:t,routingMode:a,group:i,providerSortOverride:r,apiKey:o,lang:n,t:l=e=>e})=>{const d=as(a),c=`${s}${d}`,m=t||l("你好,请做个自我介绍");return"curl"===n?`curl ${e}/v1/responses \\\n  -H "Content-Type: application/json" \\\n  -H "Authorization: Bearer ${o}" \\\n  -d '{\n    "model": "${c}",${r?`\n  "provider": { "sort": "${r}" },`:i&&!a?`\n  "provider": { "group": "${i}" },`:a&&!d?`\n  "provider": { "sort": "${a}" },`:""}\n    "input": [{ "role": "user", "content": "${m}" }],\n    "stream": true\n  }'`:"Python"===n?`from openai import OpenAI\n\nclient = OpenAI(api_key="${o}", base_url="${e}/v1")\n\nresponse = client.responses.create(\n    model="${c}",\n    input=[{"role": "user", "content": "${m}"}],\n    stream=True,\n${r?`    extra_body={"provider": {"sort": "${r}"}},\n`:i&&!a?`    extra_body={"provider": {"group": "${i}"}},\n`:a&&!d?`    extra_body={"provider": {"sort": "${a}"}},\n`:""})\n\nfor event in response:\n    if event.type == "response.output_text.delta":\n        print(event.delta, end="", flush=True)`:`import OpenAI from "openai";\n\nconst client = new OpenAI({ apiKey: "${o}", baseURL: "${e}/v1" });\n\nconst stream = await client.responses.create({\n  model: "${c}",\n  input: [{ role: "user", content: "${m}" }],\n  stream: true,\n${r?`  extra_body: { provider: { sort: "${r}" } },\n`:i&&!a?`  extra_body: { provider: { group: "${i}" } },\n`:a&&!d?`  extra_body: { provider: { sort: "${a}" } },\n`:""}});\n\nfor await (const event of stream) {\n  if (event.type === "response.output_text.delta") {\n    process.stdout.write(event.delta);\n  }\n}`})(j);case Ce:return(({baseUrl:e,model:s,prompt:t,routingMode:a,group:i,providerSortOverride:r,apiKey:o,lang:n,t:l=e=>e})=>{const d=as(a),c=`${s}${d}`,m=t||l("你好,请做个自我介绍");return"curl"===n?`curl ${e}/v1/messages \\\n  -H "Content-Type: application/json" \\\n  -H "Authorization: Bearer ${o}" \\\n  -H "anthropic-version: 2023-06-01" \\\n  -d '{\n    "model": "${c}",\n    "max_tokens": 4096,\n    "stream": true,\n    "messages": [{ "role": "user", "content": "${m}" }]${r?`,\n    "provider": { "sort": "${r}" }`:i&&!a?`,\n    "provider": { "group": "${i}" }`:a&&!d?`,\n    "provider": { "sort": "${a}" }`:""}\n  }'`:"Python"===n?`import anthropic\n\nclient = anthropic.Anthropic(\n    api_key="${o}",\n    base_url="${e}",\n)\n\nwith client.messages.stream(\n    model="${c}",\n    max_tokens=4096,\n    messages=[{"role": "user", "content": "${m}"}],\n${r?`    extra_body={"provider": {"sort": "${r}"}},\n`:i&&!a?`    extra_body={"provider": {"group": "${i}"}},\n`:a&&!d?`    extra_body={"provider": {"sort": "${a}"}},\n`:""}) as stream:\n    for text in stream.text_stream:\n        print(text, end="", flush=True)`:`import Anthropic from "@anthropic-ai/sdk";\n\nconst client = new Anthropic({\n  apiKey: "${o}",\n  baseURL: "${e}",\n});\n\nconst stream = await client.messages.create({\n  model: "${c}",\n  max_tokens: 4096,\n  stream: true,\n  messages: [{ role: "user", content: "${m}" }],\n${r?`  extra_body: { provider: { sort: "${r}" } },\n`:i&&!a?`  extra_body: { provider: { group: "${i}" } },\n`:a&&!d?`  extra_body: { provider: { sort: "${a}" } },\n`:""}});\n\nfor await (const event of stream) {\n  if (event.type === "content_block_delta") {\n    process.stdout.write(event.delta?.text ?? "");\n  }\n}`})(j);case Te:return(({baseUrl:e,model:s,prompt:t,apiKey:a,lang:i,t:r=e=>e})=>{const o=t||r("你好,请做个自我介绍");return"curl"===i?`curl "${e}/v1beta/models/${s}:streamGenerateContent?alt=sse" \\\n  -H "Content-Type: application/json" \\\n  -H "Authorization: Bearer ${a}" \\\n  -d '{\n    "contents": [\n      { "role": "user", "parts": [{ "text": "${o}" }] }\n    ],\n    "generationConfig": {\n      "temperature": 0.7,\n      "maxOutputTokens": 4096\n    }\n  }'`:"Python"===i?`import google.generativeai as genai\n\n# ${r("也可以使用 openai 库通过 /v1/chat/completions 调用(OpenAI 兼容模式)")}\ngenai.configure(\n    api_key="${a}",\n    # ${r("指向本代理地址")}\n    client_options={"api_endpoint": "${e}"},\n)\n\nmodel = genai.GenerativeModel("${s}")\nfor chunk in model.generate_content("${o}", stream=True):\n    print(chunk.text, end="", flush=True)`:`import { GoogleGenerativeAI } from "@google/generative-ai";\n\n// ${r("也可以使用 openai 库通过 /v1/chat/completions 调用(OpenAI 兼容模式)")}\nconst genAI = new GoogleGenerativeAI("${a}");\n// ${r("注意:JS SDK 暂不支持自定义 base_url,推荐改用 open
1ai 库的兼容模式")}\nconst model = genAI.getGenerativeModel({ model: "${s}" });\n\nconst result = await model.generateContentStream("${o}");\nfor await (const chunk of result.stream) {\n  process.stdout.write(chunk.text());\n}`})(j);default:return(({baseUrl:e,model:s,prompt:t,routingMode:a,group:i,providerSortOverride:r,apiKey:o,lang:n,t:l=e=>e})=>{const d=as(a),c=`${s}${d}`,m=t||l("你好,请做个自我介绍");if("curl"===n){const s={model:c,messages:[{role:"user",content:m}],stream:!0,...r?{provider:{sort:r}}:i&&!a?{provider:{group:i}}:a&&!d?{provider:{sort:a}}:{}};return`curl ${e}/v1/chat/completions \\\n  -H "Content-Type: application/json" \\\n  -H "Authorization: Bearer ${o}" \\\n  -d '${JSON.stringify(s,null,2)}'`}return"Python"===n?`from openai import OpenAI\n\nclient = OpenAI(api_key="${o}", base_url="${e}/v1")\n\nstream = client.chat.completions.create(\n    model="${c}",\n    messages=[{"role": "user", "content": "${m}"}],\n    stream=True,\n${((e="  ")=>r?`${e}extra_body={"provider": {"sort": "${r}"}},\n`:i&&!a?`${e}extra_body={"provider": {"group": "${i}"}},\n`:a&&!d?`${e}extra_body={"provider": {"sort": "${a}"}},\n`:"")("    ")})\n\nfor chunk in stream:\n    if chunk.choices[0].delta.content:\n        print(chunk.choices[0].delta.content, end="", flush=True)`:`import OpenAI from "openai";\n\nconst client = new OpenAI({ apiKey: "${o}", baseURL: "${e}/v1" });\n\nconst stream = await client.chat.completions.create({\n  model: "${c}",\n  messages: [{ role: "user", content: "${m}" }],\n  stream: true,\n${((e="  ")=>r?`${e}extra_body: { provider: { sort: "${r}" } },\n`:i&&!a?`${e}extra_body: { provider: { group: "${i}" } },\n`:a&&!d?`${e}extra_body: { provider: { sort: "${a}" } },\n`:"")()}});\n\nfor await (const chunk of stream) {\n  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");\n}`})(j)}})();let k=null;if(p&&p.endpoint)k={label:p.label||u("API 端点"),endpoint:p.endpoint,color:p.color||"#6366f1"};else if("chat"===o&&n)k=ls[n];else if("image"===o){const s=os(e);k={label:s.label,endpoint:s.isGemini?`/v1beta/models/${e}:generateContent`:s.endpoint,color:s.color}}else if("video"===o){const s=ns(e);k={label:s.label,endpoint:s.endpoint,color:s.color}}return e?t.jsxs("div",{className:"space-y-2",children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsx("div",{className:"flex items-center gap-1",children:ts.map(e=>t.jsx("button",{onClick:()=>g(e),className:"px-3 py-1 rounded-md text-xs font-medium transition-colors "+(x===e?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"),children:e},e))}),t.jsx(d,{size:"small",theme:"borderless",type:"tertiary",icon:h?t.jsx(U,{size:13,className:"text-green-500"}):t.jsx(D,{size:13}),onClick:async()=>{try{await navigator.clipboard.writeText(y),v(!0),setTimeout(()=>v(!1),2e3)}catch(e){c.error(u("复制失败"))}},children:u(h?"已复制":"复制")})]}),k&&t.jsxs("div",{className:"flex items-center gap-2 text-[11px]",children:[t.jsx("span",{className:"px-2 py-0.5 rounded-full font-medium",style:{background:`${k.color}15`,color:k.color,border:`1px solid ${k.color}30`},children:u(k.label)}),t.jsx("code",{className:"text-muted-foreground font-mono",children:k.endpoint})]}),t.jsx("div",{className:"relative rounded-xl overflow-hidden border border-border bg-[#0f172a]",children:t.jsx("pre",{className:"p-4 text-[12px] leading-relaxed text-slate-200 overflow-x-auto font-mono whitespace-pre",children:y})}),"chat"===o&&i&&t.jsxs("div",{className:"text-[11px] text-muted-foreground bg-muted/40 rounded-lg px-3 py-2",children:[u("💡 上方代码使用了模型后缀写法("),t.jsxs("code",{className:"font-mono text-primary",children:[e,":xxx"]}),u("),"),u("与")," ",t.jsx("code",{className:"font-mono",children:"provider.sort"})," ",u("写法效果完全等价。")]}),"chat"===o&&n===Te&&t.jsxs("div",{className:"text-[11px] text-muted-foreground bg-muted/40 rounded-lg px-3 py-2",children:[u("💡 Gemini 对话模型也支持通过")," ",t.jsx("code",{className:"font-mono text-primary",children:"/v1/chat/completions"})," ",u("的 OpenAI 兼容模式调用,无需安装 Google SDK。")]}),"image"===o&&os(e).supportsEdits&&t.jsxs("div",{className:"text-[11px] text-muted-foreground bg-muted/40 rounded-lg px-3 py-2",children:[u("💡")," ",t.jsx("code",{className:"font-mono text-primary",children:"gpt-image-2"})," ",u("额外支持")," ",t.jsx("code",{className:"font-mono text-primary",children:"/v1/images/edits"})," ",u("multipart 图片编辑接口(image 必填,mask 可选)。")]}),"image"===o&&os(e).isGemini&&t.jsx("div",{className:"text-[11px] text-muted-foreground bg-muted/40 rounded-lg px-3 py-2",children:u("💡 Gemini 图像模型使用原生 generateContent 接口,图片以 Base64 inline_data 形式返回。")}),"video"===o&&t.jsxs("div",{className:"text-[11px] text-muted-foreground bg-muted/40 rounded-lg px-3 py-2",children:[u("💡 视频生成为异步任务:提交后轮询")," ",t.jsx("code",{className:"font-mono text-primary",children:p&&p.pollPath||ns(e).pollEndpoint})," ",u("直到 status = succeeded。")]})]}):t.jsx("div",{className:"flex items-center justify-center h-24 text-xs text-muted-foreground border border-dashed border-border rounded-xl",children:u("请先选择模型以查看代码示例")})},cs=(e,s)=>{if(!e||"string"!=typeof e)return e||"";const t=String(s||"").replace(/:floor$|:nitro$|:stable$/,"");return t&&(e.includes("{model}")||/%7[Bb]model%7[Dd]/.test(e))?e.replace(/%7Bmodel%7D/gi,t).replaceAll("{model}",t):e},ms=new Set(["kling-3.0-turbo","{model}
1"]),ps=e=>{const s=te(e);if(!s.startsWith("/kling/text-to-video/")&&!s.startsWith("/kling/image-to-video/"))return!1;let t=s.split("/").pop()||"";try{t=decodeURIComponent(t)}catch(a){}return ms.has(t)},us={interval:5e3,maxAttempts:72,initialDelay:5e3},xs=e=>("string"==typeof e?e:e?.message)||"",gs={"/volc/v1/contents/generations/tasks":e=>({getTaskId:e=>e?.id,getPollUrl:e=>`/volc/v1/contents/generations/tasks/${e}`,getStatus:e=>e?.status,isSuccess:e=>"succeeded"===e,isFailure:e=>"failed"===e,getResultUrl:e=>e?.content?.video_url,getErrorMsg:(e,s)=>xs(e?.error)||s("视频生成失败")}),"/api/v3/contents/generations/tasks":e=>({getTaskId:e=>e?.id,getPollUrl:e=>`/api/v3/contents/generations/tasks/${e}`,getStatus:e=>e?.status,isSuccess:e=>"succeeded"===e,isFailure:e=>"failed"===e,getResultUrl:e=>e?.content?.video_url,getErrorMsg:(e,s)=>e?.failure_reason||xs(e?.error)||s("视频生成失败")}),"/v1/video/create":e=>({getTaskId:e=>e?.id,getPollUrl:e=>`/v1/video/query?id=${e}`,getStatus:e=>e?.status,isSuccess:e=>"completed"===e,isFailure:e=>"failed"===e||"error"===e,getResultUrl:e=>e?.video_url,getErrorMsg:(e,s)=>e?.error||e?.message||s("视频生成失败")}),"/minimax/v1/video_generation":e=>({getTaskId:e=>e?.task_id,getPollUrl:e=>`/minimax/v1/query/video_generation?task_id=${e}`,getStatus:e=>e?.status,isSuccess:e=>"Success"===e,isFailure:e=>"Failed"===e||"Cancelled"===e,getResultUrl:e=>e?.file?.download_url||e?.file?.backup_download_url,getErrorMsg:(e,s)=>e?.base_resp?.status_msg||xs(e?.error)||s("视频生成失败")}),"/v1/videos":e=>({getTaskId:e=>e?.id,getPollUrl:e=>`/v1/videos/${e}`,getStatus:e=>e?.status,isSuccess:e=>"completed"===e||"succeeded"===e,isFailure:e=>"failed"===e||"error"===e,getResultUrl:e=>e?.video_url||e?.result_url||e?.output||e?.data?.[0]?.url,getErrorMsg:(e,s)=>xs(e?.error)||s("视频生成失败")}),"/v1/videos/generations":e=>fs(),"/v1/videos/edits":e=>fs(),"/luma/generations":e=>({getTaskId:e=>e?.id,getPollUrl:e=>`/luma/generations/${e}`,getStatus:e=>e?.state,isSuccess:e=>"completed"===e,isFailure:e=>"failed"===e,getResultUrl:e=>e?.video?.url,getErrorMsg:(e,s)=>e?.failure_reason||xs(e?.error)||s("视频生成失败")}),"/runwayml/v1/image_to_video":e=>({getTaskId:e=>e?.id,getPollUrl:e=>`/runwayml/v1/tasks/${e}`,getStatus:e=>e?.status,isSuccess:e=>"SUCCEEDED"===e,isFailure:e=>"FAILED"===e||"CANCELLED"===e,getResultUrl:e=>Array.isArray(e?.output)?e.output[0]:e?.output,getErrorMsg:(e,s)=>e?.failure||xs(e?.error)||s("视频生成失败")}),"/jimeng/submit/videos":e=>({getTaskId:e=>e?.data,getPollUrl:e=>`/jimeng/fetch/${e}`,getStatus:e=>e?.data?.status,isSuccess:e=>"SUCCESS"===e,isFailure:e=>"FAILURE"===e,getResultUrl:e=>e?.data?.data?.data?.video||e?.data?.data?.video,getErrorMsg:(e,s)=>e?.data?.fail_reason||e?.message||s("视频生成失败")}),"/tencent-vod/v1/aigc-video":e=>({getTaskId:e=>e?.Response?.TaskId,getPollUrl:e=>`/tencent-vod/v1/query/${e}`,getStatus:e=>{if(e?.Response?.Error)return"FAILURE";const s=e?.Response?.Status;if("FINISH"!==s)return s||"PROCESSING";const t=e?.Response?.AigcVideoTask;return t?0!==t?.ErrCode?"FAILURE":"FINISH"===t?.Status?"SUCCESS":"PROCESSING":"FAILURE"},isSuccess:e=>"SUCCESS"===e,isFailure:e=>"FAILURE"===e,getResultUrl:e=>e?.Response?.AigcVideoTask?.Output?.FileInfos?.[0]?.FileUrl,getErrorMsg:(e,s)=>e?.Response?.AigcVideoTask?.Message||e?.Response?.Error?.Message||s("视频生成失败")}),"/tencent-vod/v1/aigc-image":e=>({getTaskId:e=>e?.Response?.TaskId,getPollUrl:e=>`/tencent-vod/v1/query/${e}`,getStatus:e=>{if(e?.Response?.Error)return"FAILURE";const s=e?.Response?.Status;if("FINISH"!==s)return s||"PROCESSING";const t=e?.Response?.AigcImageTask;return t?"FINISH"===t?.Status?"SUCCESS":"PROCESSING":"FAILURE"},isSuccess:e=>"SUCCESS"===e,isFailure:e=>"FAILURE"===e,getResultUrl:e=>e?.Response?.AigcImageTask?.Output?.FileInfos?.[0]?.FileUrl,getErrorMsg:(e,s)=>e?.Response?.AigcImageTask?.Message||e?.Response?.Error?.Message||s("生成失败")}),"/openapi/v2/image/template/generate":e=>({getTaskId:e=>null!=e?.Resp?.image_id?String(e.Resp.image_id):void 0,getPollUrl:e=>`/openapi/v2/image/result/${e}`,getStatus:e=>e?.Resp?.status,isSuccess:e=>1===e,isFailure:e=>6===e||7===e||8===e,getResultUrl:e=>e?.Resp?.url||e?.Resp?.urls?.[0]||e?.Resp?.image_url,getErrorMsg:(e,s)=>{const t=e?.Resp?.status;return 7===t?s("内容审核失败"):e?.ErrMsg||s("生成失败")}}),"/ent/v2/text2video":e=>({getTaskId:e=>e?.task_id||e?.id,getPollUrl:e=>`/ent/v2/tasks/${e}/creations`,getStatus:e=>e?.state,isSuccess:e=>"success"===e,isFailure:e=>"failed"===e,getResultUrl:e=>e?.creations?.[0]?.url||e?.result_url,getErrorMsg:(e,s)=>e?.fail_reason||e?.err_code||e?.message||s("生成失败")}),"/ent/v2/img2video":e=>({getTaskId:e=>e?.task_id||e?.id,getPollUrl:e=>`/ent/v2/tasks/${e}/creations`,getStatus:e=>e?.state,isSuccess:e=>"success"===e,isFailure:e=>"failed"===e,getResultUrl:e=>e?.creations?.[0]?.url||e?.result_url,getErrorMsg:(e,s)=>e?.fail_reason||e?.err_code||e?.message||s("生成失败")}),"/openapi/v2/video/text/generate":e=>bs(),"/kling/v1/videos/text2video":e=>hs("/kling/v1/videos/text2video"),"/kling/v1/videos/image2video":e=>hs("/kling/v1/videos/image2video"),"/mj/submit/imagine":e=>({interval:5e3,maxAttempts:90,getTaskId:e=>e?.result,getPollUrl:e=>`/mj/task/${e}/fetch`,getStatus:e=>e?.status,isSuccess:e=>"SUCCESS"===e,isFailure:e=>"FAILURE"===e,getResultUrl:e=>e?.imageUrl,getErrorMsg:(e,s)=>e?.failReason||e?.description||s("生成失败")}),"/mj/submit/action":e=>({interval:5e3,maxAttempts:90,getTaskId:e=>e?.result,getPollUrl:e=>`/mj/task/${e}/fetch`,getStatus:e=>e?.status,isSuccess:e=>"SUCCESS"===e,isFailure:e=>"FAILURE"===e,getResultUrl:e=>e?.imageUrl,getErrorMsg:(e,s)=>e?.failReason||e?.description||s("生成失败")}),"/mj/submit/blend":e=>({interval:5e3,maxAttempts:90,getTaskId:e=>e?.result,getPollUrl:e=>`/mj/task/${e}/fetch`,getStatus:e=>e?.status,isSuccess:e=>"SUCCESS"===e,isFailure:e=>"FAILURE"===e,getResultUrl:e=>e?.imageUrl,getErrorMsg:(e,s)=>e?.failReason||e?.description||s("生成失败")}),"/mj/submit/modal":e=>({interval:5e3,maxAttempts:90,getTaskId:e=>e?.result,getPollUrl:e=>`/mj/task/${e}/fetch`,getStatus:e=>e?.status,isSuccess:e=>"SUCCESS"===e,isFailure:e=>"FAILURE"===e,getResultUrl:e=>e?.imageUrl,getErrorMsg:(e,s)=>e?.failReason||e?.description||s("生成失败")}),"/mj/submit/describe":e=>({interval:5e3,maxAttempts:90,getTaskId:e=>e?.result,getPollUrl:e=>`/mj/task/${e}/fetch`,getStatus:e=>e?.status,isSuccess:e=>"SUCCESS"===e,isFailure:e=>"FAILURE"===e,getResultUrl:e=>e?.imageUrl,getErrorMsg:(e,s)=>e?.failReason||e?.description||s("生成失败"),getResultUrl:()=>null,getResultText:e=>e?.prompt||null,getErrorMsg:(e,s)=>e?.failReason||e?.description||s("描述生成失败")}),"/suno/submit/music":e=>({interval:8e3,maxAttempts:90,getTaskId:e=>"string"==typeof e?.data?e.data:e?.data?.task_id,getPollUrl:e=>`/suno/fetch/${e}`,getStatus:e=>e?.data?.status,isSuccess:e=>"SUCCESS"===e,isFailure:e=>"FAILURE"===e,getResultUrl:e=>{const s=e?.data?.data,t=Array.isArray(s)?s:[];return t.find(e=>e?.cld2AudioUrl)?.cld2AudioUrl},getErrorMsg:(e,s)=>e?.data?.failReason||e?.message||s("音乐生成失败")}),"/kling/v1/videos/image-recognize":e=>({getTaskId:e=>e?.data?.task_id,getPollUrl:e=>`/kling/v1/videos/image-recognize/${e}`,getStatus:e=>e?.data?.task_status,isSuccess:e=>"succeed"===e,isFailure:e=>"failed"===e,getResultUrl:()=>null,getResultText:e=>{const s=e?.data?.task_result?.results;if(Array.isArray(s)&&s.length)return s.map(e=>e.result||e.content||JSON.stringify(e)).join("\n");const t=e?.data?.task_result;return null!=t?JSON.stringify(t):null},getErrorMsg:(e,s)=>e?.data?.task_status_msg||e?.message||s("识别失败")}),"/kling/v1/general/custom-voices":e=>({getTaskId:e=>e?.data?.task_id,getPollUrl:e=>`/kling/v1/general/custom-voices/${e}`,getStatus:e=>e?.data?.task_status,isSuccess:e=>"succeed"===e,isFailure:e=>"failed"===e,getResultUrl:e=>{const s=e?.data?.task_result?.voices?.[0];return s?.trial_url||s?.url||null},getResultText:s=>{const t=s?.data?.task_result?.voices?.[0];if(!t?.voice_id)return null;const a=[e("自定义音色创建成功"),`voice_id: ${t.voice_id}`];return t.voice_name&&a.push(`voice_name: ${t.voice_name}`),a.join("\n")},getErrorMsg:(e,s)=>e?.data?.task_status_msg||e?.message||s("生成失败")}),"/alibailian/api/v1/services/aigc/video-generation/video-synthesis":e=>({getTaskId:e=>e?.output?.task_id,getPollUrl:e=>`/alibailian/tasks/${e}`,getStatus:e=>e?.output?.task_status||e?.task_status,isSuccess:e=>"SUCCEEDED"===e,isFailure:e=>"FAILED"===e||"CANCELED"===e,getResultUrl:e=>e?.output?.video_url,getErrorMsg:(e,s)=>e?.output?.message||e?.output?.code||s("视频生成失败")})};function hs(e){const s=te(e),t=s.startsWith("/kling/v1/images/"),a=s.startsWith("/kling/v1/audio/");return{getTaskId:e=>e?.data?.task_id||e?.data?.id,getPollUrl:e=>`${s}/${e}`,getStatus:e=>e?.data?.task_status||e?.data?.status,isSuccess:e=>"succeed"===e,isFailure:e=>"failed"===e,getResultUrl:e=>{const s=e?.data?.task_result;if(s)return t?s.images?.[0]?.url:a?s.audios?.[0]?.url_mp3||s.audios?.[0]?.url||s.audios?.[0]?.url_wav:s.videos?.[0]?.url},getErrorMsg:(e,s)=>e?.data?.task_status_msg||e?.data?.message||e?.message||s("生成失败")}}function vs(e){return e?Array.isArray(e.data)?e.data[0]||null:e.data&&"object"==typeof e.data?e.data:null:null}function _s(e){const s=te(e);return{getTaskId:e=>{const s=vs(e);return s?.id||s?.task_id},getPollUrl:e=>`${s}/${e}`,getStatus:e=>{const s=vs(e);return s?.status||s?.task_status},isSuccess:e=>{const s=String(e||"").toLowerCase();return"succeed"===s||"succeeded"===s},isFailure:e=>{const s=String(e||"").toLowerCase();return"failed"===s||"fail"===s},getResultUrl:e=>{const s=vs(e);if(!s)return;const t=s.task_result?.videos?.[0]?.url;if(t)return t;const a=s.outputs;if(Array.isArray(a)&&a.length){const e=a[0];return"string"==typeof e?e:e?.url}},getErrorMsg:(e,s)=>{const t=vs(e);return t?.task_status_msg||t?.message||e?.message||s("生成失败")}}}function fs(){return{getTaskId:e=>e?.request_id||e?.id,getPollUrl:e=>`/v1/videos/${e}`,getStatus:e=>e?.status,isSuccess:e=>"done"===e||"completed"===e||"succeeded"===e||"SUCCESS"===e,isFailure:e=>"failed"===e||"error"===e||"FAILURE"===e,getResultUrl:e=>e?.video?.url||e?.video_url||e?.url,getErrorMsg:(e,s)=>e?.error?.message||xs(e?.error)||s("视频生成失败")}}function bs(){return{getTaskId:e=>null!=e?.Resp?.video_id?String(e.Resp.video_id):void 0,getPollUrl:e=>`/openapi/v2/video/result/${e}`,getStatus:e=>e?.Resp?.status,isSuccess:e=>1===e,isFailure:e=>6===e||7===e||8===e,getResultUrl:e=>e?.Resp?.url,getErrorMsg:(e,s)=>{const t=e?.Resp?.status;return 7===t?s("内容审核失败"):6===t?s("视频已删除"):e?.ErrMsg||s("视频生成失败")}}}function js(e){const s=te(e),t=e=>e?.images||(e?.image?[e.image]:null),a=e=>e?.video?.url||e?.videos?.[0]?.url||("string"==typeof e?.video?e.video:null);return{maxAttempts:72,getTaskId:e=>e?.request_id,getPollUrl:e=>`${s}/requests/${e}`,getStatus:e=>{if(t(e)?.length||a(e))return"success";const s="string"==typeof e?.status?e.status.toUpperCase():"";return e?.error||"ERROR"===s||"FAILED"===s?"failed":"pending"},isSuccess:e=>"success"===e,isFailure:e=>"failed"===e,getResultUrl:e=>a(e)||t(e)?.[0]?.url,getErrorMsg:(e,s)=>xs(e?.error)||e?.detail||s("生成失败")}}function ys(e,s=e=>e){const t=te(e);return t?gs[t]?{...us,...gs[t](s)}:ps(t)?{...us,..._s(e)}:t.startsWith("/fal-ai/")?{...us,...js(e)}:t.startsWith("/replicate/")?{...us,interval:5e3,maxAttempts:90,getTaskId:e=>e?.id,getPollUrl:e=>`/replicate/v1/predictions/${e}`,getStatus:e=>e?.status,isSuccess:e=>"succeeded"===e,isFailure:e=>"failed"===e||"canceled"===e,getResultUrl:e=>{const s=e?.output;if(s)return Array.isArray(s)?s[0]:"string"==typeof s?s:s?.audio||s?.url},getErrorMsg:(e,s)=>xs(e?.error)||s("生成失败")}:t.startsWith("/mj/")?{...us,interval:5e3,maxAttempts:90,getTaskId:e=>e?.result,getPollUrl:e=>`/mj/task/${e}/fetch`,getStatus:e=>e?.status,isSuccess:e=>"SUCCESS"===e,isFailure:e=>"FAILURE"===e,getResultUrl:e=>e?.imageUrl,getErrorMsg:(e,s)=>e?.failReason||e?.description||s("生成失败")}:t.startsWith("/kling/")?{...us,...hs(e)}:t.startsWith("/ent/v2/")?{...us,getTaskId:e=>e?.task_id||e?.id,getPollUrl:e=>`/ent/v2/tasks/${e}/creations`,getStatus:e=>e?.state,isSuccess:e=>"success"===e,isFailure:e=>"failed"===e,getResultUrl:e=>e?.creations?.[0]?.url||e?.result_url,getErrorMsg:(e,s)=>e?.fail_reason||e?.err_code||e?.message||s("生成失败")}:t.startsWith("/vidu-native/")?{...us,getTaskId:e=>e?.id||e?.task_id,getPollUrl:e=>`/vidu-native/video/generations/${e}`,getStatus:e=>e?.state||e?.status,isSuccess:e=>"success"===e||"succeeded"===e,isFailure:e=>"failed"===e,getResultUrl:e=>e?.video_url||e?.creations?.[0]?.url,getErrorMsg:(e,s)=>e?.fail_reason||e?.message||s("视频生成失败")}:t.startsWith("/openapi/v2/video/")?{...us,...bs()}:null:null}const ks=async e=>{const s=await(e=>new Promise(s=>{if(e.size<=4194304)return void s(e);const t=new Image,a=URL.createObjectURL(e);t.onload=()=>{URL.revokeObjectURL(a);const i=Math.min(4096/t.width,4096/t.height,1),r=document.createElement("canvas");r.width=Math.round(t.width*i),r.height=Math.round(t.height*i),r.getContext("2d").drawImage(t,0,0,r.width,r.height),r.toBlob(t=>s(t||e),"image/jpeg",.92)},t.onerror=()=>{URL.revokeObjectURL(a),s(e)},t.src=a}))(e),t=new FormData;t.append("file",s);const a=await fetch(k,{method:"POST",body:t});if(!a.ok)throw new Error(`HTTP ${a.status}`);const i=await a.json();if(i.url)return i.url;throw new Error(i.message||"No URL returned")},Ns=({label:e,desc:s,value:a})=>t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx("label",{className:"text-xs font-semibold text-foreground
1/70 tracking-wide",children:e}),s&&t.jsx(m,{content:s,position:"top",children:t.jsx(F,{size:11,className:"text-muted-foreground cursor-help flex-shrink-0"})})]}),void 0!==a&&t.jsx("span",{className:"text-xs font-mono bg-muted/60 rounded px-1.5 py-0.5 text-foreground/80 tabular-nums",children:a})]}),ws=({value:e,onChange:a,onFileChange:i,label:n,desc:l,placeholder:m,disabled:p,base64Mode:u=!1,showUrlInput:x=!0})=>{const{t:g}=_(),h=m??g("粘贴图片 URL 或点击上传..."),[v,f]=s.useState(!1),[b,j]=s.useState(!1),y=s.useRef(null),k=async e=>{if(e&&e.type.startsWith("image/"))if(e.size>20971520)c.error(g("图片大小不能超过 20MB"));else{f(!0);try{if(u){const s=await new Promise((s,t)=>{const a=new FileReader;a.onload=()=>s(a.result),a.onerror=t,a.readAsDataURL(e)});a(s),c.success(g("图片读取成功"))}else{const s=await ks(e);i?.(e),a(s),c.success(g("图片上传成功"))}}catch(s){c.error(g(u?"图片读取失败":"图片上传失败")+": "+s.message)}finally{f(!1)}}else c.error(g("请选择图片文件"))};return t.jsxs("div",{className:"space-y-1.5",children:[n&&t.jsx(Ns,{label:n,desc:l}),t.jsx("div",{className:`relative rounded-xl border-2 border-dashed transition-colors ${b?"border-primary bg-primary/5":"border-border"} ${p?"opacity-50 pointer-events-none":""}`,onDragOver:e=>{e.preventDefault(),j(!0)},onDragLeave:()=>j(!1),onDrop:e=>{e.preventDefault(),j(!1);const s=e.dataTransfer.files?.[0];s&&k(s)},children:e?t.jsxs("div",{className:"flex items-center gap-3 p-3",children:[t.jsx("img",{src:e,alt:"",className:"w-14 h-14 object-cover rounded-lg border flex-shrink-0"}),t.jsx("div",{className:"flex-1 min-w-0",children:t.jsx(r,{value:e,onChange:e=>{i?.(null),a(e)},placeholder:h,disabled:p,style:{fontSize:12}})}),t.jsx("button",{onClick:()=>{a(""),i?.(null)},className:"flex-shrink-0 w-6 h-6 rounded-full bg-muted hover:bg-red-100 hover:text-red-500 flex items-center justify-center transition-colors",children:t.jsx(q,{size:12})})]}):t.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 py-5 cursor-pointer",onClick:()=>y.current?.click(),children:[v?t.jsx(o,{size:"small"}):t.jsx(L,{size:20,className:"text-muted-foreground"}),t.jsxs("div",{className:"text-center",children:[t.jsx("p",{className:"text-xs font-medium text-foreground/70",children:g(v?u?"读取中...":"上传中...":"点击或拖拽图片到此处")}),t.jsx("p",{className:"text-[11px] text-muted-foreground mt-0.5",children:g(u?"图片将以 base64 格式直接嵌入请求(不上传图床)":"支持 JPG / PNG / WebP,最大 20MB")})]}),!v&&t.jsx("div",{className:"flex items-center gap-2 mt-1",children:t.jsx(d,{size:"small",icon:t.jsx(L,{size:11}),onClick:e=>{e.stopPropagation(),y.current?.click()},disabled:p,children:g(u?"选择图片":"上传图片")})})]})}),!e&&x&&t.jsx(r,{value:"",onChange:e=>{i?.(null),a(e)},placeholder:h,prefix:t.jsx(C,{size:12,className:"text-muted-foreground"}),disabled:p,style:{fontSize:12}}),t.jsx("input",{ref:y,type:"file",accept:"image/*",style:{display:"none"},onChange:e=>{const s=e.target.files?.[0];s&&k(s),e.target.value=""}})]})},Ss=({label:e,desc:a,value:i,onChange:r,max:o=4,disabled:n,base64Mode:l=!1})=>{const{t:d}=_(),c=Array.isArray(i)?i:[],m=s.useRef(null),p=e=>e.startsWith("data:")?`[base64 图片(${(e.length/1024).toFixed(0)} KB)]`:e;return t.jsxs("div",{className:"space-y-2",children:[t.jsx(Ns,{label:`${e}(${c.length}/${o})`,desc:a}),c.map((e,s)=>t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("img",{src:e,alt:"",className:"w-8 h-8 object-cover rounded border border-border flex-shrink-0",onError:e=>{e.currentTarget.style.display="none"}}),t.jsx("div",{className:"flex-1 min-w-0 text-xs truncate text-muted-foreground font-mono bg-muted/30 rounded px-2 py-1",children:p(e)}),t.jsx("button",{onClick:()=>(e=>r(c.filter((s,t)=>t!==e)))(s),className:"p-1 rounded text-muted-foreground hover:text-red-500 transition-colors flex-shrink-0",children:t.jsx(q,{size:12})})]},s)),c.length<o&&t.jsx(ws,{value:"",onChange:e=>{(e=>{!e||c.length>=o||r([...c,e])})(e),m.current=null},onFileChange:e=>{m.current=e},label:c.length?d("继续添加"):void 0,placeholder:l?d("点击或拖拽上传图片"):"https://...",disabled:n,base64Mode:l,showUrlInput:!l})]})},Cs=({routingPreview:e,previewLoading:s})=>{const{t:a}=_();if(s)return t.jsxs("div",{className:"flex items-center gap-1.5 px-3 py-2 rounded-xl bg-muted/50 text-xs text-muted-foreground",children:[t.jsx(o,{size:"small"}),t.jsx("span",{children:a("正在预估路由...")})]});if(!e)return null;const i=e.estimated_group||"-",r=j(),n=localStorage.getItem("currency_type")||"USD",l=(()=>{try{return JSON.parse(localStorage.getItem("status")||"{}")}catch{return{}}})(),d=Number(l.usd_exchange_rate)||7.3,c=Number(l.custom_currency_exchange_rate)||1,p=e=>null==e?null:"CNY"===n?e*d:"CUSTOM"===n?e*c:e,u=e=>null==e?null:`${r}${e<1?e.toFixed(4):e.toFixed(2)}`,x=e.estimated_input_price_per_m,g=e.estimated_output_price_per_m,h=null!=x&&Number(x)>0?p(Number(x)):null,v=null!=g&&Number(g)>0?p(Number(g)):null,f=null!=h&&null!=v&&Math.abs(v-h)>1e-4,b=!!e.warning,y=null!=e.price_multiplier?Number(e.price_multiplier).toFixed(1):null,k={auto:a("系统默认"),price:a("价格优先"),speed:a("速度优先"),success_rate:a("成功率优先")}[e.priority_applied]||a("系统默认"),N=Array.isArray(e.candidate_groups)?e.candidate_groups:[],w=!!e.group_expanded,S=t.jsxs("div",{className:"text-xs leading-relaxed",style:{maxWidth:280},children:[t.jsxs("div",{children:[a("策略"),":",t.jsx("strong",{children:k})]}),t.jsxs("div",{className:"mt-1",children:[a(w?"候选分组(按策略偏好排序)":"候选分组(按尝试顺序)"),":"]}),t.jsx("div",{className:"break-all",children:N.length?N.join("  →  "):"-"}),t.jsx("div",{className:"mt-1 opacity-80",children:a(w?"智能路由已扩展为你可访问的全部渠道分组(不受令牌绑定分组限制)":"系统默认模式,使用令牌绑定的分组")}),t.jsx("div",{className:"mt-1 opacity-80",children:a(w?"智能路由会汇聚候选分组下的全部渠道统一比较,按所选策略选出最优渠道;上方分组已按该策略的偏好排序,排在最前的即结果分组。":"系统按上述顺序逐个分组查找该模型的可用渠道,命中的第一个分组即为结果。")}),t.jsxs("div",{className:"mt-1",children:[a("结论:选中渠道位于分组")," ",t.jsx("strong",{children:i})]})]});return t.jsxs("div",{className:"flex items-center gap-2 px-3 py-2 rounded-xl text-xs "+(b?"bg-orange-50 dark:bg-orange-900/20 text-orange-700 dark:text-orange-400 border border-orange-200 dark:border-orange-800":"bg-muted/50 text-muted-foreground"),children:[t.jsx(F,{size:12,className:"flex-shrink-0"}),t.jsxs("span",{children:[a("预计选中渠道所在分组")," ",t.jsx("strong",{children:i}),null!=h&&t.jsx("span",{children:f?t.jsxs(t.Fragment,{children:[",",a("输入约")," ",t.jsxs("strong",{children:[u(h),"/M"]}),",",a("输出约")," ",t.jsxs("strong",{children:[u(v),"/M"]})]}):t.jsxs(t.Fragment,{children:[",",a("约")," ",t.jsxs("strong",{children:[u(h),"/M"]})]})}),b&&y&&t.jsxs("span",{className:"ml-1 font-semibold",children:["(",y,"x ",a("基准价,将弹窗确认"),")"]})]}),t.jsx(m,{content:S,position:"topLeft",children:t.jsx("span",{className:"ml-1 underline decoration-dotted cursor-help opacity-80 hover:opacity-100 flex-shrink-0",children:a("为什么?")})})]})},Ts=["16:9","9:16","1:1","4:3","3:4","3:2","2:3","21:9"],Ps=["16:9","9:16","1:1"],Rs=(e,s)=>e?.modes?.length?e.modes.includes(s)?s:e.modes[0]:"text2video",zs={text2video:{label:"文生视频",desc:"Text to Video"},image2video:{label:"图生视频",desc:"Image to Video"},firstlast:{label:"首尾帧",desc:"First & Last Frame"},reference2video:{label:"参考生视频",desc:"Reference to Video"},video_edit:{label:"视频编辑",desc:"Video Edit"}},Is=e=>{if(401===e){if(!localStorage.getItem("user")){y(),p.confirm({title:"请先登录",content:"您尚未登录或登录已过期,需要登录后才能使用模型体验功能。",okText:"去登录",cancelText:"取消",onOk:()=>{window.location.href=`/login?redirect=${encodeURIComponent(window.location.pathname+window.location.search)}`}});const e=new Error("Unauthorized");throw e.name="AbortError",e}throw new Error("API 令牌认证失败(401):令牌可能已无配额或已被禁用,请在「API 令牌」页面检查并更新")}},$s={"/v1/videos/generations":{label:"视频生成",desc:"Generate",primary:!0},"/v1/videos/edits":{label:"视频编辑",desc:"Edit"}
1,"/kling/text-to-video/kling-3.0-turbo":{label:"文生视频",desc:"Text to Video",primary:!0},"/kling/image-to-video/kling-3.0-turbo":{label:"图生视频",desc:"Image to Video"},"/kling/text-to-video/{model}":{label:"文生视频",desc:"Text to Video",primary:!0},"/kling/image-to-video/{model}":{label:"图生视频",desc:"Image to Video"}},Os=e=>{const s=te(e);return $s[s]?$s[s]:ps(s)?s.includes("/image-to-video/")?{label:"图生视频",desc:"Image to Video"}:{label:"文生视频",desc:"Text to Video",primary:!0}:null},Ms=["720p","1080p"],As=["16:9","9:16","1:1"],Es=Array.from({length:13},(e,s)=>s+3),Us={"/openapi/v2/video/text/generate":{label:"文生视频",desc:"Text to Video"},"/openapi/v2/video/img/generate":{label:"图生视频",desc:"Image to Video"},"/openapi/v2/video/transition/generate":{label:"首尾帧转场",desc:"Transition"},"/openapi/v2/video/extend/generate":{label:"视频延长",desc:"Extend"},"/openapi/v2/video/fusion/generate":{label:"多主体融合",desc:"Fusion"}},Ds=(e,s,t)=>{let a=null;if(s){const t=te(s);for(const s of Object.values(e||{}))if("string"==typeof s&&te(s)===t){a=t;break}}return a||(a=(e=>{let s=null;for(const t of Object.values(e||{})){if("string"!=typeof t)continue;const e=me(t);if(e&&"video"===e.category&&"async"===e.mode){const e=te(t)||null;if(!e)continue;const a=Os(e);if(!a||a.primary)return e;s||(s=e)}}return s})(e)),a?t?cs(a,t):a:null},Fs={price:":floor",speed:":nitro",success_rate:":stable"},qs=(e,s)=>s?`${e}${Fs[s]||""}`:e,Ls=(e,s,t)=>{let a=e;for(let i=0;i<s.length-1;i++){if(null==a)return;a=a[s[i]]}null!=a&&(a[s[s.length-1]]=t)},Gs=e=>{const s=e.indexOf(","),t=e.slice(0,s),a=e.slice(s+1),i=(t.match(/data:([^;]+)/)||[])[1]||"image/png",r=atob(a),o=new Uint8Array(r.length);for(let n=0;n<r.length;n++)o[n]=r.charCodeAt(n);return new Blob([o],{type:i})},Vs=async(e,s,{tokenKey:t,signal:a,t:i})=>{if(!s||!s.length)return;const r={Authorization:`Bearer ${t}`};for(const n of s){const s=new FormData,t=n.sourceUrl;if("string"==typeof t&&t.startsWith("data:")){const e=Gs(t),a=(e.type.split("/")[1]||"png").replace("jpeg","jpg");s.append("image",e,`image.${a}`)}else s.append("image_url",t);const l=await fetch("/openapi/v2/image/upload",{method:"POST",headers:r,body:s,signal:a});Is(l.status);const d=await l.text();let c={};try{c=d?JSON.parse(d):{}}catch(o){c={}}const m=c?.Resp?.img_id??c?.img_id??c?.Resp?.id??c?.data?.img_id;if(null==m){const e=c?.ErrMsg||c?.error?.message||c?.message||`HTTP ${l.status}${d?`: ${d.slice(0,200)}`:`: ${i("上游返回空响应")}`}`;throw new Error(`${i("图片上传失败")}(${n.sourceUrl}):${e}`)}Ls(e,n.targetPath,Number(m))}},Bs=(e,s)=>{for(const t of Object.values(e||{})){if("string"!=typeof t)continue;const e=me(t);if(e&&e.category===s)return te(t)||null}return null},Ks=["1:1","16:9","9:16","4:3","3:4","2:3","3:2","4:5","5:4"],Hs=["1K","2K","4K"],Js=e=>{for(const s of Object.values(e||{})){if("string"!=typeof s)continue;const e=te(s);if(e.includes(":generatecontent")&&!e.includes("-tts")&&!e.includes("imagen"))return s}return null};function Ws({selectedModel:e,modelStr:s,selectedGroup:t,routingMode:a,videoParams:i,modelPreset:r,t:o,skipFieldValidation:n=!1}){const l="function"==typeof o?o:e=>e,d=e=>!n&&e,c=ke[e]||ke._default,m=(s||e||"").replace(/:floor$|:nitro$|:stable$/,""),p=ke[e]?null:Ds(r?.endpoint_configs,i.pixverse_endpoint,m);if(!ke[e]&&!r&&!e.startsWith("fal-ai/"))return{error:l("模型配置加载中,请稍后再试")};const u=Rs(c,i.mode),x=s.replace(/:floor$|:nitro$|:stable$/,""),g="falai"===c.pollMode||x.startsWith("fal-ai/");let h,v,_=null;if(g){v=`/${x}`;const e=x.includes("veo3");h={prompt:i.prompt||""};const s=i.aspect_ratio||c.aspectRatios&&c.aspectRatios[0];s&&(h.aspect_ratio=s);const r=i.duration||c.durations&&c.durations[0];if(r&&(h.duration=e?`${r}s`:String(r)),e){const e=c.sizes?.includes(i.size)?i.size:c.sizes&&c.sizes[0];e&&(h.resolution=e),h.generate_audio=!1!==i.generate_audio}else i.negative_prompt?.trim()&&(h.negative_prompt=i.negative_prompt.trim());(x.includes("image-to-video")||"image2video"===u)&&i.image_url&&(h.image_url=i.image_url),t&&!a&&(h.group=t)}else if("doubao"===c.pollMode){v=c.endpoint;const e=s.replace(/:floor$|:nitro$|:stable$/,""),r=[{type:"text",text:i.prompt||""}];i.image_url&&r.push({type:"image_url",image_url:{url:i.image_url},role:"first_frame"}),h={model:e,content:r};const o=i.size||c.sizes&&c.sizes[0];o&&(h.size=o);const n=i.duration||c.durations&&c.durations[0];n&&(h.duration=n),t&&!a&&(h.group=t)}else if("veo"===c.pollMode){v=c.endpoint,h={model:s.replace(/:floor$|:nitro$|:stable$/,""),prompt:i.prompt||""};const e=i.size||c.sizes&&c.sizes[0];e&&(h.size=e);const r=i.duration||c.durations&&c.durations[0];r&&(h.seconds=String(r));const o=i.aspect_ratio||c.aspectRatios&&c.aspectRatios[0];o&&(h.aspect_ratio=o),"image2video"===u&&i.image_url&&(h.images=[i.image_url]),t&&!a&&(h.group=t)}else if("omni"===c.pollMode){v=c.endpoint;const e=s.replace(/:floor$|:nitro$|:stable$/,""),r={text2video:1,firstlast:2,image2video:3,video_edit:4}[Rs(c,i.mode)]||1;h={model:e,prompt:i.prompt||"",type:r};const o=i.duration||c.durations&&c.durations[0]||8;h.seconds=String(o);const n=i.aspect_ratio||c.aspectRatios&&c.aspectRatios[0];if(n&&(h.aspect_ratio=n),2===r||3===r){const e=2===r?2:3,s=(i.ref_images||[]).slice(0,e);s.length>0&&(h.images=s)}4===r&&i.omni_input_reference&&(h.input_reference=i.omni_input_reference),c.supportsEnableUpsample&&i.omni_enable_upsample&&(h.enable_upsample=!0),c.supportsEnableSample&&i.omni_enable_sample&&(h.enable_sample=!0),t&&!a&&(h.group=t)}else if("seedance2"===c.pollMode){v=c.endpoint;const e=s.replace(/:floor$|:nitro$|:stable$/,""),r=[{type:"text",text:i.prompt||""}];"image2video"===u&&i.image_url&&r.push({type:"image_url",image_url:{url:i.image_url},role:"first_frame"}),h={model:e,content:r};const o=i.size||c.sizes&&c.sizes[0];o&&(h.size=o);const n=i.duration||c.durations&&c.durations[0];n&&(h.duration=n),t&&!a&&(h.group=t)}else if("luma"===c.pollMode){v=c.endpoint;const e=s.replace(/:floor$|:nitro$|:stable$/,"");h={model_name:c.lumaModelName||e,user_prompt:i.prompt||""};const r=c.sizes?.includes(i.size)?i.size:c.sizes&&c.sizes[0];r&&(h.resolution=r);const o=i.duration||c.durations&&c.durations[0];o&&(h.duration=o);const n=i.aspect_ratio||c.aspectRatios&&c.aspectRatios[0];n&&(h.aspect_ratio=n),"image2video"===u&&i.image_url&&(h.image_url=i.image_url),t&&!a&&(h.group=t)}else if("runway"===c.pollMode){if(v=c.endpoint,d(!i.image_url))return{error:l("Runway 仅支持图生视频,请提供参考图"),endpoint:v};const e=s.replace(/:floor$|:nitro$|:stable$/,""),r=i.aspect_ratio||c.aspectRatios&&c.aspectRatios[0]||"1280:720",o=i.duration||c.durations&&c.durations[0]||5;h={model:e,promptImage:[{uri:i.image_url,position:"first"}],ratio:r,duration:o},i.prompt&&(h.promptText=i.prompt),t&&!a&&(h.group=t)}else if("jimeng"===c.pollMode){v=c.endpoint,h={model:s.replace(/:floor$|:nitro$|:stable$/,""),prompt:i.prompt||""};const e=i.duration||c.durations&&c.durations[0]||5;h.duration=e;const r=i.aspect_ratio||c.aspectRatios&&c.aspectRatios[0]||"16:9";h.aspect_ratio=r,"image2video"===u&&i.image_url&&(h.image_url=i.image_url),t&&!a&&(h.group=t)}else if("tencentvod"===c.pollMode){v=c.endpoint||"/tencent-vod/v1/aigc-video",h={model_name:c.tencentModelName,model_version:c.tencentModelVersion,prompt:i.prompt||""};const e=c.sizes?.includes(i.size)?i.size:c.sizes?.[0]||"720P",s=c.durations?.includes(i.duration)?i.duration:c.durations?.[0]||5;if(h.output_config={resolution:e,duration:s},c.aspectRatios?.length){const e=c.aspectRatios.includes(i.aspect_ratio)?i.aspect_ratio:c.aspectRatios[0]||"16:9";h.output_config.aspect_ratio=e}"image2video"===u&&i.image_url&&(h.file_infos=[{type:"url",category:"Image",url:i.image_url}]),i.tvod_negative_prompt?.trim()&&(h.negative_prompt=i.tvod_negative_prompt.trim()),!0===i.tvod_enhance_prompt&&(h.enhance_prompt="true"),"image2video"===u&&i.tvod_last_frame_url?.trim()&&(h.last_frame_url=i.tvod_last_frame_url.trim()),t&&!a&&(h.group=t)}else if("vidu"===c.pollMode){const e="firstlast"===u,r="reference2video"===u,o=!e&&!r&&"image2video"===u&&i.image_url;v=e?c.endpointSE||"/ent/v2/start-end2video":r?c.endpointRef||"/ent/v2/reference2video":o?c.endpointI2V||"/ent/v2/img2video":c.endpoint||"/ent/v2/text2video";const n=s.replace(/:floor$|:nitro$|:stable$/,""),m=c.sizes?.includes(i.size)?i.size:c.sizes?.[0]||"720p",p=c.durations?.includes(i.duration)?i.duration:c.durations?.[0]||5,x=(i.vidu_ref_images||[]).filter(
1Boolean);if(h={model:n,prompt:i.prompt||"",resolution:m,duration:p},!o&&!e){const e=we(c,u),s=e?.includes(i.aspect_ratio)?i.aspect_ratio:e?.[0]||"16:9";h.aspect_ratio=s}if(o&&(h.images=[i.image_url]),e&&(h.images=[i.vidu_start_frame||"",i.vidu_end_frame||""]),r&&(h.images=x),t&&!a&&(h.group=t),e&&d(!i.vidu_start_frame||!i.vidu_end_frame))return{error:l("请上传首帧和尾帧图片"),endpoint:v,body:h};if(r&&d(0===x.length))return{error:l("请至少上传一张参考图片"),endpoint:v,body:h}}else if("pixverse"===c.pollMode){v=c.endpoint||"/openapi/v2/video/text/generate";const e=s.replace(/:floor$|:nitro$|:stable$/,""),r=c.sizes?.includes(i.size)?i.size:c.sizes?.[0]||"720p",o=c.durations?.includes(i.duration)?i.duration:c.durations?.[0]||5,n=c.aspectRatios?.includes(i.aspect_ratio)?i.aspect_ratio:c.aspectRatios?.[0]||"16:9";h={model:e,prompt:i.prompt||"",quality:r,duration:o,aspect_ratio:n},i.negative_prompt?.trim()&&(h.negative_prompt=i.negative_prompt.trim()),t&&!a&&(h.group=t)}else if("minimax"===c.pollMode){v=c.endpoint,h={model:s.replace(/:floor$|:nitro$|:stable$/,""),prompt:i.prompt||""};const e=c.sizes?.includes(i.size)?i.size:c.sizes?.[0];e&&(h.resolution=e);const r=c.durationBySize?.[e]||c.durations||[],o=r.includes(i.duration)?i.duration:r[0];o&&(h.duration=o),"image2video"===u&&i.image_url&&(h.first_frame_image=i.image_url),c.supportsPromptOptimizer&&(h.prompt_optimizer=!1!==i.prompt_optimizer),c.supportsFastPretreatment&&!0===i.fast_pretreatment&&(h.fast_pretreatment=!0),c.supportsAigcWatermark&&(h.aigc_watermark=!0===i.aigc_watermark),c.supportsCallbackUrl&&i.callback_url?.trim()&&(h.callback_url=i.callback_url.trim()),t&&!a&&(h.group=t)}else if(c.bailianMode){v="/alibailian/api/v1/services/aigc/video-generation/video-synthesis";const e=s.replace(":floor","").replace(":nitro","").replace(":stable",""),r=c.sizes?.includes(i.size)?i.size:c.sizes?.[0]||"1080P",o={prompt:i.prompt||""},n=[];"i2v"===c.bailianMode&&i.image_url?/^wan/i.test(e)?o.img_url=i.image_url:n.push({type:"first_frame",url:i.image_url}):"r2v"===c.bailianMode?(i.ref_images||[]).forEach(e=>n.push({type:"reference_image",url:e})):"video-edit"===c.bailianMode&&i.video_url&&(n.push({type:"video",url:i.video_url}),i.image_url&&n.push({type:"reference_image",url:i.image_url})),n.length&&(o.media=n);const l={resolution:r};if("video-edit"!==c.bailianMode){const e=c.durations||[];l.duration=e.includes(i.duration)?i.duration:e.includes(5)?5:e[0]}c.aspectRatios?.includes(i.aspect_ratio)&&(l.ratio=i.aspect_ratio),c.supportsParameterWatermark&&(l.watermark=!1!==i.bailian_watermark),c.audioSettings?.length&&c.audioSettings.includes(i.audio_setting)&&(l.audio_setting=i.audio_setting),h={model:e,input:o,parameters:l},t&&!a&&(h.group=t)}else if("openai-video"===c.pollMode){v=c.endpoint,h={model:s.replace(/:floor$|:nitro$|:stable$/,""),prompt:i.prompt||""};const e=i.size||c.sizes&&c.sizes[0];e&&(h.size=e);const r=i.duration||c.durations&&c.durations[0];r&&(h.seconds=String(r));const o=i.aspect_ratio||c.aspectRatios&&c.aspectRatios[0];o&&(h.aspect_ratio=o),i.image_url&&(h.input_reference=i.image_url,h.image_url=i.image_url),t&&!a&&(h.group=t)}else if(p&&ps(p)){if(v=te(p),v.includes("{model}")||/%7bmodel%7d/i.test(v))return{error:l("无法解析模型端点,请刷新后重试"),endpoint:v};const e=v.includes("/image-to-video/"),s=Ms.includes(i.size)?i.size:"720p",t=As.includes(i.aspect_ratio)?i.aspect_ratio:"16:9",a=Number(i.duration),r={resolution:s,aspect_ratio:t,duration:Es.includes(a)?a:5};if(e){const e=(i.image_url||"").trim();if(d(!e))return{error:l("请上传首帧图片"),endpoint:v};const s=[{type:"first_frame",url:e}],t=(i.prompt||"").trim();if(d(t&&t.length>2500))return{error:l("图生视频 prompt 最多 2500 字符"),endpoint:v};t&&s.push({type:"prompt",text:t}),h={contents:s,settings:r}}else{const e=(i.prompt||"").trim();if(d(!e))return{error:l("请填写视频描述 prompt"),endpoint:v};if(d(e.length>3072))return{error:l("文生视频 prompt 最多 3072 字符"),endpoint:v};h={prompt:e||"",settings:r}}const o=(i.kling_turbo_callback_url||"").trim(),n=(i.kling_turbo_external_task_id||"").trim();(o||n)&&(h.options={},o&&(h.options.callback_url=o),n&&(h.options.external_task_id=n))}else if(p&&te(p).startsWith("/kling/v1/videos/")){v=p;
1const e=te(p),r=s.replace(/:floor$|:nitro$|:stable$/,""),o=i.kling_v_mode||"std",n=String(i.kling_v_duration||"5");if(e.includes("/advanced-lip-sync")){const e=(i.kling_als_session_id||"").toString().trim(),s=(i.kling_als_audio_id||"").toString().trim(),t=(i.kling_als_sound_file||"").toString().trim();if(d(!e))return{error:l("请填写会话 ID(session_id)"),endpoint:v};if(d(!s&&!t))return{error:l("请填写音频 ID 或音频文件 URL"),endpoint:v};const a={face_id:(i.kling_als_face_id??"-1").toString(),sound_start_time:Number(i.kling_als_sound_start??0),sound_end_time:Number(i.kling_als_sound_end??5e3),sound_insert_time:Number(i.kling_als_sound_insert??0),sound_volume:Number(i.kling_als_sound_volume??1),original_audio_volume:Number(i.kling_als_original_volume??1)};s?a.audio_id=s:a.sound_file=t,h={session_id:e,face_choose:[a]}}else if(e.includes("/effects")){const e={duration:n};i.kling_v_image&&(e.image=i.kling_v_image);const s=i.kling_v_images||[];s.length&&(e.images=s,e.model_name=r,e.mode=o),h={effect_scene:i.kling_v_effect_scene||"",input:e}}else if(e.includes("/video-extend"))h={video_id:i.kling_v_video_id||"",prompt:i.prompt||""},i.kling_v_negative_prompt?.trim()&&(h.negative_prompt=i.kling_v_negative_prompt.trim()),""!==i.kling_v_cfg_scale&&null!=i.kling_v_cfg_scale&&(h.cfg_scale=Number(i.kling_v_cfg_scale));else if(e.includes("/multi-image2video"))h={model_name:r,prompt:i.prompt||"",mode:o,duration:n,image_list:(i.kling_v_image_list||[]).map(e=>({image:e}))},i.kling_v_aspect_ratio&&(h.aspect_ratio=i.kling_v_aspect_ratio),i.kling_v_negative_prompt?.trim()&&(h.negative_prompt=i.kling_v_negative_prompt.trim());else if(e.includes("/lip-sync")){const e=i.kling_v_video_id||"",s={mode:o,text:i.kling_v_text||"",voice_id:i.kling_v_voice_id||"",voice_language:i.kling_v_voice_language||"zh"};/^https?:\/\//i.test(e)?s.video_url=e:s.video_id=e,h={input:s}}else if(e.includes("/omni-video"))h={model_name:r,prompt:i.prompt||"",mode:o,duration:n,multi_shot:!1,image_list:(i.kling_v_omni_images||[]).map(e=>({image_url:e}))},i.kling_v_aspect_ratio&&(h.aspect_ratio=i.kling_v_aspect_ratio),!0===i.kling_v_sound&&(h.sound="on");else if(e.includes("/avatar/"))h={image:i.kling_v_image||"",prompt:i.prompt||"",mode:o},i.kling_v_audio_id?h.audio_id=i.kling_v_audio_id:i.kling_v_sound_file&&(h.sound_file=i.kling_v_sound_file);else if(e.includes("/motion-control"))h={model_name:r,prompt:i.prompt||"",mode:o,image_url:i.kling_v_image||"",video_url:i.kling_v_video_url||"",character_orientation:i.kling_v_orientation||"image",keep_original_sound:i.kling_v_keep_sound||"no"};else{const s=e.includes("image2video");h={model_name:r,prompt:i.prompt||"",mode:o,multi_shot:!1},i.aspect_ratio&&(h.aspect_ratio=i.aspect_ratio),i.duration&&(h.duration=String(i.duration).replace(/s$/,"")),s&&i.image_url&&(h.image=i.image_url),i.kling_negative_prompt?.trim()&&(h.negative_prompt=i.kling_negative_prompt.trim()),""!==i.kling_cfg_scale&&null!=i.kling_cfg_scale&&(h.cfg_scale=Number(i.kling_cfg_scale))}t&&!a&&(h.group=t)}else if(p&&"/ent/v2/reference2video"===te(p)){v=p;const e=(i.vidu_ref_model||"viduq3-mix").replace(/:floor$|:nitro$|:stable$/,""),s=(i.vidu_subjects||[{name:"",images:[""]}]).filter(e=>e?.name?.trim()).map(e=>({name:e.name.trim(),images:(e.images||[]).filter(Boolean)})).filter(e=>e.images.length>0);if(d(!s.length))return{error:l("请至少添加一个包含名称和图片的主体"),endpoint:v};h={model:e,prompt:i.prompt||"",subjects:s},i.vidu_ref_duration&&(h.duration=Number(i.vidu_ref_duration)),i.vidu_ref_aspect&&(h.aspect_ratio=i.vidu_ref_aspect),i.vidu_ref_res&&(h.resolution=i.vidu_ref_res),i.vidu_ref_movement&&(h.movement_amplitude=i.vidu_ref_movement),t&&!a&&(h.group=t)}else if(p&&"/ent/v2/start-end2video"===te(p)){if(v=p,d(!i.vidu_start_frame||!i.vidu_end_frame))return{error:l("请填写首帧和尾帧图片 URL"),endpoint:v};h={model:(i.vidu_se_model||"viduq3-pro").replace(/:floor$|:nitro$|:stable$/,""),prompt:i.prompt||"",images:[i.vidu_start_frame,i.vidu_end_frame]},i.vidu_se_duration&&(h.duration=Number(i.vidu_se_duration)),i.vidu_se_res&&(h.resolution=i.vidu_se_res),i.vidu_se_movement&&(h.movement_amplitude=i.vidu_se_movement),t&&!a&&(h.group=t)}else if(p&&"/openapi/v2/video/text/generate"===te(p)){v=p;const e=i.prompt?.trim();if(!e)return{error:l("请填写视频描述 prompt"),endpoint:v};h={prompt:e,model:i.pixverse_model||"v5",quality:i.pixverse_quality||"720p",duration:Number(i.pixverse_duration)||5,aspect_ratio:i.pixverse_aspect_ratio||i.aspect_ratio||"16:9"},i.negative_prompt?.trim()&&(h.negative_prompt=i.negative_prompt.trim()),t&&!a&&(h.group=t)}else if(p&&"/openapi/v2/video/img/generate"===te(p)){v=p;const e=i.pixverse_img_url?.trim();if(!e)return{error:l("请填写参考图 URL"),endpoint:v};const s=i.prompt?.trim();if(!s)return{error:l("请填写视频描述 prompt"),endpoint:v};h={img_id:e,prompt:s,model:i.pixverse_model||"v5",duration:Number(i.pixverse_duration)||5,quality:i.pixverse_quality||"720p"},_=[{sourceUrl:e,targetPath:["img_id"]}],t&&!a&&(h.group=t)}else if(p&&"/openapi/v2/video/fusion/generate"===te(p)){v=p;const e=(i.pixverse_fusion_refs||[]).filter(e=>e?.url?.trim());if(!e.length)return{error:l("请至少添加一张参考图"),endpoint:v};const s=i.prompt?.trim();if(!s)return{error:l("请填写视频描述 prompt"),endpoint:v};h={image_references:e.map(e=>{const s={img_id:e.url.trim()};return e.type&&(s.type=e.type),e.ref_name?.trim()&&(s.ref_name=e.ref_name.trim()),s}),prompt:s,model:i.pixverse_model||"v5",duration:Number(i.pixverse_duration)||5,quality:i.pixverse_quality||"720p",aspect_ratio:i.aspect_ratio||"16:9"},_=e.map((e,s)=>({sourceUrl:e.url.trim(),targetPath:["image_references",s,"img_id"]})),t&&!a&&(h.group=t)}else if(p&&"/openapi/v2/video/extend/generate"===te(p)){v=p;const e=i.pixverse_source_video_id?.trim();if(!e)return{error:l("请填写源视频 ID"),endpoint:v};const s=i.prompt?.trim();if(!s)return{error:l("请填写视频描述 prompt"),endpoint:v};h={source_video_id:Number(e),prompt:s,model:i.pixverse_model||"v5",duration:Number(i.pixverse_duration)||5,quality:i.pixverse_quality||"720p",water_mark:!1,seed:Number(i.pixverse_extend_seed)||0},t&&!a&&(h.group=t)}else if(p&&"/openapi/v2/video/sound_effect/generate"===te(p)){v=p;const e=i.pixverse_source_video_id?.trim();if(!e)return{error:l("请填写源视频 ID"),endpoint:v};h={source_video_id:Number(e)},h.original_sound_switch=!1!==i.pixverse_original_sound,i.pixverse_sound_content?.trim()&&(h.sound_effect_content=i.pixverse_sound_content.trim()),t&&!a&&(h.group=t)}else if(p&&"/openapi/v2/video/lip_sync/generate"===te(p)){v=p;const e=i.pixverse_lip_video_id?.trim();if(!e)return{error:l("请填写视频 ID"),endpoint:v};if(h={video_media_id:Number(e)},i.pixverse_lip_audio_media_id?.trim())h.audio_media_id=Number(i.pixverse_lip_audio_media_id.trim());else{if(!i.pixverse_lip_tts_content?.trim())return{error:l("请填写 TTS 文本或音频 media_id"),endpoint:v};h.lip_sync_tts_speaker_id="auto",h.lip_sync_tts_content=i.pixverse_lip_tts_content.trim()}t&&!a&&(h.group=t)}else if(p&&"/openapi/v2/video/mask/selection"===te(p)){v=p;const e=i.pixverse_mask_source_video_id?.toString().trim(),s=i.pixverse_mask_video_media_id?.toString().trim();if(!e&&!s)return{error:l("请填写源视频 ID 或上传视频 media_id"),endpoint:v};h={},s?h.video_media_id=Number(s):h.source_video_id=Number(e);const r=i.pixverse_mask_keyframe_id?.toString().trim();r&&(h.keyframe_id=Number(r)),t&&!a&&(h.group=t)}else if(p&&"/openapi/v2/video/modify/generate"===te(p)){v=p;const e=i.pixverse_modify_source_video_id?.toString().trim(),s=i.pixverse_modify_video_media_id?.toString().trim();if(!e&&!s)return{error:l("请填写源视频 ID 或上传视频 media_id"),endpoint:v};const r=i.prompt?.trim();if(!r)return{error:l("请填写编辑指令 prompt"),endpoint:v};h={prompt:r,quality:i.pixverse_modify_quality||"540p"},s?h.video_media_id=Number(s):h.source_video_id=e;const o=i.pixverse_modify_keyframe_id?.toString().trim();o&&(h.keyframe_ids=Number(o));const n=(i.pixverse_modify_mask_ids||[]).map(e=>
1(e??"").toString().trim()).filter(Boolean).slice(0,3);n.length&&(h.mask_ids=n);const d=(i.pixverse_modify_img_urls||[]).map(e=>(e??"").toString().trim()).filter(Boolean).slice(0,3);d.length&&(h.img_ids=[...d],_=d.map((e,s)=>({sourceUrl:e,targetPath:["img_ids",s]}))),t&&!a&&(h.group=t)}else if(p&&"/openapi/v2/video/swap/generate"===te(p)){v=p;const e=i.pixverse_swap_source_video_id?.toString().trim(),s=i.pixverse_swap_video_media_id?.toString().trim();if(!e&&!s)return{error:l("请填写源视频 ID 或上传视频 media_id"),endpoint:v};const r=i.pixverse_swap_keyframe_id?.toString().trim();if(!r||Number(r)<=0)return{error:l("请填写关键帧编号 keyframe_id(来自 mask/selection 接口)"),endpoint:v};const o=i.pixverse_swap_mask_id?.toString().trim();if(!o)return{error:l("请填写蒙版 mask_id(来自 mask/selection 接口)"),endpoint:v};const n=i.pixverse_swap_img_url?.toString().trim(),d=i.pixverse_swap_img_id?.toString().trim();if(!n&&!d)return{error:l("请填写目标图片:上传图片 URL 或已有 img_id"),endpoint:v};h={quality:i.pixverse_swap_quality||"540p",keyframe_id:Number(r),mask_id:o},s?h.video_media_id=Number(s):h.source_video_id=Number(e),n?(h.img_id=n,_=[{sourceUrl:n,targetPath:["img_id"]}]):h.img_id=Number(d),t&&!a&&(h.group=t)}else if(p&&"/openapi/v2/video/transition/generate"===te(p)){v=p;const e=i.prompt?.trim();if(!e)return{error:l("请填写视频描述 prompt"),endpoint:v};const s=i.pixverse_trans_first_url?.toString().trim(),r=i.pixverse_trans_first_id?.toString().trim();if(!s&&!r)return{error:l("请提供首帧图片:上传 URL 或已有 img_id"),endpoint:v};const o=i.pixverse_trans_last_url?.toString().trim(),n=i.pixverse_trans_last_id?.toString().trim();if(!o&&!n)return{error:l("请提供尾帧图片:上传 URL 或已有 img_id"),endpoint:v};h={prompt:e,model:i.pixverse_model||"v5",quality:i.pixverse_quality||"720p",duration:Number(i.pixverse_duration)||5},_=[],s?(h.first_frame_img=s,_.push({sourceUrl:s,targetPath:["first_frame_img"]})):h.first_frame_img=Number(r),o?(h.last_frame_img=o,_.push({sourceUrl:o,targetPath:["last_frame_img"]})):h.last_frame_img=Number(n),_.length||(_=null),t&&!a&&(h.group=t)}else if(p&&"/openapi/v2/video/mimic/generate"===te(p)){v=p;const e=i.pixverse_mimic_source_video_id?.toString().trim(),s=i.pixverse_mimic_video_media_id?.toString().trim();if(!e&&!s)return{error:l("请填写源视频 ID 或上传视频 media_id"),endpoint:v};const r=i.pixverse_mimic_img_url?.toString().trim(),o=i.pixverse_mimic_img_id?.toString().trim();if(!r&&!o)return{error:l("请填写主体图片:上传 URL 或已有 img_id"),endpoint:v};h={quality:i.pixverse_mimic_quality||"540p"},s?h.video_media_id=Number(s):h.source_video_id=Number(e),r?(h.img_id=r,_=[{sourceUrl:r,targetPath:["img_id"]}]):h.img_id=Number(o),t&&!a&&(h.group=t)}else if(p&&"/openapi/v2/video/restyle/generate"===te(p)){v=p;const e=i.pixverse_restyle_source_video_id?.toString().trim(),s=i.pixverse_restyle_video_media_id?.toString().trim();if(!e&&!s)return{error:l("请填写源视频 ID 或上传视频 media_id"),endpoint:v};const r=i.pixverse_restyle_id?.toString().trim(),o=i.pixverse_restyle_prompt?.toString().trim();if(!r&&!o)return{error:l("请填写风格 ID(restyle_id)或风格描述(restyle_prompt)"),endpoint:v};h={},s?h.video_media_id=Number(s):h.source_video_id=Number(e),r?h.restyle_id=Number(r):h.restyle_prompt=o,i.pixverse_restyle_quality&&(h.quality=i.pixverse_restyle_quality),t&&!a&&(h.group=t)}else if(p&&"/openapi/v2/video/multi_transition/generate"===te(p)){v=p;const e=(i.pixverse_mt_items||[]).map(e=>({url:(e?.url??"").toString().trim(),img_id:(e?.img_id??"").toString().trim(),duration:Number(e?.duration)||0,prompt:(e?.prompt??"").toString().trim()})).filter(e=>e.url||e.img_id);if(e.length<2)return{error:l("请至少添加 2 个关键帧"),endpoint:v};if(e.length>7)return{error:l("关键帧最多 7 个"),endpoint:v};for(let t=0;t<e.length-1;t++)if(e[t].duration<=0)return{error:l("除最后一帧外,每帧都需填写时长(秒)"),endpoint:v};_=[];const s=e.map((e,s)=>{const t={};return e.url?(t.img_id=e.url,_.push({sourceUrl:e.url,targetPath:["multi_transition",s,"img_id"]})):t.img_id=Number(e.img_id),e.duration>0&&(t.duration=e.duration),e.prompt&&(t.prompt=e.prompt),t});_.length||(_=null),h={model:i.pixverse_mt_model||"v5",quality:i.pixverse_mt_quality||"540p",multi_transition:s},t&&!a&&(h.group=t)}else if(!p||"/v1/videos/generations"!==te(p)&&"/v1/videos/edits"!==te(p))if(p&&te(p).startsWith("/replicate/")){v=p;const e={prompt:i.prompt||""};i.aspect_ratio&&(e.aspect_ratio=i.aspect_ratio),i.image_url&&(e.image=i.image_url),h={input:e},t&&!a&&(h.group=t)}else if(p){v=p,h={model:s.replace(/:floor$|:nitro$|:stable$/,""),prompt:i.prompt||""},i.aspect_ratio&&(h.aspect_ratio=i.aspect_ratio),i.duration&&(h.duration=i.duration);const e=i.size||c.sizes&&c.sizes[0];e&&(h.size=e),i.image_url&&(h.images=[i.image_url]),t&&!a&&(h.group=t)}else v="/v1/video/generations",h={model:s,prompt:i.prompt},i.size&&(h.size=i.size),i.aspect_ratio&&(h.aspect_ratio=i.aspect_ratio),i.duration&&(h.duration=i.duration),i.image_url&&(h.image_url=i.image_url),t&&!a&&(h.group=t);else{v=te(p);const e="/v1/videos/edits"===v,r=s.replace(/:floor$|:nitro$|:stable$/,""),o=i.prompt?.trim();if(d(!o))return{error:l("请填写视频描述 prompt"),endpoint:v};const n=Number(i.duration);if(h={model:r,prompt:o||"",resolution:["480p","720p"].includes(i.size)?i.size:"720p",aspect_ratio:["16:9","9:16","1:1"].includes(i.aspect_ratio)?i.aspect_ratio:"16:9",duration:[4,5,6,8,10,12,15].includes(n)?n:8},e){const e=i.video_url?.trim();if(d(!e))return{error:l("视频编辑需提供待编辑视频 URL"),endpoint:v};e&&(h.video={url:e}),i.image_url&&(h.image={url:i.image_url})}else i.image_url&&(h.image={url:i.image_url});t&&!a&&(h.group=t)}return{endpoint:v,method:"POST",body:h,uploads:_}}function Qs({selectedModel:e,modelStr:s,selectedGroup:t,routingMode:a,imageParams:i,modelPreset:r,t:o,skipFieldValidation:n=!1}){const l="function"==typeof o?o:e=>e,d=je[e]||je._default,c=e=>!n&&e;if(!je[e]&&!r)return{error:l("模型配置加载中,请稍后再试")};const m=je[e]?null:Bs(r?.endpoint_configs,"image"),p=m?te(m):"",u=je[e]?null:Js(r?.endpoint_configs),x=e=>(t&&!a&&(e.group=t),e);if(d.geminiNative||u){const s=[{text:i.prompt}];if(i.gemini_input_image){const e=i.gemini_input_image.match(/^data:([^;]+);base64,(.+)$/);e&&s.push({inlineData:{mimeType:e[1],data:e[2]}})}const t={};return i.gemini_aspect_ratio&&(t.aspectRatio=i.gemini_aspect_ratio),i.gemini_image_size&&(t.imageSize=i.gemini_image_size),{kind:"gemini",endpoint:`/v1beta/models/${e}:generateContent`,method:"POST",body:{contents:[{role:"user",parts:s}],generationConfig:{response_modalities:["IMAGE","TEXT"],...Object.keys(t).length>0&&{imageConfig:t}}},contentType:"json"}}if(d.falaiStyle){const e=s.replace(/:floor$|:nitro$|:stable$/,""),t={prompt:i.prompt||""};return t.aspect_ratio=i.aspect_ratio||d.aspectRatios?.[0]||"1:1",d.supportsImageInput&&i.image_url&&(t.image_url=i.image_url),{kind:"falai",endpoint:`/${e}`,method:"POST",body:x(t),contentType:"json"}}if(p.startsWith("/mj/")){let e;if("/mj/submit/blend"===p){const s=(i.mj_blend_images||[]).filter(
1Boolean);if(c(s.length<2))return{error:l("Blend 模式至少需要 2 张图片")};e={botType:i.mj_bot_type||"MID_JOURNEY",base64Array:s},i.mj_dimensions&&(e.dimensions=i.mj_dimensions),i.mj_quality&&(e.quality=i.mj_quality)}else if("/mj/submit/describe"===p){if(c(!i.mj_describe_image))return{error:l("请先上传要描述的图片")};e={botType:i.mj_bot_type||"MID_JOURNEY",base64:i.mj_describe_image}}else if("/mj/submit/modal"===p)e={maskBase64:i.mj_mask_image||"",prompt:i.prompt||"",taskId:i.mj_task_id||""};else if("/mj/submit/action"===p)e={chooseSameChannel:!0,customId:i.mj_custom_id||"",taskId:i.mj_task_id||""};else{e={botType:i.mj_bot_type||"MID_JOURNEY",prompt:i.prompt||""};const s=(i.mj_ref_images||[]).filter(Boolean);s.length?e.base64Array=s:i.image_url&&i.image_url.startsWith("data:")&&(e.base64Array=[i.image_url])}return{kind:"mj",endpoint:m,method:"POST",body:x(e),contentType:"json"}}if(p.startsWith("/replicate/")){const e={prompt:i.prompt||""};return i.aspect_ratio&&(e.aspect_ratio=i.aspect_ratio),i.image_url&&(e.image=i.image_url),{kind:"replicate",endpoint:m,method:"POST",body:x({input:e}),contentType:"json"}}if(p.startsWith("/ideogram/")){const e={prompt:i.prompt||""};return i.aspect_ratio&&(e.aspect_ratio=i.aspect_ratio),{kind:"ideogram",endpoint:m,method:"POST",body:x(e),contentType:"json"}}if(p.startsWith("/kling/v1/images/")){const e=s.replace(/:floor$|:nitro$|:stable$/,""),t=Number(i.kling_n)||1,a=i.kling_aspect_ratio||"1:1";let r;if(p.includes("virtual-try-on"))r={model_name:e},i.kling_human_image&&(r.human_image=i.kling_human_image),i.kling_cloth_image&&(r.cloth_image=i.kling_cloth_image);else if(p.includes("/editing/expand"))r={image:i.kling_expand_image||i.image_url||"",up_expansion_ratio:Number(i.kling_expand_up)||0,down_expansion_ratio:Number(i.kling_expand_down)||0,left_expansion_ratio:Number(i.kling_expand_left)||0,right_expansion_ratio:Number(i.kling_expand_right)||0,n:t},i.prompt&&(r.prompt=i.prompt);else if(p.includes("/multi-image2image"))r={model_name:e,n:t,aspect_ratio:a,subject_image_list:(i.kling_subject_images||[]).map(e=>({subject_image:e}))},i.prompt&&(r.prompt=i.prompt),i.kling_scene_image&&(r.scene_image=i.kling_scene_image),i.kling_style_image&&(r.style_image=i.kling_style_image);else if(p.includes("/omni-image")){r={model_name:e,prompt:i.prompt||"",n:t,aspect_ratio:a},i.kling_resolution&&(r.resolution=i.kling_resolution);const s=(i.kling_image_list||[]).map(e=>({image:e}));s.length&&(r.image_list=s),i.kling_omni_result_type&&(r.result_type=i.kling_omni_result_type),"series"===i.kling_omni_result_type&&""!==i.kling_omni_series_amount&&null!=i.kling_omni_series_amount&&(r.series_amount=Number(i.kling_omni_series_amount))}else r={model_name:e,prompt:i.prompt||"",n:t,aspect_ratio:a},i.kling_resolution&&(r.resolution=i.kling_resolution),i.kling_image&&(r.image=i.kling_image),i.kling_negative_prompt?.trim()&&(r.negative_prompt=i.kling_negative_prompt.trim()),""!==i.kling_image_fidelity&&null!=i.kling_image_fidelity&&(r.image_fidelity=Number(i.kling_image_fidelity)),""!==i.kling_human_fidelity&&null!=i.kling_human_fidelity&&(r.human_fidelity=Number(i.kling_human_fidelity));return{kind:"kling-img",endpoint:m,method:"POST",body:x(r),contentType:"json"}}if(p.includes(":predict")||p.startsWith("/v1beta/models/imagen")){const e={instances:[{prompt:i.prompt||""}],parameters:{sampleCount:1}};return i.aspect_ratio&&(e.parameters.aspectRatio=i.aspect_ratio),{kind:"imagen",endpoint:m,method:"POST",body:x(e),contentType:"json"}}if(p.startsWith("/ent/v2/")){const e={model:s,prompt:i.prompt||""};return i.image_url&&(e.images=[i.image_url]),{kind:"vidu",endpoint:m,method:"POST",body:x(e),contentType:"json"}}if(p.startsWith("/tencent-vod/v1/aigc-image")){const e={model_name:i.tvod_model_name||"GEM",model_version:i.tvod_model_version||"3.0",prompt:i.prompt||"",output_config:{storage_mode:"Temporary"}};return i.aspect_ratio&&"GEM"===(i.tvod_model_name||"GEM")&&(e.output_config.aspect_ratio=i.aspect_ratio),i.tvod_resolution&&(e.output_config.resolution=i.tvod_resolution),i.image_url&&(e.file_infos=[{type:"Url",url:i.image_url}]),{kind:"tencent",endpoint:m,method:"POST",body:x(e),contentType:"json"}}if("/kling/v1/videos/image-recognize"===p)return c(!i.image_url)?{error:l("请先上传识别图片")}:{kind:"recognize",endpoint:m,method:"POST",body:x({image:i.image_url}),contentType:"json"};if(p.startsWith("/openapi/v2/image/")){const e=(i.pix_images||[]).filter(
1Boolean);if(c(!e.length))return{error:l("请先上传至少一张参考图")};if(c(!i.pix_template_id))return{error:l("请填写模板 ID")};const s={img_ids:[...e],template_id:Number(i.pix_template_id)},t=e.map((e,s)=>({sourceUrl:e,targetPath:["img_ids",s]}));return{kind:"pixverse",endpoint:m,method:"POST",body:x(s),contentType:"json",uploads:t}}const g="gpt-image-2"===e,h=d.supportsEdits&&"edit"===i.mode,v=h?"/v1/images/edits":"/v1/images/generations",_=Math.min(Math.max(Number(i.n)||1,1),d.maxN||1),f={model:s,prompt:i.prompt};if(d.fluxStyle)f.aspect_ratio=i.aspect_ratio||d.aspectRatios&&d.aspectRatios[0]||"1:1",d.supportsImageInput&&i.image_url&&(f.image=i.image_url);else if(d.grokStyle)f.aspect_ratio=i.aspect_ratio||"1:1",f.resolution=i.resolution||"1k",i.n>1&&(f.n=i.n),d.supportsOutputFormat&&(f.response_format=i.output_format||"url");else if(d.wanStyle){const e=i.size&&["1K","2K","4K"].includes(i.size)?i.size:d.sizes[0]||"2K";f.size=e,i.aspect_ratio&&(f.aspect_ratio=i.aspect_ratio),i.n>1&&(f.n=i.n),f.watermark=!1!==i.watermark}else if(d.doubaoStyle){f.size=i.doubao_size||"2K",d.supportsOutputFormat&&(f.output_format=i.image_file_format||"jpeg"),f.watermark=!1!==i.watermark,i.n>1&&(f.n=i.n);const e=d.doubaoImageField||"images";if(d.supportsMultiImage){const s=(i.doubao_images||[]).filter(Boolean);s.length>1?f[e]=s:1===s.length?f[e]="images"===e?s:s[0]:i.image_url&&(f[e]="images"===e?[i.image_url]:i.image_url)}else d.supportsImageInput&&i.image_url&&(f[e]="images"===e?[i.image_url]:i.image_url);if(d.supportsSeed&&""!==i.seed&&null!=i.seed&&(f.seed=Number(i.seed)),d.supportsGuidanceScale&&""!==i.guidance_scale&&null!=i.guidance_scale&&(f.guidance_scale=Number(i.guidance_scale)),d.supportsSequentialGen){const e=i.doubao_seq_gen||"disabled";f.sequential_image_generation=e,"auto"===e&&i.doubao_max_images>1&&(f.sequential_image_generation_options={max_images:Number(i.doubao_max_images)})}}else{if(g&&h){const e={model:s,prompt:i.prompt||"",image:"<上传的图片文件>",n:String(_)};return(i.mask_file||i.mask)&&(e.mask="<mask 文件>"),i.size&&(e.size=i.size),i.quality&&(e.quality=i.quality),d.supportsBackground&&i.background&&(e.background=i.background),d.supportsModeration&&i.moderation&&(e.moderation=i.moderation),t&&!a&&(e.group=t),{kind:"open
1ai",endpoint:v,method:"POST",body:e,contentType:"formData",imageCount:_}}i.size&&(f.size=i.size),i.quality&&"auto"!==i.quality&&(f.quality=i.quality),g?f.n=_:!h&&i.n>1&&(f.n=i.n),d.supportsImageFormat&&!h&&(f.format=i.format||d.imageFormats?.[0]||"jpeg"),d.supportsBackground&&h&&"auto"!==i.background&&(f.background=i.background),d.supportsOutputFormat&&(f.response_format=i.output_format||"url"),h&&i.image_url&&(f.image=i.image_url),h&&i.mask&&(f.mask=i.mask),!h&&d.supportsImageInput&&i.image_url&&(f.image=i.image_url),d.supportsWatermark&&(f.watermark=!0===i.watermark),d.supportsPromptExtend&&(f.prompt_extend=!1!==i.prompt_extend),d.supportsPromptExtendMode&&i.prompt_extend_mode&&(f.prompt_extend_mode=i.prompt_extend_mode),d.supportsNegativePrompt&&i.negative_prompt?.trim()&&(f.negative_prompt=i.negative_prompt.trim())}return{kind:"openai",endpoint:v,method:"POST",body:x(f),contentType:"json",imageCount:_}}function Ys({selectedModel:e,modelStr:s,selectedGroup:t,routingMode:a,chatParams:i,modelFmt:r,support:o,modelPreset:n,t:l,skipFieldValidation:d=!1}){const c="function"==typeof l?l:e=>e,m=o||{},p=e=>!d&&e,u=(s||"").replace(/:floor$|:nitro$|:stable$/,""),x=e=>(t&&!a&&(e.group=t),e);if("jina-rerank"===r){const e=(i.rerank_documents||"").split("\n").map(e=>e.trim()).filter(Boolean);if(p(0===e.length))return{error:c("请在 Documents 中输入至少一个候选文档")};const t=i.max_tokens>0?i.max_tokens:10;return{endpoint:"/v1/rerank",method:"POST",body:x({model:s,query:i.prompt,documents:e,top_n:t}),contentType:"json",async:!1}}if("embedding"===r)return{endpoint:"/v1/embeddings",method:"POST",body:x({model:s,input:i.prompt,encoding_format:i.embedding_format||"float"}),contentType:"json",async:!1};if("moderation"===r)return{endpoint:"/v1/moderations",method:"POST",body:x({model:s,input:i.prompt}),contentType:"json",async:!1};if("tts"===r)return{endpoint:"/v1/audio/speech",method:"POST",body:x({model:s,input:i.prompt,voice:i.tts_voice||"alloy",response_format:i.tts_format||"mp3",speed:i.tts_speed||1}),contentType:"json",async:!1};if("gpt-audio"===r){if(p(!i.prompt))return{error:c("请输入对话内容")};const e=[];return i.system&&e.push({role:"system",content:i.system}),e.push({role:"user",content:i.prompt}),{endpoint:"/v1/chat/completions",method:"POST",body:x({model:s,modalities:["text","audio"],audio:{voice:i.gpt_audio_voice||"alloy",format:i.gpt_audio_format||"wav"},messages:e,stream:!1}),contentType:"json",async:!1}}if("minimax-tts"===r){const e=i.minimax_format||"mp3",s={voice_id:i.minimax_voice||"male-qn-qingse",speed:i.tts_speed||1};return i.minimax_emotion&&"(默认)"!==i.minimax_emotion&&(s.emotion=i.minimax_emotion),{endpoint:"/minimax/v1/t2a_v2",method:"POST",body:x({model:u,text:i.prompt,stream:!1,voice_setting:s,audio_setting:{format:e}}),contentType:"json",async:!1}}if("suno-music"===r){const e=i.suno_mode||"inspiration",s={mv:i.suno_mv||"chirp-v5"};return"custom"===e?(s.prompt=i.prompt||"",i.suno_tags?.trim()&&(s.tags=i.suno_tags.trim()),i.suno_title?.trim()&&(s.title=i.suno_title.trim())):s.gpt_description_prompt=i.prompt||"",!0===i.suno_instrumental&&(s.make_instrumental=!0),{endpoint:"/suno/submit/music",method:"POST",body:x(s),contentType:"json",async:!0}}if("replicate-task"===r){const e=Bs(n?.endpoint_configs,"audio");return e?{endpoint:e,method:"POST",body:x({input:{prompt:i.prompt||""}}),contentType:"json",async:!0}:{error:c("模型配置加载中,请稍后再试")}}if("kling-tts"===r){const e=Bs(n?.endpoint_configs,"audio");if(!e)return{error:c("模型配置加载中,请稍后再试")};if(p(!i.prompt))return{error:c("请输入合成文本")};if(p(!i.kling_tts_voice_id))return{error:c("请填写音色 ID")};const s={text:i.prompt,voice_id:i.kling_tts_voice_id,voice_language:i.kling_tts_language||"zh"};return i.kling_tts_speed&&(s.voice_speed=i.kling_tts_speed),{endpoint:e,method:"POST",body:x(s),contentType:"json",async:!0}}if("kling-video-audio"===r){const e=Bs(n?.endpoint_configs,"audio");if(!e)return{error:c("模型配置加载中,请稍后再试")};const s=i.kling_va_video?.trim()||"";
1if(p(!s))return{error:c("请填写视频 ID 或 URL")};const t={};return/^https?:\/\//i.test(s)?t.video_url=s:t.video_id=s,i.kling_va_sound_prompt?.trim()&&(t.sound_effect_prompt=i.kling_va_sound_prompt.trim()),i.kling_va_bgm_prompt?.trim()&&(t.bgm_prompt=i.kling_va_bgm_prompt.trim()),!0===i.kling_va_asmr&&(t.asmr_mode=!0),{endpoint:e,method:"POST",body:x(t),contentType:"json",async:!0}}if("kling-audio"===r){const e=Bs(n?.endpoint_configs,"audio");return e?{endpoint:e,method:"POST",body:x({prompt:i.prompt||"",duration:String(i.kling_audio_duration||"5")}),contentType:"json",async:!0}:{error:c("模型配置加载中,请稍后再试")}}if("kling-custom-voice"===r){const e=Bs(n?.endpoint_configs,"audio");if(!e)return{error:c("模型配置加载中,请稍后再试")};const s=(i.kling_cv_name||"").trim();if(p(!s))return{error:c("请填写音色名称")};const t={voice_name:s};if("video_id"===(i.kling_cv_source||"voice_url")){const e=(i.kling_cv_video_id||"").trim();if(p(!e))return{error:c("请填写视频 ID")};t.video_id=e}else{const e=(i.kling_cv_voice_url||"").trim();if(p(!e))return{error:c("请填写音频文件 URL")};t.voice_url=e}return{endpoint:e,method:"POST",body:x(t),contentType:"json",async:!0}}if("vidu-audio"===r){const e=Bs(n?.endpoint_configs,"audio");if(!e)return{error:c("模型配置加载中,请稍后再试")};const s={model:u,prompt:i.prompt||"",text:i.prompt||""},t="/ent/v2/audio-tts"===e;t&&(s.voice_setting_voice_id=i.vidu_audio_voice_id||"");const a={endpoint:e,method:"POST",body:x(s),contentType:"json",async:!t};return t&&!i.vidu_audio_voice_id?{...a,error:c("请填写音色 ID(voice_setting_voice_id)")}:a}if("gemini-tts"===r)return p(!i.prompt)?{error:c("请输入需要转换的文本")}:{endpoint:`/v1beta/models/${s}:generateContent`,method:"POST",body:x({contents:[{role:"user",parts:[{text:i.prompt}]}],generationConfig:{responseModalities:["AUDIO"],speechConfig:{voiceConfig:{prebuiltVoiceConfig:{voiceName:i.gemini_tts_voice||"Kore"}}}}}),contentType:"json",async:!1};if("minimax-tts-async"===r)return p(!i.prompt)?{error:c("请输入需要转换的文本")}:{endpoint:"/minimax/v1/t2a_async_v2",method:"POST",body:x({model:u,text:i.prompt,voice_setting:{voice_id:i.minimax_voice||"male-qn-qingse",speed:i.tts_speed||1,vol:1,pitch:0},audio_setting:{format:i.minimax_format||"mp3"}}),contentType:"json",async:!0};if("stt"===r){if(!i.stt_file)return{error:c("请先选择音频文件")};const e={file:"<音频文件>",model:s,response_format:i.stt_format||"json"};return i.stt_language&&(e.language=i.stt_language),t&&!a&&(e.group=t),{endpoint:"/v1/audio/transcriptions",method:"POST",body:e,contentType:"formData",async:!1}}if("gemini"===r){const e=[{text:i.prompt||""}];(i.images||[]).forEach(s=>{const t=/^data:([^;]+);base64,(.+)$/.exec(s);t?e.push({inlineData:{mimeType:t[1],data:t[2]}}):e.push({fileData:{fileUri:s}})});const t={contents:[{role:"user",parts:e}]};i.system&&(t.systemInstruction={parts:[{text:i.system}]});const a={};return null!=i.temperature&&(a.temperature=i.temperature),i.max_tokens&&(a.maxOutputTokens=i.max_tokens),m.hasTopP&&1!==i.top_p&&(a.topP=i.top_p),Object.keys(a).length&&(t.generationConfig=a),x(t),{endpoint:!1!==i.stream?`/v1beta/models/${s}:streamGenerateContent?alt=sse`:`/v1beta/models/${s}:generateContent`,method:"POST",body:t,contentType:"json",async:!1}}const g=m.maxTokensField||"max_tokens",h=r===Se,v=r===Ce,_=i.images||[],f=(e=!1)=>{if(0===_.length||e)return i.prompt;const s=[{type:"text",text:i.prompt}];return _.forEach(e=>s.push({type:"image_url",image_url:{url:e}})),s};let b;if(h){const e=[];if(i.system&&e.push({role:"system",content:i.system}),_.length>0){const s=[{type:"input_text",text:i.prompt}];_.forEach(e=>s.push({type:"input_image",image_url:e})),e.push({role:"user",content:s})}else e.push({role:"user",content:i.prompt});b={model:s,input:e,stream:!1!==i.stream,temperature:i.temperature??.7,[g]:i.max_tokens||4096}}else if(v)b={model:s,messages:[{role:"user",content:0===_.length?i.prompt:[{type:"text",text:i.prompt},..._.map(e=>({type:"image",source:{type:"url",url:e}}))]}],max_tokens:i.max_tokens||4096,stream:!1!==i.stream,temperature:i.temperature??.7},i.system&&(b.system=i.system);else{const e=[];i.system&&e.push({role:"system",content:i.system}),e.push({role:"user",content:f()}),b={model:s,messages:e,stream:!1!==i.stream,temperature:i.temperature??.7,[g]:i.max_tokens||4096}}return m.hasTopP&&1!==i.top_p&&(b.top_p=i.top_p),m.hasFreqPenalty&&0!==i.frequency_penalty&&(b.frequency_penalty=i.frequency_penalty),m.hasPresencePenalty&&0!==i.presence_penalty&&(b.presence_penalty=i.presence_penalty),t&&!a&&(b.group=t),!b.stream||h||v||(b.stream_options={include_usage:!0}),{endpoint:h?"/v1/responses":v?"/v1/messages":"/v1/chat/completions",method:"POST",body:b,contentType:"json",async:!1}}function Xs(){const{t:e}=_(),[t,a]=s.useState(!1),[i,r]=s.useState(""),[o,n]=s.useState(null),[l,d]=s.useState([]),[m,p]=s.useState(""),[u,x]=s.useState(""),[g,h]=s.useState(""),[v,f]=s.useState(""),[b,j]=s.useState(null),[y,k]=s.useState(0),N=s.useRef(null),w=s.useRef(null),S=s.useRef([]),C=s.useRef(null),T=s.useRef(null),P=s.useRef(!1);s.useEffect(()=>()=>{N.current&&(URL.revokeObjectURL(N.current),N.current=null),w.current&&w.current.abort(),C.current&&clearTimeout(C.current),T.current&&clearTimeout(T.current),P.current=!1,S.current=[]},[]);const R=s.useCallback(e=>{S.current.push(e),C.current||(C.current=setTimeout(()=>{d([...S.current]),C.current=null},100))},[]),z=s.useCallback(()=>{C.current&&(clearTimeout(C.current),C.current=null),S.current=[],d([])},[]),I=s.useCallback(()=>{T.current&&(clearTimeout(T.current),T.current=null),P.current=!1},[]),$=s.useCallback(()=>{r(""),n(null),z(),f(""),N.current&&(URL.revokeObjectURL(N.current),N.current=null),p(""),x(""),h("")},[z]),O=s.useCallback((e,s,t,a)=>{const i=t&&e>0?e:null,r=t&&s>0?s:null,o=a?.estimated_input_price_per_m,n=a?.estimated_output_price_per_m,l=a?.estimated_price_per_1k;let d=null;return t&&e+s>0&&(null!=o&&o>0&&null!=n&&n>0?d=(e*o+s*n)/1e6:null!=l&&l>
10&&(d=(e+s)*l*2/1e6)),{promptTokens:i,completionTokens:r,totalCost:d}},[]),M=s.useCallback(async s=>{w.current&&w.current.abort(),w.current=new AbortController;const{signal:t}=w.current;I(),N.current&&(URL.revokeObjectURL(N.current),N.current=null),a(!0),r(""),n(null),z(),p(""),x(""),h(""),f(""),j(null);const i=Date.now(),o={...s,signal:t,_startMs:i,blobUrlRef:N,chunksAccRef:S,chunkFlushRef:C,setRunning:a,setError:f,setJsonData:n,setRawText:r,setStreamChunks:d,setImageUrl:p,setVideoUrl:x,setAudioUrl:h,setLastRunStats:j,setLogRefreshKey:k,pollingActiveRef:P,pollTimerRef:T,appendLabLog:Ye,updateLabLog:Xe,appendChunk:R,flushAndClearChunks:z,t:e,calcRunStats:O},{modelType:l,selectedModel:m}=s;try{"video"===l?await async function(e){const{selectedModel:s,modelStr:t,headers:a,tokenKey:i,signal:r,_startMs:o,selectedGroup:n,routingMode:l,videoParams:d,modelPreset:m,setRunning:p,setError:u,setJsonData:x,setVideoUrl:g,setRawText:h,pollingActiveRef:v,pollTimerRef:_,appendLabLog:f,updateLabLog:b,setLogRefreshKey:j,t:y}=e,{rawBody:k}=e,N=Ws({selectedModel:s,modelStr:t,selectedGroup:n,routingMode:l,videoParams:d,modelPreset:m,t:y,skipFieldValidation:!!k});if(N?.error&&!k)return c.warning(N.error),void p(!1);let{endpoint:w,body:S,uploads:C}=N;if(k&&(S=k,C=null),!w)return c.warning(N?.error||y("无法解析请求端点")),void p(!1);C&&C.length&&await Vs(S,C,{tokenKey:i,signal:r,t:y});const T=await fetch(w,{method:"POST",headers:a,body:JSON.stringify(S),signal:r});Is(T.status);const P=await T.text();let R={};try{R=P?JSON.parse(P):{}}catch(z){R={}}if(x(Object.keys(R).length?R:{http_status:T.status,raw:P||"(empty response)"}),T.ok){let e=null;const t=ys(w,y);if(t){const s=t.getTaskId(R);null!=s&&(e={taskId:s,getPollUrl:t.getPollUrl,getStatus:t.getStatus,isSuccess:t.isSuccess,isFailure:t.isFailure,getVideoUrl:t.getResultUrl,getErrorMsg:e=>t.getErrorMsg(e,y),interval:t.interval??5e3,maxAttempts:t.maxAttempts??72,initialDelay:t.initialDelay??t.interval??5e3})}const a=f({model:s,type:"video",success:!e,status:e?"pending":"success",durationMs:Date.now()-o});if(e){v.current=!0;const s={Authorization:`Bearer ${i}`,"Content-Type":"application/json"};let t=0;const n=e.maxAttempts,l=e.interval,d=async()=>{if(v.current){if(t++,t>n)return v.current=!1,u(y("视频生成超时,请稍后在使用记录中查看结果")),b(a,{success:!1,status:"failed",durationMs:Date.now()-o}),p(!1),void j(e=>e+1);try{const t=e.getPollUrl(e.taskId),i=await fetch(t,{method:"GET",headers:s,signal:r}),n=await i.json();if(!v.current)return;const c="function"==typeof e.normalizeData?e.normalizeData(n):!n||"object"!=typeof n||Array.isArray(n)||n.task_id||n.id?n:{task_id:e.taskId,...n};x(c);const m=e.getStatus(c);if(e.isSuccess(m)){const s=e.getVideoUrl(c);s&&g(s),v.current=!1,b(a,{success:!0,status:"success",durationMs:Date.now()-o}),p(!1),j(e=>e+1)}else e.isFailure(m)?(u(e.getErrorMsg(c)),v.current=!1,b(a,{success:!1,status:"failed",durationMs:Date.now()-o}),p(!1),j(e=>e+1)):_.current=setTimeout(d,l)}catch(i){if("AbortError"===i?.name||!v.current)return;_.current=setTimeout(d,l)}}};0===e.initialDelay?d():_.current=setTimeout(d,e.initialDelay)}}else{const e=R?.error?.message||R?.ErrMsg||R?.message||`HTTP ${T.status}${P?`: ${P.slice(0,300)}`:`: ${y("上游返回空响应")}`}`;u(e),f({model:s,type:"video",success:!1,durationMs:Date.now()-o})}}(o):"image"===l?await async function(e){const{selectedModel:s,modelStr:t,headers:a,tokenKey:i,signal:r,_startMs:o,selectedGroup:n,routingMode:l,imageParams:d,modelPreset:m,blobUrlRef:p,setRunning:u,setError:x,setJsonData:g,setImageUrl:h,setRawText:v,pollingActiveRef:_,pollTimerRef:f,appendLabLog:b,updateLabLog:j,setLogRefreshKey:y,t:k}=e,N=je[s]||je._default,{rawBody:w}=e,S=Qs({selectedModel:s,modelStr:t,selectedGroup:n,routingMode:l,imageParams:d,modelPreset:m,t:k,skipFieldValidation:!!w});if(S?.error&&!w)return c.warning(S.error),void u(!1);const{kind:C,endpoint:T}=S;if(!T)return c.warning(S?.error||k("无法解析请求端点")),void u(!1);const P=w||S.body,R=({contract:e,submitData:s,model:t})=>{const a=e.getTaskId(s);if(null==a)return x(k("响应中无任务 ID")),void b({model:t,type:"image",success:!1,durationMs:Date.now()-o});const n=b({model:t,type:"image",success:!1,status:"pending",durationMs:Date.now()-o});_.current=!0;const l={Authorization:`Bearer ${i}`,"Content-Type":"application/json"},d=e.interval||5e3,c=e.maxAttempts||72;let m=0;const p=async()=>
1{if(_.current){if(m++,m>c)return _.current=!1,x(k("图像生成超时,请稍后重试")),j(n,{success:!1,status:"failed",durationMs:Date.now()-o}),u(!1),void y(e=>e+1);try{const s=await fetch(e.getPollUrl(a),{method:"GET",headers:l,signal:r}),t=await s.json();if(!_.current)return;g(t);const i=e.getStatus(t);if(e.isSuccess(i)){const s=e.getResultUrl(t),a="function"==typeof e.getResultText;if(s)h(s);else if(a){const s=e.getResultText(t);s&&v(s)}else x(k("图像生成失败"));_.current=!1;const i=!(!s&&!a);j(n,{success:i,status:i?"success":"failed",durationMs:Date.now()-o}),u(!1),y(e=>e+1)}else e.isFailure(i)?(x(e.getErrorMsg(t,k)||k("图像生成失败")),_.current=!1,j(n,{success:!1,status:"failed",durationMs:Date.now()-o}),u(!1),y(e=>e+1)):f.current=setTimeout(p,d)}catch(s){if("AbortError"===s?.name||!_.current)return;f.current=setTimeout(p,d)}}};f.current=setTimeout(p,d)};if("gemini"===C){const e=await fetch(T,{method:"POST",headers:a,body:JSON.stringify(P),signal:r});Is(e.status);const t=await e.json();g(t),e.ok?b({model:s,type:"image",success:!0,durationMs:Date.now()-o}):(x(t?.error?.message||t?.error?.status||`HTTP ${e.status}`),b({model:s,type:"image",success:!1,durationMs:Date.now()-o}))}else if("falai"===C){const e=t.replace(/:floor$|:nitro$|:stable$/,""),n=await fetch(T,{method:"POST",headers:a,body:JSON.stringify(P),signal:r});Is(n.status);const l=await n.json();if(g(l),n.ok){const t=l?.request_id,a=l?.images||(l?.image?[l.image]:null);if(!t&&a?.length){const e=a[0]?.url;e&&h(e),b({model:s,type:"image",success:!0,durationMs:Date.now()-o})}else if(t){const a=b({model:s,type:"image",success:!1,status:"pending",durationMs:Date.now()-o});_.current=!0;const n=`/${e}/requests/${t}`,l={Authorization:`Bearer ${i}`,"Content-Type":"application/json"};let d=0;const c=60,m=5e3,p=async()=>{if(_.current){if(d++,d>c)return _.current=!1,x(k("图像生成超时,请稍后重试")),j(a,{success:!1,status:"failed",durationMs:Date.now()-o}),u(!1),void y(e=>e+1);try{const e=await fetch(n,{method:"GET",headers:l,signal:r}),s=await e.json();if(!_.current)return;g(s);const t=s?.images||(s?.image?[s.image]:null),i=s?.error;if(t?.length){const e=t[0]?.url;e&&h(e),_.current=!1,j(a,{success:!0,status:"success",durationMs:Date.now()-o}),u(!1),y(e=>e+1)}else i?(x(i?.message||k("图像生成失败")),_.current=!1,j(a,{success:!1,status:"failed",durationMs:Date.now()-o}),u(!1),y(e=>e+1)):f.current=setTimeout(p,m)}catch(e){if("AbortError"===e?.name||!_.current)return;f.current=setTimeout(p,m)}}};f.current=setTimeout(p,m)}else x(k("响应中无 request_id 且无图像结果")),b({model:s,type:"image",success:!1,durationMs:Date.now()-o})}else x(l?.error?.message||l?.message||`HTTP ${n.status}`),b({model:s,type:"image",success:!1,durationMs:Date.now()-o})}else if("mj"===C){const e=await fetch(T,{method:"POST",headers:a,body:JSON.stringify(P),signal:r});Is(e.status);const t=await e.json();if(g(t),e.ok)return void R({contract:ys(T,k),submitData:t,model:s});x(t?.error?.message||t?.description||`HTTP ${e.status}`),b({model:s,type:"image",success:!1,durationMs:Date.now()-o})}else if("replicate"===C){const e=await fetch(T,{method:"POST",headers:a,body:JSON.stringify(P),signal:r});Is(e.status);const t=await e.json();if(g(t),e.ok)return void R({contract:ys(T,k),submitData:t,model:s});x(t?.error?.message||("string"==typeof t?.error?t.error:null)||`HTTP ${e.status}`),b({model:s,type:"image",success:!1,durationMs:Date.now()-o})}else if("ideogram"===C){const e=await fetch(T,{method:"POST",headers:a,body:JSON.stringify(P),signal:r});Is(e.status);const t=await e.json();if(g(t),e.ok){const e=t?.data?.[0]?.url||t?.url;e?h(e):x(k("响应中无图像结果")),b({model:s,type:"image",success:!!e,durationMs:Date.now()-o})}else x(t?.error?.message||t?.error||`HTTP ${e.status}`),b({model:s,type:"image",success:!1,durationMs:Date.now()-o})}else if("kling-img"===C){const e=await fetch(T,{method:"POST",headers:a,body:JSON.stringify(P),signal:r});Is(e.status);const t=await e.json();if(g(t),e.ok&&0===t?.code)return void R({contract:ys(T,k),submitData:t,model:s});x(t?.message||t?.error?.message||`HTTP ${e.status}`),b({model:s,type:"image",success:!1,durationMs:Date.now()-o})}else if("imagen"===C){const e=await fetch(T,{method:"POST",headers:a,body:JSON.stringify(P),signal:r});Is(e.status);const t=await e.json();
1if(g(t),e.ok){const e=t?.predictions?.[0],a=e?.bytesBase64Encoded,i=e?.url;if(i)h(i);else if(a)try{const s=e?.mimeType||"image/png",t=atob(a),i=new Uint8Array(t.length);for(let e=0;e<t.length;e++)i[e]=t.charCodeAt(e);const r=URL.createObjectURL(new Blob([i],{type:s}));p.current=r,h(r)}catch(z){h(`data:image/png;base64,${a}`)}else x(k("响应中无图像结果"));b({model:s,type:"image",success:!(!i&&!a),durationMs:Date.now()-o})}else x(t?.error?.message||`HTTP ${e.status}`),b({model:s,type:"image",success:!1,durationMs:Date.now()-o})}else if("vidu"===C){const e=await fetch(T,{method:"POST",headers:a,body:JSON.stringify(P),signal:r});Is(e.status);const t=await e.json();if(g(t),e.ok)return void R({contract:ys(T,k),submitData:t,model:s});x(t?.message||t?.error?.message||t?.err_code||`HTTP ${e.status}`),b({model:s,type:"image",success:!1,durationMs:Date.now()-o})}else if("tencent"===C){const e=await fetch(T,{method:"POST",headers:a,body:JSON.stringify(P),signal:r});Is(e.status);const t=await e.json();g(t);const i=t?.Response?.TaskId;if(e.ok&&i)return void R({contract:ys(T,k),submitData:t,model:s});x(t?.Response?.Error?.Message||t?.message||`HTTP ${e.status}`),b({model:s,type:"image",success:!1,durationMs:Date.now()-o})}else if("recognize"===C){const e=await fetch(T,{method:"POST",headers:a,body:JSON.stringify(P),signal:r});Is(e.status);const t=await e.json();if(g(t),e.ok&&0===t?.code)return void R({contract:ys(T,k),submitData:t,model:s});x(t?.message||t?.error?.message||`HTTP ${e.status}`),b({model:s,type:"image",success:!1,durationMs:Date.now()-o})}else if("pixverse"===C){w||await Vs(P,S.uploads,{tokenKey:i,signal:r,t:k});const e=await fetch(T,{method:"POST",headers:a,body:JSON.stringify(P),signal:r});Is(e.status);const t=await e.json();g(t);const n=ys(T,k),l=n?.getTaskId(t);if(e.ok&&0===t?.ErrCode&&l)return void R({contract:n,submitData:t,model:s});x(t?.ErrMsg||t?.error?.message||`HTTP ${e.status}`),b({model:s,type:"image",success:!1,durationMs:Date.now()-o})}else{let e,c=a;if("formData"===S.contentType){const s=new FormData,a=d.edit_images?.length?d.edit_images:d.image_url?[d.image_url]:[],r=d.edit_image_files||[];s.append("model",t),s.append("prompt",d.prompt||""),a.forEach((e,t)=>{const a=r[t];s.append("image",a||e)}),d.mask_file?s.append("mask",d.mask_file):d.mask&&s.append("mask",d.mask),s.append("n",String(S.imageCount)),d.size&&s.append("size",d.size),d.quality&&s.append("quality",d.quality),N.supportsBackground&&d.background&&s.append("background",d.background),N.supportsModeration&&d.moderation&&s.append("moderation",d.moderation),n&&!l&&s.append("group",n),e=s,c={Authorization:`Bearer ${i}`}}else e=JSON.stringify(P);const m=await fetch(T,{method:"POST",headers:c,body:e,signal:r});Is(m.status);const u=await m.json();g(u);const v=Array.isArray(u?.data)?u.data[0]:u?.data,_=v?.url,f=v?.b64_json;if(_)h(_);else if(f)try{const e=v?.mimeType||"image/png",s=atob(f),t=new Uint8Array(s.length);for(let i=0;i<s.length;i++)t[i]=s.charCodeAt(i);const a=URL.createObjectURL(new Blob([t],{type:e}));p.current=a,h(a)}catch(z){h(`data:image/png;base64,${f}`)}m.ok?b({model:s,type:"image",success:!0,durationMs:Date.now()-o}):(x(u?.error?.message||`HTTP ${m.status}`),b({model:s,type:"image",success:!1,durationMs:Date.now()-o}))}}(o):await async function(e){const{selectedModel:s,modelStr:t,headers:a,tokenKey:i,signal:r,_startMs:o,selectedGroup:n,routingMode:l,chatParams:d,modelFmt:m,support:p,blobUrlRef:u,routingPreviewRef:x,chunksAccRef:g,chunkFlushRef:h,setRunning:v,setError:_,setJsonData:f,setRawText:b,setStreamChunks:j,setAudioUrl:y,setLastRunStats:k,setLogRefreshKey:N,pollingActiveRef:w,pollTimerRef:S,appendLabLog:C,updateLabLog:T,appendChunk:P,flushAndClearChunks:R,t:z,calcRunStats:I}=e,{rawBody:$}=e,O=Ys({selectedModel:s,modelStr:t,selectedGroup:n,routingMode:l,chatParams:d,modelFmt:m,support:p,modelPreset:e.modelPreset,t:z,skipFieldValidation:!!$});if(O?.error&&!$)return c.warning(O.error),void v(!1);if(!O?.endpoint&&"stt"!==m)return c.warning(O?.error||z("无法解析请求端点")),void v(!1);$&&"stt"!==m&&(O.body=$);const M=({contract:e,submitData:t})=>{const a=e?.getTaskId(t);if(null==a)return _(z("响应中无任务 ID")),C({model:s,type:"chat",success:!1,durationMs:Date.now()-o}),void v(!1);const n=C({model:s,type:"chat",success:!1,status:"pending",durationMs:Date.now()-o});w.current=!0;const l={Authorization:`Bearer ${i}`,"Content-Type":"application/json"},d=e.interval||5e3,c=e.maxAttempts||90;let m=0;const p=async()=>
1{if(w.current){if(m++,m>c)return w.current=!1,_(z("生成超时,请稍后重试")),T(n,{success:!1,status:"failed",durationMs:Date.now()-o}),v(!1),void N(e=>e+1);try{const s=await fetch(e.getPollUrl(a),{method:"GET",headers:l,signal:r}),t=await s.json();if(!w.current)return;f(t);const i=e.getStatus(t);if(e.isSuccess(i)){const s=e.getResultUrl(t),a="function"==typeof e.getResultText?e.getResultText(t):null;if(s||a){s&&y(s);const e=[];a&&e.push(a),s&&e.push(`🎵 [${z("音频")}](${s})`),b(`${z("生成完成")}\n\n${e.join("\n\n")}`)}else _(z("生成失败"));const i=!(!s&&!a);w.current=!1,T(n,{success:i,status:i?"success":"failed",durationMs:Date.now()-o}),v(!1),N(e=>e+1)}else e.isFailure(i)?(_(e.getErrorMsg(t,z)),w.current=!1,T(n,{success:!1,status:"failed",durationMs:Date.now()-o}),v(!1),N(e=>e+1)):S.current=setTimeout(p,d)}catch(s){if("AbortError"===s?.name||!w.current)return;S.current=setTimeout(p,d)}}};S.current=setTimeout(p,d)};if("jina-rerank"===m){const e=O.body,t=e.documents||[],i=await fetch(O.endpoint,{method:"POST",headers:a,body:JSON.stringify(e),signal:r});if(Is(i.status),!i.ok){const e=await i.json().catch(()=>({}));throw new Error(e?.error?.message||`HTTP ${i.status}`)}const n=await i.json();f(n);const l=(n.results||[]).sort((e,s)=>(s.relevance_score||0)-(e.relevance_score||0)).map((e,s)=>`#${s+1} [index ${e.index}] score: ${(e.relevance_score??0).toFixed(6)}\n${e.document?.text||t[e.index]||""}`).join("\n\n---\n\n");b(l||z("无结果")),C({model:s,type:"chat",success:!0,durationMs:Date.now()-o})}else if("embedding"===m){const e=await fetch(O.endpoint,{method:"POST",headers:a,body:JSON.stringify(O.body),signal:r});Is(e.status);const t=await e.json();if(f(t),!e.ok)throw new Error(t?.error?.message||`HTTP ${e.status}`);const i=t?.data?.[0]?.embedding;if(i){const e=i.length,s=`dimensions: ${e}\n\n[${i.slice(0,8).map(e=>e.toFixed(6)).join(", ")}, ... (${e} total)]`;b(s)}C({model:s,type:"chat",success:!0,durationMs:Date.now()-o})}else if("moderation"===m){const e=await fetch(O.endpoint,{method:"POST",headers:a,body:JSON.stringify(O.body),signal:r});Is(e.status);const t=await e.json();if(f(t),!e.ok)throw new Error(t?.error?.message||`HTTP ${e.status}`);const i=t?.results?.[0];if(i){const e=i.flagged?"⚠️ FLAGGED":"✅ SAFE",s=Object.entries(i.categories||{}).filter(([,e])=>e).map(([e])=>e),t=Object.entries(i.category_scores||{}).sort(([,e],[,s])=>s-e).slice(0,6).map(([e,s])=>`  ${e}: ${s.toFixed(4)}`).join("\n");b(`${e}\n${s.length?`\nFlagged: ${s.join(", ")}\n`:""}\nTop scores:\n${t}`)}C({model:s,type:"chat",success:!0,durationMs:Date.now()-o})}else if("tts"===m){const e=await fetch(O.endpoint,{method:"POST",headers:a,body:JSON.stringify(O.body),signal:r});if(Is(e.status),!e.ok){const s=await e.json().catch(()=>({}));throw new Error(s?.error?.message||`HTTP ${e.status}`)}const t=await e.blob(),i=d.tts_format||"mp3",n=new Blob([t],{type:{mp3:"audio/mpeg",opus:"audio/ogg",aac:"audio/aac",flac:"audio/flac",wav:"audio/wav",pcm:"audio/pcm"}[i]||"audio/mpeg"});u.current&&URL.revokeObjectURL(u.current);const l=URL.createObjectURL(n);u.current=l,y(l),b(z("语音合成完成,点击上方播放器收听")),C({model:s,type:"chat",success:!0,durationMs:Date.now()-o})}else if("gpt-audio"===m){const e=await fetch(O.endpoint,{method:"POST",headers:a,body:JSON.stringify(O.body),signal:r});Is(e.status);const t=await e.json();if(f(t),!e.ok)throw new Error(t?.error?.message||`HTTP ${e.status}`);const i=t?.choices?.[0]?.message,n=i?.audio,l=n?.transcript||i?.content||"";if(n?.data){const e=d.gpt_audio_format||"wav",s=atob(n.data),t=new Uint8Array(s.length);for(let r=0;r<s.length;r++)t[r]=s.charCodeAt(r);const a=new Blob([t],{type:{wav:"audio/wav",mp3:"audio/mpeg",flac:"audio/flac",opus:"audio/ogg",pcm16:"audio/wav"}[e]||"audio/wav"});u.current&&URL.revokeObjectURL(u.current);const i=URL.createObjectURL(a);u.current=i,y(i)}b(l||z("音频生成完成,点击上方播放器收听"));const c=t?.usage,m=c?.prompt_tokens??0,p=c?.completion_tokens??0;k(I(m,p,null!=c,x.current)),C({model:s,type:"chat",success:!0,promptTokens:m||void 0,completionTokens:p||void 0,quota:m+p,durationMs:Date.now()-o})}else if("minimax-tts"===m){const e=d.minimax_format||"mp3",t=await fetch(O.endpoint,{method:"POST",headers:a,body:JSON.stringify(O.body),signal:r});Is(t.status);const i=await t.json();f(i);const n=i?.data?.audio;if(!t.ok||i?.base_resp&&0!==i.base_resp.status_code||!n)throw new Error(i?.base_resp?.status_msg||i?.error?.message||z("语音合成失败"));const l=new Uint8Array(n.length/2);for(let s=0;s<l.length;s++)l[s]=parseInt(n.substr(2*s,2),16);const c=new Blob([l],{type:{mp3:"audio/mpeg",wav:"audio/wav",flac:"audio/flac"}[e]||"audio/mpeg"});u.current&&URL.revokeObjectURL(u.current);const m=URL.createObjectURL(c);u.current=m,y(m),b(z("语音合成完成,点击上方播放器æ”
1¶å¬")),C({model:s,type:"chat",success:!0,durationMs:Date.now()-o})}else if("suno-music"===m){const e=await fetch(O.endpoint,{method:"POST",headers:a,body:JSON.stringify(O.body),signal:r});Is(e.status);const t=await e.json();f(t);const n=ys("/suno/submit/music",z),l=n?.getTaskId(t);if(!e.ok||!l)throw new Error(t?.message||t?.error?.message||z("音乐生成失败"));const d=C({model:s,type:"chat",success:!1,status:"pending",durationMs:Date.now()-o});w.current=!0;const c={Authorization:`Bearer ${i}`,"Content-Type":"application/json"},m=n.interval||8e3,p=n.maxAttempts||90;let u=0;const x=e=>{const s=(Array.isArray(e?.data?.data)?e.data.data:[]).filter(e=>e?.cld2AudioUrl);s[0]?.cld2AudioUrl&&y(s[0].cld2AudioUrl);const t=s.map((e,s)=>`**${s+1}. ${e.title||z("未命名")}**${e.duration?`(${Math.round(e.duration)}s)`:""}\n\n🎵 [${z("音频")}](${e.cld2AudioUrl})`+(e.cld2VideoUrl?` ・ 🎬 [${z("视频")}](${e.cld2VideoUrl})`:"")+(e.cld2ImageUrl?` ・ 🖼️ [${z("封面")}](${e.cld2ImageUrl})`:""));b(t.length?`${z("音乐生成完成,共")} ${t.length} ${z("首:")}\n\n${t.join("\n\n---\n\n")}`:z("音乐生成完成"))},g=async()=>{if(w.current){if(u++,u>p)return w.current=!1,_(z("音乐生成超时,请稍后在使用记录中查看结果")),T(d,{success:!1,status:"failed",durationMs:Date.now()-o}),v(!1),void N(e=>e+1);try{const e=await fetch(n.getPollUrl(l),{method:"GET",headers:c,signal:r}),s=await e.json();if(!w.current)return;f(s);const t=n.getStatus(s);n.isSuccess(t)?(x(s),w.current=!1,T(d,{success:!0,status:"success",durationMs:Date.now()-o}),v(!1),N(e=>e+1)):n.isFailure(t)?(_(n.getErrorMsg(s,z)),w.current=!1,T(d,{success:!1,status:"failed",durationMs:Date.now()-o}),v(!1),N(e=>e+1)):S.current=setTimeout(g,m)}catch(e){if("AbortError"===e?.name||!w.current)return;S.current=setTimeout(g,m)}}};S.current=setTimeout(g,m)}else if("replicate-task"===m){const e=O.endpoint,s=await fetch(e,{method:"POST",headers:a,body:JSON.stringify(O.body),signal:r});Is(s.status);const t=await s.json();f(t);const i=ys(e,z),o=i?.getTaskId(t);if(!s.ok||!o)throw new Error(t?.error?.message||("string"==typeof t?.error?t.error:null)||z("生成失败"));M({contract:i,submitData:t})}else if("kling-tts"===m){const e=O.endpoint,s=await fetch(e,{method:"POST",headers:a,body:JSON.stringify(O.body),signal:r});Is(s.status);const t=await s.json();f(t);const i=ys(e,z),o=i?.getTaskId(t);if(!s.ok||!o)throw new Error(t?.message||t?.error?.message||z("生成失败"));M({contract:i,submitData:t})}else if("kling-video-audio"===m){const e=O.endpoint,s=await fetch(e,{method:"POST",headers:a,body:JSON.stringify(O.body),signal:r});Is(s.status);const t=await s.json();f(t);const i=ys(e,z),o=i?.getTaskId(t);if(!s.ok||!o)throw new Error(t?.message||t?.error?.message||z("生成失败"));M({contract:i,submitData:t})}else if("kling-audio"===m){const e=O.endpoint,s=await fetch(e,{method:"POST",headers:a,body:JSON.stringify(O.body),signal:r});Is(s.status);const t=await s.json();f(t);const i=ys(e,z),o=i?.getTaskId(t);if(!s.ok||!o)throw new Error(t?.message||t?.error?.message||z("生成失败"));M({contract:i,submitData:t})}else if("kling-custom-voice"===m){const e=O.endpoint,s=await fetch(e,{method:"POST",headers:a,body:JSON.stringify(O.body),signal:r});Is(s.status);const t=await s.json();f(t);const i=ys(e,z),o=i?.getTaskId(t);if(!s.ok||!o)throw new Error(t?.message||t?.error?.message||z("生成失败"));M({contract:i,submitData:t})}else if("vidu-audio"===m){const e=O.endpoint,t=await fetch(e,{method:"POST",headers:a,body:JSON.stringify(O.body),signal:r});Is(t.status);const i=await t.json();if(f(i),!t.ok)throw new Error(i?.message||i?.error?.message||i?.err_code||z("生成失败"));if("/ent/v2/audio-tts"===e){const e=i?.file_url;if("success"!==i?.state||!e)throw new Error(i?.fail_reason||i?.err_code||i?.message||z("语音合成失败"));y(e),b(`${z("生成完成")}\n\n🎵 [${z("音频")}](${e})`),C({model:s,type:"chat",success:!0,durationMs:Date.now()-o})}else{const s=ys(e,z),t=s?.getTaskId(i);if(!t)throw new Error(i?.message||i?.error?.message||i?.err_code||z("生成失败"));M({contract:s,submitData:i})}}else if("gemini-tts"===m){const e=await fetch(O.endpoint,{method:"POST",headers:a,body:JSON.stringify(O.body),signal:r});Is(e.status);const t=await e.json();if(f(t),!e.ok)throw new Error(t?.error?.message||`HTTP ${e.status}`);const i=t?.candidates?.[0]?.content?.parts?.[0]?.inlineData;if(!i?.data)throw new Error(z("语音合成失败:响应中无音频数据"));const n=/rate=(\d+)/i.exec(i.mimeType||""),l=n?parseInt(n[1]):24e3,d=atob(i.data),c=new Uint8Array(d.length);for(let s=0;s<d.length;
1s++)c[s]=d.charCodeAt(s);const m=((e,s=24e3,t=1,a=16)=>{const i=e.byteLength,r=new ArrayBuffer(44+i),o=new DataView(r),n=(e,s)=>{for(let t=0;t<s.length;t++)o.setUint8(e+t,s.charCodeAt(t))};return n(0,"RIFF"),o.setUint32(4,36+i,!0),n(8,"WAVE"),n(12,"fmt "),o.setUint32(16,16,!0),o.setUint16(20,1,!0),o.setUint16(22,t,!0),o.setUint32(24,s,!0),o.setUint32(28,s*t*(a/8),!0),o.setUint16(32,t*(a/8),!0),o.setUint16(34,a,!0),n(36,"data"),o.setUint32(40,i,!0),new Uint8Array(r,44).set(e),new Blob([r],{type:"audio/wav"})})(c,l,1,16);u.current&&URL.revokeObjectURL(u.current);const p=URL.createObjectURL(m);u.current=p,y(p),b(z("语音合成完成,点击上方播放器收听")),C({model:s,type:"chat",success:!0,durationMs:Date.now()-o})}else if("minimax-tts-async"===m){const e=await fetch(O.endpoint,{method:"POST",headers:a,body:JSON.stringify(O.body),signal:r});Is(e.status);const t=await e.json();f(t);const n=t?.task_id;if(!e.ok||!n)throw new Error(t?.base_resp?.status_msg||t?.message||z("提交失败"));const l=C({model:s,type:"chat",success:!1,status:"pending",durationMs:Date.now()-o});w.current=!0;const d={Authorization:`Bearer ${i}`,"Content-Type":"application/json"};let c=0;const m=72,p=async()=>{if(w.current){if(c++,c>m)return w.current=!1,_(z("生成超时,请稍后重试")),T(l,{success:!1,status:"failed",durationMs:Date.now()-o}),v(!1),void N(e=>e+1);try{const e=await fetch(`/minimax/v1/query/t2a_async_query_v2?task_id=${n}`,{method:"GET",headers:d,signal:r}),s=await e.json();if(!w.current)return;f(s);const t=s?.status;if("Success"===t){const e=s?.file_id;if(!e)throw new Error(z("语音合成失败:无文件 ID"));const t=await fetch(`/minimax/v1/files/retrieve?file_id=${e}`,{method:"GET",headers:d,signal:r}),a=await t.json();f(a);const i=a?.file?.download_url;if(!i)throw new Error(z("语音合成失败:无下载地址"));y(i),b(z("语音合成完成,点击上方播放器收听")),w.current=!1,T(l,{success:!0,status:"success",durationMs:Date.now()-o}),v(!1),N(e=>e+1)}else"Failed"===t||"Cancelled"===t?(_(s?.base_resp?.status_msg||z("语音合成失败")),w.current=!1,T(l,{success:!1,status:"failed",durationMs:Date.now()-o}),v(!1),N(e=>e+1)):S.current=setTimeout(p,5e3)}catch(e){if("AbortError"===e?.name||!w.current)return;S.current=setTimeout(p,5e3)}}};S.current=setTimeout(p,5e3)}else if("stt"===m){const e=new FormData;e.append("file",d.stt_file,d.stt_file_name),e.append("model",t),e.append("response_format",d.stt_format||"json"),d.stt_language&&e.append("language",d.stt_language),n&&!l&&e.append("group",n);const a={Authorization:`Bearer ${i}`},c=await fetch(O.endpoint,{method:"POST",headers:a,body:e,signal:r});Is(c.status);const m=d.stt_format||"json";if("json"===m||"verbose_json"===m){const e=await c.json();f(e),b(e?.text||"")}else{const e=await c.text();b(e)}if(!c.ok)throw new Error(z("转录失败"));C({model:s,type:"chat",success:!0,durationMs:Date.now()-o})}else if("gemini"===m){const e=O.body,i=!1!==d.stream,n=O.endpoint,l=await fetch(n,{method:"POST",headers:a,body:JSON.stringify(e),signal:r});if(Is(l.status),!l.ok){const e=await l.json().catch(()=>({}));throw new Error(e?.error?.message||`HTTP ${l.status}`)}const c=e=>(e?.candidates?.[0]?.content?.parts||[]).map(e=>e?.text||"").join("");if(i){const e=l.body.getReader(),a=new TextDecoder;let i="",n=null,d=null,m="";for(;;){const{done:s,value:t}=await e.read();if(s)break;if(r.aborted){e.cancel().catch(()=>{});break}m+=a.decode(t,{stream:!0});const o=m.split("\n");m=o.pop();for(const e of o){if(!e.startsWith("data: "))continue;const s=e.slice(6).trim();if(s&&"[DONE]"!==s)try{const e=JSON.parse(s);P(e);const t=c(e);t&&(i+=t,b(i)),e?.candidates?.[0]?.finishReason&&(d=e.candidates[0].finishReason),e?.usageMetadata&&(n=e.usageMetadata)}catch(A){}}}h.current&&(clearTimeout(h.current),h.current=null),g.current,f({model:t,candidates:[{content:{role:"model",parts:[{text:i}]},finishReason:d}],usageMetadata:n});const p=n?.promptTokenCount??0,u=n?.candidatesTokenCount??0;k(I(p,u,null!=n,x.current)),C({model:s,type:"chat",success:!0,promptTokens:p||void 0,completionTokens:u||void 0,quota:p+u,durationMs:Date.now()-o})}else{const e=await l.json();f(e),b(c(e));const t=e?.usageMetadata,a=t?.promptTokenCount??0,i=t?.candidatesTokenCount??0;k(I(a,i,null!=t,x.current)),C({model:s,type:"chat",success:!0,promptTokens:a||void 0,completionTokens:i||void 0,quota:a+i,durationMs:Date.now()-o})}}else{const e=m===Se,t=m===Ce,i=O.body,n=O.endpoint,l={...a};t&&(l["anthropic-version"]="2023-06-01",d.anthropic_beta?.trim()&&(l["anthropic-beta"]=d.anthropic_beta.trim()));const c=await fetch(n,{method:"POST",headers:l,body:JSON.stringify(i),signal:r});if(Is(c.status),!c.ok){const e=await c.json().catch(()=>({}));throw new Error(e?.error?.message||`HTTP ${c.status}`)}if(i.stream){const a=c.body.getReader(),i=new TextDecoder;let n="",l=null,d=null,m=null,p="";for(;;){const{done:s,value:o}=await a.read();if(s)break;if(r.aborted){a.cancel().catch(()=>{});break}p+=i.decode(o,{stream:!0});const c=p.split("\n");p=c.pop();for(const a of c){if(!a.startsWith("data: "))continue;const s=a.slice(6).trim();if("[DONE]"!==s)try{const a=JSON.parse(s);if(P(a),e){!l&&a?.response?.id&&(l={id:a.response.id,object:"response",model:a.response.model});const e="string"==typeof a?.delta?a.delta:a?.delta?.text||"";e&&(n+=e,b(n)),"response.completed"===a?.type&&a?.response?.usage&&(d=a.response.usage),"response.completed"===a?.type&&(m="stop")}else if(t)"message_start"===a?.type&&a?.message?(l={id:a.message.id,object:"message",model:a.message.model},null!=a.message.usage?.input_tokens&&(d={...d||{},input_tokens:a.message.usage.input_tokens}
1)):"content_block_delta"===a?.type&&a?.delta?.text?(n+=a.delta.text,b(n)):"message_delta"===a?.type&&(a?.delta?.stop_reason&&(m=a.delta.stop_reason),null!=a?.usage?.output_tokens&&(d={...d||{},output_tokens:a.usage.output_tokens}));else{!l&&a?.id&&(l={id:a.id,object:a.object,created:a.created,model:a.model});const e=a?.choices?.[0]?.delta?.content||"";e&&(n+=e,b(n)),a?.choices?.[0]?.finish_reason&&(m=a.choices[0].finish_reason),a?.usage&&(d=a.usage)}}catch(A){}}}if(p&&p.startsWith("data: ")){const s=p.slice(6).trim();if(s&&"[DONE]"!==s)try{const a=JSON.parse(s);if(P(a),e){!l&&a?.response?.id&&(l={id:a.response.id,object:"response",model:a.response.model});const e="string"==typeof a?.delta?a.delta:a?.delta?.text||"";e&&(n+=e,b(n)),"response.completed"===a?.type&&a?.response?.usage&&(d=a.response.usage),"response.completed"===a?.type&&(m="stop")}else if(t)"message_start"===a?.type&&a?.message?(l={id:a.message.id,object:"message",model:a.message.model},null!=a.message.usage?.input_tokens&&(d={...d||{},input_tokens:a.message.usage.input_tokens})):"content_block_delta"===a?.type&&a?.delta?.text?(n+=a.delta.text,b(n)):"message_delta"===a?.type&&(a?.delta?.stop_reason&&(m=a.delta.stop_reason),null!=a?.usage?.output_tokens&&(d={...d||{},output_tokens:a.usage.output_tokens}));else{!l&&a?.id&&(l={id:a.id,object:a.object,created:a.created,model:a.model});const e=a?.choices?.[0]?.delta?.content||"";e&&(n+=e,b(n)),a?.choices?.[0]?.finish_reason&&(m=a.choices[0].finish_reason),a?.usage&&(d=a.usage)}}catch(A){}}h.current&&(clearTimeout(h.current),h.current=null),j&&g.current.length>0&&j([...g.current]);const u={...l||{},choices:[{index:0,message:{role:"assistant",content:n},finish_reason:m}],usage:d};f(u);const v=d?.input_tokens??d?.prompt_tokens??0,_=d?.output_tokens??d?.completion_tokens??0;k(I(v,_,null!=d,x.current)),C({model:s,type:"chat",success:!0,promptTokens:v||void 0,completionTokens:_||void 0,quota:v+_,durationMs:Date.now()-o})}else{const a=await c.json();f(a);const i=e?a?.output?.[0]?.content?.[0]?.text||"":t?Array.isArray(a?.content)?a.content.filter(e=>"text"===e?.type).map(e=>e.text).join(""):"":a?.choices?.[0]?.message?.content||"";b(i);const r=a?.usage,n=r?.input_tokens??r?.prompt_tokens??0,l=r?.output_tokens??r?.completion_tokens??0;k(I(n,l,null!=r,x.current)),C({model:s,type:"chat",success:!0,promptTokens:n||void 0,completionTokens:l||void 0,quota:n+l,durationMs:Date.now()-o})}}}(o)}catch(u){if("AbortError"===u?.name)return;f(u.message||e("请求失败")),Ye({model:m,type:l,success:!1,durationMs:Date.now()-i})}finally{P.current||a(!1),k(e=>e+1)}},[R,z,I,e,O]);return{running:t,rawText:i,jsonData:o,streamChunks:l,imageUrl:m,videoUrl:u,audioUrl:g,error:v,lastRunStats:b,logRefreshKey:y,doRun:M,abort:s.useCallback(()=>{w.current&&(w.current.abort(),w.current=null),I(),N.current&&(URL.revokeObjectURL(N.current),N.current=null)},[I]),resetOutput:$,stopVideoPolling:I}}const Zs=({params:e,onChange:a,onRun:i,running:n,disabled:l,modelFormat:p,routingPreview:v,previewLoading:f})=>{const{t:b}=_(),[j,y]=s.useState(!1),k=s.useRef(null),N=be[p]||be["openai-chat"],w=e.images||[],S=async e=>{if(e&&e.type.startsWith("image/"))if(e.size>20971520)c.error(b("图片大小不能超过 20MB"));else{y(!0);try{(s=await ks(e))&&a("images",[...w,s]),c.success(b("图片上传成功"))}catch(t){c.error(b("图片上传失败")+": "+t.message)}finally{y(!1)}}else c.error(b("请选择图片文件"));var s},C="jina-rerank"===p,T="embedding"===p,P="moderation"===p,z="tts"===p,I="gpt-audio"===p,$="stt"===p,O="minimax-tts"===p,M="minimax-tts-async"===p,A="suno-music"===p,E="gemini-tts"===p,U="kling-tts"===p,D="kling-video-audio"===p,L="kling-audio"===p,V="kling-custom-voice"===p,B="vidu-audio"===p,K=C||T||P||z||I||$||O||M||A||E||U||D||L||V||B,H=["male-qn-qingse","male-qn-jingying","male-qn-badao","female-shaonv","female-yujie","female-chengshu","female-tianmei","presenter_male","presenter_female","audiobook_male_1","audiobook_female_1","English_Graceful_Lady","English_Trustworth_Man"],J=["mp3","wav","flac"];return t.jsxs("div",{className:"space-y-3.5",children:[C&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Query",desc:b("用于排序的查询语句")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:b("输入查询语句..."),autosize:{minRows:2,maxRows:6},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Documents",desc:b("候选文档列表,每行一个,至少填写一条")}
1),t.jsx(u,{value:e.rerank_documents||"",onChange:e=>a("rerank_documents",e),placeholder:b("每行输入一个候选文档...\n例:\nThe sky is blue.\nMachine learning is powerful.\n..."),autosize:{minRows:5,maxRows:15},disabled:l,style:{fontFamily:"inherit",fontSize:13}})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Top N",desc:b("返回评分最高的前 N 个结果,0 表示返回全部"),value:e.max_tokens||10}),t.jsx(r,{type:"number",value:e.max_tokens||10,onChange:e=>a("max_tokens",Number(e)),disabled:l,min:0,max:1e3,style:{width:"100%"}})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:b(n?"排序中...":"Rerank")})]}),T&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("输入文本"),desc:b("需要向量化的文本内容")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:b("输入需要转换为向量的文本..."),autosize:{minRows:4,maxRows:12},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"encoding_format",desc:"returned encoding format: float | base64"}),t.jsx(x,{value:e.embedding_format||"float",onChange:e=>a("embedding_format",e),disabled:l,className:"w-full",children:["float","base64"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.prompt,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:b(n?"嵌入中...":"Get Embedding")})]}),P&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("待检测文本"),desc:b("检测内容是否违反内容政策")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:b("输入需要审核的文本内容..."),autosize:{minRows:4,maxRows:12},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.prompt,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:b(n?"审核中...":"Moderate")})]}),z&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("文本内容"),desc:b("需要转换为语音的文本,建议不超过 4096 字符")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:b("输入需要朗读的文本..."),autosize:{minRows:4,maxRows:12},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Voice",desc:b("音色选择")}),t.jsx(x,{value:e.tts_voice||"alloy",onChange:e=>a("tts_voice",e),disabled:l,className:"w-full",children:["alloy","ash","ballad","coral","echo","fable","nova","onyx","sage","shimmer","verse"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Format",desc:b("音频格式")}),t.jsx(x,{value:e.tts_format||"mp3",onChange:e=>a("tts_format",e),disabled:l,className:"w-full",children:["mp3","opus","aac","flac","wav","pcm"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Speed",desc:b("语速,范围 0.25 ~ 4.0"),value:(e.tts_speed||1).toFixed(2)}),t.jsx(g,{value:e.tts_speed||1,onChange:e=>a("tts_speed",e),min:.25,max:4,step:.05,disabled:l})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.prompt,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:b(n?"合成中...":"合成语音")})]}),I&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("系统提示词(可选)"),desc:b("设定模型的角色或风格")}),t.jsx(u,{value:e.system||"",onChange:e=>a("system",e),placeholder:b("例如:你是一位友好的语音助手"),autosize:{minRows:1,maxRows:4},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("对话内容"),desc:b("发送给模型的用户消息,模型将返回语音 + 文字")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:b("输入你的问题或指令..."),autosize:{minRows:4,maxRows:12},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Voice",desc:b("输出语音音色")}),t.jsx(x,{value:e.gpt_audio_voice||"alloy",onChange:e=>a("gpt_audio_voice",e),disabled:l,className:"w-full",children:["alloy","ash","ballad","coral","echo","fable","nova","onyx","sage","shimmer"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Format",desc:b("音频输出格式")}),t.jsx(x,{value:e.gpt_audio_format||"wav",onChange:e=>a("gpt_audio_format",e),disabled:l,className:"w-full",children:["wav","mp3","flac","opus","pcm16"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.prompt,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:b(n?"生成中...":"生成语音回复")})]}),O&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("文本内容"),desc:b("需要转换为语音的文本,支持语气词如 (laughs) (sighs)")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:b("输入需要朗读的文本..."),autosize:{minRows:4,maxRows:12},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Voice ID",desc:b("MiniMax 音色")}),t.jsx(x,{value:e.minimax_voice||"male-qn-qingse",onChange:e=>a("minimax_voice",e),disabled:l,className:"w-full",filter:!0,children:H.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Format",desc:b("音频格式")}),t.jsx(x,{value:e.minimax_format||"mp3",onChange:e=>a("minimax_format",e),disabled:l,className:"w-full",children:J.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Emotion",desc:b("情感(可选)")}),t.jsx(x,{value:e.minimax_emotion||"(默认)",onChange:e=>a("minimax_emotion",e),disabled:l,className:"w-full",children:["(默认)","happy","sad","angry","fearful","disgusted","surprised","calm"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Speed",desc:b("语速 0.5 ~ 2.0"),value:(e.tts_speed||1).toFixed(2)}),t.jsx(g,{value:e.tts_speed||1,onChange:e=>a("tts_speed",e),min:.5,max:2,step:.05,disabled:l})]})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.prompt,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:b(n?"合成中...":"合成语音")})]}),E&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("文本内容"),desc:b("需要转换为语音的文本")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:b("输入需要朗读的文本..."),autosize:{minRows:4,maxRows:12},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Voice",desc:b("Gemini 内置音色")}
1),t.jsx(x,{value:e.gemini_tts_voice||"Kore",onChange:e=>a("gemini_tts_voice",e),disabled:l,className:"w-full",children:["Kore","Charon","Fenrir","Aoede","Puck","Leda","Orus","Zephyr","Schedar","Gacrux","Achernar","Sulafat"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.prompt,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:b(n?"合成中...":"合成语音")})]}),U&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("合成文本"),desc:b("最多 1000 字符")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:b("输入需要朗读的文本..."),autosize:{minRows:3,maxRows:10},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Voice ID",desc:b("音色 ID,如 genshin_vindi2")}),t.jsx(r,{value:e.kling_tts_voice_id||"",onChange:e=>a("kling_tts_voice_id",e),placeholder:"genshin_vindi2",disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Language",desc:b("语言")}),t.jsxs(x,{value:e.kling_tts_language||"zh",onChange:e=>a("kling_tts_language",e),disabled:l,className:"w-full",children:[t.jsx(x.Option,{value:"zh",children:"中文(zh)"}),t.jsx(x.Option,{value:"en",children:"English(en)"}),t.jsx(x.Option,{value:"ja",children:"日本語(ja)"}),t.jsx(x.Option,{value:"ko",children:"한국어(ko)"})]})]})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Speed",desc:b("语速 0.8 ~ 2.0"),value:(e.kling_tts_speed||1).toFixed(1)}),t.jsx(g,{value:e.kling_tts_speed||1,onChange:e=>a("kling_tts_speed",e),min:.8,max:2,step:.1,disabled:l})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.prompt||!e.kling_tts_voice_id,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:b(n?"合成中...":"合成语音")})]}),D&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("视频 ID 或 URL"),desc:b("30天内生成的 Kling 视频 ID,或 MP4/MOV URL(3~20 秒,≤100MB),二选一填写")}),t.jsx(r,{value:e.kling_va_video||"",onChange:e=>a("kling_va_video",e),placeholder:b("视频 ID(如 825406034503692376)或 https://..."),disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("音效提示词"),desc:b("可选。留空时自动根据视频内容生成")}),t.jsx(r,{value:e.kling_va_sound_prompt||"",onChange:e=>a("kling_va_sound_prompt",e),placeholder:b("符合视频的人的声音"),disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("BGM 提示词"),desc:b("可选。配乐生成提示词")}),t.jsx(r,{value:e.kling_va_bgm_prompt||"",onChange:e=>a("kling_va_bgm_prompt",e),placeholder:b("轻松愉快的背景音乐"),disabled:l})]}),t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx(Ns,{label:b("ASMR 模式"),desc:b("增强细节音效,适合高沉浸内容")}),t.jsx(h,{checked:!0===e.kling_va_asmr,onChange:e=>a("kling_va_asmr",e),disabled:l})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.kling_va_video,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:b(n?"生成中...":"生成视频配音")})]}),L&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("音效描述"),desc:b("描述想要生成的音效内容")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:b("如:雨打窗户的声音,伴随远处雷声..."),autosize:{minRows:3,maxRows:10},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("时长(秒)"),desc:b("音效时
1长,默认 5 秒")}),t.jsx(r,{type:"number",value:e.kling_audio_duration??5,onChange:e=>a("kling_audio_duration",""===e?"":Number(e)),min:1,max:10,placeholder:"5",disabled:l})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.prompt,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:b(n?"生成中...":"生成音效")})]}),V&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("音色名称"),desc:b("必填。为创建的专属音色命名,便于后续调用")}),t.jsx(r,{value:e.kling_cv_name||"",onChange:e=>a("kling_cv_name",e),placeholder:b("如:我的播音音色"),disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("音源类型"),desc:b("音频文件 URL 与视频 ID 二选一")}),t.jsxs(x,{value:e.kling_cv_source||"voice_url",onChange:e=>a("kling_cv_source",e),disabled:l,className:"w-full",children:[t.jsx(x.Option,{value:"voice_url",children:b("音频文件 URL")}),t.jsx(x.Option,{value:"video_id",children:b("视频 ID")})]})]}),"video_id"===(e.kling_cv_source||"voice_url")?t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("视频 ID"),desc:b("使用已有 Kling 视频的音频创建音色")}),t.jsx(r,{value:e.kling_cv_video_id||"",onChange:e=>a("kling_cv_video_id",e),placeholder:b("如:825406034503692376"),disabled:l})]}):t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("音频文件 URL"),desc:b("上传到可公网访问的音频文件地址(清晰人声,建议 ≥10 秒)")}),t.jsx(r,{value:e.kling_cv_voice_url||"",onChange:e=>a("kling_cv_voice_url",e),placeholder:"https://.../sample.mp3",disabled:l})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.kling_cv_name||("video_id"===(e.kling_cv_source||"voice_url")?!e.kling_cv_video_id:!e.kling_cv_voice_url),style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:b(n?"创建中...":"创建自定义音色")})]}),B&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("文本内容"),desc:b("需要转换为语音的文本,支持中英文,最多约 1000 字")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:b("输入需要朗读的文本..."),autosize:{minRows:4,maxRows:16},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("音色 ID"),desc:b("voice_setting_voice_id:语音合成(audio-tts)必填;文生音频(text2audio)无需填写")}),t.jsx(r,{value:e.vidu_audio_voice_id||"",onChange:e=>a("vidu_audio_voice_id",e),placeholder:b("语音合成必填,如 male-qn-daxuesheng"),disabled:l})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.prompt,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:b(n?"合成中...":"合成语音")})]}),M&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("文本内容"),desc:b("需要转换为语音的文本,支持长文本(最多 5 万字符),异步生成")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:b("输入需要朗读的文本..."),autosize:{minRows:4,maxRows:16},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Voice ID",desc:b("MiniMax 音色")}),t.jsx(x,{value:e.minimax_voice||"male-qn-qingse",onChange:e=>a("minimax_voice",e),disabled:l,className:"w-full",filter:!0,children:H.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Format",desc:b("音频格式")}),t.jsx(x,{value:e.minimax_format||"mp3",onChange:e=>a("minimax_format",e),disabled:l,className:"w-full",children:J.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Speed",desc:b("语速 0.5 ~ 2.0"),value:(e.tts_speed||1).toFixed(2)}),t.jsx(g,{value:e.tts_speed||1,onChange:e=>a("tts_speed",e),min:.5,max:2,step:.05,disabled:l})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.prompt,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:b(n?"合成中...":"合成语音")})]}),A&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("生成模式"),desc:b("灵感:自然语言描述;自定义:直接写歌词(支持 [主歌]/[副歌] 标签)")}
1),t.jsxs(x,{value:e.suno_mode||"inspiration",onChange:e=>a("suno_mode",e),disabled:l,className:"w-full",children:[t.jsx(x.Option,{value:"inspiration",children:b("灵感模式(描述)")}),t.jsx(x.Option,{value:"custom",children:b("自定义模式(歌词)")})]})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"custom"===(e.suno_mode||"inspiration")?b("歌词"):b("音乐描述"),desc:"custom"===(e.suno_mode||"inspiration")?b("歌词内容,最多约 3000 字"):b("用一句话描述想要的音乐,最多约 200 字")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:"custom"===(e.suno_mode||"inspiration")?b("[主歌]\n夜风轻轻吹...\n[副歌]\n星光照大地..."):b("一首轻快的爵士钢琴曲,适合咖啡厅背景"),autosize:{minRows:4,maxRows:12},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),"custom"===(e.suno_mode||"inspiration")&&t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("风格标签"),desc:b("逗号分隔,如 pop, piano")}),t.jsx(r,{value:e.suno_tags||"",onChange:e=>a("suno_tags",e),placeholder:"pop, piano, emotional",disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("标题"),desc:b("歌曲标题(可选)")}),t.jsx(r,{value:e.suno_title||"",onChange:e=>a("suno_title",e),placeholder:b("星光下的承诺"),disabled:l})]})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("模型版本"),desc:"mv"}),t.jsx(x,{value:e.suno_mv||"chirp-v5",onChange:e=>a("suno_mv",e),disabled:l,className:"w-full",children:["chirp-v5","chirp-v4-5","chirp-v4","chirp-v3-5"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5 flex flex-col",children:[t.jsx(Ns,{label:b("纯音乐"),desc:b("无人声")}),t.jsx("div",{className:"pt-1",children:t.jsx(h,{checked:!0===e.suno_instrumental,onChange:e=>a("suno_instrumental",e),disabled:l})})]})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.prompt&&!0!==e.suno_instrumental,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:b(n?"生成中...":"生成音乐")})]}),$&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("音频文件"),desc:b("支持 mp3 / mp4 / wav / m4a / webm,最大 25MB")}),t.jsxs("div",{className:"border-2 border-dashed border-border rounded-xl p-6 text-center cursor-pointer hover:border-primary/50 transition-colors",onClick:()=>document.getElementById("stt-file-input")?.click(),children:[e.stt_file_name?t.jsxs("div",{className:"flex flex-col items-center gap-2",children:[t.jsx("span",{className:"text-2xl",children:"🎵"}),t.jsx("span",{className:"text-sm font-medium text-foreground",children:e.stt_file_name}),t.jsx("span",{className:"text-xs text-muted-foreground",children:b("点击重新选择")})]}):t.jsxs("div",{className:"flex flex-col items-center gap-2",children:[t.jsx("span",{className:"text-2xl",children:"🎙️"}),t.jsx("span",{className:"text-sm text-muted-foreground",children:b("点击选择音频文件")})]}),t.jsx("input",{id:"stt-file-input",type:"file",accept:"audio/*",style:{display:"none"},onChange:e=>{const s=e.target.files?.[0];s&&(a("stt_file",s),a("stt_file_name",s.name))}})]})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"response_format",desc:"json | text | srt | vtt | verbose_json"}),t.jsx(x,{value:e.stt_format||"json",onChange:e=>a("stt_format",e),disabled:l,className:"w-full",children:["json","text","srt","vtt","verbose_json"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"language",desc:b("可选,如 zh、en,提高准确率")}),t.jsx(r,{value:e.stt_language||"",onChange:e=>a("stt_language",e),placeholder:"zh",disabled:l})]})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.stt_file,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:b(n?"转录中...":"转录音频")})]}),!K&&t.jsxs("div",{className:"space-y-3.5",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("对话内容"),desc:b("发送给模型的用户消息内容")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:b("输入你的问题或指令..."),autosize:{minRows:4,maxRows:12},disabled:l,style:{fontFamily:"inherit",fontSize:14}}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsxs("button",{type:"button",onClick:()=>k.current?.click(),disabled:l||j,className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground border border-border rounded-lg px-2.5 py-1.5 hover:bg-muted/50 transition-colors",children:[j?t.jsx(o,{size:"small"}):t.jsx(G,{size:12}),b("上传图片")]}),t.jsx("input",{ref:k,type:"file",accept:"image/*",multiple:!0,style:{display:"none"},onChange:e=>
1{Array.from(e.target.files||[]).forEach(S),e.target.value=""}}),w.length>0&&t.jsx("span",{className:"text-[11px] text-muted-foreground",children:b("{{count}} 张图片",{count:w.length})})]}),w.length>0&&t.jsx("div",{className:"flex flex-wrap gap-2 p-2 rounded-lg bg-muted/30 border border-border",children:w.map((e,s)=>t.jsxs("div",{className:"relative group",children:[t.jsx("img",{src:e,alt:b("附件 {{index}}",{index:s+1}),className:"w-16 h-16 object-cover rounded-lg border border-border"}),t.jsx("button",{onClick:()=>(e=>{a("images",w.filter((s,t)=>t!==e))})(s),className:"absolute -top-1.5 -right-1.5 w-4 h-4 rounded-full bg-red-500 text-white flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity",children:t.jsx(q,{size:9})})]},s))})]}),t.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground w-full py-1",children:[t.jsx("div",{className:"flex-1 h-px bg-border"}),t.jsx("span",{className:"px-2 flex-shrink-0",children:b("更多参数")}),t.jsx("div",{className:"flex-1 h-px bg-border"})]}),t.jsxs("div",{className:"space-y-4",children:[N.note&&t.jsxs("div",{className:"flex items-start gap-1.5 text-[11px] text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-900/10 rounded-lg px-3 py-2",children:[t.jsx(F,{size:11,className:"mt-0.5 flex-shrink-0"}),t.jsx("span",{children:N.note})]}),N.hasSystem&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("系统提示词"),desc:b("系统级指令,定义模型的角色、风格与行为约束。可选,不传则使用模型默认行为。")}),t.jsx(u,{value:e.system,onChange:e=>a("system",e),placeholder:b("可选:设定模型角色、背景或行为约束..."),autosize:{minRows:2,maxRows:6},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[N.hasTemperature&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("采样温度"),desc:b("采样温度:控制输出随机性。0 = 确定性最强,2 = 高度随机。建议与核采样二选一调节。"),value:(e.temperature??.7).toFixed(2)}),t.jsx(g,{value:e.temperature??.7,onChange:e=>a("temperature",e),min:0,max:2,step:.01,disabled:l})]}),N.hasMaxTokens&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("最大输出长度"),desc:b("限制模型单次输出的最大 Token 数量(字段名:{{field}})。",{field:N.maxTokensField})}),t.jsx(r,{type:"number",value:e.max_tokens||4096,onChange:e=>a("max_tokens",Number(e)),disabled:l,min:1,max:2e5,style:{width:"100%"}})]})]}),N.hasTopP&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("核采样"),desc:b("只考虑累积概率前 P% 的词。建议与采样温度二选一使用,同时调节效果不可预测。"),value:(e.top_p??1).toFixed(2)}),t.jsx(g,{value:e.top_p??1,onChange:e=>a("top_p",e),min:0,max:1,step:.01,disabled:l})]}),(N.hasFreqPenalty||N.hasPresencePenalty)&&t.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[N.hasFreqPenalty&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("频率惩罚"),desc:b("负值鼓励重复,正值降低已出现词汇的复现概率。范围 -2 ~ 2,默认 0。"),value:(e.frequency_penalty??0).toFixed(2)}),t.jsx(g,{value:e.frequency_penalty??0,onChange:e=>a("frequency_penalty",e),min:-2,max:2,step:.01,disabled:l})]}),N.hasPresencePenalty&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:b("存在惩罚"),desc:b("正值鼓励引入新话题,负值鼓励继续讨论已有话题。范围 -2 ~ 2,默认 0。"),value:(e.presence_penalty??0).toFixed(2)}),t.jsx(g,{value:e.presence_penalty??0,onChange:e=>a("presence_penalty",e),min:-2,max:2,step:.01,disabled:l})]})]}),N.hasStream&&t.jsxs("div",{className:"flex items-center justify-between rounded-xl border border-border px-4 py-3",children:[t.jsxs("div",{className:"flex items-center gap-1.5",children:[t.jsxs("div",{children:[t.jsx("p",{className:"text-xs font-semibold text-foreground/70 tracking-wide",children:b("流式输出")}),t.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:b("逐字输出(打字机效果),关闭后等待完整响应")})]}),t.jsx(m,{content:b("开启后逐步输出 Token,减少等待感;关闭后一次性返回完整响应 JSON。"),position:"top",children:t.jsx(F,{size:11,className:"text-muted-foreground cursor-help ml-1"})})]}),t.jsx(h,{checked:!1!==e.stream,onChange:e=>a("stream",e),disabled:l,size:"default"})]}),"anthropic"===p&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"anthropic-beta",de
1sc:b("可选。Anthropic Beta 特性请求头,多个值用逗号分隔,如 extended-cache-ttl-2025-04-11,interleaved-thinking-2025-05-14")}),t.jsx(r,{value:e.anthropic_beta||"",onChange:e=>a("anthropic_beta",e),placeholder:b("可选,如 extended-cache-ttl-2025-04-11"),disabled:l})]})]}),t.jsx(Cs,{routingPreview:v,previewLoading:f}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:n?b("生成中..."):"Run"})]})," "]})},{Text:et}=l,st=["A futuristic city skyline at sunset with neon lights"],tt=["Sunrise over a calm ocean, waves gently lapping the shore"],at=e=>e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/("[\w-]+")\s*:/g,'<span style="color:#79c0ff">$1</span>:').replace(/:\s*("(?:[^"\\]|\\.)*")/g,': <span style="color:#a5d6ff">$1</span>').replace(/:\s*(-?\d+\.?\d*)/g,': <span style="color:#f2cc60">$1</span>').replace(/:\s*(true|false)/g,': <span style="color:#ff7b72">$1</span>').replace(/:\s*(null)/g,': <span style="color:#8b949e">$1</span>'),it=s.memo(({data:e,block:a=!1})=>{const i=s.useMemo(()=>{const s=a?JSON.stringify(e,null,2):JSON.stringify(e);return a?s.split("\n").map(e=>at(e)).join("\n"):at(s)},[e,a]);return a?t.jsx("pre",{className:"text-slate-300 whitespace-pre-wrap break-words",dangerouslySetInnerHTML:{__html:i}}):t.jsx("span",{className:"text-slate-300 break-all",dangerouslySetInnerHTML:{__html:i}})}),rt=({rawText:e,jsonData:a,streamChunks:i=[],imageUrl:r,videoUrl:o,audioUrl:n,loading:l,error:d,presetOutput:m,taskType:p="video"})=>{const{t:u}=_(),[x,g]=s.useState("preview"),[h,f]=s.useState("preview"),b=s.useCallback(e=>{f(e),s.startTransition(()=>g(e))},[]),[j,y]=s.useState(!1),k=s.useRef(null),N=s.useRef(null);s.useEffect(()=>{"json"===x&&k.current&&k.current.scrollIntoView({behavior:"smooth"})},[i.length,x]),s.useEffect(()=>()=>{N.current&&clearTimeout(N.current)},[]);const w=(e=>{if(!e)return null;if(e.choices?.length){const s=e.choices[0]?.message?.content;return s?{type:"text",text:s}:null}if(e.output?.length){const s=[];for(const t of e.output)if("message"===t.type&&t.content?.length)for(const e of t.content)"output_text"!==e.type&&"text"!==e.type||s.push(e.text||"");else t.text&&s.push(t.text);if(s.length)return{type:"text",text:s.join("\n")}}if(e.data?.length&&(e.data[0]?.url||e.data[0]?.b64_json))return{type:"images",images:e.data};if(e.candidates?.length){const s=e.candidates[0]?.content?.parts||[],t=[],a=[];for(const e of s)e.inlineData?.data?t.push({b64_json:e.inlineData.data,mimeType:e.inlineData.mimeType||"image/png"}):e.text&&a.push(e.text);if(t.length)return{type:"images",images:t};if(a.length)return{type:"text",text:a.join("\n")}}if(!e.choices&&!e.candidates&&!e.data){const s=e.task_id||e.id||e.output?.task_id,t=e.status||e.state||e.output?.task_status||"submitted";if(s)return{type:"video_task",taskId:s,status:t}}return null})(a),S=e||("text"===w?.type?w.text:""),T=r?[{url:r}]:"images"===w?.type?w.images:null,P="video_task"===w?.type?w:null,z=P,I=!(S||T||z||a||0!==i.length);return t.jsxs("div",{className:"flex flex-col min-h-[400px] max-h-[calc(100vh-140px)]",children:[t.jsxs("div",{className:"flex items-center justify-between px-4 py-2.5 border-b border-border bg-muted/30",children:[t.jsx("div",{className:"flex items-center gap-0.5",children:["preview","json"].map(e=>t.jsx("button",{onClick:()=>b(e),className:"px-3 py-1 rounded-md text-xs font-medium transition-all "+(h===e?"bg-background border border-border/70 shadow-sm text-foreground":"text-muted-foreground hover:text-foreground hover:bg-background/60"),children:"preview"===e?"Preview":t.jsxs("span",{className:"flex items-center gap-1",children:["JSON",i.length>0&&t.jsx("span",{className:"text-[10px] px-1 rounded-full font-normal "+("json"===h?"bg-primary/10 text-primary":"bg-muted text-muted-foreground"),children:i.length})]})},e))}),t.jsxs("button",{onClick:async()=>{let e;e="json"===x?i.length>0?i.map(e=>JSON.stringify(e)).join("\n"):a?JSON.stringify(a,null,2):"":S||"";try{await navigator.clipboard.writeText(e),y(!0),N.current&&clearTimeout(N.current),N.current=setTimeout(()=>{y(!1),N.current=null},2e3)}catch(s){c.error(u("复制失败"))}},disabled:I,className:"flex items-center gap-1.5 px-2.5 py-1 rounded-md text-xs text-muted-foreground hover:text-foreground hover:bg-muted transition-all disabled:opacity-40",children:[j?t.jsx(U,{size:12,className:"text-green-500"}):t.jsx(D,{size:12}),u(j?"已复制":"复制")]})]}),t.jsxs("div",{className:"flex-1 flex flex-col min-h-0 overflow-hidden p-5",children:[l&&!S&&!T&&!z&&t.jsxs("div",{className:"flex flex-col items-center justify-center flex-1 gap-3 text-muted-foreground",children:[t.jsx("div",{className:"relative",children:t.jsx("div",{className:"w-10 h-10 rounded-full border-2 border-primary/20 border-t-primary animate-spin"})}),t.jsx(et,{size:"small",type:"tertiary",children:u("生成中...")})]}),!l&&d&&t.jsx("div",{className:"rounded-xl border border-red-200 dark:border-red-800 bg-red-50 dark:bg-red-900/20 px-4 py-3",children:t.jsx("p",{className:"text-sm text-red-600 dark:text-red-400",children:d})}),!l&&!d&&I&&!m&&t.jsxs("div",{className:"flex flex-col items-center justify-center flex-1 gap-3 select-none",children:[t.jsx("div",{className:"w-16 h-16 rounded-2xl bg-primary/5 border border-primary/10 flex items-center justify-center",children:t.jsx(R,{size:24,className:"text-primary/40 ml-0.5"})}),t.jsx("p",{className:"text-sm text-muted-foreground",children:u("点击 Run 开始生成")})]}),!l&&!d&&I&&m&&"preview"===x&&t.jsxs("div",{className:"relative flex-1",children:["string"==typeof m&&"image_preview"!==m&&"video_preview"!==m&&t.jsx("div",{className:"markdown-preview text-sm leading-7 text-foreground
1/80",children:t.jsx(Y,{remarkPlugins:[v,ee,se],rehypePlugins:[X,Z],components:{p:({children:e})=>t.jsx("p",{className:"mb-3 last:mb-0",children:e}),h2:({children:e})=>t.jsx("h2",{className:"text-base font-semibold mt-4 mb-2",children:e}),ul:({children:e})=>t.jsx("ul",{className:"list-disc pl-5 mb-3 space-y-1",children:e}),li:({children:e})=>t.jsx("li",{className:"text-sm",children:e}),blockquote:({children:e})=>t.jsx("blockquote",{className:"border-l-4 border-primary/30 pl-4 my-3 text-muted-foreground italic",children:e}),strong:({children:e})=>t.jsx("strong",{className:"font-semibold text-foreground/90",children:e})},children:m})}),"image_url"===m?.type&&m.url&&t.jsxs("div",{className:"space-y-3",children:[t.jsx("img",{src:m.url,alt:"示例输出",className:"w-full rounded-2xl shadow-md object-cover",style:{maxHeight:480}}),t.jsx("p",{className:"text-xs text-center text-muted-foreground",children:u("点击 Run 查看 AI 实际生成的图像")})]}),"video_url"===m?.type&&m.url&&t.jsxs("div",{className:"space-y-3",children:[t.jsx("video",{src:m.url,controls:!0,loop:!0,className:"w-full rounded-2xl shadow-md",style:{maxHeight:360}}),t.jsx("p",{className:"text-xs text-center text-muted-foreground",children:u("点击 Run 查看 AI 实际生成的视频")})]}),"image_preview"===m&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"relative w-full rounded-2xl overflow-hidden select-none",style:{paddingBottom:"100%",background:"linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%)"},children:[t.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center gap-3 px-6 text-center",children:[t.jsx("div",{className:"w-16 h-16 rounded-2xl flex items-center justify-center backdrop-blur-sm",style:{background:"rgba(255,255,255,0.15)",border:"1px solid rgba(255,255,255,0.25)"},children:t.jsx(C,{size:28,color:"white",strokeWidth:1.5,style:{opacity:.85}})}),t.jsx("p",{className:"text-sm font-medium text-white/90 leading-snug max-w-[220px]",children:st[0]}),t.jsx("span",{className:"text-xs text-white/55 font-mono",children:"1024 × 1024"})]}),t.jsx("div",{className:"absolute inset-0 opacity-20",style:{backgroundImage:"url(\"data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\")",backgroundSize:"cover"}})]}),t.jsx("p",{className:"text-xs text-center text-muted-foreground",children:u("点击 Run 查看 AI 实际生成的图像")})]}),"video_preview"===m&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"relative w-full rounded-2xl overflow-hidden select-none",style:{paddingBottom:"56.25%",background:"linear-gradient(135deg, #1a1a2e 0%, #16213e 40%, #0f3460 70%, #533483 100%)"},children:[t.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center gap-3 px-6 text-center",children:[t.jsxs("div",{className:"absolute bottom-8 left-6 right-6 space-y-1.5",children:[t.jsx("div",{className:"w-full h-1 rounded-full",style:{background:"rgba(255,255,255,0.15)"},children:t.jsx("div",{className:"h-full w-2/5 rounded-full",style:{background:"rgba(255,255,255,0.6)"}})}),t.jsxs("div",{className:"flex items-center justify-between text-[10px] text-white/40 font-mono",children:[t.jsx("span",{children:"0:00"}),t.jsx("span",{children:"0:05"})]})]}),t.jsx("div",{className:"w-16 h-16 rounded-full flex items-center justify-center backdrop-blur-sm",style:{background:"rgba(255,255,255,0.15)",border:"1px solid rgba(255,255,255,0.25)"},children:t.jsx(R,{size:24,color:"white",style:{opacity:.85,marginLeft:3}})}),t.jsx("p",{className:"text-sm font-medium text-white/85 leading-snug max-w-[260px]",children:tt[0]}),t.jsx("span",{className:"text-xs text-white/45 font-mono",children:"16:9 · 5s · 720P"})]}),[{top:"15%",left:"10%"},{top:"25%",left:"85%"},{top:"60%",left:"20%"},{top:"70%",right:"15%"},{top:"40%",left:"50%"}].map((e,s)=>t.jsx("div",{className:"absolute w-1 h-1 rounded-full bg-white/30",style:e},s))]}),t.jsx("p",{className:"text-xs text-center text-muted-foreground",children:u("点击 Run 查看 AI 实际生成的视频")})]}),t.jsx("div",{className:"absolute bottom-0 left-0 right-0 h-20 pointer-events-none rounded-b-xl",style:{background:"linear-gradient(to bottom, transparent, hsl(var(--background)) 90%)"}})]}),!l&&!d&&"preview"===x&&T&&t.jsx("div",{className:"flex flex-col items-center gap-4",children:T.map((e,s)=>{const a=e.mimeType||"image/png",i=e.url||(e.b64_json?`data:${a};base64,${e.b64_json}`:null);return i?t.jsxs("div",{className:"w-full",children:[t.jsx("img",{src:i,alt:u("生成结果 {{index}}",{index:s+1}),className:"max-w-full rounded-xl shadow-lg mx-auto block"}),t.jsx("div",{className:"flex justify-center mt-2",children:t.jsxs("a",{href:i,target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-primary transition-colors",children:[t.jsx(V,{size:12})," ",u("在新标签页查看")]})})]},s):null})}),!d&&"preview"===x&&o&&t.jsxs("div",{className:"space-y-3",children:[t.jsx("video",{src:o,controls:!0,autoPlay:!0,loop:!0,className:"w-full rounded-xl shadow-lg",style:{maxHeight:480}}),t.jsx("div",{className:"flex justify-center",children:t.jsxs("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-primary transition-colors",children:[t.jsx(V,{size:12})," ",u("在新标签页查看")]})})]}),!d&&"preview"===x&&n&&t.jsx("div",{className:"space-y-3",children:t.jsxs("div",{className:"rounded-2xl border border-border bg-muted/20 p-5 space-y-3",children:[t.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground
1/80",children:[t.jsx("span",{children:"🎵"}),t.jsx("span",{children:u("语音合成完成")})]}),t.jsx("audio",{controls:!0,src:n,className:"w-full",style:{borderRadius:8}}),t.jsxs("a",{href:n,download:"tts-output.mp3",className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-primary transition-colors w-fit",children:[t.jsx(V,{size:12})," ",u("下载音频文件")]})]})}),!d&&"preview"===x&&P&&!T&&!o&&t.jsxs("div",{className:"rounded-xl border border-border bg-muted/30 p-5 space-y-3",children:[t.jsx("div",{className:"flex items-center gap-2 text-sm font-medium",children:l?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"w-2 h-2 rounded-full bg-blue-400 animate-pulse"}),"image"===p?["RUNNING","running","WAITING","waiting","created","Created","Processing","processing","queueing","submitted"].includes(P.status)?u("图像生成中…"):u("图像任务等待中…"):"audio"===p?u("音频生成中…"):["RUNNING","running","WAITING","waiting","created","Created","Processing","processing","video_generating","video_upsampling","queueing"].includes(P.status)?u("视频生成中…"):u("视频任务等待中…")]}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"w-2 h-2 rounded-full bg-amber-400 animate-pulse"}),u("image"===p?"图像任务已提交":"audio"===p?"音频任务已提交":"视频任务已提交")]})}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[t.jsx("span",{className:"font-mono bg-muted px-2 py-0.5 rounded",children:"task_id"}),t.jsx("span",{className:"font-mono text-foreground",children:P.taskId})]}),t.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[t.jsx("span",{className:"font-mono bg-muted px-2 py-0.5 rounded",children:"status"}),t.jsx("span",{className:"font-mono "+(["SUCCEEDED","succeeded","completed","Success","success","succeed","DONE","done","FINISH","finish","SUCCESS"].includes(P.status)?"text-green-500":["FAILED","CANCELED","failed","error","Failed","Cancelled","FAIL","fail"].includes(P.status)?"text-red-500":["RUNNING","running","WAITING","waiting","submitted","created","Created","Processing","processing","video_generating","queueing"].includes(P.status)?"text-blue-500":"text-foreground"),children:P.status})]})]}),l&&t.jsx("p",{className:"text-xs text-muted-foreground",children:u("正在自动轮询任务状态,请稍候…")}),!l&&t.jsx("p",{className:"text-xs text-muted-foreground",children:u("image"===p?"图像生成为异步任务,可切换 JSON 标签查看完整响应,并使用 task_id 轮询任务状态。":"audio"===p?"音频生成为异步任务,可切换 JSON 标签查看完整响应,并使用 task_id 轮询任务状态。":"视频生成为异步任务,可切换 JSON 标签查看完整响应,并使用 task_id 轮询任务状态。")})]}),!d&&"preview"===x&&(S||l)&&!T&&!z&&t.jsxs("div",{className:"markdown-preview text-sm leading-7 text-foreground flex-1 overflow-auto",children:[t.jsx(Y,{remarkPlugins:[v,ee,se],rehypePlugins:[X,Z],components:{code({node:e,inline:s,className:a,children:i,...r}){const o=/language-(\w+)/.exec(a||"")?.[1]||"";if(s)return t.jsx("code",{className:"bg-muted px-1.5 py-0.5 rounded text-[13px] font-mono text-foreground/90",...r,children:i});const n=String(i).replace(/\n$/,"");return t.jsxs("div",{className:"my-3 rounded-xl overflow-hidden border border-border",children:[t.jsxs("div",{className:"flex items-center justify-between px-4 py-1.5 bg-[#161b22] border-b border-white/5",children:[t.jsx("span",{className:"text-[11px] font-mono text-slate-400",children:o||"code"}),t.jsxs("button",{onClick:()=>navigator.clipboard.writeText(n),className:"flex items-center gap-1 text-[11px] text-slate-500 hover:text-slate-200 transition-colors",children:[t.jsx(D,{size:11}),u("复制")]})]}),t.jsx("pre",{className:"p-4 overflow-x-auto bg-[#0d1117] m-0",children:t.jsx("code",{className:`text-[12.5px] leading-5 font-mono text-slate-200 ${a||""}`,...r,children:i})})]})},p:({children:e})=>t.jsx("p",{className:"mb-3 last:mb-0",children:e}),h1:({children:e})=>t.jsx("h1",{className:"text-xl font-bold mt-5 mb-3 pb-1 border-b border-border",children:e}),h2:({children:e})=>t.jsx("h2",{className:"text-lg font-semibold mt-4 mb-2",children:e}),h3:({children:e})=>t.jsx("h3",{className:"text-base font-semibold mt-3 mb-1.5",children:e}),ul:({children:e})=>t.jsx("ul",{className:"list-disc pl-5 mb-3 space-y-1",children:e}),ol:({children:e})=>t.jsx("ol",{className:"list-decimal pl-5 mb-3 space-y-1",children:e}),li:({children:e})=>t.jsx("li",{className:"text-sm",children:e}),blockquote:({children:e})=>t.jsx("blockquote",{className:"border-l-4 border-primary/30 pl-4 my-3 text-muted-foreground italic",children:e}),hr:()=>t.jsx("hr",{className:"my-4 border-border"}),table:({children:e})=>t.jsx("div",{className:"overflow-x-auto my-3",children:t.jsx("table",{className:"w-full border-collapse text-sm",children:e})}),thead:({children:e})=>t.jsx("thead",{className:"bg-muted/50",children:e}),th:({children:e})=>t.jsx("th",{className:"border border-border px-3 py-1.5 text-left font-medium text-xs",children:e}),td:({children:e})=>t.jsx("td",{className:"border border-border px-3 py-1.5 text-xs",children:e}),a:({children:e,href:s})=>t.jsx("a",{href:s,target:"_blank",rel:"noopener noreferrer",className:"text-primary underline underline-offset-2 hover:opacity-80",children:e}),strong:({children:e})=>t.jsx("strong",{className:"font-semibold",children:e}),em:({children:e})=>t.jsx("em",{className:"italic",children:e})},children:S||""}),l&&t.jsx("span",{className:"inline-block w-0.5 h-4 bg-primary ml-0.5 align-middle animate-pulse rounded-full"})]}),!l&&!d&&"json"===x&&(i.length>0||a)&&t.jsxs("div",{className:"flex-1 min-h-0 bg-[#0d1117] rounded-xl overflow-auto font-mono text-[11.5px] leading-5",children:[i.length>0&&(()=>{const e=i.length,s=Math.max(0,e-300),a=s>0?i.slice(s):i;return t.jsxs(t.Fragment,{children:[s>0&&t.jsxs("div",{className:"px-4 py-2 border-b border-white/5 text-[10px] text-slate-500 select-none",children:["↑ 已折叠 ",s," 条早期 chunk(共 ",e," 条,显示最新 ",300," 条)"]}),a.map((e,a)=>t.jsxs("div",{className:"border-b border-white/5 px-4 py-1.5",children:[t.jsxs("span",{className:"text-[10px] text-slate-600 mr-2 select-none",children:["#",s+a+1]}),t.jsx(it,{data:e})]},s+a))]})})(),0===i.length&&a&&t.jsx("div",{className:"p-4",children:t.jsx(it,{data:a,block:!0})}),t.jsx("div",{ref:k})]})]})]})},ot=({visible:e,onClose:s,tokens:a,selectedTokenId:i,onTokenChange:r,routingMode:o,onRoutingModeChange:n})=>{const{t:l}=_(),c=e=>e.unlimited_quota?l("无限"):e.remain_quota||0===e.remain_quota?`¥${(e.remain_quota/5e5).toFixed(4)}`:"—",m=e=>1!==e.status||!!(e.expired_time&&-1!==e.expired_time&&1e3*e.expired_time<Date.now())||!e.unlimited_quota&&void 0!==e.remain_quota&&e.remain_quota<=0,u=null==i||""===i?void 0:String(i),g=a.find(e=>String(e.id)===u);return t.jsx(p,{title:t.jsx("div",{className:"flex items-center gap-2",children:t.jsx("span",{className:"text-base font-semibold",children:l("请求配置")})}),visible:e,onCancel:s,footer:t.jsx("div",{className:"flex justify-end",children:t.jsx(d,{theme:"solid",type:"primary",onClick:s,children:l("确认")})}),width:520,centered:!0,bodyStyle:{maxHeight:"min(640px, calc(100vh - 176px))",overflowY:"auto",overflowX:"hidden",overscrollBehavior:"contain"},children:t.jsxs("div",{className:"space-y-6 py-1",children:[t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(B,{size:14,className:"text-primary flex-shrink-0"}),t.jsx("span",{className:"text-sm font-semibold",children:l("扣费令牌")})]}),"custom"===o?t.jsx(x,{value:u,onChange:r,placeholder:l("请选择令牌..."),className:"w-full",renderSelectedItem:e=>{const s=a.find(s=>String(s.id)===String(e.value));return s?t.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[t.jsx(B,{size:13,className:"flex-shrink-0 text-muted-foreground"}),t.jsx("span",{className:"text-sm font-medium truncate",children:s.name||`${l("令牌")}-${s.id}`}),t.jsxs("span",{className:"text-xs text-muted-foreground flex-shrink-0",children:[l("余额:"),c(s)]})]}):e.label},children:a.map(e=>t.jsx(x.Option,{value:String(e.id),disabled:m(e),children:t.jsxs("div",{className:"flex items-center justify-between w-full gap-2 py-0.5",children:[t.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[t.jsx(B,{size:13,className:"flex-shrink-0 text-muted-foreground"}),t.jsx("span",{className:"text-sm font-medium truncate "+(m(e)?"text-muted-foreground":""),children:e.name||`${l("令牌")}-${e.id}`})]}),t.jsxs("span",{className:"text-xs text-muted-foreground flex-shrink-0",children:[l("余额:"),c(e)]})]})},String(e.id)))}):t.jsxs("div",{className:"flex items-center gap-3 px-3 py-2.5 rounded-xl border border-border bg-muted/40",children:[t.jsx(B,{size:13,className:"text-muted-foreground flex-shrink-0"}),g?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"min-w-0 flex-1",children:t.jsx("div",{className:"text-sm font-medium truncate",children:g.name||`${l("令牌")}-${g.id}`})}),t.jsxs("span",{className:"text-xs text-muted-foreground flex-shrink-0",children:[l("余额:"),c(g)]})]}):t.jsx("span",{className:"text-sm text-muted-foreground",children:l("暂无可用令牌,请先登录")})]}),t.jsxs("div",{className:"flex items-start gap-2 px-3 py-2.5 rounded-xl bg-amber-50 dark:bg-amber-900/15 border border-amber-200 dark:border-amber-800",children:[t.jsx(K,{size:13,className:"text-amber-600 dar
1k:text-amber-400 flex-shrink-0 mt-0.5"}),t.jsx("p",{className:"text-xs text-amber-700 dark:text-amber-300 leading-relaxed",children:l('每次请求的 Token 消耗费用将从所选令牌的余额中实时扣除。令牌是您在"API 令牌"页面创建的访问凭证,用于身份验证与计费。请确保余额充足,余额不足时请求将被拒绝。')})]})]}),t.jsx("div",{className:"h-px bg-border"}),t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(I,{size:14,className:"text-primary flex-shrink-0"}),t.jsx("span",{className:"text-sm font-semibold",children:l("智能路由")})]}),t.jsx("div",{className:"grid grid-cols-2 gap-2",children:Re.map(e=>{const s=o===e.id;return t.jsxs("button",{type:"button",onClick:()=>n(s?"":e.id),className:"flex flex-col items-center gap-1.5 p-3 rounded-xl border-2 transition-all text-center",style:{borderColor:s?e.color:"hsl(var(--border))",background:s?`${e.color}10`:"hsl(var(--background))"},children:[t.jsx("span",{className:"text-2xl",children:e.emoji}),t.jsx("span",{className:"text-xs font-semibold",style:{color:s?e.color:"hsl(var(--foreground))"},children:l(e.label)}),t.jsx("span",{className:"text-[10px] text-muted-foreground",children:l(e.description)}),s&&t.jsx("span",{className:"w-1.5 h-1.5 rounded-full flex-shrink-0",style:{background:e.color}})]},e.id)})}),"price"===o&&t.jsxs("div",{className:"px-3 py-2.5 rounded-xl border text-xs leading-relaxed",style:{borderColor:"#10b98130",background:"#10b98108",color:"#10b981"},children:[t.jsxs("p",{className:"font-semibold mb-1",children:["💰 ",l("价格优先")]}),t.jsx("p",{className:"text-foreground/60",children:l("系统自动选择当前费率最低的可用渠道,帮助您以最低成本完成请求。适合批量处理、大规模推理等对成本高度敏感的场景,相较其他策略可节省更多用量费用。")})]}),"speed"===o&&t.jsxs("div",{className:"px-3 py-2.5 rounded-xl border text-xs leading-relaxed",style:{borderColor:"#3b82f630",background:"#3b82f608",color:"#3b82f6"},children:[t.jsxs("p",{className:"font-semibold mb-1",children:["⚡ ",l("速度优先")]}),t.jsx("p",{className:"text-foreground/60",children:l("系统自动选择响应时间最短的可用渠道,优先保障低延迟体验。适合实时对话、流式输出等对延迟敏感的交互场景,相较价格优先可能费率略高,但首字节时间更短。")})]}),"success_rate"===o&&t.jsxs("div",{className:"px-3 py-2.5 rounded-xl border text-xs leading-relaxed",style:{borderColor:"#8b5cf630",background:"#8b5cf608",color:"#8b5cf6"},children:[t.jsxs("p",{className:"font-semibold mb-1",children:["🛡 ",l("成功率优先"),"(",l("推荐"),")"]}),t.jsx("p",{className:"text-foreground/60",children:l("系统优先选择历史成功率最高的渠道,大幅减少请求失败与重试。适合生产环境、稳定性要求高的场景,相较其他策略可显著降低错误率,是大多数场景的首选策略。")})]}),"custom"===o&&t.jsxs("div",{className:"px-3 py-2.5 rounded-xl border text-xs leading-relaxed",style:{borderColor:"#f59e0b30",background:"#f59e0b08",color:"#f59e0b"},children:[t.jsxs("p",{className:"font-semibold mb-1",children:["🎯 ",l("自定义")]}),t.jsx("p",{className:"text-foreground/60",children:l("跳过智能路由,直接使用上方所选令牌完成请求。适合需要精确控制计费来源的场景。")})]}),!o&&t.jsx("p",{className:"px-1 text-xs text-muted-foreground leading-relaxed",children:l("请从上方选择一种路由策略,系统将按所选策略自动调度最优渠道。")}),t.jsxs("div",{className:"flex items-start gap-2 px-3 py-2.5 rounded-xl bg-blue-50 dark:bg-blue-900/15 border border-blue-200 dark:border-blue-800",children:[t.jsx(F,{size:13,className:"text-blue-600 dark:text-blue-400 flex-shrink-0 mt-0.5"}),t.jsx("p",{className:"text-xs text-blue-700 dark:text-blue-300 leading-relaxed",children:l("智能路由在多个可用渠道中自动调度,无需手动指定渠道。未选择时将使用平台默认路由策略。")})]})]})]})})},nt=new Set([Pe,Se,Ce,Te]),lt={prompt:De.chat[0],system:"",temperature:.7,max_tokens:4096,stream:!0,top_p:1,frequency_penalty:0,presence_penalty:0,images:[],rerank_documents:"",tts_voice:"alloy",tts_format:"mp3",tts_speed:1,minimax_voice:"male-qn-qingse",minimax_format:"mp3",minimax_emotion:"(默认)",sun
1o_mode:"inspiration",suno_tags:"",suno_title:"",suno_mv:"chirp-v5",suno_instrumental:!1,embedding_format:"float",stt_file:null,stt_file_name:"",stt_format:"json",stt_language:"",vidu_audio_voice_id:""};function dt({selectedModel:e,modelType:a,tokens:r,selectedTokenId:o,setSelectedTokenId:n,routingMode:l,setRoutingMode:d,selectedGroup:m,routingPreview:x,previewLoading:g,chatProtocol:h,setChatProtocol:v,availableChatProtocols:f,modelPreset:b,activeTab:y}){const{t:k}=_();i();const[N,w]=s.useState(()=>({...lt,prompt:"chat"===a?De.chat[0]:""})),[S,C]=s.useState("form"),[T,P]=s.useState(""),[z,I]=s.useState(!1),$=s.useRef(x);s.useEffect(()=>{$.current=x},[x]);const{running:O,rawText:M,jsonData:A,streamChunks:E,imageUrl:U,videoUrl:D,audioUrl:F,error:q,lastRunStats:L,logRefreshKey:G,doRun:B}=Xs(),K=s.useRef(e);s.useEffect(()=>{K.current!==e&&(K.current=e,w(e=>({...e,prompt:De.chat[0],images:[],stt_file:null,stt_file_name:""})))},[e]),s.useEffect(()=>{b?.preset_prompt&&w(e=>({...e,prompt:!e.prompt||De.chat.includes(e.prompt)?b.preset_prompt:e.prompt}))},[b]);const J=be[h]||be["openai-chat"],W=s.useCallback(()=>{try{const s=qs(e,l),t=Ys({selectedModel:e,modelStr:s,selectedGroup:m,routingMode:l,chatParams:N,modelFmt:h,support:J,modelPreset:b,t:k});return t?.error&&!t.body?`// ${t.error}`:JSON.stringify(t.body??{},null,2)}catch(s){return"{}"}},[e,l,m,N,h,J,b,k]),Q=s.useCallback(e=>{try{const s=JSON.parse(e),t=[...s.messages||[]].reverse().find(e=>"user"===e.role),a=(s.messages||[]).find(e=>"system"===e.role);return w(e=>({...e,prompt:t?.content??e.prompt,system:a?.content??e.system,temperature:s.temperature??e.temperature,max_tokens:s.max_tokens??e.max_tokens,stream:s.stream??e.stream,top_p:s.top_p??e.top_p,frequency_penalty:s.frequency_penalty??e.frequency_penalty,presence_penalty:s.presence_penalty??e.presence_penalty})),!0}catch(s){return!1}},[]),Y=s.useCallback(e=>{if("json"===e)P(W());else if("form"===e&&"json"===S){const e=(T||"").trim();(e.startsWith("{")||e.startsWith("["))&&(Q(T)||c.error("JSON 格式错误,参数未能回填"))}C(e)},[S,W,Q,T]),X=s.useCallback(()=>{const s=r.find(e=>String(e.id)===String(o))?.key||"";if(!s)return;let t;if("json"===S){const e=(T||"").trim();if(!e||e.startsWith("//"))return void c.warning(k("请求体 JSON 为空或无效"));try{t=JSON.parse(e)}catch(i){return void c.error(k("JSON 格式错误,请检查后再运行"))}}B({selectedModel:e,modelStr:l?`${e}${{price:":floor",speed:":nitro",success_rate:":stable"}[l]||""}`:e,headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json"},tokenKey:s,selectedGroup:m,routingMode:l,modelType:a,chatParams:N,isChatPanel:!0,chatProtocol:h,modelFmt:h,support:J,modelPreset:b,routingPreviewRef:$,rawBody:t})},[o,r,e,l,m,a,N,h,J,b,B,S,T,k]),Z=s.useCallback(()=>{if(o)if("json"===S||N.prompt?.trim()){if(x?.warning){const e=x.estimated_group||"-",s=null!=x.estimated_price_per_1k?`¥${Number(x.estimated_price_per_1k).toFixed(4)}`:"-",t=null!=x.price_multiplier?`${Number(x.price_multiplier).toFixed(1)}x`:"";return void p.confirm({title:k("价格提醒"),content:k("当前路由预计选中渠道所在分组 {{group}},每千 token 约 {{price}}(约为默认价格的 {{multiplier}}),是否继续生成?",{group:e,price:s,multiplier:t}),okText:k("确认生成"),cancelText:k("取消"),centered:!0,onOk:X})}X()}else c.warning(k("请输入 prompt"));else 0===r.length?p.confirm({title:"请先登录",content:"您需要登录后才能使用模型体验功能。",okText:"去登录",cancelText:"取消",onOk:()=>{window.location.href=`/login?redirect=${encodeURIComponent(window.location.pathname+window.location.search)}`}}):c.warning(k("请先选择令牌"))},[o,r,N.prompt,x,X,S,k]),ee=N.prompt,se="undefined"!=typeof window?window.location.origin:"",te=h,ae=nt.has(te),ie=(()=>{try{const s=qs(e,l),t=Ys({selectedModel:e,modelStr:s,selectedGroup:m,routingMode:l,chatParams:N,modelFmt:h,support:J,modelPreset:b,t:k});return t?.error&&!t.body?{}:t}catch(s){return{}}})();return t.jsxs(t.Fragment,{children:["playground"===y&&t.jsxs("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-6 space-y-4",children:[t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-5 items-stretch",children:[t.jsx("div",{className:"flex flex-col",children:t.jsxs("div",{className:"flex-1 rounded-2xl border border-border bg-background shadow-sm overflow-hidden flex flex-col",children:[t.jsxs("div",{className:"flex items-center justify-between px-5 py-3 border-b border-border bg-muted/20",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-xs font-semibold text-foreground
1/60 tracking-widest uppercase",children:"Input"}),t.jsx("div",{className:"flex items-center rounded-md border border-border overflow-hidden text-[11px]",children:["form","json"].map(e=>t.jsx("button",{type:"button",onClick:()=>Y(e),className:"px-2.5 py-0.5 font-medium transition-colors",style:{background:S===e?"hsl(var(--foreground) / 0.08)":"transparent",color:S===e?"hsl(var(--foreground))":"hsl(var(--foreground) / 0.45)"},children:"form"===e?"Form":"JSON"},e))})]}),t.jsxs("button",{type:"button",onClick:()=>I(!0),className:"flex items-center gap-1.5 px-3 py-1.5 rounded-lg border transition-all text-xs font-medium",style:{background:o?"hsl(var(--primary) / 0.06)":"hsl(var(--muted))",borderColor:o?"hsl(var(--primary) / 0.25)":"hsl(var(--border))",color:o?"hsl(var(--primary))":"hsl(var(--foreground) / 0.60)"},children:[t.jsx(H,{size:11}),k("路由选择"),l&&(()=>{const e=Re.find(e=>e.id===l);return e?t.jsx("span",{className:"ml-1",children:e.emoji}):null})()]})]}),t.jsx(ot,{visible:z,onClose:()=>I(!1),tokens:r,selectedTokenId:o,onTokenChange:n,routingMode:l,onRoutingModeChange:d}),t.jsxs("div",{className:"p-5 space-y-5 flex-1",children:["json"===S&&t.jsxs("div",{className:"space-y-2",children:[t.jsx("p",{className:"text-[11px] text-muted-foreground",children:k("直接编辑请求体 JSON,切换回 Form 时将自动回填表单字段。")}),t.jsxs("div",{className:"relative rounded-xl overflow-hidden border border-border",children:[t.jsx("div",{className:"absolute top-2 right-2 z-10",children:t.jsx("button",{type:"button",onClick:()=>{P(W())},className:"text-[10px] px-2 py-0.5 rounded border border-border bg-background text-muted-foreground hover:text-foreground transition-colors",children:k("重置")})}),t.jsx(u,{value:T,onChange:P,disabled:O,autosize:{minRows:14,maxRows:30},style:{fontFamily:"monospace",fontSize:12,borderRadius:0,border:"none"}})]})]}),t.jsxs("div",{style:{display:"form"===S?void 0:"none"},children:[t.jsxs("div",{className:"space-y-2",children:[t.jsx("p",{className:"text-xs font-semibold text-foreground/60 tracking-widest uppercase",children:"API Format"}),t.jsx("div",{className:"flex flex-wrap gap-1.5",children:f.map(e=>t.jsx("button",{onClick:()=>v(e.id),disabled:O,title:e.note,className:"text-[11px] px-2.5 py-1 rounded-lg border transition-all disabled:opacity-50 "+(h===e.id?"bg-primary/10 border-primary/40 text-primary font-semibold":"bg-muted/40 border-border text-muted-foreground hover:text-foreground hover:bg-muted/70"),children:e.label},e.id))}),t.jsx("p",{className:"text-[11px] font-mono text-muted-foreground",children:f.find(e=>e.id===h)?.note||"/v1/chat/completions"})]}),t.jsx(Zs,{params:N,onChange:(e,s)=>w(t=>({...t,[e]:s})),onRun:Z,running:O,disabled:!o||O,modelFormat:h,routingPreview:x,previewLoading:g})]})]}),"json"===S&&t.jsx("div",{className:"px-5 pb-5",children:t.jsx("button",{type:"button",onClick:Z,disabled:!o||O,className:"w-full flex items-center justify-center gap-2 py-2.5 rounded-xl font-semibold text-sm transition-all disabled:opacity-50 disabled:cursor-not-allowed",style:{background:"hsl(var(--primary))",color:"#fff"},children:O?t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"w-4 h-4 border-2 border-white/30 border-t-white rounded-full animate-spin"}),k("生成中...")]}):t.jsxs(t.Fragment,{children:[t.jsx(R,{size:14}),k("Run")]})})})]})}),t.jsx("div",{className:"flex flex-col",children:t.jsxs("div",{className:"flex-1 rounded-2xl border border-border bg-background shadow-sm overflow-hidden flex flex-col",style:{minHeight:480},children:[t.jsxs("div",{className:"flex items-center px-5 py-3 border-b border-border bg-muted/20",children:[t.jsx("span",{className:"text-xs font-semibold text-foreground/60 tracking-widest uppercase",children:"Output"}),t.jsxs("span",{className:"ml-auto flex items-center gap-2",children:[M&&!O&&L&&(null!=L.promptTokens||null!=L.completionTokens||null!=L.totalCost)&&t.jsxs("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-muted/60 text-muted-foreground text-xs",children:[null!=L.promptTokens&&t.jsxs("span",{title:k("输入 Token"),children:["↑",L.promptTokens.toLocaleStr
1ing()]}),null!=L.completionTokens&&t.jsxs("span",{title:k("输出 Token"),children:["↓",L.completionTokens.toLocaleString()]}),null!=L.totalCost&&(()=>{const e=localStorage.getItem("currency_type")||"USD",s=(()=>{try{return JSON.parse(localStorage.getItem("status")||"{}")}catch{return{}}})(),a="CUSTOM"===e?Number(s.custom_currency_exchange_rate)||1:Number(s.usd_exchange_rate)||7.3,i="USD"===e?L.totalCost:L.totalCost*a;return t.jsxs("span",{className:"font-medium text-foreground/70",title:k("预估费用"),children:["≈",j(),i<1e-6?i.toExponential(2):i<.001?i.toFixed(6):i.toFixed(4)]})})()]}),(M||U)&&!O&&t.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-green-50 dark:bg-green-900/20 text-green-600 dark:text-green-400 text-xs",children:[t.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-500"}),k("完成")]}),O&&t.jsxs("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400 text-xs",children:[t.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-blue-500 animate-pulse"}),k("生成中")]})]})]}),t.jsx(rt,{rawText:M,jsonData:A,streamChunks:E,imageUrl:U,videoUrl:D,audioUrl:F,loading:O,error:q,presetOutput:b?.example_output?(()=>{const e=b.example_output_type||"text";return"image"===e?{type:"image_url",url:b.example_output}:"video"===e?{type:"video_url",url:b.example_output}:b.example_output})():Ae})]})})]}),b?.detail_image&&(()=>{const s=b.detail_image.split(",").map(e=>e.trim()).filter(Boolean);return s.length?t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-xs font-semibold text-foreground/50 tracking-widest uppercase",children:k("模型详情")}),t.jsx("div",{className:"flex-1 h-px bg-border/60"})]}),t.jsx("div",{className:"grid gap-3 "+(1===s.length?"grid-cols-1":"grid-cols-1 md:grid-cols-2"),children:s.map((s,a)=>t.jsx("div",{className:"rounded-2xl overflow-hidden border border-border bg-muted/20",children:t.jsx("img",{src:s,alt:`${e} detail ${a+1}`,className:"w-full h-auto object-cover",onError:e=>{e.currentTarget.parentElement.style.display="none"}})},a))})]}):null})()]}),"examples"===y&&t.jsx("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-8",children:t.jsxs("div",{className:"max-w-4xl space-y-6",children:[t.jsxs("div",{children:[t.jsx("h2",{className:"text-lg font-semibold",children:k("代码示例")}),t.jsxs("p",{className:"text-sm text-muted-foreground mt-1",children:[k("路由控制支持两种等价写法,下方同时展示。当前模型:"),t.jsx("code",{className:"text-xs font-mono bg-muted rounded px-1 py-0.5 text-primary ml-1",children:e})]})]}),ae?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"space-y-2",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-xs font-semibold px-2 py-0.5 rounded-full bg-emerald-100 dark:bg-emerald-900/30 text-emerald-700 dark:text-emerald-400",children:k("方式一")}),t.jsx("span",{className:"text-sm font-medium",children:k("模型名后缀写法(推荐)")}),t.jsx("span",{className:"text-xs text-muted-foreground",children:k("· 与 OpenRouter 完全兼容")})]}),t.jsx(ds,{model:e,prompt:ee,routingMode:l||"price",group:null,type:a,format:te}),t.jsxs("div",{className:"text-[11px] text-muted-foreground flex items-center gap-1.5",children:[t.jsx("span",{children:"💡"}),t.jsxs("span",{children:[k("后缀在转发前自动剥离,上游只收到干净模型名")," ",t.jsx("code",{className:"font-mono",children:e}),"。",k("三种后缀:"),t.jsx("code",{className:"font-mono text-emerald-600",children:":floor"})," ",k("价格最低")," · ",t.jsx("code",{className:"font-mono text-blue-600",children:":nitro"})," ",k("速度最快")," · ",t.jsx("code",{className:"font-mono text-purple-600",children:":stable"})," ",k("成功率最高")]})]})]}),t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:"flex-1 h-px bg-border"}),t.jsx("span",{className:"text-xs text-muted-foreground",children:k("等价写法")}),t.jsx("div",{className:"flex-1 h-px bg-border"})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-xs font-semibold px-2 py-0.5 rounded-full bg-blue-100 dar
1k:bg-blue-900/30 text-blue-700 dark:text-blue-400",children:k("方式二")}),t.jsx("span",{className:"text-sm font-medium",children:k("provider.sort 字段写法")}),t.jsx("span",{className:"text-xs text-muted-foreground",children:k("· 适合程序化动态控制")})]}),t.jsx(ds,{model:e,prompt:ee,routingMode:null,group:null,type:a,format:te,forceProviderSort:l||"price"}),t.jsxs("div",{className:"text-[11px] text-muted-foreground flex items-center gap-1.5",children:[t.jsx("span",{children:"💡"}),t.jsxs("span",{children:[k("取值:"),t.jsx("code",{className:"font-mono text-emerald-600",children:"price"})," · ",t.jsx("code",{className:"font-mono text-blue-600",children:"speed"})," · ",t.jsx("code",{className:"font-mono text-purple-600",children:"success_rate"}),"。",k("从 OpenRouter 迁移:"),t.jsx("code",{className:"font-mono",children:"throughput→speed"}),",",t.jsx("code",{className:"font-mono",children:"latency→success_rate"})]})]})]})]}):t.jsxs("div",{className:"space-y-2",children:[t.jsx("p",{className:"text-sm text-muted-foreground",children:k("以下示例基于当前表单参数生成,与实际请求体保持一致。")}),t.jsx(ds,{model:e,prompt:ee,type:a,format:te,request:ie})]})]})}),"api"===y&&(()=>{const s="openai-response"===te?[{method:"POST",url:`${se}/v1/responses`,label:"Responses API",badge:"OpenAI Responses"}]:"anthropic"===te?[{method:"POST",url:`${se}/v1/messages`,label:"Messages API",badge:k("Anthropic 官方")}]:"gemini"===te?[{method:"POST",url:`${se}/v1beta/models/{model}:generateContent`,label:k("Gemini 原生接口"),badge:"Gemini Native"},{method:"POST",url:`${se}/v1/chat/completions`,label:k("OpenAI 兼容模式(推荐)"),badge:k("OpenAI 兼容")}]:"jina-rerank"===te?[{method:"POST",url:`${se}/v1/rerank`,label:"Rerank API",badge:"Jina Rerank"}]:"embedding"===te?[{method:"POST",url:`${se}/v1/embeddings`,label:"Embeddings API",badge:"OpenAI Embed"}]:"moderation"===te?[{method:"POST",url:`${se}/v1/moderations`,label:"Moderations API",badge:"OpenAI Mod"}]:"tts"===te?[{method:"POST",url:`${se}/v1/audio/speech`,label:"TTS API",badge:"Audio Speech"}]:"stt"===te?[{method:"POST",url:`${se}/v1/audio/transcriptions`,label:"STT API",badge:"Audio Transcription"}]:"minimax-tts"===te?[{method:"POST",url:`${se}/minimax/v1/t2a_v2`,label:"MiniMax TTS",badge:"Audio Speech"}]:"suno-music"===te?[{method:"POST",url:`${se}/suno/submit/music`,label:"Suno 音乐",badge:"Audio Music"}]:[{method:"POST",url:`${se}/v1/chat/completions`,label:"Chat Completions",badge:k("OpenAI 兼容")}],a=({title:e,children:s})=>t.jsxs("div",{className:"rounded-2xl border border-border overflow-hidden",children:[t.jsx("div",{className:"bg-muted/30 px-5 py-3 border-b border-border",children:t.jsx("span",{className:"text-xs font-semibold text-foreground/60 tracking-widest uppercase",children:e})}),t.jsx("div",{className:"p-5",children:s})]}),i=({children:e,color:s})=>t.jsx("code",{className:`block text-sm font-mono bg-muted/40 border border-border rounded-lg px-3 py-2 break-all ${s||"text-foreground"}`,children:e}),r=({text:e,color:s="#6366f1"})=>t.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded-full",style:{background:`${s}15`,color:s,border:`1px solid ${s}30`},children:e});return t.jsx("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-8",children:t.jsxs("div",{className:"max-w-4xl space-y-5",children:[t.jsxs("div",{children:[t.jsx("h2",{className:"text-lg font-semibold",children:k("API 接口说明")}),t.jsxs("p",{className:"text-sm text-muted-foreground mt-1",children:[k("当前模型:"),t.jsx("code",{className:"text-xs font-mono bg-muted rounded px-1",children:e}),te&&t.jsx("span",{className:"ml-2 text-xs text-muted-foreground",children:k("· 请求格式以下方端点为准")})]})]}),t.jsx(a,{title:"Endpoint",children:t.jsxs("div",{className:"space-y-3",children:[s.map((e,s)=>t.jsxs("div",{className:"space-y-1.5",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[11px] font-mono font-bold text-emerald-600 bg-emerald-50 dark:bg-emerald-900/20 px-1.5 py-0.5 rounded",children:e.method}),t.jsx("span",{className:"text-xs text-muted-foreground",children:e.label}),t.jsx(r,{text:e.badge,color:"#6366f1"})]}),t.jsx(i,{color:"text-primary",children:e.url})]},s)),t.jsxs("div",{className:"pt-1 space-y-1.5",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:"Authentication"}),t.jsx(i,{children:"Authorization: Bearer <your-token>"})]}),"anthropic"===te&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:k("额
1外请求头(Anthropic 格式必需)")}),t.jsx(i,{children:"anthropic-version: 2023-06-01"})]})]})}),t.jsx(a,{title:k("① 路由控制 — 模型名后缀(推荐)"),children:t.jsxs("div",{className:"space-y-4",children:[t.jsxs("p",{className:"text-sm text-muted-foreground",children:[k("在模型名末尾追加")," ",t.jsx("code",{className:"font-mono bg-muted rounded px-1",children:":suffix"}),",",k("无需额外字段,任何标准客户端均可直接使用,与 OpenRouter 完全兼容。")]}),t.jsx("div",{className:"rounded-xl overflow-hidden border border-border",children:t.jsxs("table",{className:"w-full text-xs",children:[t.jsx("thead",{className:"bg-muted/50",children:t.jsx("tr",{children:[k("后缀"),k("路由模式"),k("含义"),k("OpenRouter 兼容")].map(e=>t.jsx("th",{className:"text-left px-4 py-2.5 font-semibold text-foreground/70",children:e},e))})}),t.jsx("tbody",{className:"divide-y divide-border",children:[{suffix:":floor",mode:"price",desc:k("价格最低"),compat:k("✅ 完全对齐"),color:"#10b981"},{suffix:":nitro",mode:"speed",desc:k("速度最快"),compat:k("✅ 完全对齐"),color:"#3b82f6"},{suffix:":stable",mode:"success_rate",desc:k("成功率最高"),compat:k("⚠️ 我们自定义扩展"),color:"#8b5cf6"}].map(e=>t.jsxs("tr",{className:"hover:bg-muted/20 transition-colors",children:[t.jsx("td",{className:"px-4 py-2.5",children:t.jsx("code",{className:"font-mono font-bold",style:{color:e.color},children:e.suffix})}),t.jsx("td",{className:"px-4 py-2.5 text-muted-foreground font-mono",children:e.mode}),t.jsx("td",{className:"px-4 py-2.5",children:e.desc}),t.jsx("td",{className:"px-4 py-2.5 text-muted-foreground",children:e.compat})]},e.suffix))})]})}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx("p",{className:"text-xs text-muted-foreground",children:k("示例")}),t.jsx(i,{color:"text-primary",children:`{ "model": "${e}:floor", "messages": [...] }`}),t.jsx(i,{color:"text-primary",children:`{ "model": "${e}:nitro", "messages": [...] }`})]}),t.jsxs("div",{className:"flex items-start gap-2 text-[11px] text-amber-600 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/10 rounded-lg px-3 py-2",children:[t.jsx("span",{children:"⚠️"}),t.jsxs("span",{children:[k("后缀在转发前自动剥离,上游收到的 model 字段为干净模型名(如")," ",t.jsx("code",{className:"font-mono",children:e}),k("),对上游完全透明。")]})]})]})}),t.jsx(a,{title:k("② 路由控制 — provider.sort 字段"),children:t.jsxs("div",{className:"space-y-4",children:[t.jsxs("p",{className:"text-sm text-muted-foreground",children:[k("在请求体中添加")," ",t.jsx("code",{className:"font-mono bg-muted rounded px-1",children:"provider.sort"})," ",k("字段,适合需要程序化控制路由的场景,与 OpenRouter 字段路径完全一致。")]}),t.jsx("div",{className:"rounded-xl overflow-hidden border border-border",children:t.jsxs("table",{className:"w-full text-xs",children:[t.jsx("thead",{className:"bg-muted/50",children:t.jsx("tr",{children:[k("取值"),k("路由含义"),k("OpenRouter 对应")].map(e=>t.jsx("th",{className:"text-left px-4 py-2.5 font-semibold text-foreground/70",children:e},e))})}),t.jsx("tbody",{className:"divide-y divide-border",children:[{val:"price",desc:k("价格最低"),or:"price",color:"#10b981"},{val:"speed",desc:k("速度最快"),or:"throughput → speed",color:"#3b82f6"},{val:"success_rate",desc:k("成功率最高"),or:"latency → success_rate",color:"#8b5cf6"}].map(e=>t.jsxs("tr",{className:"hover:bg-muted/20 transition-colors",children:[t.jsx("td",{className:"px-4 py-2.5",children:t.jsx("code",{className:"font-mono font-bold",style:{color:e.color},children:e.val})}),t.jsx("td",{className:"px-4 py-2.5",children:e.desc}),t.jsx("td",{className:"px-4 py-2.5 text-muted-foreground font-mono text-[11px]",children:e.or})]},e.val))})]})}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx("p",{className:"text-xs text-muted-foreground",children:k("示例(与模型后缀效果完全等价)")}),t.jsx(i,{color:"text-primary",children:`{ "model": "${e}", "provider": { "sort": "price" }, "messages": [...] }`})]})]})}),t.jsx(a,{title:k("③ 路由控制 — Token 级默认(一次设置全局生效)"),children:t.jsxs("div",{className:"space-y-3",children:[t.jsxs("p",{className:"text-sm text-muted-foreground",children:[k("在 API 令牌设置页配置")," ",t.jsx("code",{className:"font-mono bg-muted rounded px-1",children:"routing_priority"})," ",k("字段,该令牌所有请求自动应用,无需每次携带参数,优先级最低。")]}),t.jsxs("a",{href:"/console/token",className:"inline-flex items-center gap-1.5 text-xs text-primary hover:underline",children:[t.jsx(V,{size:12})," ",k("前往 API 令牌设置页配置")]})]})}),t.jsx(a,{title:k("优先级规则(四级瀑布)"),children:t.jsxs("div",{className:"space-y-3",children:[t.jsx("p",{className:"text-xs text-muted-foreground",children:k("当多种路由控制方式同时存在时,按以下优先级依次生效:")}),t.jsx("div",{className:"space-y-2",children:[{level:"1",label:k("模型名后缀"),desc:":floor / :nitro / :stable",color:"#ef4444",note:k("最高优先")},{level:"2",label:k("provider.sort 字段"),desc:'"provider": { "sort": "price" }',color:"#f97316"},{level:"3",label:k("Token 级默认"),desc:k("routing_priority 字段(令ç‰
1Œè®¾ç½®é¡µï¼‰"),color:"#eab308"},{level:"4",label:k("系统全局权重"),desc:k("无任何路由指定时,沿用全局渠道权重(默认)"),color:"#6b7280",note:k("最低优先")}].map(e=>t.jsxs("div",{className:"flex items-start gap-3 rounded-xl border border-border px-4 py-3",children:[t.jsx("span",{className:"mt-0.5 w-5 h-5 rounded-full flex items-center justify-center text-[11px] font-bold text-white flex-shrink-0",style:{background:e.color},children:e.level}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-sm font-medium",children:e.label}),e.note&&t.jsxs("span",{className:"text-[10px] text-muted-foreground",children:["(",e.note,")"]})]}),t.jsx("code",{className:"text-[11px] font-mono text-muted-foreground",children:e.desc})]})]},e.level))})]})}),t.jsx(a,{title:k("适用场景对比"),children:t.jsx("div",{className:"rounded-xl overflow-hidden border border-border",children:t.jsxs("table",{className:"w-full text-xs",children:[t.jsx("thead",{className:"bg-muted/50",children:t.jsx("tr",{children:[k("方式"),k("适合谁用"),k("优势")].map(e=>t.jsx("th",{className:"text-left px-4 py-2.5 font-semibold text-foreground/70",children:e},e))})}),t.jsx("tbody",{className:"divide-y divide-border",children:[{way:k("模型后缀"),who:k("所有开发者 / 快速测试"),pro:k("改模型名即改路由,curl 一行搞定,OR 迁移零成本")},{way:"provider.sort",who:k("程序化控制的应用"),pro:k("与 OpenRouter 字段路径完全一致,后续可扩展 only 等字段")},{way:k("Token 级默认"),who:k("希望全局生效的用户"),pro:k("无需每次请求携带参数,一次设置永久生效")}].map(e=>t.jsxs("tr",{className:"hover:bg-muted/20 transition-colors",children:[t.jsx("td",{className:"px-4 py-2.5 font-mono font-medium",children:e.way}),t.jsx("td",{className:"px-4 py-2.5 text-muted-foreground",children:e.who}),t.jsx("td",{className:"px-4 py-2.5 text-muted-foreground",children:e.pro})]},e.way))})]})})}),t.jsx(a,{title:k("从 OpenRouter 迁移"),children:t.jsxs("div",{className:"space-y-3 text-sm",children:[t.jsx("div",{className:"rounded-xl bg-muted/30 border border-border divide-y divide-border overflow-hidden",children:[{or:"base_url",ours:`${se}/v1`},{or:"throughput → speed",ours:k("provider.sort 取值调整")},{or:"latency → success_rate",ours:k("provider.sort 取值调整")},{or:":floor / :nitro 后缀",ours:k("✅ 完全兼容,无需修改")}].map((e,s)=>t.jsxs("div",{className:"flex items-center gap-4 px-4 py-2.5 text-xs",children:[t.jsx("span",{className:"text-muted-foreground w-44 flex-shrink-0 font-mono",children:e.or}),t.jsx("span",{className:"text-foreground font-mono",children:e.ours})]},s))}),t.jsx("p",{className:"text-xs text-muted-foreground",children:k("仅需修改 base_url 并将 throughput → speed、latency → success_rate,其余代码零改动。")})]})})]})})})(),"logs"===y&&t.jsx("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-6",children:t.jsx("div",{className:"rounded-2xl border border-border bg-background shadow-sm p-5",children:t.jsx(ss,{pageSize:20,refreshTrigger:G})})})]})}const ct=({kp:e,params:s,onChange:a,disabled:i})=>{const{t:o}=_(),n=e.includes("virtual-try-on"),l=e.includes("/editing/expand"),d=e.includes("/multi-image2image"),c=e.includes("/omni-image"),m=(e,s)=>""===e||null==e?s:Number(e);return t.jsxs("div",{className:"space-y-3",children:[n&&t.jsxs(t.Fragment,{children:[t.jsx(ws,{value:s.kling_human_image||"",onChange:e=>a("kling_human_image",e),label:o("人物图(human_image)"),desc:o("jpg/png,≤10MB,≥300px"),placeholder:"https://...",disabled:i}),t.jsx(ws,{value:s.kling_cloth_image||"",onChange:e=>a("kling_cloth_image",e),label:o("服饰图(cloth_image)"),desc:o("上装/下装/连体装的商品图或白底图"),placeholder:"https://...",disabled:i})]}),l&&t.jsxs(t.Fragment,{children:[t.jsx(ws,{value:s.kling_expand_image||"",onChange:e=>a("kling_expand_image",e),label:o("原图(image)"),placeholder:"https://...",disabled:i}),t.jsx("div",{className:"grid grid-cols-2 gap-3",children:[["kling_expand_up",o("向上扩充倍数")],["kling_expand_down",o("向下扩充倍数")],["kling_expand_left",o("向左扩充倍数")],["kling_expand_right",o("向右扩充倍数")]].map(([e,o])=>t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o,desc:"0~2"}),t.jsx(r,{type:"number",value:s[e]??0,onChange:s=>a(e,m(s,0)),min:0,max:2,step:.1,disabled:i})]},e))})]}),d&&t.jsxs(t.Fragment,{children:[t.jsx(Ss,{label:o("主体图(subject_image_list)"),desc:o("1~4 张,Base64 或 URL"),value:s.kling_subject_images,onChange:e=>a("kling_subject_images",e),max:4,disabled:i}),t.jsx(ws,{value:s.kling_scene_image||"",onChange:e=>a("kling_scene_image",e),label:o("场景参考图(可选)"),placeholder:"https://...",disabled:i}),t.jsx(ws,{value:s.kling_style_image||"",onChange:e=>a("kling_style_image",e),label:o("风格参考图(可选)"),placeholder:"https://...",disabled:i})]}),c&&t.jsx(Ss,{label:o("参考图列表(image_list)"),desc:o("可选,Base64 或 URL"),value:s.kling_image_list,onChange:e=>a("kling_image_list",e),max:4,disabled:i}),!n&&!l&&!d&&!c&&t.jsx(ws,{value:s.kling_image||"",onChange:e=>a("kling_image",e),label:o("参考图(可选,图生图)"),placeholder:"https://...",disabled:i}),e.includes("/generations")&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("负向提示词(可选)"),desc:"negative_prompt"}),t.jsx(u,{value:s.kling_negative_prompt||"",onChange:e=>a("kling_negative_prompt",e),placeholder:o("不希望出现的内容..."),autosize:{minRows:1,maxRows:3},disabled:i,style:{fontSize:14}})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("图像参考强度"),desc:"image_fidelity 0~1"}),t.jsx(r,{type:"number",value:s.kling_image_fidelity??"",onChange:e=>a("kling_image_fidelity",""===e?"":Number(e)),placeholder:"0.5",min:0,max:1,step:.1,disabled:i})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("面部参考强度"),desc:"human_fidelity 0~1"}),t.jsx(r,{type:"number",value:s.kling_human_fidelity??"",onChange:e=>a("kling_human_fidelity",""===e?"":Number(e)),placeholder:"0.5",min:0,max:1,step:.1,disabled:i})]})]})]}),c&&t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("结果类型"),desc:"result_type"}
1),t.jsxs(x,{value:s.kling_omni_result_type||"single",onChange:e=>a("kling_omni_result_type",e),disabled:i,className:"w-full",children:[t.jsx(x.Option,{value:"single",children:"single(单图)"}),t.jsx(x.Option,{value:"series",children:"series(组图)"})]})]}),"series"===s.kling_omni_result_type&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("组图数量"),desc:"series_amount"}),t.jsx(r,{type:"number",value:s.kling_omni_series_amount??"",onChange:e=>a("kling_omni_series_amount",""===e?"":Number(e)),placeholder:"4",min:1,max:9,disabled:i})]})]}),!n&&t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[!l&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("宽高比"),desc:"aspect_ratio"}),t.jsx(x,{value:s.kling_aspect_ratio||"1:1",onChange:e=>a("kling_aspect_ratio",e),disabled:i,className:"w-full",children:Ts.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("张数(n)"),desc:"1~9"}),t.jsx(r,{type:"number",value:s.kling_n??1,onChange:e=>a("kling_n",m(e,1)),min:1,max:9,disabled:i})]}),(c||e.includes("/generations"))&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("清晰度"),desc:"resolution"}),t.jsx(x,{value:s.kling_resolution||"1k",onChange:e=>a("kling_resolution",e),disabled:i,className:"w-full",children:["1k","2k"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]})]})},mt=({params:e,onChange:s,disabled:a})=>{const{t:i}=_(),r=e.tvod_model_name||"GEM",o={GEM:["2.5","3.0"],Qwen:["0925"],Hunyuan:["3.0"]},n=o[r]||["3.0"];return t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:i("模型"),desc:"model_name"}),t.jsx(x,{value:r,onChange:e=>{s("tvod_model_name",e),s("tvod_model_version",(o[e]||["3.0"])[0])},disabled:a,className:"w-full",children:["GEM","Qwen","Hunyuan"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:i("版本"),desc:"model_version"}),t.jsx(x,{value:n.includes(e.tvod_model_version)?e.tvod_model_version:n[0],onChange:e=>s("tvod_model_version",e),disabled:a,className:"w-full",children:n.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:i("宽高比"),desc:"output_config.aspect_ratio(仅 GEM 生效)"}),t.jsx(x,{value:e.aspect_ratio||"1:1",onChange:e=>s("aspect_ratio",e),disabled:a,className:"w-full",children:["1:1","3:2","2:3","3:4","4:3","4:5","5:4","9:16","16:9","21:9"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:i("分辨率"),desc:"output_config.resolution"}),t.jsx(x,{value:e.tvod_resolution||"1080P",onChange:e=>s("tvod_resolution",e),disabled:a,className:"w-full",children:["720P","1080P","2K","4K"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),t.jsx(ws,{value:e.image_url||"",onChange:e=>s("image_url",e),label:i("参考图(可选,图生图)"),desc:i("作为 file_infos 传入,URL 方式"),placeholder:"https://...",disabled:a})]})},pt=({params:e,onChange:s,disabled:a})=>{const{t:i}=_();return t.jsxs("div",{className:"space-y-3",children:[t.jsx("div",{className:"text-[11px] text-muted-foreground bg-muted/30 rounded px-2 py-1.5",children:i("PixVerse 模板生图:上传 1~N 张参考图(提交时自动换取 img_id),并填写模板 ID。")}),t.jsx(Ss,{label:i("参考图"),desc:i("URL 或上传,提交时调用 /openapi/v2/image/upload 换 img_id"),value:e.pix_images,onChange:e=>s("pix_images",e),max:6,disabled:a}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:i("模板 ID(template_id)"),desc:i("PixVerse 模板的数字 ID")}),t.jsx(r,{type:"number",value:e.pix_template_id??"",onChange:e=>s("pix_template_id",e),placeholder:"384631857552768",disabled:a})]})]})},ut=({mjPath:e,params:s,onChange:a,disabled:i})=>{const{t:o}=_(),n="/mj/submit/blend"===e,l="/mj/submit/describe"===e,d="/mj/submit/action"===e,c="/mj/submit/modal"===e,m=!(n||l||d||c);return t.jsxs("div",{className:"space-y-3",children:[(m||n||l)&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Bot 类型",desc:"botType"}),t.jsxs(x,{value:s.mj_bot_type||"MID_JOURNEY",onChange:e=>a("mj_bot_type",e),disabled:i,className:"w-full",children:[t.jsx(x.Option,{value:"MID_JOURNEY",children:"MID_JOURNEY(默认 mj 风格)"}),t.jsx(x.Option,{value:"NIJI_JOURNEY",children:"NIJI_JOURNEY(niji · 二次元)"})]})]}),m&&t.jsx(Ss,{label:o("参考图(可选)"),desc:o("图片以 base64 嵌入 base64Array,用于风格参考,最多 4 张"),value:s.mj_ref_images||[],onChange:e=>a("mj_ref_images",e),max:4,disabled:i,base64Mode:!0}),n&&t.jsxs(t.Fragment,{children:[t.jsx(Ss,{label:o("混合图片(base64Array)"),desc:o("至少 2 张,最多 9 张,图片将以 base64 格式嵌入请求"),value:s.mj_blend_images||[],onChange:e=>a("mj_blend_images",e),max:9,disabled:i,base64Mode:!0}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("输出比例(dimensions)"),desc:"PORTRAIT=2:3 / SQUARE=1:1 / LANDSCAPE=3:2"}),t.jsxs(x,{value:s.mj_dimensions||"SQUARE",onChange:e=>a("mj_dimensions",e),disabled:i,className:"w-full",children:[t.jsx(x.Option,{value:"PORTRAIT",children:"PORTRAIT(2:3 竖向)"}),t.jsx(x.Option,{value:"SQUARE",children:"SQUARE(1:1 正方)"}
1),t.jsx(x.Option,{value:"LANDSCAPE",children:"LANDSCAPE(3:2 横向)"})]})]})]}),l&&t.jsx(ws,{value:s.mj_describe_image||"",onChange:e=>a("mj_describe_image",e),label:o("待描述图片(base64)"),desc:o("图片以 base64 格式嵌入请求,MJ 将返回 4 条提示词描述"),disabled:i,base64Mode:!0}),d&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("任务 ID(taskId)")}),t.jsx(r,{value:s.mj_task_id||"",onChange:e=>a("mj_task_id",e),disabled:i,placeholder:"14001934816969359",style:{fontSize:12}})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("操作标识(customId)"),desc:"MJ::JOB::upsample::1::xxx"}),t.jsx(r,{value:s.mj_custom_id||"",onChange:e=>a("mj_custom_id",e),disabled:i,placeholder:"MJ::JOB::upsample::1::...",style:{fontSize:12}})]})]}),c&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("任务 ID(taskId)")}),t.jsx(r,{value:s.mj_task_id||"",onChange:e=>a("mj_task_id",e),disabled:i,placeholder:"14001934816969359",style:{fontSize:12}})]}),t.jsx(ws,{value:s.mj_mask_image||"",onChange:e=>a("mj_mask_image",e),label:o("蒙版图片(maskBase64)"),desc:o("Vary Region 涂抹蒙版图,以 base64 格式嵌入请求"),disabled:i,base64Mode:!0})]})]})},xt=({params:e,onChange:a,onRun:i,running:n,disabled:l,model:c,routingPreview:m,previewLoading:p,presetEndpoint:g,geminiNative:v=!1})=>{const f=te(g||""),b=f.startsWith("/kling/v1/images/"),j=f.startsWith("/tencent-vod/v1/aigc-image"),y=f.startsWith("/openapi/v2/image/"),k="/kling/v1/videos/image-recognize"===f,N=f.startsWith("/mj/submit/"),{t:w}=_(),S=je[c]||je._default,C=S.geminiNative||v,T=S.geminiAspectRatios||Ks,P=S.geminiImageSizes||Hs,z="edit"===e.mode&&S.supportsEdits,I=e.edit_images?.length?e.edit_images:e.image_url?[e.image_url]:[],$=e.edit_image_files||[],O=S.maxEditImages||1,[M,A]=s.useState(""),E=s.useRef(null),U=(e,s=null)=>{const t="string"==typeof e?e.trim():e;if(!t||I.length>=O)return;const i=[...I,t],r=[...$,s];a("edit_images",i),a("edit_image_files",r),a("image_url",i[0]||"")};if(N){const s="/mj/submit/describe"===f,r="/mj/submit/modal"===f,c="/mj/submit/action"===f,x="/mj/submit/blend"===f,g=!s&&!x&&!c,h=s?"Describe":x?"Blend":r?"Modal":c?"Action":"Imagine";return t.jsxs("div",{className:"space-y-3.5",children:[t.jsxs("div",{className:"flex items-center gap-2 px-3 py-2 rounded-xl bg-muted/30 text-[11px] text-muted-foreground",children:[t.jsxs("span",{className:"px-1.5 py-0.5 rounded bg-primary/10 text-primary font-mono font-medium text-[10px]",children:["MJ / ",h]}),t.jsxs("span",{children:[s&&w("上传图片后提交,MJ 将返回 4 条提示词描述。"),x&&w("上传 2~9 张图片,MJ 将生成一张融合图像。"),r&&w("填写任务 ID 并上传蒙版图片,用于 Vary Region 重绘。"),c&&w("填写任务 ID 和操作标识(如放大/变体),执行二次操作。"),!s&&!x&&!r&&!c&&w("输入 prompt,可选附加参考图进行图像生成。")]})]}),g&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("图像描述"),desc:w(r?"可选,描述修改内容":"描述你想生成的图像内容")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:w(r?"可选:描述修改内容...":"描述你想生成的图像..."),autosize:{minRows:4,maxRows:8},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsx(ut,{mjPath:f,params:e,onChange:a,disabled:l}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:n?w("处理中..."):"Run"})]})}return k?t.jsxs("div",{className:"space-y-3.5",children:[t.jsx("div",{className:"text-[11px] text-muted-foreground bg-muted/30 rounded px-3 py-2",children:w("上传图片后提交,模型将对图片内容进行分析识别,结果以文本形式返回。")}),t.jsx(ws,{value:e.image_url||"",onChange:e=>a("image_url",e),label:w("识别图片(image)"),desc:w("jpg/png,≤10MB,≥300px,宽高比 1:2.5 ~ 2.5:1"),placeholder:"https://...",disabled:l}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.image_url,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:n?w("识别中..."):"Run"})]}):t.jsxs("div",{className:"space-y-3.5",children:[S.supportsEdits&&t.jsx("div",{className:"flex rounded-xl border border-border overflow-hidden",children:[{key:!1,label:w("图像生成"),desc:"/v1/images/generations"},{key:!0,label:w("图像编辑"),desc:"/v1/images/edits"}].map(({key:e,label:s,desc:i})=>t.jsxs("button",{onClick:()=>a("mode",e?"edit":"generate"),className:"flex-1 py-2 text-xs font-medium transition-colors "+(z===e?"bg-primary text-primary-foreground":"bg-muted/30 text-muted-foreground hover:text-foreground"),children:[s,t.jsx("span",{className:"block text-[10px] font-mono opacity-70",children:i})]},String(e)))}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("图像描述"),desc:w(z?"描述你想要对图像进行的修改内å
1®¹":"描述你想生成的图像内容")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:w(z?"描述对图像的修改内容...":"描述你想生成的图像..."),maxLength:S.maxPromptLength,autosize:{minRows:4,maxRows:10},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),z&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-2",children:[t.jsx(Ns,{label:w("原始图片({{count}}/{{max}})",{count:I.length,max:O}),desc:w("需要编辑的原始图片;提交编辑时按 multipart/form-data 的 image 字段发送,最多 {{max}} å¼ ",{max:O})}),I.map((e,s)=>t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("div",{className:"flex-1 min-w-0 text-xs truncate text-muted-foreground font-mono bg-muted/30 rounded px-2 py-1",children:$[s]?.name||e}),t.jsx("button",{onClick:()=>(e=>{const s=I.filter((s,t)=>t!==e),t=$.filter((s,t)=>t!==e);a("edit_images",s),a("edit_image_files",t),a("image_url",s[0]||"")})(s),className:"p-1 rounded text-muted-foreground hover:text-red-500 transition-colors flex-shrink-0",children:t.jsx(q,{size:12})})]},`${e}-${s}`)),I.length<O&&t.jsxs(t.Fragment,{children:[t.jsx(ws,{value:"",onChange:e=>{const s=E.current;E.current=null,U(e,s)},onFileChange:e=>{E.current=e},label:I.length?w("继续上传原始图片"):void 0,desc:I.length?w("上传后自动追加到 image 数组"):void 0,placeholder:"https://...",disabled:l,showUrlInput:!1}),t.jsxs("div",{className:"flex gap-2",children:[t.jsx(r,{value:M,onChange:A,placeholder:w("或粘贴原始图片 URL 后添加"),disabled:l,style:{fontSize:12}}),t.jsx(d,{size:"small",disabled:l||!M.trim(),onClick:()=>{U(M),A("")},children:w("添加")})]})]})]}),t.jsx(ws,{value:e.mask||"",onChange:e=>{a("mask",e),e||a("mask_file",null)},onFileChange:e=>a("mask_file",e),label:w("蒙版图片(可选)"),desc:w("透明区域(alpha=0)表示需要修改的区域,其余区域保留原图"),placeholder:w("可选:蒙版图片 URL 或上传..."),disabled:l})]}),C&&t.jsx(ws,{value:e.gemini_input_image||"",onChange:e=>a("gemini_input_image",e),label:w("参考图片(可选)"),desc:w("Gemini 原生接口支持 base64 图片输入——图片直接嵌入请求体,不上传图床"),placeholder:w("可选:粘贴图片 base64 数据 URL..."),disabled:l,base64Mode:!0}),b?t.jsx(ct,{kp:f,params:e,onChange:a,disabled:l}):j?t.jsx(mt,{params:e,onChange:a,disabled:l}):y?t.jsx(pt,{params:e,onChange:a,disabled:l}):C?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] text-muted-foreground",children:[t.jsx("div",{className:"flex-1 h-px bg-border"}),t.jsx("span",{className:"px-2 flex-shrink-0",children:w("生成参数(imageConfig)")}),t.jsx("div",{className:"flex-1 h-px bg-border"})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("宽高比"),desc:"generationConfig.imageConfig.aspectRatio"}),t.jsx(x,{value:T.includes(e.gemini_aspect_ratio)?e.gemini_aspect_ratio:T[0],onChange:e=>a("gemini_aspect_ratio",e),disabled:l,className:"w-full",children:T.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("输出分辨率"),desc:"imageConfig.imageSize:512 / 1K / 2K / 4K"}),t.jsx(x,{value:P.includes(e.gemini_image_size)?e.gemini_image_size:P[0],onChange:e=>a("gemini_image_size",e),disabled:l,className:"w-full",children:P.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]})]}):S.grokStyle?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] text-muted-foreground",children:[t.jsx("div",{className:"flex-1 h-px bg-border"}),t.jsx("span",{className:"px-2 flex-shrink-0",children:w("更多参数")}),t.jsx("div",{className:"flex-1 h-px bg-border"})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("宽高比"),desc:w("aspect_ratio:控制输出图片的宽高比例")}),t.jsx(x,{value:e.aspect_ratio||"1:1",onChange:e=>a("aspect_ratio",e),disabled:l,className:"w-full",children:S.aspectRatios.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("分辨率"),desc:w("resolution:1k ≈ 1024px / 2k ≈ 2048px")}),t.jsx(x,{value:e.resolution||"1k",onChange:e=>a("resolution",e),disabled:l,className:"w-full",children:S.resolutions.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),S.maxN>1&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("N(张数)"),desc:w("单次生成图片数量,最多 {{max}} å¼ ",{max:S.maxN})}),t.jsx(r,{type:"number",value:e.n||1,onChange:e=>a("n",Number(e)),min:1,max:S.maxN,disabled:l})]}),S.supportsOutputFormat&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("返回格式"),desc:w("url = 链接;b64_json = Base64 字符串")}),t.jsx(x,{value:e.output_format||"url",onChange:e=>a("output_format",e),disabled:l,className:"w-full",children:S.outputFormats.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]})]}):S.wanStyle?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] text-muted-foreground",children:[t.jsx("div",{className:"flex-1 h-px bg-border"}),t.jsx("span",{className:"px-2 flex-shrink-0",children:w("更多参数")}),t.jsx("div",{className:"flex-1 h-px bg-border"})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("输出分辨率"),desc:w("size:1K / 2K / 4K(4K 仅限文生图)")}
1),t.jsx(x,{value:e.size&&["1K","2K","4K"].includes(e.size)?e.size:S.sizes[0],onChange:e=>a("size",e),disabled:l,className:"w-full",children:S.sizes.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("宽高比"),desc:w("aspect_ratio:精确控制输出图像比例")}),t.jsx(x,{value:e.aspect_ratio||"1:1",onChange:e=>a("aspect_ratio",e),disabled:l,className:"w-full",children:S.aspectRatios.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),S.maxN>1&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("N(张数)"),desc:w("单次生成图片数量,最多 {{max}} 张",{max:S.maxN})}),t.jsx(r,{type:"number",value:e.n||1,onChange:e=>a("n",Number(e)),min:1,max:S.maxN,disabled:l})]})]}),S.supportsWatermark&&t.jsxs("div",{className:"flex items-center justify-between rounded-xl border border-border px-4 py-3",children:[t.jsxs("div",{children:[t.jsx("p",{className:"text-xs font-semibold text-foreground/70 tracking-wide",children:w("添加水印")}),t.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:w("关闭后生成图片不含水印(watermark=false)")})]}),t.jsx(h,{checked:!1!==e.watermark,onChange:e=>a("watermark",e),disabled:l,size:"default"})]})]}):S.doubaoStyle?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] text-muted-foreground",children:[t.jsx("div",{className:"flex-1 h-px bg-border"}),t.jsx("span",{className:"px-2 flex-shrink-0",children:w("更多参数")}),t.jsx("div",{className:"flex-1 h-px bg-border"})]}),S.supportsImageInput&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:S.imageInputRequired?w("原始图片(必填)"):w("参考图片(可选)"),desc:S.imageInputRequired?w("seededit 必填:待编辑图片,支持 URL 或 Base64"):w("图生图参考图,支持 URL")}),t.jsx(r,{value:e.image_url||"",onChange:e=>a("image_url",e),placeholder:S.imageInputRequired?w("请输入图片 URL 或 Base64"):w("图片 URL(留空为纯文生图)"),disabled:l}),S.supportsMultiImage&&t.jsxs("div",{className:"mt-1.5",children:[t.jsx(Ns,{label:w("多图参考(可选)"),desc:w("每行一个 URL,多图融合时使用(最多 14 张)")}),t.jsx(Ss,{value:e.doubao_images||[],onChange:e=>a("doubao_images",e),disabled:l,maxCount:14,placeholder:w("图片 URL")})]})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("分辨率 / 尺寸"),desc:w("2K/4K/像素尺寸(如 2048x2048)或 adaptive")}),t.jsx(x,{value:e.doubao_size||S.sizes[0]||"2K",onChange:e=>a("doubao_size",e),disabled:l,className:"w-full",children:S.sizes.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),S.supportsOutputFormat&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("文件格式"),desc:w("output_format:jpeg(默认)/ png")}),t.jsx(x,{value:e.image_file_format||"jpeg",onChange:e=>a("image_file_format",e),disabled:l,className:"w-full",children:(S.outputFormats||["jpeg"]).map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),S.maxN>1&&!S.supportsSequentialGen&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("N(张数)"),desc:w("单次生成图片数量,最多 {{max}} 张",{max:S.maxN})}),t.jsx(r,{type:"number",value:e.n||1,onChange:e=>a("n",Number(e)),min:1,max:S.maxN,disabled:l})]}),S.supportsSeed&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("随机种子"),desc:w("seed:[-1, 2^31-1],-1 = 随机")}),t.jsx(r,{type:"number",value:e.seed??"",onChange:e=>a("seed",""===e?"":Number(e)),placeholder:"-1",min:-1,max:2147483647,disabled:l})]}),S.supportsGuidanceScale&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("引导强度"),desc:w("guidance_scale [1,10],值越大越贴近 prompt")}),t.jsx(r,{type:"number",value:e.guidance_scale??"",onChange:e=>a("guidance_scale",""===e?"":Number(e)),placeholder:"5.5",min:1,max:10,step:.1,disabled:l})]}),S.supportsSequentialGen&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("连续生图"),desc:w("auto = 批量输出多张连贯图片;disabled = 仅输出一张")}),t.jsxs(x,{value:e.doubao_seq_gen||"disabled",onChange:e=>a("doubao_seq_gen",e),disabled:l,className:"w-full",children:[t.jsx(x.Option,{value:"disabled",children:"disabled(单张)"}),t.jsx(x.Option,{value:"auto",children:"auto(批量)"})]})]}),"auto"===e.doubao_seq_gen&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("最多张数"),desc:w("sequential_image_generation_options.max_images")}
1),t.jsx(r,{type:"number",value:e.doubao_max_images||2,onChange:e=>a("doubao_max_images",Number(e)),min:2,max:10,disabled:l})]})]})]}),S.supportsWatermark&&t.jsxs("div",{className:"flex items-center justify-between rounded-xl border border-border px-4 py-3",children:[t.jsxs("div",{children:[t.jsx("p",{className:"text-xs font-semibold text-foreground/70 tracking-wide",children:w("添加水印")}),t.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:w("关闭后生成图片不含水印(watermark=false)")})]}),t.jsx(h,{checked:!1!==e.watermark,onChange:e=>a("watermark",e),disabled:l,size:"default"})]})]}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground w-full py-1",children:[t.jsx("div",{className:"flex-1 h-px bg-border"}),t.jsx("span",{className:"px-2 flex-shrink-0",children:w("更多参数")}),t.jsx("div",{className:"flex-1 h-px bg-border"})]}),t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[S.sizes&&S.sizes.length>0&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("分辨率"),desc:w("输出图片的分辨率规格")}),t.jsx(x,{value:e.size||S.sizes[0],onChange:e=>a("size",e),disabled:l,className:"w-full",children:S.sizes.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),S.qualities&&S.qualities.length>1&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("生成质量"),desc:w("high 更精细但消耗更多额度")}),t.jsx(x,{value:e.quality||S.qualities[0],onChange:e=>a("quality",e),disabled:l,className:"w-full",children:S.qualities.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),S.maxN>1&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("N(张数)"),desc:w("单次生成图片数量,最多 {{max}} 张",{max:S.maxN})}),t.jsx(r,{type:"number",value:e.n||1,onChange:e=>a("n",Number(e)),min:1,max:S.maxN,disabled:l})]}),S.supportsImageFormat&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("输出格式"),desc:w("format:jpeg / png / webp")}),t.jsx(x,{value:e.format||S.imageFormats[0],onChange:e=>a("format",e),disabled:l,className:"w-full",children:S.imageFormats.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),S.supportsBackground&&z&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("背景模式"),desc:w("auto / 透明(transparent)/ 不透明(opaque)")}),t.jsx(x,{value:e.background||"auto",onChange:e=>a("background",e),disabled:l,className:"w-full",children:S.backgroundOptions.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),S.supportsModeration&&z&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("内容审核"),desc:w("moderation:auto(默认)/ low")}),t.jsx(x,{value:e.moderation||"auto",onChange:e=>a("moderation",e),disabled:l,className:"w-full",children:S.moderationOptions.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),S.supportsOutputFormat&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("返回格式"),desc:w("url = 链接;b64_json = Base64 字符串")}),t.jsx(x,{value:e.output_format||"url",onChange:e=>a("output_format",e),disabled:l,className:"w-full",children:S.outputFormats.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),!z&&S.supportsImageInput&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("参考图片(可选)"),desc:w("图生图 / 图像编辑:传入公网 URL;最多与 edits 合计 3 张由接口约束")}),t.jsx(r,{value:e.image_url||"",onChange:e=>a("image_url",e),placeholder:w("图片 URL(留空为纯文生图)"),disabled:l})]}),S.supportsNegativePrompt&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("反向提示词(可选)"),desc:"negative_prompt"}),t.jsx(u,{value:e.negative_prompt||"",onChange:e=>a("negative_prompt",e),placeholder:w("不希望出现在画面中的内容"),autosize:{minRows:2,maxRows:4},disabled:l})]}),S.supportsPromptExtend&&t.jsxs("div",{className:"flex items-center justify-between rounded-xl border border-border px-4 py-3",children:[t.jsxs("div",{children:[t.jsx("p",{className:"text-xs font-semibold text-foreground
1/70 tracking-wide",children:w("提示词改写")}),t.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:"prompt_extend"})]}),t.jsx(h,{checked:!1!==e.prompt_extend,onChange:e=>a("prompt_extend",e),disabled:l,size:"default"})]}),S.supportsPromptExtendMode&&!1!==e.prompt_extend&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:w("改写模式"),desc:w("direct=直接增强;agent=智能体(仅文生图)")}),t.jsxs(x,{value:e.prompt_extend_mode||"direct",onChange:e=>a("prompt_extend_mode",e),disabled:l,className:"w-full",children:[t.jsx(x.Option,{value:"direct",children:"direct"}),t.jsx(x.Option,{value:"agent",children:"agent"})]})]}),S.supportsWatermark&&t.jsxs("div",{className:"flex items-center justify-between rounded-xl border border-border px-4 py-3",children:[t.jsxs("div",{children:[t.jsx("p",{className:"text-xs font-semibold text-foreground/70 tracking-wide",children:w("添加水印")}),t.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:w("关闭后生成图片不含水印(watermark=false)")})]}),t.jsx(h,{checked:!0===e.watermark,onChange:e=>a("watermark",e),disabled:l,size:"default"})]})]})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:n?w("生成中..."):"Run"})]})},gt={prompt:De.image[0],size:"1024x1024",quality:"auto",n:1,mode:"generate",format:"jpeg",background:"auto",moderation:"auto",output_format:"url",image_url:"",image_file:null,edit_images:[],edit_image_files:[],mask:"",mask_file:null,gemini_input_image:"",gemini_aspect_ratio:"1:1",gemini_image_size:"1K",aspect_ratio:"1:1",resolution:"1k",doubao_size:"2K",image_file_format:"jpeg",watermark:!1,prompt_extend:!0,prompt_extend_mode:"direct",negative_prompt:"",seed:"",guidance_scale:"",doubao_seq_gen:"disabled",doubao_max_images:2,doubao_images:[],mj_bot_type:"MID_JOURNEY",mj_ref_images:[],mj_blend_images:[],mj_describe_image:"",mj_dimensions:"SQUARE",mj_task_id:"",mj_custom_id:"",mj_mask_image:""};function ht({selectedModel:e,modelType:a,tokens:i,selectedTokenId:r,setSelectedTokenId:o,routingMode:n,setRoutingMode:l,selectedGroup:d,routingPreview:m,previewLoading:x,modelPreset:g,activeTab:h}){const{t:v}=_(),[f,b]=s.useState(gt),[j,y]=s.useState("form"),[k,N]=s.useState(""),[w,S]=s.useState(!1),C=s.useRef(m);s.useEffect(()=>{C.current=m},[m]);const{running:T,rawText:P,jsonData:z,streamChunks:I,imageUrl:$,videoUrl:O,audioUrl:M,error:A,logRefreshKey:E,doRun:U}=Xs(),D=je[e]?null:Bs(g?.endpoint_configs,"image"),F=!je[e]&&!!Js(g?.endpoint_configs),q=!(!D||!D.includes("image-recognize")),L=!(!D||!D.startsWith("/mj/submit/")),G=L?D.split("/").pop():null,B=s.useRef(e);s.useEffect(()=>{B.current!==e&&(B.current=e,b(e=>({...e,prompt:De.image[0],image_url:"",image_file:null,edit_images:[],edit_image_files:[],mask:"",mask_file:null,gemini_input_image:"",gemini_aspect_ratio:"1:1",gemini_image_size:"1K"})))},[e]),s.useEffect(()=>{g&&(g.preset_prompt&&b(e=>({...e,prompt:!e.prompt||De.image.includes(e.prompt)?g.preset_prompt:e.prompt})),g.preset_image&&b(e=>({...e,image_url:e.image_url||g.preset_image})))},[g]);const K=s.useCallback(()=>{try{const s=qs(e,n),t=Qs({selectedModel:e,modelStr:s,selectedGroup:d,routingMode:n,imageParams:f,modelPreset:g,t:v});return t?.error?`// ${t.error}`:JSON.stringify(t.body??{},null,2)}catch(s){return"{}"}},[e,n,d,f,g,v]),J=s.useCallback(e=>{try{const s=JSON.parse(e);return b(e=>({...e,prompt:s.prompt??e.prompt,n:s.n??e.n,size:s.size??e.size,quality:s.quality??e.quality,output_format:s.response_format??e.output_format})),!0}catch(s){return!1}},[]),W=s.useCallback(e=>{if("json"===e)N(K());else if("form"===e&&"json"===j){const e=(k||"").trim();(e.startsWith("{")||e.startsWith("["))&&(J(k)||c.error("JSON 格式错误,参数未能回填"))}y(e)},[j,K,J,k]),Q=s.useCallback(()=>{const s=i.find(e=>String(e.id)===String(r))?.key||"";if(!s)return;let t;if("json"===j){const e=(k||"").trim();if(!e||e.startsWith("//"))return void c.warning(v("请求体 JSON 为空或无效"));try{t=JSON.parse(e)}catch(o){return void c.error(v("JSON 格式错误,请检查后再运行"))}}U({selectedModel:e,modelStr:n?`${e}${{price:":floor",speed:":nitro",success_rate:":stable"}[n]||""}`:e,headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json"},tokenKey:s,selectedGroup:d,routingMode:n,modelType:a,imageParams:f,isChatPanel:!1,modelPreset:g,rout
1ingPreviewRef:C,rawBody:t})},[r,i,e,n,d,a,f,g,U,j,k,v]),Y=s.useCallback(()=>{if(!r)return void(0===i.length?p.confirm({title:"请先登录",content:"您需要登录后才能使用模型体验功能。",okText:"去登录",cancelText:"取消",onOk:()=>{window.location.href=`/login?redirect=${encodeURIComponent(window.location.pathname+window.location.search)}`}}):c.warning(v("请先选择令牌")));const s=je[e]||je._default,t=f.edit_images?.length?f.edit_images:f.image_url?[f.image_url]:[];if("json"===j);else{if(s?.supportsEdits&&"edit"===f.mode&&!t.length)return void c.warning(v("请先上传原始图片"));if(L){if("blend"===G){if((f.mj_blend_images||[]).filter(Boolean).length<2)return void c.warning(v("Blend 模式至少需要 2 张图片"))}else if("describe"===G){if(!f.mj_describe_image)return void c.warning(v("请先上传要描述的图片"))}else if("action"===G){if(!f.mj_task_id||!f.mj_custom_id)return void c.warning(v("请填写任务 ID 和操作标识"))}else if("modal"===G){if(!f.mj_task_id||!f.mj_mask_image)return void c.warning(v("请填写任务 ID 并上传蒙版图片"))}else if(!f.prompt?.trim())return void c.warning(v("请输入 prompt"))}else if(q){if(!f.image_url)return void c.warning(v("请先上传识别图片"))}else if(s?.imageInputRequired){if(!f.image_url)return void c.warning(v("请先上传原始图片(image 为必填)"));if(!f.prompt?.trim())return void c.warning(v("请输入编辑指令 prompt"))}else if(!f.prompt?.trim())return void c.warning(v("请输入 prompt"))}if(m?.warning){const e=m.estimated_group||"-",s=null!=m.estimated_price_per_1k?`¥${Number(m.estimated_price_per_1k).toFixed(4)}`:"-",t=null!=m.price_multiplier?`${Number(m.price_multiplier).toFixed(1)}x`:"";return void p.confirm({title:v("价格提醒"),content:v("当前路由预计选中渠道所在分组 {{group}},每千 token 约 {{price}}(约为默认价格的 {{multiplier}}),是否继续生成?",{group:e,price:s,multiplier:t}),okText:v("确认生成"),cancelText:v("取消"),centered:!0,onOk:Q})}Q()},[r,i,e,f,m,Q,j,v]),X=f.prompt,Z="undefined"!=typeof window?window.location.origin:"",ee=e?.includes("gemini")&&"image"===a,se="gpt-image-2"===e,te=(()=>{try{const s=qs(e,n);return Qs({selectedModel:e,modelStr:s,selectedGroup:d,routingMode:n,imageParams:f,modelPreset:g,t:v})}catch(s){return{}}})(),ae=te&&te.endpoint||"/v1/images/generations",ie=["mj","replicate","kling-img","vidu","tencent","recognize","pixverse"].includes(te?.kind);return t.jsxs(t.Fragment,{children:["playground"===h&&t.jsxs("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-6 space-y-4",children:[t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-5 items-stretch",children:[t.jsx("div",{className:"flex flex-col",children:t.jsxs("div",{className:"flex-1 rounded-2xl border border-border bg-background shadow-sm overflow-hidden flex flex-col",children:[t.jsxs("div",{className:"flex items-center justify-between px-5 py-3 border-b border-border bg-muted/20",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-xs font-semibold text-foreground/60 tracking-widest uppercase",children:"Input"}),t.jsx("div",{className:"flex items-center rounded-md border border-border overflow-hidden text-[11px]",children:["form","json"].map(e=>t.jsx("button",{type:"button",onClick:()=>W(e),className:"px-2.5 py-0.5 font-medium transition-colors",style:{background:j===e?"hsl(var(--foreground) / 0.08)":"transparent",color:j===e?"hsl(var(--foreground))":"hsl(var(--foreground) / 0.45)"},children:"form"===e?"Form":"JSON"},e))})]}),t.jsxs("button",{type:"button",onClick:()=>S(!0),className:"flex items-center gap-1.5 px-3 py-1.5 rounded-lg border transition-all text-xs font-medium",style:{background:r?"hsl(var(--primary) / 0.06)":"hsl(var(--muted))",borderColor:r?"hsl(var(--primary) / 0.25)":"hsl(var(--border))",color:r?"hsl(var(--primary))":"hsl(var(--foreground) / 0.60)"},children:[t.jsx(H,{size:11}),v("路由选择"),n&&(()=>{const e=Re.find(e=>e.id===n);return e?t.jsx("span",{className:"ml-1",children:e.emoji}):null})()]})]}),t.jsx(ot,{visible:w,onClose:()=>S(!1),tokens:i,selectedTokenId:r,onTokenChange:o,routingMode:n,onRoutingModeChange:l}),t.jsxs("div",{className:"p-5 space-y-5 flex-1",children:["json"===j&&t.jsxs("div",{className:"space-y-2",children:[t.jsx("p",{className:"text-[11px] text-muted-foreground",children:v("直接编辑请求体 JSON,切换回 Form 时将自动回填表单字段。")}),t.jsxs("div",{className:"relative rounded-xl overflow-hidden border border-border",children:[t.jsx("div",{className:"absolute top-2 right-2 z-10",children:t.jsx("button",{type:"button",onClick:()=>{N(K())},className:"text-[10px] px-2 py-0.5 rounded border border-border bg-background text-muted-foreground hover:text-foreground transition-colors",children:v("重置")})}),t.jsx(u,{value:k,onChange:N,disabled:T,autosize:{minRows:14,maxRows:30},style:{fontFamily:"monospace",fontSize:12,borderRadius:0,border:"none"}})]})]}),t.jsx("div",{style:{display:"form"===j?void 0:"none"},children:t.jsx(xt,{params:f,onChange:(e,s)=>b(t=>({...t,[e]:s})),onRun:Y,running:T,disabled:!r||T,model:e,routingPreview:m,previewLoading:x,presetEndpoint:D,geminiNative:F})})]}),"json"===j&&t.jsx("div",{className:"px-5 pb-5",children:t.jsx("button",{type:"button",onClick:Y,disabled:!r||T,className:"w-full flex items-center justify-center gap-2 py-2.5 rounded-xl font-semibold text-sm transition-all disabled:opacity-50 disabled:cursor-not-allowed",style:{background:"hsl(var(--primary))",color:"#fff"},children:T?t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"w-4 h-4 border-2 border-white/30 border-t-white rounded-full animate-spin"}),v("生成中...")]}):t.jsxs(t.Fragment,{children:[t.jsx(R,{size:14}),v("Run")]})})})]})}),t.jsx("div",{className:"flex flex-col",children:t.jsxs("div",{className:"flex-1 rounded-2xl border border-border bg-background shadow-sm overflow-hidden flex flex-col",style:{minHeight:480},children:[t.jsxs("div",{className:"flex items-center px-5 py-3 border-b border-border bg-muted/20",children:[t.jsx("span",{className:"text-xs font-semibold text-foreground
1/60 tracking-widest uppercase",children:"Output"}),t.jsxs("span",{className:"ml-auto flex items-center gap-2",children:[$&&!T&&t.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-green-50 dark:bg-green-900/20 text-green-600 dark:text-green-400 text-xs",children:[t.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-500"}),v("完成")]}),T&&t.jsxs("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400 text-xs",children:[t.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-blue-500 animate-pulse"}),v("生成中")]})]})]}),t.jsx(rt,{rawText:P,jsonData:z,streamChunks:I,imageUrl:$,videoUrl:O,audioUrl:M,loading:T,error:A,taskType:"image",presetOutput:g?.example_output?(()=>{const e=g.example_output_type||"text";return"image"===e?{type:"image_url",url:g.example_output}:"video"===e?{type:"video_url",url:g.example_output}:g.example_output})():Ee})]})})]}),g?.detail_image&&(()=>{const s=g.detail_image.split(",").map(e=>e.trim()).filter(Boolean);return s.length?t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-xs font-semibold text-foreground/50 tracking-widest uppercase",children:v("模型详情")}),t.jsx("div",{className:"flex-1 h-px bg-border/60"})]}),t.jsx("div",{className:"grid gap-3 "+(1===s.length?"grid-cols-1":"grid-cols-1 md:grid-cols-2"),children:s.map((s,a)=>t.jsx("div",{className:"rounded-2xl overflow-hidden border border-border bg-muted/20",children:t.jsx("img",{src:s,alt:`${e} detail ${a+1}`,className:"w-full h-auto object-cover",onError:e=>{e.currentTarget.parentElement.style.display="none"}})},a))})]}):null})()]}),"examples"===h&&t.jsx("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-8",children:t.jsxs("div",{className:"max-w-4xl space-y-6",children:[t.jsxs("div",{children:[t.jsx("h2",{className:"text-lg font-semibold",children:v("代码示例")}),t.jsxs("p",{className:"text-sm text-muted-foreground mt-1",children:[v("图像生成通过")," ",t.jsx("code",{className:"text-xs font-mono bg-muted rounded px-1 py-0.5 text-primary",children:"/v1/images/generations"})," ",v("接口调用,"),t.jsx("code",{className:"text-xs font-mono bg-muted rounded px-1 py-0.5 text-primary",children:"gpt-image-2"})," ",v("额外支持")," ",t.jsx("code",{className:"text-xs font-mono bg-muted rounded px-1 py-0.5 text-primary",children:"/v1/images/edits"})," ",v("图片编辑接口;Flux Kontext 系列通过")," ",t.jsx("code",{className:"text-xs font-mono bg-muted rounded px-1 py-0.5 text-primary",children:"aspect_ratio"})," ",v("控制比例,可传")," ",t.jsx("code",{className:"text-xs font-mono bg-muted rounded px-1 py-0.5 text-primary",children:"image"})," ",v("字段进行图片编辑。")]})]}),t.jsx(ds,{model:e,prompt:X,routingMode:n,group:d,type:a,format:null,request:{endpoint:ae,method:"formData"===te?.contentType?"POST":te?.method||"POST",body:te?.body||{},async:ie,label:v("图像请求")}})]})}),"api"===h&&(()=>{const s=ee?[{method:"POST",url:`${Z}/v1beta/models/${e}:generateContent`,label:v("Gemini 原生接口(图像生成)"),badge:"Gemini Native"}]:[{method:"POST",url:`${Z}${ae}`,label:"/v1/images/generations"===ae?"Image Generation":v("图像任务提交"),badge:v("/v1/images/generations"===ae?"OpenAI 标准":ie?"异步任务":"同步")},...se?[{method:"POST",url:`${Z}/v1/images/edits`,label:v("Image Edits(图片编辑)"),badge:v("gpt-image-2 专有")}]:[]],a='"prompt": "..."',i=`"model": "${e}"`,r=({title:e,children:s})=>t.jsxs("div",{className:"rounded-2xl border border-border overflow-hidden",children:[t.jsx("div",{className:"bg-muted/30 px-5 py-3 border-b border-border",children:t.jsx("span",{className:"text-xs font-semibold text-foreground/60 tracking-widest uppercase",children:e})}),t.jsx("div",{className:"p-5",children:s})]}),o=({children:e,color:s})=>t.jsx("code",{className:`block text-sm font-mono bg-muted/40 border border-border rounded-lg px-3 py-2 break-all ${s||"text-foreground"}`,children:e}),n=({text:e,color:s="#6366f1"})=>t.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded-full",style:{background:`${s}15`,color:s,border:`1px solid ${s}30`},children:e});return t.jsx("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-8",children:t.jsxs("div",{className:"max-w-4xl space-y-5",children:[t.jsxs("div",{children:[t.jsx("h2",{className:"text-lg font-semibold",children:v("API 接口说明")}),t.jsxs("p",{className:"text-sm text-muted-foreground mt-1",children:[v("当前模型:"),t.jsx("code",{className:"text-xs font-mono bg-muted rounded px-1",children:e})]})]}),t.jsx(r,{title:"Endpoint",children:t.jsxs("div",{className:"space-y-3",children:[s.map((e,s)=>t.jsxs("div",{className:"space-y-1.5",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[11px] font-mono font-bold text-emerald-600 bg-emerald-50 dark:bg-emerald-900/20 px-1.5 py-0.5 rounded",children:e.method}),t.jsx("span",{className:"text-xs text-muted-foreground",children:e.label}),t.jsx(n,{text:e.badge,color:"#6366f1"})]}),t.jsx(o,{color:"text-primary",children:e.url})]},s)),t.jsxs("div",{className:"pt-1 space-y-1.5",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:"Authentication"}),t.jsx(o,{children:"Authorization: Bearer <your-token>"})]})]})}),t.jsx(r,{title:v("① 路由控制 — 模型名后缀(推荐)"),children:t.jsxs("div",{className:"space-y-4",children:[t.jsxs("p",{className:"text-sm text-muted-foreground",children:[v("在模型名末尾追加")," ",t.jsx("code",{className:"font-mono bg-muted rounded px-1",children:":suffix"}),",",v("适用于所有接口(图像生成、视频任务),任何标准客户端均可直接使用。")]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx("p",{className:"text-xs text-muted-foreground",children:v("示例")}),t.jsx(o,{color:"text-primary",children:`{ "model": "${e}:floor", ${a} }`}),t.jsx(o,{color:"text-primary",children:`{ "model": "${e}:nitro", ${a} }`})]})]})}),t.jsx(r,{title:v("② 路由控制 — provider.sort 字段"),children:t.jsxs("div",{className:"space-y-4",children:[t.jsxs("p",{className:"text-sm text-muted-foreground",children:[v("在请求体中添加")," ",t.jsx("code",{className:"font-mono bg-muted rounded px-1",children:"provider.sort"})," ",v("字段,适合需要在代码中动态切换路由策略的场景。")]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(o,{color:"text-primary",children:`{ ${i}, "provider": { "sort": "price" }, ${a} }`}),t.jsx(o,{color:"text-primary",children:`{ ${i}, "provider": { "sort": "speed" }, ${a} }`})]})]})}),t.jsx(r,{title:v("③ 路由控制 — Token 级默认(一次设置全局生效)"),children:t.jsxs("div",{className:"space-y-3",children:[t.jsxs("p",{className:"text-sm text-muted-foreground",children:[v("在 API 令牌设置页配置")," ",t.jsx("code",{className:"font-mono bg-muted rounded px-1",children:"routing_priority"}),",",v("该令牌下的所有请求(包括图像、视频)自动应用,优先级最低。")]}),t.jsxs("a",{href:"/console/token",className:"inline-flex items-center gap-1.5 text-xs text-primary hover:underline",children:[t.jsx(V,{size:12})," ",v("前往 API 令牌设置页配置")]})]})}),t.jsx(r,{title:v("优先级规则(四级瀑布)"),children:t.jsx("div",{className:"space-y-2",children:[{level:"1",label:v("模型名后缀"),desc:":floor / :nitro / :stable",color:"#ef4444",note:v("最高优先")},{level:"2",label:v("provider.sort 字段"),desc:'"provider": { "sort": "price" }',color:"#f97316"},{level:"3",label:v("Token 级默认"),desc:v("routing_priority 字段(令ç‰
1Œè®¾ç½®é¡µï¼‰"),color:"#eab308"},{level:"4",label:v("系统全局权重"),desc:v("无任何路由指定时,沿用全局渠道权重(默认)"),color:"#6b7280",note:v("最低优先")}].map(e=>t.jsxs("div",{className:"flex items-start gap-3 rounded-xl border border-border px-4 py-3",children:[t.jsx("span",{className:"mt-0.5 w-5 h-5 rounded-full flex items-center justify-center text-[11px] font-bold text-white flex-shrink-0",style:{background:e.color},children:e.level}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-sm font-medium",children:e.label}),e.note&&t.jsxs("span",{className:"text-[10px] text-muted-foreground",children:["(",e.note,")"]})]}),t.jsx("code",{className:"text-[11px] font-mono text-muted-foreground",children:e.desc})]})]},e.level))})})]})})})(),"logs"===h&&t.jsx("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-6",children:t.jsx("div",{className:"rounded-2xl border border-border bg-background shadow-sm p-5",children:t.jsx(ss,{pageSize:20,refreshTrigger:E})})})]})}const vt=({kp:e,params:s,onChange:a,disabled:i})=>{const{t:o}=_(),n=e.includes("/effects"),l=e.includes("/video-extend"),d=e.includes("/multi-image2video"),c=e.includes("/lip-sync"),m=e.includes("/omni-video"),p=e.includes("/avatar/"),g=e.includes("/motion-control");return t.jsxs("div",{className:"space-y-3",children:[m&&t.jsx(Ss,{label:o("参考图列表(image_list)"),desc:o("主体/场景/风格参考图,URL 或 Base64"),value:s.kling_v_omni_images,onChange:e=>a("kling_v_omni_images",e),max:4,disabled:i}),p&&t.jsxs(t.Fragment,{children:[t.jsx(ws,{value:s.kling_v_image||"",onChange:e=>a("kling_v_image",e),label:o("数字人参考图(image)"),desc:o(".jpg/.jpeg/.png,≤10MB,≥300px"),placeholder:"https://...",disabled:i}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("音频文件 URL(sound_file)"),desc:o(".mp3/.wav/.m4a/.aac,≤5MB;或填下方 audio_id")}),t.jsx(r,{value:s.kling_v_sound_file||"",onChange:e=>a("kling_v_sound_file",e),placeholder:"https://...",disabled:i})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("音频 ID(audio_id,可选)"),desc:o("与 sound_file 二选一")}),t.jsx(r,{value:s.kling_v_audio_id||"",onChange:e=>a("kling_v_audio_id",e),disabled:i})]})]}),g&&t.jsxs(t.Fragment,{children:[t.jsx(ws,{value:s.kling_v_image||"",onChange:e=>a("kling_v_image",e),label:o("参考图像(image_url)"),placeholder:"https://...",disabled:i}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("动作参考视频 URL(video_url)"),desc:o(".mp4/.mov,≤100MB")}),t.jsx(r,{value:s.kling_v_video_url||"",onChange:e=>a("kling_v_video_url",e),placeholder:"https://...",disabled:i})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("人物朝向"),desc:"character_orientation"}),t.jsx(x,{value:s.kling_v_orientation||"image",onChange:e=>a("kling_v_orientation",e),disabled:i,className:"w-full",children:["image","video"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("保留原声"),desc:"keep_original_sound"}),t.jsx(x,{value:s.kling_v_keep_sound||"no",onChange:e=>a("kling_v_keep_sound",e),disabled:i,className:"w-full",children:["yes","no"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]})]}),n&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("特效场景(effect_scene)"),desc:o("单人如 pet_lion;双人如 hug/kiss/heart_gesture/fight")}),t.jsx(r,{value:s.kling_v_effect_scene||"",onChange:e=>a("kling_v_effect_scene",e),placeholder:"hug",disabled:i})]}),t.jsx(ws,{value:s.kling_v_image||"",onChange:e=>a("kling_v_image",e),label:o("参考图(单人特效)"),placeholder:"https://...",disabled:i}),t.jsx(Ss,{label:o("参考图列表(双人特效)"),desc:o("双人特效传 2 å¼ "),value:s.kling_v_images,onChange:e=>a("kling_v_images",e),max:2,disabled:i})]}),l&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("原视频 ID(video_id)"),desc:o("可灵生成的视频 ID,≤3 分钟")}),t.jsx(r,{value:s.kling_v_video_id||"",onChange:e=>a("kling_v_video_id",e),placeholder:"video_id",disabled:i})]}),d&&t.jsx(Ss,{label:o("参考图列表(image_list)"),desc:o("多图生视频,Base64 或 URL"),value:s.kling_v_image_list,onChange:e=>a("kling_v_image_list",e),max:4,disabled:i}),c&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("视频 ID 或 U
1RL"),desc:o("video_id(可灵生成)或 video_url(上传)二选一")}),t.jsx(r,{value:s.kling_v_video_id||"",onChange:e=>a("kling_v_video_id",e),placeholder:"video_id / https://...",disabled:i})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("合成文案(text)")}),t.jsx(u,{value:s.kling_v_text||"",onChange:e=>a("kling_v_text",e),autosize:{minRows:2,maxRows:5},disabled:i,style:{fontSize:14}})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("音色 ID(voice_id)")}),t.jsx(r,{value:s.kling_v_voice_id||"",onChange:e=>a("kling_v_voice_id",e),disabled:i})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("音色语种"),desc:"voice_language"}),t.jsx(x,{value:s.kling_v_voice_language||"zh",onChange:e=>a("kling_v_voice_language",e),disabled:i,className:"w-full",children:["zh","en"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]})]}),(l||d)&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("负向提示词(可选)"),desc:"negative_prompt"}),t.jsx(u,{value:s.kling_v_negative_prompt||"",onChange:e=>a("kling_v_negative_prompt",e),placeholder:o("不希望出现的内容..."),autosize:{minRows:1,maxRows:3},disabled:i,style:{fontSize:14}})]}),l&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("生成自由度(cfg_scale)"),desc:o("0~1,越大越贴合提示词")}),t.jsx(r,{type:"number",value:s.kling_v_cfg_scale??"",onChange:e=>a("kling_v_cfg_scale",""===e?"":Number(e)),placeholder:"0.5",min:0,max:1,step:.1,disabled:i})]}),m&&t.jsxs("div",{className:"flex items-center justify-between rounded-xl border border-border px-3 py-2.5",children:[t.jsxs("div",{children:[t.jsx("span",{className:"text-xs font-semibold text-foreground/70",children:o("AI 音效")}),t.jsx("span",{className:"block text-[10px] text-muted-foreground font-mono",children:"sound"})]}),t.jsx(h,{checked:!0===s.kling_v_sound,onChange:e=>a("kling_v_sound",e),disabled:i,size:"small"})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("生成模式"),desc:"std / pro"}),t.jsx(x,{value:s.kling_v_mode||"std",onChange:e=>a("kling_v_mode",e),disabled:i,className:"w-full",children:["std","pro"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),(n||d||m)&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("时长(秒)"),desc:"5 / 10"}),t.jsx(x,{value:s.kling_v_duration||"5",onChange:e=>a("kling_v_duration",e),disabled:i,className:"w-full",children:["5","10"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),(d||m)&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:o("宽高比"),desc:"aspect_ratio"}),t.jsx(x,{value:s.kling_v_aspect_ratio||"16:9",onChange:e=>a("kling_v_aspect_ratio",e),disabled:i,className:"w-full",children:Ps.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]})]})},_t=["480p","720p"],ft=["16:9","9:16","1:1"],bt=[4,5,6,8,10,12,15],jt=({params:e,onChange:a,onRun:i,running:n,disabled:l,model:c,routingPreview:m,previewLoading:p,presetEndpoint:g,pixverseVideoEndpoints:v})=>{const{t:f}=_(),b=ke[c]||ke._default,j=b.bailianMode,y="omni"===b.pollMode,k=b.modes.includes("image2video"),N=b.modes.length>1?b.modes:["text2video","image2video"],w="video-edit"===j,S="i2v"===j||"r2v"===j,[C,T]=s.useState(Rs(b,e.mode));s.useEffect(()=>{const e=Rs(ke[c]||ke._default,null);T(e),a("mode",e)},[c]);const P=C,z=b.sizes,I=we(b,P),$=z?.includes(e.size)?e.size:z?.[0],O=b.durationBySize,M=O?.[$]||b.durations,A=M?.includes(e.duration)?e.duration:M?.[0],E=I?.includes(e.aspect_ratio)?e.aspect_ratio:I?.[0],U=e=>{T(e),a("mode",e)},D=e.ref_images||[],L=y&&"firstlast"===P?b.maxFirstlastImages||2:b.maxRefImages||3,G=e=>{D.length>=L||a("ref_images",[...D,e])},V=e=>a("ref_images",D.filter((s,t)=>t!==e)),B=f(w||y&&"video_edit"===P?"描述对视频的编辑内容和效果":y&&"firstlast"===P?"描述首尾帧之间的视频内容和过渡效果":"r2v"===j||y&&"image2video"===P?"描述视频内容和风格,参考图将作为参考":"image2video"===P||S?"描述视频运动内容,配合参考图生成视频":"描述要生成的视频内容和画面"),K=te(g||"");if(K.startsWith("/kling/v1/videos/")&&(K.includes("/effects")||K.includes("/video-extend")||K.includes("/multi-image2video")||K.includes("/lip-sync")||K.includes("/omni-video")||K.includes("/avatar/")||K.includes("/motion-control"))){const s=!K.includes("/lip-sync");return t.jsxs("div",{className:"space-y-3.5",children:[s&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("视频描述"),desc:B}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:f("描述要生成的视频内容..."),autosize:{minRows:3,maxRows:8},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsx(vt,{kp:K,params:e,onChange:a,disabled:l}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:n?f("生成中..."):"Run"})]})}if("/kling/v1/videos/advanced-lip-sync"===K){const s=(e,s)=>""===e||null==e?s:Number(e),c=(e.kling_als_session_id||"").toString().trim(),u=(e.kling_als_audio_id||"").toString().trim(),x=(e.kling_als_sound_file||"").toString().trim();return t.jsxs("div",{className:"space-y-3.5",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("会话 ID(session_id)"),desc:f("由「对口型人脸识别」接口生成,必填")}),t.jsx(r,{value:e.kling_als_session_id||"",onChange:e=>a("kling_als_session_id",e),placeholder:f("如 825465778199224380"),disabled:l})]}),t.jsxs("div",{className:"border border-border rounded-xl p-3 space-y-2 bg-muted/20",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:f("对口型配置(face_choose)")}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("人脸 ID(face_id)"),desc:f("指定要驱动的人脸,-1 表示全部人脸")}),t.jsx(r,{value:e.kling_als_face_id??"-1",onChange:e=>a("kling_als_face_id",e),placeholder:"-1",disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("音频 ID(audio_id)"),desc:f("音频上传接口返回的 ID(与 sound_file 二选一)")}),t.jsx(r,{value:e.kling_als_audio_id||"",onChange:e=>a("kling_als_audio_id",e),placeholder:f("如 825451760499568680"),disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("音频文件 URL(sound_file)"),desc:f("与 audio_id 二选一,填写 audio_id 时忽略")}),t.jsx(r,{value:e.kling_als_sound_file||"",onChange:e=>a("kling_als_sound_file",e),placeholder:"https://...",disabled:l})]}),t.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("起始(ms)"),desc:"sound_start_time"}),t.jsx(r,{type:"number",value:e.kling_als_sound_start??0,onChange:e=>a("kling_als_sound_start",s(e,0)),min:0,disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("结束(ms)"),desc:"sound_end_time"}),t.jsx(r,{type:"number",value:e.kling_als_sound_end??5e3,onChange:e=>a("kling_als_sound_end",s(e,5e3)),min:0,disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("插入(ms)"),desc:"sound_insert_time"}),t.jsx(r,{type:"number",value:e.kling_als_sound_insert??0,onChange:e=>a("kling_als_sound_insert",s(e,0)),min:0,disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("音效音量"),desc:"sound_volume 0~1"}),t.jsx(r,{type:"number",value:e.kling_als_sound_volume??1,onChange:e=>a("kling_als_sound_volume",s(e,1)),min:0,max:1,step:.1,disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("原声音量"),desc:"original_audio_volume 0~1"}),t.jsx(r,{type:"number",value:e.kling_als_original_volume??1,onChange:e=>a("kling_als_original_volume",s(e,1)),min:0,max:1,step:.1,disabled:l})]})]})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!c||!u&&!x,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?"生成中...":"生成对口型视频")})]})}const H=te(g||"");if("/ent/v2/reference2video"===H){const s=["viduq3-mix","viduq3","viduq2-pro","viduq2","viduq1","vidu2.0"],c=e.vidu_subjects||[{name:"",images:[""]}],g=e=>a("vidu_subjects",e),h=()=>{c.length>=7||g([...c,{name:"",images:[""]}])},v=e=>g(c.filter((s,t)=>t!==e)),_=(e,s,t)=>{const a=c.map((a,i)=>i===e?{...a,[s]:t}:a);g(a)},b=(e,s,t)=>{const a=c.map((a,i)=>{if(i!==e)return a;const r=[...a.images||[]];return r[s]=t,{...a,images:r}});g(a)},j=e=>{const s=c[e];(s.images||[]).length>=3||_(e,"images",[...s.images||[],""])},y=(e,s)=>{const t=c[e];_(e,"images",(t.images||[]).filter((e,t)=>
1t!==s))};return t.jsxs("div",{className:"space-y-3.5",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("视频描述"),desc:f("描述主体的行为和场景,可用 [@主体名] 引用主体")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:f("一只可爱的 [@cat] 在草地上奔跑,阳光明媚,画面温馨"),autosize:{minRows:3,maxRows:8},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsx(Ns,{label:f("参考主体"),desc:f("每个主体需要名称 + 1~3 张参考图,最多 7 个")}),t.jsx(d,{size:"small",onClick:h,disabled:l||c.length>=7,icon:t.jsx(J,{size:12}),children:f("添加主体")})]}),c.map((e,s)=>t.jsxs("div",{className:"border border-border rounded-xl p-3 space-y-2 bg-muted/20",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(r,{value:e.name||"",onChange:e=>_(s,"name",e),placeholder:f("主体名称(如 cat、人物1)"),disabled:l,className:"flex-1"}),c.length>1&&t.jsx(d,{size:"small",type:"danger",onClick:()=>v(s),icon:t.jsx(W,{size:12})})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("参考图 URL"),desc:f("1~3 张图片 URL")}),(e.images||[""]).map((a,i)=>t.jsxs("div",{className:"flex gap-2",children:[t.jsx(r,{value:a,onChange:e=>b(s,i,e),placeholder:"https://...",disabled:l,className:"flex-1"}),(e.images||[]).length>1&&t.jsx(d,{size:"small",onClick:()=>y(s,i),icon:t.jsx(W,{size:12})}),i===(e.images||[]).length-1&&(e.images||[]).length<3&&t.jsx(d,{size:"small",onClick:()=>j(s),icon:t.jsx(J,{size:12})})]},i))]})]},s))]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("模型")}),t.jsx(x,{value:e.vidu_ref_model||"viduq3-mix",onChange:e=>a("vidu_ref_model",e),disabled:l,className:"w-full",children:s.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("时长(秒)")}),t.jsx(x,{value:String(e.vidu_ref_duration||"5"),onChange:e=>a("vidu_ref_duration",Number(e)),disabled:l,className:"w-full",children:["4","5","8","10"].map(e=>t.jsxs(x.Option,{value:e,children:[e,"s"]},e))})]})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("比例")}),t.jsx(x,{value:e.vidu_ref_aspect||"16:9",onChange:e=>a("vidu_ref_aspect",e),disabled:l,className:"w-full",children:["16:9","9:16","1:1","4:3","3:4","auto"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("分辨率")}),t.jsx(x,{value:e.vidu_ref_res||"720p",onChange:e=>a("vidu_ref_res",e),disabled:l,className:"w-full",children:["540p","720p","1080p"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("运动幅度"),desc:"movement_amplitude"}),t.jsx(x,{value:e.vidu_ref_movement||"auto",onChange:e=>a("vidu_ref_movement",e),disabled:l,className:"w-full",children:["auto","small","medium","large"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.prompt||!(e.vidu_subjects||[{name:"",images:[""]}])[0]?.name,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?"生成中...":"生成视频")})]})}const Q=te(g||""),Y=["v3.5","v4","v4.5","v5","v5.5","v5.6","v6","c1"],X=["360p","540p","720p","1080p"],Z=[5,8,10],ee=["v3.5","v4","v4.5","v5"],se=Array.isArray(v)?v:[],ae=se.length>1?t.jsx("div",{className:"flex flex-wrap gap-2",children:se.map(s=>{const i=((e,{preferredPath:s,filledPresetPath:t,modelName:a}={})=>{if(!e?.path)return!1;const i=te(s||""),r=te(e.path);if(i)return i===r;const o=te(t||""),n=te(cs(e.path,a));return!(!o||n!==o)||!!e.primary&&!o})(s,{preferredPath:e.pixverse_endpoint,filledPresetPath:Q,modelName:c});return t.jsx("button",{type:"button",disabled:l,onClick:()=>a("pixverse_endpoint",s.path),className:"px-3 py-1.5 rounded-lg border text-xs font-medium transition-colors disabled:opacity-50",style:{background:i?"hsl(var(--primary) / 0.10)":"transparent",borderColor:i?"hsl(var(--primary) / 0.45)":"hsl(var(--border))",color:i?"hsl(var(--primary))":"hsl(var(--foreground) / 0.65)"},children:f(s.label)},s.path)})}):null,ie=te(g||"");if("/v1/videos/generations"===ie||"/v1/videos/edits"===ie){const s="/v1/videos/edits"===ie,c=_t.includes(e.size)?e.
1size:"720p",g=ft.includes(e.aspect_ratio)?e.aspect_ratio:"16:9",h=bt.includes(Number(e.duration))?Number(e.duration):8;return t.jsxs("div",{className:"space-y-3.5",children:[ae,s&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("待编辑视频 URL"),desc:f("必填,公网可访问的视频地址(video)")}),t.jsx(r,{value:e.video_url||"",onChange:e=>a("video_url",e),placeholder:"https://.../input.mp4",disabled:l,style:{fontSize:13}})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("视频描述"),desc:f(s?"必填,描述对视频的编辑效果":"必填,描述要生成的视频内容")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:f("描述要生成的视频内容..."),autosize:{minRows:3,maxRows:8},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsx(ws,{value:e.image_url||"",onChange:e=>a("image_url",e),label:f(s?"参考图(可选,首帧 image)":"首帧图片(可选,图生视频 image)"),desc:f("留空即为纯文生视频;部分模型仅支持图生视频,需提供首帧图"),placeholder:f("粘贴图片 URL 或点击上传..."),disabled:l}),t.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("分辨率"),desc:"resolution"}),t.jsx(x,{value:c,onChange:e=>a("size",e),disabled:l,className:"w-full",children:_t.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("画面比例"),desc:"aspect_ratio"}),t.jsx(x,{value:g,onChange:e=>a("aspect_ratio",e),disabled:l,className:"w-full",children:ft.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("时长"),desc:f("秒,范围 1~15")}),t.jsx(x,{value:h,onChange:e=>a("duration",e),disabled:l,className:"w-full",children:bt.map(e=>t.jsxs(x.Option,{value:e,children:[e,"s"]},e))})]})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.prompt||s&&!e.video_url,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?"提交中...":"提交任务")})]})}const re=te(g||"");if(ps(re)){const s=re.includes("/image-to-video/"),c=Ms.includes(e.size)?e.size:"720p",g=As.includes(e.aspect_ratio)?e.aspect_ratio:"16:9",h=Es.includes(Number(e.duration))?Number(e.duration):5,v=s?2500:3072,_=(e.prompt||"").length,b=_>v,j=s?!!(e.image_url||"").trim()&&!b:!!(e.prompt||"").trim()&&!b;return t.jsxs("div",{className:"space-y-3.5",children:[ae,t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("视频描述"),desc:f(s?"可选,描述画面运动与效果(prompt,最多 {{max}} 字)":"必填,描述要生成的视频内容(prompt,最多 {{max}} 字)",{max:v}),value:`${_}/${v}`}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:f("描述要生成的视频内容..."),autosize:{minRows:3,maxRows:8},disabled:l,style:{fontFamily:"inherit",fontSize:14}}),b&&t.jsx("p",{className:"text-[11px] text-red-500",children:f("已超出字数上限")})]}),s&&t.jsx(ws,{value:e.image_url||"",onChange:e=>a("image_url",e),label:f("首帧图片(必填)"),desc:f("contents[].type=first_frame,公网可访问的图片 URL(jpg/jpeg/png,≤50MB)"),placeholder:f("粘贴图片 URL 或点击上传..."),disabled:l}),t.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("分辨率"),desc:"settings.resolution"}),t.jsx(x,{value:c,onChange:e=>a("size",e),disabled:l,className:"w-full",children:Ms.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("画面比例"),desc:"settings.aspect_ratio"}),t.jsx(x,{value:g,onChange:e=>a("aspect_ratio",e),disabled:l,className:"w-full",children:As.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("时长(秒)"),desc:"settings.duration(3~15)"}),t.jsx(x,{value:h,onChange:e=>a("duration",e),disabled:l,className:"w-full",children:Es.map(e=>t.jsxs(x.Option,{value:e,children:[e,"s"]},e))})]})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("回调 URL(
1可选)"),desc:"options.callback_url"}),t.jsx(r,{value:e.kling_turbo_callback_url||"",onChange:e=>a("kling_turbo_callback_url",e),placeholder:"https://your-server.com/webhook/kling",disabled:l,style:{fontSize:13}})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("外部任务 ID(可选)"),desc:"options.external_task_id"}),t.jsx(r,{value:e.kling_turbo_external_task_id||"",onChange:e=>a("kling_turbo_external_task_id",e),placeholder:f("业务侧自定义任务 ID"),disabled:l,style:{fontSize:13}})]}),t.jsxs("div",{className:"flex items-start gap-1.5 text-[11px] text-amber-600 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/10 rounded-lg px-3 py-2",children:[t.jsx(F,{size:11,className:"mt-0.5 flex-shrink-0"}),t.jsxs("span",{children:[f("视频生成为异步任务"),":",f("提交后获得 task_id,需轮询")," ",t.jsxs("code",{className:"font-mono",children:[re,"/","{task_id}"]})," ",f("直到 status = succeed / succeeded。端点:"),t.jsx("code",{className:"font-mono",children:re})," ",f("本接口不写 body.group,渠道分组请使用令牌侧配置。")]})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!j,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?"提交中...":"提交任务")})]})}if("/openapi/v2/video/text/generate"===Q)return t.jsxs("div",{className:"space-y-3.5",children:[ae,t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("视频描述"),desc:f("必填,最多 2048 字符")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:f("描述要生成的视频内容..."),autosize:{minRows:3,maxRows:8},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Model"}),t.jsx(x,{value:e.pixverse_model||"v5",onChange:e=>a("pixverse_model",e),disabled:l,className:"w-full",children:Y.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("画面比例"),desc:"aspect_ratio"}),t.jsx(x,{value:e.pixverse_aspect_ratio||"16:9",onChange:e=>a("pixverse_aspect_ratio",e),disabled:l,className:"w-full",children:["16:9","9:16","1:1","4:3","3:4"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Duration"}),t.jsx(x,{value:e.pixverse_duration||5,onChange:e=>a("pixverse_duration",e),disabled:l,className:"w-full",children:Z.map(e=>t.jsxs(x.Option,{value:e,children:[e,"s"]},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Quality"}),t.jsx(x,{value:e.pixverse_quality||"720p",onChange:e=>a("pixverse_quality",e),disabled:l,className:"w-full",children:X.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.prompt,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?"生成中...":"生成视频")})]});if("/openapi/v2/video/img/generate"===Q)return t.jsxs("div",{className:"space-y-3.5",children:[ae,t.jsx(ws,{value:e.pixverse_img_url||"",onChange:e=>a("pixverse_img_url",e),label:f("参考图片"),desc:f("本地图片直接以文件形式上传到 PixVerse 换取 img_id(推荐,避免外链防盗链导致上游无法读取);也可粘贴公网可访问的图片 URL"),placeholder:f("粘贴图片 URL 或点击上传..."),disabled:l,base64Mode:!0}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("视频描述"),desc:f("可选,最多 2048 字符")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:f("描述要生成的视频内容..."),autosize:{minRows:3,maxRows:8},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Model"}),t.jsx(x,{value:e.pixverse_model||"v5",onChange:e=>a("pixverse_model",e),disabled:l,className:"w-full",children:Y.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Duration"}),t.jsx(x,{value:e.pixverse_duration||5,onChange:e=>a("pixverse_duration",e),disabled:l,className:"w-full",children:Z.map(e=>t.jsxs(x.Option,{value:e,children:[e,"s"]},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Quality"}),t.jsx(x,{value:e.pixverse_quality||"720p",onChange:e=>a("pixverse_quality",e),disabled:l,className:"w-full",children:X.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.pixverse_img_url||!e.prompt,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?"上传+生成中...":"生成视频")})]});if("/openapi/v2/video/fusion/generate"===Q){const s=e.pixverse_fusion_refs||[{url:"",type:"subject",ref_name:""}],c=(e,t,i)=>{const r=s.map((s,a)=>a===e?{...s,[t]:i}:s);a("pixverse_fusion_refs",r)},g=()=>{s.length<7&&a("pixverse_fusion_refs",[...s,{url:"",type:"subject",ref_name:""}])},h=e=>{s.length>1&&a("pixverse_fusion_refs",s.filter((s,t)=>t!==e))};return t.jsxs("div",{className:"space-y-3.5",children:[ae,t.jsxs("div",{className:"space-y-2",children:[t.jsx(Ns,{label:f("图像引用(1~7 张)"),desc:f("每张图先上传换取 img_id,建议在 prompt 中用 @ref_name 精确描述")}),s.map((e,a)=>t.jsxs("div",{className:"border rounded-xl p-3 space-y-2 bg-muted/20",children:[t.jsxs("div",{className:"flex items-center justify-between mb-1",children:[t.jsxs("span",{className:"text-xs font-medium text-muted-foreground",children:["#",a+1]}),s.length>1&&t.jsx("button",{onClick:()=>h(a),className:"text-xs text-destructive hover:text-destructive/80",children:"×删除"})]}),t.jsx(r,{value:e.url||"",onChange:e=>c(a,"url",e),placeholder:"https://... 图片 URL",disabled:l}),t.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[t.jsxs(x,{value:e.type||"subject",onChange:e=>c(a,"type",e),disabled:l,className:"w-full",children:[t.jsx(x.Option,{value:"subject",children:"subject(主体)"}),t.jsx(x.Option,{value:"background",children:"background(背景)"})]}),t.jsx(r,{value:e.ref_name||"",onChange:e=>c(a,"ref_name",e),placeholder:"ref_name(可选)",disabled:l})]})]},a)),s.length<7&&t.jsx(d,{onClick:g,size:"small",theme:"borderless",disabled:l,children:"+ 添加图片"})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Prompt",desc:f("用 @ref_name 精确描述,如 @cat plays")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:f("@cat plays in the park"),autosize:{minRows:3,maxRows:8},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Model"}),t.jsx(x,{value:e.pixverse_model||"v5",onChange:e=>a("pixverse_model",e),disabled:l,className:"w-full",children:["v4.5","v5","v5.5","v5.6","v6","c1"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Duration"}),t.jsx(x,{value:e.pixverse_duration||5,onChange:e=>a("pixverse_duration",e),disabled:l,className:"w-full",children:Z.map(e=>t.jsxs(x.Option,{value:e,children:[e,"s"]},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Quality"}),t.jsx(x,{value:e.pixverse_quality||"720p",onChange:e=>a("pixverse_quality",e),disabled:l,className:"w-full",children:X.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!s[0]?.url||!e.prompt,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?"上传+生成中...":"多主体生成视频")})]})}if("/openapi/v2/video/extend/generate"===Q)return t.jsxs("div",{className:"space-y-3.5",children:[ae,t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("源视频 ID"),desc:f("PixVerse 生成的 source_video_id(整数),或填写 video_media_id")}),t.jsx(r,{value:e.pixverse_source_video_id||"",onChange:e=>a("pixverse_source_video_id",e),placeholder:f("如 343252978602905"),disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("视频描述"),desc:f("必填,引导延长方向")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:f("描述延长后的内容..."),autosize:{minRows:3,maxRows:8},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Seed",desc:f("可选随机种子,留空默认 0(后端必填,自动补 0)")}),t.jsx(r,{value:e.pixverse_extend_seed??"",onChange:e=>a("pixverse_extend_seed",e),placeholder:"0",disabled:l})]}),t.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Model"}),t.jsx(x,{value:e.pixverse_model||"v5",onChange:e=>a("pixverse_model",e),disabled:l,className:"w-full",children:["v3.5","v4","v4.5","v5","v5.5","v6"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Duration"}),t.jsx(x,{value:e.pixverse_duration||5,onChange:e=>a("pixverse_duration",e),disabled:l,className:"w-full",children:Z.map(e=>t.jsxs(x.Option,{value:e,children:[e,"s"]},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Quality"}),t.jsx(x,{value:e.pixverse_quality||"720p",onChange:e=>a("pixverse_quality",e),disabled:l,className:"w-full",children:X.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.pixverse_source_video_id||!e.prompt,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?"生成中...":"延长视频")})]});if("/openapi/v2/video/sound_effect/generate"===Q)return t.jsxs("div",{className:"space-y-3.5",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("源视频 ID"),desc:f("PixVerse 生成的 source_video_id(整数),或填写 video_media_id")}),t.jsx(r,{value:e.pixverse_source_video_id||"",onChange:e=>a("pixverse_source_video_id",e),placeholder:f("如 343252978602905"),disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("音效提示词"),desc:f("可选。留空则自动根据视频内容生成音效")}),t.jsx(r,{value:e.pixverse_sound_content||"",onChange:e=>a("pixverse_sound_content",e),placeholder:f("例如:雨声、脚步声、背景音乐"),disabled:l})]}),t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx(Ns,{label:f("保留原始音轨"),desc:f("是否在生成音效同时保留视频原声")}),t.jsx(h,{checked:!1!==e.pixverse_original_sound,onChange:e=>a("pixverse_original_sound",e),disabled:l})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.pixverse_source_video_id,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?"生成中...":"生成音效")})]});if("/openapi/v2/video/lip_sync/generate"===Q)return e.pixverse_lip_audio_media_id,t.jsxs("div",{className:"space-y-3.5",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("视频 ID"),desc:f("PixVerse 生成的 video_media_id(整数)")}),t.jsx(r,{value:e.pixverse_lip_video_id||"",onChange:e=>a("pixverse_lip_video_id",e),placeholder:f("如 343252978602905"),disabled:l})]}),t.jsxs("div",{className:"border rounded-xl p-3 space-y-2 bg-muted/20",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:f("音频来源(二选一)")}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("方式 A:TTS 文本"),desc:f("自动合成语音进行对口型,speaker_id 默认 auto")}),t.jsx(u,{value:e.pixverse_lip_tts_content||"",onChange:e=>a("pixverse_lip_tts_content",e),placeholder:f("输入对口型文本,如 hello this is a demo"),autosize:{minRows:2,maxRows:6},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("方式 B:音频 media_id"),desc:f("已上传的音频 ID(填写后方式 A 将被忽略)")}),t.jsx(r,{value:e.pixverse_lip_audio_media_id||"",onChange:e=>a("pixverse_lip_audio_media_id",e),placeholder:f("audio_media_id(整数)"),disabled:l})]})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.pixverse_lip_video_id||!e.pixverse_lip_tts_content&&!e.pixverse_lip_audio_media_id,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?"生成中...":"生成对口型视频")})]});if("/openapi/v2/video/mask/selection"===Q){const s=(e.pixverse_mask_source_video_id||"").toString().trim(),c=(e.pixverse_mask_video_media_id||"").toString().trim();return t.jsxs("div",{className:"space-y-3.5",children:[t.jsxs("div",{className:"border rounded-xl p-3 space-y-2 bg-muted/20",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:f("视频来源(二选一)")}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("源视频 ID(source_video_id)"),desc:f("PixVerse 生成的 video_id(整数,需 h.264/h.265)")}),t.jsx(r,{value:e.pixverse_mask_source_video_id||"",onChange:e=>a("pixverse_mask_source_video_id",e),placeholder:f("如 343252978602905"),disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("上传视频 media_id(video_media_id)"),desc:f("通过上传接口获得(填写后将忽略 source_video_id)")}),t.jsx(r,{value:e.pixverse_mask_video_media_id||"",onChange:e=>a("pixverse_mask_video_media_id",e),placeholder:f("如 343252978602905"),disabled:l})]})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("关键帧编号(keyframe_id)"),desc:f("要抠图的视频帧,可选,不传默认为 1")}),t.jsx(r,{value:e.pixverse_mask_keyframe_id||"",onChange:e=>a("pixverse_mask_keyframe_id",e),placeholder:"1",disabled:l})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!s&&!c,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?"生成中...":"生成蒙版")})]})}if("/openapi/v2/video/modify/generate"===Q){const s=["360p","540p","720p"],c=e.pixverse_modify_img_urls||[],g=e.pixverse_modify_mask_ids||[],h=(e.pixverse_modify_source_video_id||"").toString().trim(),v=(e.pixverse_modify_video_media_id||"").toString().trim(),_=(e,s,t,i)=>a(e,s.map((e,s)=>s===t?i:e)),b=(e,s,t)=>{s.length<t&&a(e,[...s,""])},j=(e,s,t)=>a(e,s.filter((e,s)=>s!==t));return t.jsxs("div",{className:"space-y-3.5",children:[t.jsxs("div",{className:"border rounded-xl p-3 space-y-2 bg-muted/20",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:f("视频来源(二选一)")}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("源视频 ID(source_video_id)"),desc:f("PixVerse 生成的视频 ID(整数)")}),t.jsx(r,{value:e.pixverse_modify_source_video_id||"",onChange:e=>a("pixverse_modify_source_video_id",e),placeholder:f("如 343252978602905"),disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("上传视频 media_id(video_media_id)"),desc:f("通过上传接口获得(填写后将忽略 source_video_id)")}),t.jsx(r,{value:e.pixverse_modify_video_media_id||"",onChange:e=>a("pixverse_modify_video_media_id",e),placeholder:f("如 343252978602905"),disabled:l})]})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("编辑指令 Prompt"),desc:f("使用 mask 时用 @selection0、@selection1;使用参考图时用 @img0、@img1。最多 5000 字符")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:f("
1例如:@selection0 subject is swapped with @img0"),autosize:{minRows:3,maxRows:8},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Quality",desc:f("视频分辨率")}),t.jsx(x,{value:e.pixverse_modify_quality||"540p",onChange:e=>a("pixverse_modify_quality",e),disabled:l,className:"w-full",children:s.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("关键帧编号(keyframe_ids)"),desc:f("可选,指定参与编辑的视频帧")}),t.jsx(r,{value:e.pixverse_modify_keyframe_id||"",onChange:e=>a("pixverse_modify_keyframe_id",e),placeholder:"1",disabled:l})]})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(Ns,{label:f("参考图 img_ids(可选,最多 3 张)"),desc:f("每张图先上传换取 img_id,在 prompt 中用 @img0、@img1 引用")}),c.map((e,s)=>t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(r,{value:e||"",onChange:e=>_("pixverse_modify_img_urls",c,s,e),placeholder:"https://... 图片 URL",disabled:l,className:"flex-1"}),t.jsx("button",{onClick:()=>j("pixverse_modify_img_urls",c,s),className:"text-destructive hover:text-destructive/80",disabled:l,children:t.jsx(W,{size:15})})]},s)),c.length<3&&t.jsx(d,{onClick:()=>b("pixverse_modify_img_urls",c,3),size:"small",theme:"borderless",icon:t.jsx(J,{size:14}),disabled:l,children:f("添加参考图")})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(Ns,{label:f("蒙版 mask_ids(可选,最多 3 个)"),desc:f("来自主体替换 Mask 接口返回的 mask_id,在 prompt 中用 @selection0、@selection1 引用")}),g.map((e,s)=>t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(r,{value:e||"",onChange:e=>_("pixverse_modify_mask_ids",g,s,e),placeholder:f("mask_id(字符串)"),disabled:l,className:"flex-1"}),t.jsx("button",{onClick:()=>j("pixverse_modify_mask_ids",g,s),className:"text-destructive hover:text-destructive/80",disabled:l,children:t.jsx(W,{size:15})})]},s)),g.length<3&&t.jsx(d,{onClick:()=>b("pixverse_modify_mask_ids",g,3),size:"small",theme:"borderless",icon:t.jsx(J,{size:14}),disabled:l,children:f("添加蒙版 ID")})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!h&&!v||!e.prompt,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:n?c.length?f("上传+生成中..."):f("生成中..."):f("生成编辑视频")})]})}if("/openapi/v2/video/swap/generate"===Q){const s=["360p","540p","720p"],c=(e.pixverse_swap_source_video_id||"").toString().trim(),u=(e.pixverse_swap_video_media_id||"").toString().trim(),g=(e.pixverse_swap_keyframe_id||"").toString().trim(),h=(e.pixverse_swap_mask_id||"").toString().trim(),v=(e.pixverse_swap_img_url||"").toString().trim(),_=(e.pixverse_swap_img_id||"").toString().trim(),b=(c||u)&&Number(g)>0&&h&&(v||_);return t.jsxs("div",{className:"space-y-3.5",children:[t.jsx("div",{className:"rounded-lg bg-blue-50 dark:bg-blue-900/10 border border-blue-200/60 dark:border-blue-800/40 px-3 py-2 text-[11px] text-blue-700 dark:text-blue-300",children:f("Swap 需配合「抠图蒙版 mask/selection」接口:先用该接口选定关键帧与替换区域,拿到 keyframe_id 与 mask_id 后填入下方。")}),t.jsxs("div",{className:"border rounded-xl p-3 space-y-2 bg-muted/20",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:f("视频来源(二选一)")}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("源视频 ID(source_video_id)"),desc:f("PixVerse 生成的视频 ID(整数)")}),t.jsx(r,{value:e.pixverse_swap_source_video_id||"",onChange:e=>a("pixverse_swap_source_video_id",e),placeholder:f("如 343252978602905"),disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("上传视频 media_id(video_media_id)"),desc:f("通过上传接口获得(填写后将忽略 source_video_id)")}),t.jsx(r,{value:e.pixverse_swap_video_media_id||"",onChange:e=>a("pixverse_swap_video_media_id",e),placeholder:f("如 343252978602905"),disabled:l})]})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("关键帧编号(keyframe_id)"),desc:f("来自 mask/selection 接口,必填")}),t.jsx(r,{value:e.pixverse_swap_keyframe_id||"",onChange:e=>a("pixverse_swap_keyframe_id",e),placeholder:"1",disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Quality",desc:f("视频分辨率")}),t.jsx(x,{value:e.pixverse_swap_quality||"540p",onChange:e=>a("pixverse_swap_quality",e),disabled:l,className:"w-full",children:s.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("蒙版 mask_id"),desc:f("来自 mask/selection 接口返回的 mask_id,必填")}),t.jsx(r,{value:e.pixverse_swap_mask_id||"",onChange:e=>a("pixverse_swap_mask_id",e),placeholder:f("mask_id(字符串)"),disabled:l})]}),t.jsxs("div",{className:"border rounded-xl p-3 space-y-2 bg-muted/20",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:f("目标图片 img_id(二选一)")}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("上传图片 URL"),desc:f("填写后自动上传换取 img_id(推荐)")}),t.jsx(r,{value:e.pixverse_swap_img_url||"",onChange:e=>a("pixverse_swap_img_url",e),placeholder:"https://... 图片 URL",disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("已有 img_id"),desc:f("已通过上传接口换取的数字 img_id(填了 URL 则忽略此项)")}),t.jsx(r,{value:e.pixverse_swap_img_id||"",onChange:e=>a("pixverse_swap_img_id",e),placeholder:f("如 12345678"),disabled:l})]})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!b,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?v?"上传+生成中...":"生成中...":"生成替换视频")})]})}if("/openapi/v2/video/transition/generate"===Q){const s=(e.pixverse_trans_first_url||"").toString().trim(),c=(e.pixverse_trans_first_id||"").toString().trim(),g=(e.pixverse_trans_last_url||"").toString().trim(),h=(e.pixverse_trans_last_id||"").toString().trim(),v=(s||c)&&(g||h)&&e.prompt;return t.jsxs("div",{className:"space-y-3.5",children:[ae,t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"border rounded-xl p-3 space-y-2 bg-muted/20",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:f("首帧图片(二选一)")}),t.jsx(r,{value:e.pixverse_trans_first_url||"",onChange:e=>a("pixverse_trans_first_url",e),placeholder:"https://... 图片 URL",disabled:l}),t.jsx(r,{value:e.pixverse_trans_first_id||"",onChange:e=>a("pixverse_trans_first_id",e),placeholder:f("或已有 img_id"),disabled:l})]}),t.jsxs("div",{className:"border rounded-xl p-3 space-y-2 bg-muted/20",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:f("尾帧图片(二选一)")}),t.jsx(r,{value:e.pixverse_trans_last_url||"",onChange:e=>a("pixverse_trans_last_url",e),placeholder:"https://... 图片 URL",disabled:l}),t.jsx(r,{value:e.pixverse_trans_last_id||"",onChange:e=>a("pixverse_trans_last_id",e),placeholder:f("或已有 img_id"),disabled:l})]})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("视频描述"),desc:f("必填,描述转场内容")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:f("描述首尾帧之间的过渡..."),autosize:{minRows:3,maxRows:8},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Model"}),t.jsx(x,{value:e.pixverse_model||"v5",onChange:e=>a("pixverse_model",e),disabled:l,className:"w-full",children:Y.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Duration"}),t.jsx(x,{value:e.pixverse_duration||5,onChange:e=>a("pixverse_duration",e),disabled:l,className:"w-full",children:Z.map(e=>t.jsxs(x.Option,{value:e,children:[e,"s"]},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Quality"}),t.jsx(x,{value:e.pixverse_quality||"720p",onChange:e=>a("pixverse_quality",e),disabled:l,className:"w-full",children:X.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!v,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?s||g?"上传+生成中...":"生成中...":"生成转场视频")})]})}if("/openapi/v2/video/mimic/generate"===Q){const s=["360p","540p","720p"],c=(e.pixverse_mimic_
1source_video_id||"").toString().trim(),u=(e.pixverse_mimic_video_media_id||"").toString().trim(),g=(e.pixverse_mimic_img_url||"").toString().trim(),h=(e.pixverse_mimic_img_id||"").toString().trim(),v=(c||u)&&(g||h);return t.jsxs("div",{className:"space-y-3.5",children:[t.jsx("div",{className:"rounded-lg bg-blue-50 dark:bg-blue-900/10 border border-blue-200/60 dark:border-blue-800/40 px-3 py-2 text-[11px] text-blue-700 dark:text-blue-300",children:f("Mimic 动作模仿:源视频提供动作,主体图片提供形象,时长由源视频决定(无需填时长)。")}),t.jsxs("div",{className:"border rounded-xl p-3 space-y-2 bg-muted/20",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:f("源视频(二选一)")}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("源视频 ID(source_video_id)"),desc:f("PixVerse 生成的视频 ID(整数)")}),t.jsx(r,{value:e.pixverse_mimic_source_video_id||"",onChange:e=>a("pixverse_mimic_source_video_id",e),placeholder:f("如 343252978602905"),disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("上传视频 media_id(video_media_id)"),desc:f("填写后将忽略 source_video_id")}),t.jsx(r,{value:e.pixverse_mimic_video_media_id||"",onChange:e=>a("pixverse_mimic_video_media_id",e),placeholder:f("如 343252978602905"),disabled:l})]})]}),t.jsxs("div",{className:"border rounded-xl p-3 space-y-2 bg-muted/20",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:f("主体图片 img_id(二选一)")}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("上传图片 URL"),desc:f("填写后自动上传换取 img_id(推荐)")}),t.jsx(r,{value:e.pixverse_mimic_img_url||"",onChange:e=>a("pixverse_mimic_img_url",e),placeholder:"https://... 图片 URL",disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("已有 img_id"),desc:f("填了 URL 则忽略此项")}),t.jsx(r,{value:e.pixverse_mimic_img_id||"",onChange:e=>a("pixverse_mimic_img_id",e),placeholder:f("如 12345678"),disabled:l})]})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Quality",desc:f("视频分辨率")}),t.jsx(x,{value:e.pixverse_mimic_quality||"540p",onChange:e=>a("pixverse_mimic_quality",e),disabled:l,className:"w-full",children:s.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!v,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?g?"上传+生成中...":"生成中...":"生成模仿视频")})]})}if("/openapi/v2/video/restyle/generate"===Q){const s=["360p","540p","720p"],c=(e.pixverse_restyle_source_video_id||"").toString().trim(),g=(e.pixverse_restyle_video_media_id||"").toString().trim(),h=(e.pixverse_restyle_id||"").toString().trim(),v=(e.pixverse_restyle_prompt||"").toString().trim(),_=(c||g)&&(h||v);return t.jsxs("div",{className:"space-y-3.5",children:[t.jsx("div",{className:"rounded-lg bg-blue-50 dark:bg-blue-900/10 border border-blue-200/60 dark:border-blue-800/40 px-3 py-2 text-[11px] text-blue-700 dark:text-blue-300",children:f("Restyle 视频换风格:风格 ID 与风格描述二选一,时长由源视频决定(无需填时长)。")}),t.jsxs("div",{className:"border rounded-xl p-3 space-y-2 bg-muted/20",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:f("源视频(二选一)")}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("源视频 ID(source_video_id)"),desc:f("PixVerse 生成的视频 ID(整数)")}),t.jsx(r,{value:e.pixverse_restyle_source_video_id||"",onChange:e=>a("pixverse_restyle_source_video_id",e),placeholder:f("如 343252978602905"),disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("上传视频 media_id(video_media_id)"),desc:f("填写后将忽略 source_video_id")}),t.jsx(r,{value:e.pixverse_restyle_video_media_id||"",onChange:e=>a("pixverse_restyle_video_media_id",e),placeholder:f("如 343252978602905"),disabled:l})]})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("风格 ID(restyle_id)"),desc:f("与下方风格描述二选一")}),t.jsx(r,{value:e.pixverse_restyle_id||"",onChange:e=>a("pixverse_restyle_id",e),placeholder:f("如 123(整数)"),disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("风格描述(restyle_prompt)"),desc:f("未填 restyle_id 时必填")}),t.jsx(u,{value:e.pixverse_restyle_prompt||"",onChange:e=>a("pixverse_restyle_prompt",e),placeholder:f("如:吉卜力动画风格..."),autosize:{minRows:2,maxRows:6},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Quality",desc:f("可选,视频分辨率")}),t.jsx(x,{value:e.pixverse_restyle_quality||"540p",onChange:e=>a("pixverse_restyle_quality",e),disabled:l,className:"w-full",children:s.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!_,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?"生成中...":"生成换风格视频")})]})}if("/openapi/v2/video/multi_transition/generate"===Q){const s=["360p","540p","720p"],c=e.pixverse_mt_items||[{url:"",img_id:"",duration:5,prompt:""},{url:"",img_id:"",duration:"",prompt:""}],u=(e,s,t)=>{const i=c.map((a,i)=>i===e?{...a,[s]:t}:a);a("pixverse_mt_items",i)},g=()=>{c.length<7&&a("pixverse_mt_items",[...c,{url:"",img_id:"",duration:"",prompt:""}])},h=e=>{c.length>2&&a("pixverse_mt_items",c.filter((s,t)=>t!==e))},v=c.filter(e=>(e.url||"").toString().trim()||(e.img_id||"").toString().trim()).length>=2;return t.jsxs("div",{className:"space-y-3.5",children:[t.jsx("div",{className:"rounded-lg bg-blue-50 dark:bg-blue-900/10 border border-blue-200/60 dark:border-blue-800/40 px-3 py-2 text-[11px] text-blue-700 dark:text-blue-300",children:f("Multi-Transition 多帧拼接:2~7 个关键帧,每帧图片 URL 自动上传换 img_id;除最后一帧外都需填写该帧时长(秒)。")}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(Ns,{label:f("关键帧(2~7)")}),c.map((e,s)=>t.jsxs("div",{className:"border rounded-xl p-3 space-y-2 bg-muted/20",children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxs("span",{className:"text-xs font-medium text-muted-foreground",children:["#",s+1,s===c.length-1?f("(末帧,æ—
1¶é•¿å¯ç©ºï¼‰"):""]}),c.length>2&&t.jsxs("button",{onClick:()=>h(s),className:"text-xs text-destructive hover:text-destructive/80",children:["×",f("删除")]})]}),t.jsx(r,{value:e.url||"",onChange:e=>u(s,"url",e),placeholder:"https://... 图片 URL",disabled:l}),t.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[t.jsx(r,{value:e.img_id||"",onChange:e=>u(s,"img_id",e),placeholder:f("或已有 img_id"),disabled:l}),t.jsx(r,{value:e.duration??"",onChange:e=>u(s,"duration",e),placeholder:f("时长 秒"),disabled:l})]}),t.jsx(r,{value:e.prompt||"",onChange:e=>u(s,"prompt",e),placeholder:f("该帧描述(可选)"),disabled:l})]},s)),c.length<7&&t.jsxs(d,{onClick:g,size:"small",theme:"borderless",disabled:l,children:["+ ",f("添加关键帧")]})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Model",desc:f("仅支持 v3.5/v4/v4.5/v5")}),t.jsx(x,{value:e.pixverse_mt_model||"v5",onChange:e=>a("pixverse_mt_model",e),disabled:l,className:"w-full",children:ee.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"Quality"}),t.jsx(x,{value:e.pixverse_mt_quality||"540p",onChange:e=>a("pixverse_mt_quality",e),disabled:l,className:"w-full",children:s.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!v,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?"上传+生成中...":"生成拼接视频")})]})}if("/ent/v2/start-end2video"===H){const s=["viduq3-pro","viduq3-turbo","viduq2","viduq1"];return t.jsxs("div",{className:"space-y-3.5",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("视频描述"),desc:f("描述首帧到尾帧之间的视频内容和过渡效果")}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:f("采蘑菇的小姑娘,上山采蘑菇,遇到了比自己还大的蘑菇"),autosize:{minRows:3,maxRows:8},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("首帧图 URL"),desc:f("视频第一帧的图片")}),t.jsx(r,{value:e.vidu_start_frame||"",onChange:e=>a("vidu_start_frame",e),placeholder:"https://...",disabled:l})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("尾帧图 URL"),desc:f("视频最后一帧的图片")}),t.jsx(r,{value:e.vidu_end_frame||"",onChange:e=>a("vidu_end_frame",e),placeholder:"https://...",disabled:l})]})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("模型")}),t.jsx(x,{value:e.vidu_se_model||"viduq3-pro",onChange:e=>a("vidu_se_model",e),disabled:l,className:"w-full",children:s.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("时长(秒)")}),t.jsx(x,{value:String(e.vidu_se_duration||"5"),onChange:e=>a("vidu_se_duration",Number(e)),disabled:l,className:"w-full",children:["4","5","8","10","16"].map(e=>t.jsxs(x.Option,{value:e,children:[e,"s"]},e))})]})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("分辨率"),desc:"resolution"}),t.jsx(x,{value:e.vidu_se_res||"720p",onChange:e=>a("vidu_se_res",e),disabled:l,className:"w-full",children:["360p","720p","1080p"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("运动幅度"),desc:"movement_amplitude"}),t.jsx(x,{value:e.vidu_se_movement||"auto",onChange:e=>a("vidu_se_movement",e),disabled:l,className:"w-full",children:["auto","small","medium","large"].map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n||!e.prompt||!e.vidu_start_frame||!e.vidu_end_frame,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?"生成中...":"生成视频")})]})}return t.jsxs("div",{className:"space-y-3.5",children:[k&&!j&&!y&&t.jsx("div",{className:"flex rounded-xl border border-border overflow-hidden",children:N.map(e=>{const s=zs[e]||{label:e,desc:e};return t.jsxs("button",{onClick:()=>U(e),className:"flex-1 py-2 text-xs font-medium transition-colors "+(P===e?"bg-primary text-primary-foreground":"bg-muted/30 text-muted-foreground hover:text-foreground"),children:[f(s.label),t.jsx("span",{className:"block text-[10px] font-mono opacity-70",children:s.desc})]},e)})}),y&&b.modes.length>1&&t.jsx("div",{className:"flex rounded-xl border border-border overflow-hidden",children:b.modes.map(e=>{const s=zs[e]||{label:e,desc:e};return t.jsxs("button",{onClick:()=>U(e),className:"flex-1 py-2 text-xs font-medium transition-colors "+(P===e?"bg-primary text-primary-foreground":"bg-muted/30 text-muted-foreground hover:text-foreground"),children:[f(s.label),t.jsx("span",{className:"block text-[10px] font-mono opacity-70",children:s.desc})]},e)})}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("视频描述"),desc:B}),t.jsx(u,{value:e.prompt,onChange:e=>a("prompt",e),placeholder:f("描述要生成的视频内容..."),autosize:{minRows:4,maxRows:8},disabled:l,style:{fontFamily:"inherit",fontSize:14}})]}),"image2video"===P&&!j&&t.jsx(ws,{value:e.image_url||"",onChange:e=>
1a("image_url",e),label:f("参考图片(起始帧)"),desc:f("作为视频起始帧的图片,上传后自动获取图床 URL"),placeholder:"https://...",disabled:l}),"firstlast"===P&&!y&&!j&&t.jsxs("div",{className:"space-y-2",children:[t.jsx(ws,{value:e.vidu_start_frame||"",onChange:e=>a("vidu_start_frame",e),label:f("首帧图片"),desc:f("作为视频第一帧的图片,上传后自动获取图床 URL"),placeholder:"https://...",disabled:l}),t.jsx(ws,{value:e.vidu_end_frame||"",onChange:e=>a("vidu_end_frame",e),label:f("尾帧图片"),desc:f("作为视频最后一帧的图片,分辨率需与首帧相近(比例 0.8~1.25)"),placeholder:"https://...",disabled:l})]}),"reference2video"===P&&!y&&!j&&t.jsx(Ss,{value:e.vidu_ref_images||[],onChange:e=>a("vidu_ref_images",e),label:f("参考图片(1-7 张)"),desc:f("模型以图中主体为参考生成视频,保持主体一致"),max:7,disabled:l}),"i2v"===j&&t.jsx(ws,{value:e.image_url||"",onChange:e=>a("image_url",e),label:f("起始帧图片(必填)"),desc:f("作为视频起始帧的图片,上传后自动获取图床 URL"),placeholder:"https://...",disabled:l}),"r2v"===j&&t.jsxs("div",{className:"space-y-2",children:[t.jsx(Ns,{label:f("参考图片({{count}}/{{max}})",{count:D.length,max:L}),desc:f("上传 1~{{max}} 张参考图,prompt 中可用 [Image 1]、[Image 2] 指代",{max:L})}),D.map((e,s)=>t.jsxs("div",{className:"flex items-center gap-2 p-2 rounded-xl border border-border bg-muted/20",children:[t.jsx("img",{src:e,alt:f("参考图 {{n}}",{n:s+1}),className:"w-14 h-14 object-cover rounded-lg flex-shrink-0 border border-border"}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsx("p",{className:"text-xs font-medium text-foreground/70 mb-0.5",children:f("参考图 {{n}}",{n:s+1})}),t.jsx("p",{className:"text-[11px] text-muted-foreground truncate font-mono",children:e.startsWith("data:")?f("[base64 图片]"):e})]}),t.jsx("button",{onClick:()=>V(s),className:"flex-shrink-0 w-6 h-6 rounded-full bg-muted hover:bg-red-100 hover:text-red-500 flex items-center justify-center transition-colors",children:t.jsx(q,{size:12})})]},s)),D.length<L&&t.jsx(ws,{value:"",onChange:G,label:f("添加参考图 {{n}}",{n:D.length+1}),desc:f("点击或拖拽上传图片,上传后自动追加到列表"),placeholder:"https://...",disabled:l})]}),y&&"firstlast"===P&&t.jsxs("div",{className:"space-y-2",children:[t.jsx(Ns,{label:f("首尾帧图片({{count}}/{{max}})",{count:D.length,max:L}),desc:f("上传 1-2 张图片:首帧(第1张)→ 尾帧(第2张),生成平滑过渡视频")}),D.map((e,s)=>t.jsxs("div",{className:"flex items-center gap-2 p-2 rounded-xl border border-border bg-muted/20",children:[t.jsx("img",{src:e,alt:f(0===s?"首帧":"尾帧"),className:"w-14 h-14 object-cover rounded-lg flex-shrink-0 border border-border"}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsx("p",{className:"text-xs font-medium text-foreground/70 mb-0.5",children:f(0===s?"首帧图片":"尾帧图片")}),t.jsx("p",{className:"text-[11px] text-muted-foreground truncate font-mono",children:e.startsWith("data:")?f("[base64 图片]"):e})]}),t.jsx("button",{onClick:()=>V(s),className:"flex-shrink-0 w-6 h-6 rounded-full bg-muted hover:bg-red-100 hover:text-red-500 flex items-center justify-center transition-colors",children:t.jsx(q,{size:12})})]},s)),D.length<L&&t.jsx(ws,{value:"",onChange:G,label:f(0===D.length?"添加首帧图片(必填)":"添加尾帧图片(可选)"),desc:f("上传后自动追加到列表"),placeholder:"https://...",disabled:l})]}),y&&"image2video"===P&&t.jsxs("div",{className:"space-y-2",children:[t.jsx(Ns,{label:f("参考图片({{count}}/{{max}})",{count:D.length,max:L}),desc:f("上传 1-3 张参考图,模型将融合图片的主体与风格生成视频")}),D.map((e,s)=>t.jsxs("div",{className:"flex items-center gap-2 p-2 rounded-xl border border-border bg-muted/20",children:[t.jsx("img",{src:e,alt:f("参考图 {{n}}",{n:s+1}),className:"w-14 h-14 object-cover rounded-lg flex-shrink-0 border border-border"}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsx("p",{className:"text-xs font-medium text-foreground
1/70 mb-0.5",children:f("参考图 {{n}}",{n:s+1})}),t.jsx("p",{className:"text-[11px] text-muted-foreground truncate font-mono",children:e.startsWith("data:")?f("[base64 图片]"):e})]}),t.jsx("button",{onClick:()=>V(s),className:"flex-shrink-0 w-6 h-6 rounded-full bg-muted hover:bg-red-100 hover:text-red-500 flex items-center justify-center transition-colors",children:t.jsx(q,{size:12})})]},s)),D.length<L&&t.jsx(ws,{value:"",onChange:G,label:f("添加参考图 {{n}}",{n:D.length+1}),desc:f("点击或拖拽上传图片,上传后自动追加到列表"),placeholder:"https://...",disabled:l})]}),y&&"video_edit"===P&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("参考视频(必填)"),desc:f("待编辑的视频,传公网 URL 或 dataURI")}),t.jsx(r,{value:e.omni_input_reference||"",onChange:e=>a("omni_input_reference",e),placeholder:"https://example.com/input.mp4",disabled:l})]}),w&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("输入视频 URL(必填)"),desc:f("需为公网可访问的 HTTP/HTTPS 视频链接")}),t.jsx(r,{value:e.video_url||"",onChange:e=>a("video_url",e),placeholder:"https://example.com/input.mp4",disabled:l})]}),t.jsx(ws,{value:e.image_url||"",onChange:e=>a("image_url",e),label:f("参考图片(可选)"),desc:f("作为视频编辑的参考图片,上传后自动获取图床 URL"),placeholder:"https://...",disabled:l})]}),t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[z&&z.length>0&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("分辨率"),desc:f("视频输出尺寸")}),t.jsx(x,{value:$,onChange:s=>{a("size",s);const t=O?.[s];t?.length&&!t.includes(e.duration)&&a("duration",t[0])},disabled:l,className:"w-full",children:z.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),I&&I.length>0&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("宽高比"),desc:f("视频画面宽高比例")}),t.jsx(x,{value:E,onChange:e=>a("aspect_ratio",e),disabled:l,className:"w-full",children:I.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]}),M&&M.length>0&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("时长(秒)"),desc:f("视频时长,最长 {{max}} 秒",{max:Math.max(...M)})}),t.jsx(x,{value:A,onChange:e=>a("duration",e),disabled:l,className:"w-full",children:M.map(e=>t.jsx(x.Option,{value:e,children:0===e?f("自动"):f("{{n}} 秒",{n:e})},e))})]})]}),y&&(b.supportsEnableUpsample||b.supportsEnableSample)&&t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[b.supportsEnableUpsample&&t.jsxs("div",{className:"flex items-center justify-between rounded-xl border border-border px-3 py-2.5",children:[t.jsxs("div",{children:[t.jsx("span",{className:"text-xs font-semibold text-foreground/70",children:f("升级至 1080p")}),t.jsx("span",{className:"block text-[10px] text-muted-foreground font-mono",children:"enable_upsample"})]}),t.jsx(h,{checked:!0===e.omni_enable_upsample,onChange:e=>a("omni_enable_upsample",e),disabled:l,size:"small"})]}),b.supportsEnableSample&&t.jsxs("div",{className:"flex items-center justify-between rounded-xl border border-border px-3 py-2.5",children:[t.jsxs("div",{children:[t.jsx("span",{className:"text-xs font-semibold text-foreground/70",children:f("1080p 采样")}),t.jsx("span",{className:"block text-[10px] text-muted-foreground font-mono",children:"enable_sample"})]}),t.jsx(h,{checked:!0===e.omni_enable_sample,onChange:e=>a("omni_enable_sample",e),disabled:l,size:"small"})]})]}),(b.supportsPromptOptimizer||b.supportsFastPretreatment||b.supportsAigcWatermark||b.supportsCallbackUrl||b.supportsParameterWatermark||b.audioSettings?.length)&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[b.supportsParameterWatermark&&t.jsxs("div",{className:"flex items-center justify-between rounded-xl border border-border px-3 py-2.5",children:[t.jsx("span",{className:"text-xs font-semibold text-foreground/70",children:"watermark"}),t.jsx(h,{checked:!1!==e.bailian_watermark,onChange:e=>a("bailian_watermark",e),disabled:l,size:"small"})]}),b.supportsPromptOptimizer&&t.jsxs("div",{className:"flex items-center justify-between rounded-xl border border-border px-3 py-2.5",children:[t.jsx("span",{className:"text-xs font-semibold text-foreground
1/70",children:"prompt_optimizer"}),t.jsx(h,{checked:!1!==e.prompt_optimizer,onChange:e=>a("prompt_optimizer",e),disabled:l,size:"small"})]}),b.supportsFastPretreatment&&t.jsxs("div",{className:"flex items-center justify-between rounded-xl border border-border px-3 py-2.5",children:[t.jsx("span",{className:"text-xs font-semibold text-foreground/70",children:"fast_pretreatment"}),t.jsx(h,{checked:!0===e.fast_pretreatment,onChange:e=>a("fast_pretreatment",e),disabled:l,size:"small"})]}),b.supportsAigcWatermark&&t.jsxs("div",{className:"flex items-center justify-between rounded-xl border border-border px-3 py-2.5",children:[t.jsx("span",{className:"text-xs font-semibold text-foreground/70",children:"aigc_watermark"}),t.jsx(h,{checked:!0===e.aigc_watermark,onChange:e=>a("aigc_watermark",e),disabled:l,size:"small"})]}),b.audioSettings?.length>0&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"audio_setting",desc:f("auto 自动控制;origin 保留输入视频原声")}),t.jsx(x,{value:e.audio_setting||b.audioSettings[0],onChange:e=>a("audio_setting",e),disabled:l,className:"w-full",children:b.audioSettings.map(e=>t.jsx(x.Option,{value:e,children:e},e))})]})]}),b.supportsCallbackUrl&&t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:"callback_url",desc:f("接收任务状态更新通知的公网回调地址(可选)")}),t.jsx(r,{value:e.callback_url||"",onChange:e=>a("callback_url",e),placeholder:"https://example.com/video/callback",disabled:l})]})]}),"tencentvod"===b.pollMode&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("负向提示词(可选)"),desc:"negative_prompt"}),t.jsx(u,{value:e.tvod_negative_prompt||"",onChange:e=>a("tvod_negative_prompt",e),placeholder:f("不希望出现的内容..."),autosize:{minRows:1,maxRows:3},disabled:l,style:{fontSize:14}})]}),t.jsxs("div",{className:"flex items-center justify-between rounded-xl border border-border px-3 py-2.5",children:[t.jsxs("div",{children:[t.jsx("span",{className:"text-xs font-semibold text-foreground/70",children:f("提示词增强")}),t.jsx("span",{className:"block text-[10px] text-muted-foreground font-mono",children:"enhance_prompt"})]}),t.jsx(h,{checked:!0===e.tvod_enhance_prompt,onChange:e=>a("tvod_enhance_prompt",e),disabled:l,size:"small"})]}),"image2video"===P&&t.jsx(ws,{value:e.tvod_last_frame_url||"",onChange:e=>a("tvod_last_frame_url",e),label:f("尾帧图片(可选)"),desc:f("图生视频时作为结束帧,last_frame_url"),placeholder:"https://...",disabled:l})]}),("/kling/v1/videos/text2video"===K||"/kling/v1/videos/image2video"===K)&&t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("负向提示词(可选)"),desc:"negative_prompt"}),t.jsx(u,{value:e.kling_negative_prompt||"",onChange:e=>a("kling_negative_prompt",e),placeholder:f("不希望出现的内容..."),autosize:{minRows:1,maxRows:3},disabled:l,style:{fontSize:14}})]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(Ns,{label:f("生成自由度(cfg_scale)"),desc:f("0~1,越大越贴合提示词")}),t.jsx(r,{type:"number",value:e.kling_cfg_scale??"",onChange:e=>a("kling_cfg_scale",""===e?"":Number(e)),placeholder:"0.5",min:0,max:1,step:.1,disabled:l})]})]}),t.jsxs("div",{className:"flex items-start gap-1.5 text-[11px] text-amber-600 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/10 rounded-lg px-3 py-2",children:[t.jsx(F,{size:11,className:"mt-0.5 flex-shrink-0"}),t.jsxs("span",{children:[f("视频生成为异步任务"),":",f("提交后获得 task_id,需轮询")," ",t.jsx("code",{className:"font-mono",children:"minimax"===b.pollMode?"/minimax/v1/query/video_generation?task_id={task_id}":"openai-video"===b.pollMode?"/v1/videos/{id}":"omni"===b.pollMode||"veo"===b.pollMode?"/v1/video/query?id={id}":b.bailianMode?"/alibailian/tasks/{task_id}":"/v1/video/create"===g?"/v1/video/query?id={id}":"/v1/video/tasks/{task_id}"})," ","minimax"===b.pollMode?f("直到 status = Success。端点:"):"openai-video"===b.pollMode||"omni"===b.pollMode||"veo"===b.pollMode?f("直到 status = completed。端点:"):b.bailianMode?f("直到 task_status = SUCCEEDED。端点:"):f("/v1/video/create"===g?"直到 status = completed。端点:":"直到 status = succeeded。端点:"),t.jsx("code",{className:"font-mono",children:g||b.endpoint})]})]}),t.jsx(Cs,{routingPreview:m,previewLoading:p}),t.jsx(d,{onClick:i,type:"primary",theme:"solid",size:"large",block:!0,disabled:l||n,style:{borderRadius:12,height:44},icon:n?t.jsx(o,{size:"small"}):t.jsx(R,{size:15}),children:f(n?"提交中...":"提交任务")})]})},yt={prompt:De.video[0],size:"",aspect_ratio:"16:9",duration:5,mode:"text2video",bailian_watermark:!0,audio_setting:"auto",prompt_optimizer:!0,fast_pretreatment:!1,aigc_watermark:!1,callback_url:"",image_url:"",ref_images:[],omni_input_reference:"",omni_enable_upsample:!1,omni_enable_sample:!1};function kt({selectedModel:e,modelType:a,tokens:r,selectedTokenId:o,setSelectedTokenId:n,routingMode:l,setRoutingMode:d,selectedGroup:m,routingPreview:x,previewLoading:g,modelPreset:h,labEndpointMap:v,activeTab:f}){const{t:b}=_(),[j]=i(),[y,k]=s.useState(yt),[N,w]=s.useState("form"),[S,C]=s.useState(""),[T,P]=s.useState(!1),z=s.useRef(x);s.useEffect(()=>{z.current=x},[x]);const{running:I,rawText:$,jsonData:O,streamChunks:M,imageUrl:A,videoUrl:E,audioUrl:U,error:D,logRefreshKey:F,doRun:q}=Xs(),L=ke[e]?[]:(e=>{const s=(e=>{const s=new Set;for(const t of Object.values(e||{})){if("string"!=typeof t)continue;const e=te(t);Us[e]&&s.add(e)}return Object.keys(Us).filter(e=>s.has(e)).map(e=>({path:e,...Us[e]}))})(e);if(s.length)return s;const t=[];for(const a of Object.values(e||{})){if("string"!=typeof a)continue;const e=te(a),s=Os(e);s&&!t.some(s=>s.path===e)&&t.push({path:e,...s})}return t.sort((e,s)=>(s.primary?1:0)-(e.primary?1:0))})(h?.endpoint_configs),G=ke[e]?null:Ds(h?.endpoint_configs,y.pixverse_endpoint,e),B=s.useRef(e);s.useEffect(()=>{B.current!==e&&(B.current=e,k(e=>({...e,prompt:De.video[0],image_url:"",video_url:"",ref_images:[],omni_input_reference:"",omni_enable_upsample:!1,omni_enable_sample:!1,pixverse_endpoint:"",kling_turbo_callback_url:"",kling_turbo_external_task_id:""})))},[e]),s.useEffect(()=>{if(h&&(h.preset_prompt&&k(e=>({...e,prompt:!e.prompt||De.video.includes(e.prompt)?h.preset_prompt:e.prompt})),h.preset_image)){const s=ke[e]||ke._default;k("r2v"===s?.bailianMode?e=>({...e,ref_images:e.ref_images&&e.ref_images.length>0?e.ref_images:[h.preset_image]}):e=>({...e,image_url:e.image_url||h.preset_image}))}},[h,e]);const K=s.useCallback(()=>{try{const s=qs(e,l),t=Ws({selectedModel:e,modelStr:s,selectedGroup:m,routingMode:l,videoParams:y,modelPreset:h,t:b});return t?.error&&!t.body?`// ${t.error}
1`:JSON.stringify(t.body??{},null,2)}catch(s){return"{}"}},[e,l,m,y,h,b]),J=s.useCallback(e=>{try{const s=JSON.parse(e),t=s.settings||{},a=s.options||{},i=Array.isArray(s.contents)?s.contents.find(e=>"prompt"===e?.type)?.text||s.contents.find(e=>"prompt"===e?.type)?.prompt:void 0,r=Array.isArray(s.contents)?s.contents.find(e=>"first_frame"===e?.type)?.url||s.contents.find(e=>"first_frame"===e?.type)?.first_frame?.url:void 0;return k(e=>({...e,prompt:s.prompt??i??e.prompt,size:t.resolution??s.size??e.size,aspect_ratio:t.aspect_ratio??s.aspect_ratio??e.aspect_ratio,duration:t.duration??s.duration??e.duration,image_url:r??s.image_url??e.image_url,kling_turbo_callback_url:a.callback_url??e.kling_turbo_callback_url,kling_turbo_external_task_id:a.external_task_id??e.kling_turbo_external_task_id})),!0}catch(s){return!1}},[]),W=s.useCallback(e=>{if("json"===e)C(K());else if("form"===e&&"json"===N){const e=(S||"").trim();(e.startsWith("{")||e.startsWith("["))&&(J(S)||c.error("JSON 格式错误,参数未能回填"))}w(e)},[N,K,J,S]),Q=s.useCallback(()=>{const s=r.find(e=>String(e.id)===String(o))?.key||"";if(!s)return;let t;if("json"===N){const e=(S||"").trim();if(!e||e.startsWith("//"))return void c.warning(b("请求体 JSON 为空或无效"));try{t=JSON.parse(e)}catch(i){return void c.error(b("JSON 格式错误,请检查后再运行"))}}q({selectedModel:e,modelStr:l?`${e}${{price:":floor",speed:":nitro",success_rate:":stable"}[l]||""}`:e,headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json"},tokenKey:s,selectedGroup:m,routingMode:l,modelType:a,videoParams:y,isChatPanel:!1,modelPreset:h,routingPreviewRef:z,rawBody:t})},[o,r,e,l,m,a,y,h,q,N,S,b]),Y=s.useCallback(()=>{if(!o)return void(0===r.length?p.confirm({title:"请先登录",content:"您需要登录后才能使用模型体验功能。",okText:"去登录",cancelText:"取消",onOk:()=>{window.location.href=`/login?redirect=${encodeURIComponent(window.location.pathname+window.location.search)}`}}):c.warning(b("请先选择令牌")));const s=ke[e]||ke._default;if("json"===N);else if(!ke[e]&&G);else{if(!y.prompt?.trim())return void c.warning(b("请输入 prompt"));if("i2v"===s?.bailianMode&&!y.image_url)return void c.warning(b("请先上传起始帧图片"));if("r2v"===s?.bailianMode&&!(y.ref_images||[]).length)return void c.warning(b("请先上传参考图片"));if("video-edit"===s?.bailianMode&&!y.video_url)return void c.warning(b("请输入视频 URL"));if("omni"===s?.pollMode&&"video_edit"===Rs(s,y.mode)&&!y.omni_input_reference)return void c.warning(b("请提供参考视频 URL(input_reference)"));if("omni"===s?.pollMode&&"firstlast"===Rs(s,y.mode)&&!(y.ref_images||[]).length)return void c.warning(b("请至少上传一张首帧图片"));if("omni"===s?.pollMode&&"image2video"===Rs(s,y.mode)&&!(y.ref_images||[]).length)return void c.warning(b("请先上传参考图片"));if(!s?.bailianMode&&"omni"!==s?.pollMode&&"image2video"===Rs(s,y.mode)&&!y.image_url)return void c.warning(b("请先上传参考图片"))}if(x?.warning){const e=x.estimated_group||"-",s=null!=x.estimated_price_per_1k?`¥${Number(x.estimated_price_per_1k).toFixed(4)}`:"-",t=null!=x.price_multiplier?`${Number(x.price_multiplier).toFixed(1)}x`:"";return void p.confirm({title:b("价格提醒"),content:b("当前路由预计选中渠道所在分组 {{group}},每千 token 约 {{price}}(约为默认价格的 {{multiplier}}),是否继续生成?",{group:e,price:s,multiplier:t}),okText:b("确认生成"),cancelText:b("取消"),centered:!0,onOk:Q})}Q()},[o,r,e,y,x,Q,G,N,b]),X=y.prompt,Z="undefined"!=typeof window?window.location.origin:"",ee=(j.get("etypes")||"").split(",").filter(Boolean),se=ke[e]||ke._default,ae=(()=>{for(const s of ee){const t=v?.[s];if(t?.path)return cs(t.path,e)}return se?.endpoint||"/v1/video/generations"})(),ie=(()=>{const e=te(G||"");return e.startsWith("/v1/videos/")?"/v1/videos/{id}":ps(e)?`${e}/{task_id}`:"doubao"===se?.pollMode?"/volc/v1/contents/generations/tasks/{task_id}":"veo"===se?.pollMode||"omni"===se?.pollMode?"/v1/video/query?id={id}":"minimax"===se?.pollMode?"/minimax/v1/query/video_generation?task_id={task_id}":se?.bailianMode?"/alibailian/tasks/{task_id}":"/v1/video/tasks/{task_id}"})(),re=(()=>{try{const s=qs(e,l);return Ws({selectedModel:e,modelStr:s,selectedGroup:m,routingMode:l,videoParams:y,modelPreset:h,t:b})}catch(s){return{}}})(),oe=re&&re.endpoint||ae;return t.jsxs(t.Fragment,{children:["playground"===f&&t.jsxs("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-6 space-y-4",children:[t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-5 items-stretch",children:[t.jsx("div",{className:"flex flex-col",children:t.jsxs("div",{className:"flex-1 rounded-2xl border border-border bg-background shadow-sm overflow-hidden flex flex-col",children:[t.jsxs("div",{className:"flex items-center justify-between px-5 py-3 border-b border-border bg-muted/20",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-xs font-semibold text-foreground
1/60 tracking-widest uppercase",children:"Input"}),t.jsx("div",{className:"flex items-center rounded-md border border-border overflow-hidden text-[11px]",children:["form","json"].map(e=>t.jsx("button",{type:"button",onClick:()=>W(e),className:"px-2.5 py-0.5 font-medium transition-colors",style:{background:N===e?"hsl(var(--foreground) / 0.08)":"transparent",color:N===e?"hsl(var(--foreground))":"hsl(var(--foreground) / 0.45)"},children:"form"===e?"Form":"JSON"},e))})]}),t.jsxs("button",{type:"button",onClick:()=>P(!0),className:"flex items-center gap-1.5 px-3 py-1.5 rounded-lg border transition-all text-xs font-medium",style:{background:o?"hsl(var(--primary) / 0.06)":"hsl(var(--muted))",borderColor:o?"hsl(var(--primary) / 0.25)":"hsl(var(--border))",color:o?"hsl(var(--primary))":"hsl(var(--foreground) / 0.60)"},children:[t.jsx(H,{size:11}),b("路由选择"),l&&(()=>{const e=Re.find(e=>e.id===l);return e?t.jsx("span",{className:"ml-1",children:e.emoji}):null})()]})]}),t.jsx(ot,{visible:T,onClose:()=>P(!1),tokens:r,selectedTokenId:o,onTokenChange:n,routingMode:l,onRoutingModeChange:d}),t.jsxs("div",{className:"p-5 space-y-5 flex-1",children:["json"===N&&t.jsxs("div",{className:"space-y-2",children:[t.jsx("p",{className:"text-[11px] text-muted-foreground",children:b("直接编辑请求体 JSON,切换回 Form 时将自动回填表单字段。")}),t.jsxs("div",{className:"relative rounded-xl overflow-hidden border border-border",children:[t.jsx("div",{className:"absolute top-2 right-2 z-10",children:t.jsx("button",{type:"button",onClick:()=>{C(K())},className:"text-[10px] px-2 py-0.5 rounded border border-border bg-background text-muted-foreground hover:text-foreground transition-colors",children:b("重置")})}),t.jsx(u,{value:S,onChange:C,disabled:I,autosize:{minRows:14,maxRows:30},style:{fontFamily:"monospace",fontSize:12,borderRadius:0,border:"none"}})]})]}),t.jsx("div",{style:{display:"form"===N?void 0:"none"},children:t.jsx(jt,{params:y,onChange:(e,s)=>k(t=>({...t,[e]:s})),onRun:Y,running:I,disabled:!o||I,model:e,routingPreview:x,previewLoading:g,presetEndpoint:G,pixverseVideoEndpoints:L})})]}),"json"===N&&t.jsx("div",{className:"px-5 pb-5",children:t.jsx("button",{type:"button",onClick:Y,disabled:!o||I,className:"w-full flex items-center justify-center gap-2 py-2.5 rounded-xl font-semibold text-sm transition-all disabled:opacity-50 disabled:cursor-not-allowed",style:{background:"hsl(var(--primary))",color:"#fff"},children:I?t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"w-4 h-4 border-2 border-white/30 border-t-white rounded-full animate-spin"}),b("生成中...")]}):t.jsxs(t.Fragment,{children:[t.jsx(R,{size:14}),b("Run")]})})})]})}),t.jsx("div",{className:"flex flex-col",children:t.jsxs("div",{className:"flex-1 rounded-2xl border border-border bg-background shadow-sm overflow-hidden flex flex-col",style:{minHeight:480},children:[t.jsxs("div",{className:"flex items-center px-5 py-3 border-b border-border bg-muted/20",children:[t.jsx("span",{className:"text-xs font-semibold text-foreground/60 tracking-widest uppercase",children:"Output"}),t.jsxs("span",{className:"ml-auto flex items-center gap-2",children:[E&&!I&&t.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-green-50 dark:bg-green-900/20 text-green-600 dark:text-green-400 text-xs",children:[t.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-500"}),b("完成")]}),I&&t.jsxs("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400 text-xs",children:[t.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-blue-500 animate-pulse"}),b("生成中")]})]})]}),t.jsx(rt,{rawText:$,jsonData:O,streamChunks:M,imageUrl:A,videoUrl:E,audioUrl:U,loading:I,error:D,presetOutput:h?.example_output?(()=>{const e=h.example_output_type||"text";return"image"===e?{type:"image_url",url:h.example_output}:"video"===e?{type:"video_url",url:h.example_output}:h.example_output})():Ue})]})})]}),h?.detail_image&&(()=>{const s=h.detail_image.split(",").map(e=>
1e.trim()).filter(Boolean);return s.length?t.jsxs("div",{className:"space-y-3",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-xs font-semibold text-foreground/50 tracking-widest uppercase",children:b("模型详情")}),t.jsx("div",{className:"flex-1 h-px bg-border/60"})]}),t.jsx("div",{className:"grid gap-3 "+(1===s.length?"grid-cols-1":"grid-cols-1 md:grid-cols-2"),children:s.map((s,a)=>t.jsx("div",{className:"rounded-2xl overflow-hidden border border-border bg-muted/20",children:t.jsx("img",{src:s,alt:`${e} detail ${a+1}`,className:"w-full h-auto object-cover",onError:e=>{e.currentTarget.parentElement.style.display="none"}})},a))})]}):null})()]}),"examples"===f&&t.jsx("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-8",children:t.jsxs("div",{className:"max-w-4xl space-y-6",children:[t.jsxs("div",{children:[t.jsx("h2",{className:"text-lg font-semibold",children:b("代码示例")}),t.jsxs("p",{className:"text-sm text-muted-foreground mt-1",children:[b("视频生成为异步任务"),":",b("先提交任务获得")," ",t.jsx("code",{className:"text-xs font-mono bg-muted rounded px-1 py-0.5 text-primary",children:"task_id"}),",",b("再轮询对应端点直到状态终态(succeeded / completed / SUCCESS 等,因厂商而异)。下方表格列出所有支持模型的端点。")]})]}),t.jsx(ds,{model:e,prompt:X,routingMode:l,group:m,type:a,format:null,videoMode:y.mode,request:{endpoint:oe,method:"POST",body:re?.body||{},async:!0,pollPath:ie,label:b("视频任务提交(提交任务)")}})]})}),"api"===f&&(()=>{const s=[{method:"POST",url:`${Z}${oe}`,label:b("Video Task Submit(提交任务)"),badge:b("异步任务")},{method:"GET",url:`${Z}${ie}`,label:b("Video Task Poll(轮询结果)"),badge:b("轮询")}],a='"prompt": "..."',i=`"model": "${e}"`,r=({title:e,children:s})=>t.jsxs("div",{className:"rounded-2xl border border-border overflow-hidden",children:[t.jsx("div",{className:"bg-muted/30 px-5 py-3 border-b border-border",children:t.jsx("span",{className:"text-xs font-semibold text-foreground/60 tracking-widest uppercase",children:e})}),t.jsx("div",{className:"p-5",children:s})]}),o=({children:e,color:s})=>t.jsx("code",{className:`block text-sm font-mono bg-muted/40 border border-border rounded-lg px-3 py-2 break-all ${s||"text-foreground"}`,children:e}),n=({text:e,color:s="#6366f1"})=>t.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded-full",style:{background:`${s}15`,color:s,border:`1px solid ${s}30`},children:e});return t.jsx("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-8",children:t.jsxs("div",{className:"max-w-4xl space-y-5",children:[t.jsxs("div",{children:[t.jsx("h2",{className:"text-lg font-semibold",children:b("API 接口说明")}),t.jsxs("p",{className:"text-sm text-muted-foreground mt-1",children:[b("当前模型:"),t.jsx("code",{className:"text-xs font-mono bg-muted rounded px-1",children:e})]})]}),t.jsx(r,{title:"Endpoint",children:t.jsxs("div",{className:"space-y-3",children:[s.map((e,s)=>t.jsxs("div",{className:"space-y-1.5",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[11px] font-mono font-bold text-emerald-600 bg-emerald-50 dark:bg-emerald-900/20 px-1.5 py-0.5 rounded",children:e.method}),t.jsx("span",{className:"text-xs text-muted-foreground",children:e.label}),t.jsx(n,{text:e.badge,color:"#6366f1"})]}),t.jsx(o,{color:"text-primary",children:e.url})]},s)),t.jsxs("div",{className:"pt-1 space-y-1.5",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:"Authentication"}),t.jsx(o,{children:"Authorization: Bearer <your-token>"})]})]})}),t.jsx(r,{title:b("① 路由控制 — 模型名后缀(推荐)"),children:t.jsxs("div",{className:"space-y-4",children:[t.jsxs("p",{className:"text-sm text-muted-foreground",children:[b("在模型名末尾追加")," ",t.jsx("code",{className:"font-mono bg-muted rounded px-1",children:":suffix"}),",",b("适用于所有接口(图像生成、视频任务),任何标准客户端均可直接使用。")]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx("p",{className:"text-xs text-muted-foreground",children:b("示例")}),t.jsx(o,{color:"text-primary",children:`{ "model": "${e}:floor", ${a} }`}),t.jsx(o,{color:"text-primary",children:`{ "model": "${e}:nitro", ${a} }`})]})]})}),t.jsx(r,{title:b("② 路由控制 — provider.sort 字段"),children:t.jsxs("div",{className:"space-y-4",children:[t.jsxs("p",{className:"text-sm text-muted-foreground",children:[b("在请求体中添加")," ",t.jsx("code",{className:"font-mono bg-muted rounded px-1",children:"provider.sort"})," ",b("字段,适合需要在代码中动态切换路由策略的场景。")]}),t.jsxs("div",{className:"space-y-1.5",children:[t.jsx(o,{color:"text-primary",children:`{ ${i}, "provider": { "sort": "price" }, ${a} }`}),t.jsx(o,{color:"text-primary",children:`{ ${i}, "provider": { "sort": "speed" }, ${a} }`})]})]})}),t.jsx(r,{title:b("③ 路由控制 — Token 级默认(一次设置全局生效)"),children:t.jsxs("div",{className:"space-y-3",children:[t.jsxs("p",{className:"text-sm text-muted-foreground",children:[b("在 API 令牌设置页配置")," ",t.jsx("code",{className:"font-mono bg-muted rounded px-1",children:"routing_priority"}),",",b("该令牌下的所有请求(包括图像、视频)自动应用,优先级最低。")]}),t.jsxs("a",{href:"/console/token",className:"inline-flex items-center gap-1.5 text-xs text-primary hover:underline",children:[t.jsx(V,{size:12})," ",b("前往 API 令牌设置页配置")]})]})}),t.jsx(r,{title:b("优先级规则(四级瀑布)"),children:t.jsx("div",{className:"space-y-2",children:[{level:"1",label:b("模型名后缀"),desc:":floor / :nitro / :stable",color:"#ef4444",note:b("最高优先")},{level:"2",label:b("provider.sort 字段"),desc:'"provider": { "sort": "price" }',color:"#f97316"},{level:"3",label:b("Token 级默认"),desc:b("routing_priority 字段(令ç‰
1Œè®¾ç½®é¡µï¼‰"),color:"#eab308"},{level:"4",label:b("系统全局权重"),desc:b("无任何路由指定时,沿用全局渠道权重(默认)"),color:"#6b7280",note:b("最低优先")}].map(e=>t.jsxs("div",{className:"flex items-start gap-3 rounded-xl border border-border px-4 py-3",children:[t.jsx("span",{className:"mt-0.5 w-5 h-5 rounded-full flex items-center justify-center text-[11px] font-bold text-white flex-shrink-0",style:{background:e.color},children:e.level}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-sm font-medium",children:e.label}),e.note&&t.jsxs("span",{className:"text-[10px] text-muted-foreground",children:["(",e.note,")"]})]}),t.jsx("code",{className:"text-[11px] font-mono text-muted-foreground",children:e.desc})]})]},e.level))})}),t.jsx(r,{title:b("视频任务异步流程"),children:t.jsxs("div",{className:"space-y-3 text-sm text-muted-foreground",children:[t.jsxs("p",{children:[b("视频生成为"),t.jsx("strong",{className:"text-foreground",children:b("异步任务")}),b("模式,分两步完成:")]}),t.jsxs("ol",{className:"space-y-2 list-decimal list-inside",children:[t.jsxs("li",{children:["POST ",b("提交任务")," → ",b("获得")," ",t.jsx("code",{className:"font-mono bg-muted rounded px-1",children:"task_id"})]}),t.jsxs("li",{children:[b("每隔 3s 轮询对应端点,直到")," ",t.jsx("code",{className:"font-mono bg-muted rounded px-1",children:'status === "succeeded"'})]})]}),t.jsx(o,{children:`// ${b("状态流转:")}pending/created → processing → succeeded → failed/cancelled\nresult.videos[0].url  // ${b("视频下载地址")}`}),t.jsx("div",{className:"rounded-xl overflow-hidden border border-border mt-2",children:t.jsxs("table",{className:"w-full text-xs",children:[t.jsx("thead",{className:"bg-muted/50",children:t.jsx("tr",{children:[b("模型"),b("提交端点"),b("轮询端点")].map(e=>t.jsx("th",{className:"text-left px-3 py-2 font-semibold text-foreground/70",children:e},e))})}),t.jsx("tbody",{className:"divide-y divide-border",children:[{model:"sora-2 / kling-v3 / wan-2.6",submit:"/v1/videos",poll:"/v1/videos/{id}"},{model:"kling-3.0-turbo",submit:"/kling/text-to-video|image-to-video/kling-3.0-turbo",poll:".../kling-3.0-turbo/{task_id}"},{model:"veo3 / veo3-fast / veo3-pro",submit:"/v1/video/create",poll:"/v1/video/query?id={id}"},{model:"MiniMax-Hailuo-2.3 / 02",submit:"/minimax/v1/video_generation",poll:"/minimax/v1/query/video_generation?task_id={id}"},{model:"doubao-seedance-1-5-*",submit:"/volc/v1/contents/generations/tasks",poll:"/volc/v1/contents/generations/tasks/{id}"},{model:"doubao-seedance-2-0-*",submit:"/api/v3/contents/generations/tasks",poll:"/api/v3/contents/generations/tasks/{id}"},{model:"ray-2 / ray-flash-2",submit:"/luma/generations",poll:"/luma/generations/{id}"},{model:"gen4_turbo / gen3a_turbo",submit:"/runwayml/v1/image_to_video",poll:"/runwayml/v1/tasks/{id}"},{model:"jimeng-videos",submit:"/jimeng/submit/videos",poll:"/jimeng/fetch/{task_id}"},{model:"happyhorse-*",submit:"/alibailian/api/v1/.../video-synthesis",poll:"/alibailian/tasks/{task_id}"}].map(s=>t.jsxs("tr",{className:"hover:bg-muted/20 transition-colors "+(s.model.startsWith(e.split("-")[0])?"bg-primary/5":""),children:[t.jsx("td",{className:"px-3 py-2 font-mono text-[11px]",children:s.model}),t.jsx("td",{className:"px-3 py-2 font-mono text-[11px] text-primary",children:s.submit}),t.jsx("td",{className:"px-3 py-2 font-mono text-[11px] text-muted-foreground",children:s.poll})]},s.model))})]})})]})})]})})})(),"logs"===f&&t.jsx("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-6",children:t.jsx("div",{className:"rounded-2xl border border-border bg-background shadow-sm p-5",children:t.jsx(ss,{pageSize:20,refreshTrigger:F})})})]})}const Nt=new Set(["tts","stt","gpt-audio","minimax-tts","minimax-tts-async","suno-music","gemini-tts","kling-tts","kling-video-audio","vidu-audio","kling-audio","kling-custom-voice"]),wt={prompt:"",tts_voice:"alloy",tts_format:"mp3",tts_speed:1,gpt_audio_voice:"alloy",gpt_audio_format:"wav",minimax_voice:"male-qn-qingse",minimax_format:"mp3",minimax_emotion:"(默认)",sun
1o_mode:"inspiration",suno_tags:"",suno_title:"",suno_mv:"chirp-v5",suno_instrumental:!1,stt_file:null,stt_file_name:"",stt_format:"json",stt_language:"",gemini_tts_voice:"Kore",kling_tts_voice_id:"",kling_va_video:"",kling_va_sound_prompt:"",kling_va_bgm_prompt:"",kling_va_asmr:!1,vidu_audio_voice_id:"",kling_cv_name:"",kling_cv_source:"voice_url",kling_cv_voice_url:"",kling_cv_video_id:""};function St({selectedModel:e,modelType:a,tokens:i,selectedTokenId:r,setSelectedTokenId:o,routingMode:n,setRoutingMode:l,selectedGroup:d,routingPreview:m,previewLoading:x,chatProtocol:g,setChatProtocol:h,availableChatProtocols:v,modelPreset:f,activeTab:b}){const{t:j}=_(),y=v.filter(e=>Nt.has(e.id)),k=y.length>0?y:v,[N,w]=s.useState(()=>({...wt})),[S,C]=s.useState("form"),[T,P]=s.useState(""),[z,I]=s.useState(!1),{running:$,rawText:O,jsonData:M,streamChunks:A,imageUrl:E,videoUrl:U,audioUrl:D,error:F,logRefreshKey:q,doRun:L}=Xs(),G=s.useRef(m);s.useEffect(()=>{G.current=m},[m]);const V=s.useRef(e);s.useEffect(()=>{V.current!==e&&(V.current=e,w({...wt}))},[e]),s.useEffect(()=>{f?.preset_prompt&&w(e=>({...e,prompt:!e.prompt||De.chat.includes(e.prompt)?f.preset_prompt:e.prompt}))},[f]);const B=(()=>{try{const s=qs(e,n),t=Ys({selectedModel:e,modelStr:s,selectedGroup:d,routingMode:n,chatParams:N,modelFmt:g,support:{},modelPreset:f,t:j});return t?.error?{error:t.error}:t}catch(s){return{}}})(),K=s.useCallback(()=>{try{const s=qs(e,n),t=Ys({selectedModel:e,modelStr:s,selectedGroup:d,routingMode:n,chatParams:N,modelFmt:g,support:{},modelPreset:f,t:j});return t?.error?`// ${t.error}`:JSON.stringify(t.body??{},null,2)}catch(s){return"{}"}},[e,n,d,g,N,f,j]),J=s.useCallback(e=>{"json"===e&&P(K()),C(e)},[K]),W=s.useCallback(()=>{const s=i.find(e=>String(e.id)===String(r))?.key||"";if(!s)return;let t;if("json"===S){const e=(T||"").trim();if(!e||e.startsWith("//"))return void c.warning(j("请求体 JSON 为空或无效"));try{t=JSON.parse(e)}catch(o){return void c.error(j("JSON 格式错误,请检查后再运行"))}}L({selectedModel:e,modelStr:n?`${e}${{price:":floor",speed:":nitro",success_rate:":stable"}[n]||""}`:e,headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json"},tokenKey:s,selectedGroup:d,routingMode:n,modelType:a,chatParams:N,isChatPanel:!0,chatProtocol:g,modelFmt:g,modelPreset:f,routingPreviewRef:G,rawBody:t})},[r,i,e,n,d,a,N,g,f,L,S,T,j]),Q=s.useCallback(()=>{r?W():0===i.length?p.confirm({title:"请先登录",content:"您需要登录后才能使用模型体验功能。",okText:"去登录",cancelText:"取消",onOk:()=>{window.location.href=`/login?redirect=${encodeURIComponent(window.location.pathname+window.location.search)}`}}):c.warning(j("请先选择令牌"))},[r,i,W,j]),Y="undefined"!=typeof window?window.location.origin:"",X=g;return t.jsxs(t.Fragment,{children:["playground"===b&&t.jsx("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-6 space-y-4",children:t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-5 items-stretch",children:[t.jsx("div",{className:"flex flex-col",children:t.jsxs("div",{className:"flex-1 rounded-2xl border border-border bg-background shadow-sm overflow-hidden flex flex-col",children:[t.jsxs("div",{className:"flex items-center justify-between px-5 py-3 border-b border-border bg-muted/20",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-xs font-semibold text-foreground/60 tracking-widest uppercase",children:"Input"}),t.jsx("div",{className:"flex items-center rounded-md border border-border overflow-hidden text-[11px]",children:["form","json"].map(e=>t.jsx("button",{type:"button",onClick:()=>J(e),className:"px-2.5 py-0.5 font-medium transition-colors",style:{background:S===e?"hsl(var(--foreground) / 0.08)":"transparent",color:S===e?"hsl(var(--foreground))":"hsl(var(--foreground) / 0.45)"},children:"form"===e?"Form":"JSON"},e))})]}),t.jsxs("button",{type:"button",onClick:()=>I(!0),className:"flex items-center gap-1.5 px-3 py-1.5 rounded-lg border transition-all text-xs font-medium",style:{background:r?"hsl(var(--primary) / 0.06)":"hsl(var(--muted))",borderColor:r?"hsl(var(--primary) / 0.25)":"hsl(var(--border))",color:r?"hsl(var(--primary))":"hsl(var(--foreground) / 0.60)"},children:[t.jsx(H,{size:11}),j("路由选择"),n&&(()=>{const e=Re.find(e=>e.id===n);return e?t.jsx("span",{className:"ml-1",children:e.emoji}):null})()]})]}),t.jsx(ot,{visible:z,onClose:()=>I(!1),tokens:i,selectedTokenId:r,onTokenChange:o,routingMode:n,onRoutingModeChange:l}),t.jsxs("div",{className:"p-5 space-y-5 flex-1",children:["json"===S&&t.jsxs("div",{className:"space-y-2",children:[t.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[j("当前格式:")," ",t.jsx("code",{className:"font-mono text-primary",children:g}),"。",j("切换到 Form 不会自动回填。")]}),t.jsxs("div",{className:"relative rounded-xl overflow-hidden border border-border",children:[t.jsx("div",{className:"absolute top-2 right-2 z-10",children:t.jsx("button",{type:"button",onClick:()=>P(K()),className:"text-[10px] px-2 py-0.5 rounded border border-border bg-background text-muted-foreground hover:text-foreground transition-colors",children:j("重置")})}),t.jsx(u,{value:T,onChange:P,disabled:$,autosize:{minRows:14,maxRows:30},style:{fontFamily:"monospace",fontSize:12,borderRadius:0,border:"none"}})]})]}),t.jsxs("div",{style:{display:"form"===S?void 0:"none"},children:[t.jsxs("div",{className:"space-y-2 mb-4",children:[t.jsx("p",{className:"text-xs font-semibold text-foreground
1/60 tracking-widest uppercase",children:"API Format"}),t.jsx("div",{className:"flex flex-wrap gap-1.5",children:k.map(e=>t.jsx("button",{onClick:()=>h(e.id),disabled:$,title:e.note,className:"text-[11px] px-2.5 py-1 rounded-lg border transition-all disabled:opacity-50 "+(g===e.id?"bg-primary/10 border-primary/40 text-primary font-semibold":"bg-muted/40 border-border text-muted-foreground hover:text-foreground hover:bg-muted/70"),children:e.label},e.id))}),t.jsx("p",{className:"text-[11px] font-mono text-muted-foreground",children:k.find(e=>e.id===g)?.note||""})]}),t.jsx(Zs,{params:N,onChange:(e,s)=>w(t=>({...t,[e]:s})),onRun:Q,running:$,disabled:!r||$,modelFormat:g,routingPreview:m,previewLoading:x})]})]}),"json"===S&&t.jsx("div",{className:"px-5 pb-5",children:t.jsx("button",{type:"button",onClick:Q,disabled:!r||$,className:"w-full flex items-center justify-center gap-2 py-2.5 rounded-xl font-semibold text-sm transition-all disabled:opacity-50 disabled:cursor-not-allowed",style:{background:"hsl(var(--primary))",color:"#fff"},children:$?t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"w-4 h-4 border-2 border-white/30 border-t-white rounded-full animate-spin"}),j("生成中...")]}):t.jsxs(t.Fragment,{children:[t.jsx(R,{size:14}),j("Run")]})})})]})}),t.jsx("div",{className:"flex flex-col",children:t.jsxs("div",{className:"flex-1 rounded-2xl border border-border bg-background shadow-sm overflow-hidden flex flex-col",style:{minHeight:480},children:[t.jsxs("div",{className:"flex items-center px-5 py-3 border-b border-border bg-muted/20",children:[t.jsx("span",{className:"text-xs font-semibold text-foreground/60 tracking-widest uppercase",children:"Output"}),t.jsxs("span",{className:"ml-auto flex items-center gap-2",children:[(O||D)&&!$&&t.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-green-50 dark:bg-green-900/20 text-green-600 dark:text-green-400 text-xs",children:[t.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-500"}),j("完成")]}),$&&t.jsxs("span",{className:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400 text-xs",children:[t.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-blue-500 animate-pulse"}),j("生成中")]})]})]}),t.jsx(rt,{rawText:O,jsonData:M,streamChunks:A,imageUrl:E,videoUrl:U,audioUrl:D,loading:$,error:F})]})})]})}),"examples"===b&&t.jsx("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-8",children:t.jsxs("div",{className:"max-w-4xl space-y-6",children:[t.jsxs("div",{children:[t.jsx("h2",{className:"text-lg font-semibold",children:j("代码示例")}),t.jsxs("p",{className:"text-sm text-muted-foreground mt-1",children:[j("当前模型:"),t.jsx("code",{className:"text-xs font-mono bg-muted rounded px-1 py-0.5 text-primary ml-1",children:e}),t.jsxs("span",{className:"ml-2 text-xs text-muted-foreground",children:["· ",g]})]})]}),B?.error?t.jsx("div",{className:"text-sm text-amber-600 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/10 rounded-lg px-4 py-3",children:B.error}):t.jsxs(t.Fragment,{children:[t.jsx("p",{className:"text-sm text-muted-foreground",children:j("以下示例基于当前表单参数生成,与实际请求体保持一致。")}),t.jsx(ds,{model:e,prompt:N.prompt,type:"audio",format:X,request:B}),B?.async&&t.jsx("p",{className:"text-[11px] text-muted-foreground",children:j("提示:该端点为异步任务,提交后需轮询查询接口获取结果,轮询地址详见「API」标签页。")})]})]})}),"api"===b&&(()=>{const s=({title:e,children:s})=>t.jsxs("div",{className:"rounded-2xl border border-border overflow-hidden",children:[t.jsx("div",{className:"bg-muted/30 px-5 py-3 border-b border-border",children:t.jsx("span",{className:"text-xs font-semibold text-foreground/60 tracking-widest uppercase",children:e})}),t.jsx("div",{className:"p-5",children:s})]}),a=({children:e,color:s})=>t.jsx("code",{className:`block text-sm font-mono bg-muted/40 border border-border rounded-lg px-3 py-2 break-all ${s||"text-foreground"}`,children:e}),i=({text:e,color:s="#6366f1"})=>t.jsx("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded-full",style:{background:`${s}15`,color:s,border:`1px solid ${s}30`},children:e}),r={tts:{endpoints:[{method:"POST",url:`${Y}/v1/audio/speech`,label:"TTS API",badge:"OpenAI Audio"}],note:j("同步返回音频二进制流,Content-Type: audio/{format}。"),bodyExample:`{ "model": "${e}", "input": "需要朗读的文本", "voice": "alloy", "response_format": "mp3", "speed": 1.0 }`},stt:{endpoints:[{method:"POST",url:`${Y}/v1/audio/transcriptions`,label:"STT API",badge:"OpenAI Audio"}],note:j("使用 multipart/form-data 上传音频文件(≤ 25MB),返回转录文本。"),bodyExample:`form-data: [email protected]&model=${e}&language=zh&response_format=json`},"gpt-audio":{endpoints:[{method:"POST",url:`${Y}/v1/chat/completions`,label:"GPT Audio",badge:"OpenAI Chat"}],note:j('文本对话 + 语音输出:携带 modalities=["text","audio"],同步返回 choices[0].message.audio.data(base64 音频)与 transcript。'),bodyExample:`{ "model": "${e}", "modalities": ["text", "audio"], "audio": { "voice": "alloy", "format": "wav" }, "messages": [{ "role": "user", "content": "你好" }] }`},"minimax-tts":{endpoints:[{method:"POST",url:`${Y}/minimax/v1/t2a_v2`,label:"MiniMax TTS",badge:"MiniMax Audio"}],note:j("同步返回 base64 编码的音频数据。"),bodyExample:`{ "model": "${e}", "text": "文本内容", "voice_id": "male-qn-qingse", "audio_setting": { "format": "mp3" } }`},"minimax-tts-async":{endpoints:[{method:"POST",url:`${Y}/minimax/v1/t2a_async_v2`,label:"MiniMax 异步 TTS 提交",badge:"Async Submit"},{method:"GET",url:`${Y}/minimax/v1/query/t2a_query?task_id={id}`,label:"查询任务状态",badge:"Async Poll"}],note:j("长文本异步任务(最多 5 万字符),提交后轮询 task_id 直到 status=Success,取 file.url 下载音频。"),bodyExample:`{ "model": "${e}", "text": "长文本...", "voice_id": "male-qn-qingse" }`}
1,"suno-music":{endpoints:[{method:"POST",url:`${Y}/suno/submit/music`,label:"Suno 音乐提交",badge:"Async Submit"},{method:"POST",url:`${Y}/suno/fetch`,label:"查询任务列表",badge:"Async Poll"}],note:j("异步任务,提交后轮询直到 status=SUCCESS,取 audio_url 获取音频。"),bodyExample:'{ "mv": "chirp-v5", "gpt_description_prompt": "一首轻快的爵士钢琴曲" }'},"gemini-tts":{endpoints:[{method:"POST",url:`${Y}/v1beta/models/${e}-tts:generateContent`,label:"Gemini TTS",badge:"Gemini Audio"}],note:j("返回 candidates[0].content.parts[0].inlineData(PCM base64),需客户端解码为 WAV 播放。"),bodyExample:'{ "contents": [{ "role": "user", "parts": [{ "text": "文本" }] }], "generationConfig": { "responseModalities": ["AUDIO"], "speechConfig": { "voiceConfig": { "prebuiltVoiceConfig": { "voiceName": "Kore" } } } } }'},"kling-tts":{endpoints:[{method:"POST",url:`${Y}/kling/v1/audio/tts`,label:"Kling TTS 提交",badge:"Async Submit"},{method:"GET",url:`${Y}/kling/v1/audio/tts/{task_id}`,label:"查询任务状态",badge:"Async Poll"}],note:j("异步任务,轮询直到 task_status=succeed,取 task_result.audios[0].url 获取音频。需填写 voice_id。"),bodyExample:`{ "model": "${e}", "text": "文本内容", "voice_id": "voice_id", "audio_type": "mp3" }`},"kling-video-audio":{endpoints:[{method:"POST",url:`${Y}/kling/v1/audio/video-to-audio`,label:"Kling 视频配音提交",badge:"Async Submit"},{method:"GET",url:`${Y}/kling/v1/audio/video-to-audio/{task_id}`,label:"查询任务状态",badge:"Async Poll"}],note:j("异步任务,基于视频内容生成配乐/音效,轮询直到 task_status=succeed,取 task_result.videos[0].video_url。"),bodyExample:`{ "model": "${e}", "video_id": "video_id_or_url", "prompt": "音效描述" }`},"vidu-audio":{endpoints:[{method:"POST",url:`${Y}/ent/v2/audio-tts`,label:"Vidu TTS 提交(推荐)",badge:"Async Submit"},{method:"POST",url:`${Y}/ent/v2/text2audio`,label:"Vidu 文生音频提交",badge:"Async Submit"},{method:"GET",url:`${Y}/ent/v2/tasks/{id}/creations`,label:"查询任务结果",badge:"Async Poll"}],note:j("异步任务,提交后轮询 creations[0].url 获取音频。可通过 voice_setting.voice_id 指定音色。"),bodyExample:`{ "model": "${e}", "prompt": "文本", "text": "文本", "voice_setting": { "voice_id": "zh_female_lengjingzhubo_moon_bigtts" } }`},"kling-audio":{endpoints:[{method:"POST",url:`${Y}/kling/v1/audio/text-to-audio`,label:"Kling 文生音效提交",badge:"Async Submit"},{method:"GET",url:`${Y}/kling/v1/audio/text-to-audio/{task_id}`,label:"查询任务状态",badge:"Async Poll"}],note:j("异步任务,文本描述生成音效,轮询直到 task_status=succeed,取 task_result.audios[0].url_mp3。"),bodyExample:`{ "model": "${e}", "prompt": "海浪拍打礁石的声音,带有海鸥叫声" }`},"kling-custom-voice":{endpoints:[{method:"POST",url:`${Y}/kling/v1/general/custom-voices`,label:"Kling 自定义音色提交",badge:"Async Submit"},{method:"GET",url:`${Y}/kling/v1/general/custom-voices/{task_id}`,label:"查询任务状态",badge:"Async Poll"}],note:j("异步任务,通过音频文件 URL 或视频 ID 创建专属音色,轮询直到 task_status=succeed,取 task_result.voices[0].voice_id(可用于后续语音合成)。voice_url 与 video_id 二选一。"),bodyExample:'{ "voice_name": "我的音色", "voice_url": "https://.../sample.mp3" }'}}[g]||{endpoints:[{method:"POST",url:`${Y}/v1/audio/speech`,label:"Audio API",badge:"Audio"}],note:"",bodyExample:`{ "model": "${e}" }`},o=!B?.error&&B?.body?JSON.stringify(B.body):r.bodyExample,n=r.endpoints.length>1||(r.note||"").includes("异步")||(r.note||"").includes("Async");return t.jsx("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-8",children:t.jsxs("div",{className:"max-w-4xl space-y-5",children:[t.jsxs("div",{children:[t.jsx("h2",{className:"text-lg font-semibold",children:j("API 接口说明")}),t.jsxs("p",{className:"text-sm text-muted-foreground mt-1",children:[j("当前模型:"),t.jsx("code",{className:"text-xs font-mono bg-muted rounded px-1",children:e}),t.jsxs("span",{className:"ml-2 text-xs text-muted-foreground",children:["· ",g]}),n&&t.jsx(i,{text:j("异步任务"),color:"#f97316"})]})]}),t.jsx(s,{title:"Endpoint",children:t.jsxs("div",{className:"space-y-3",children:[r.endpoints.map((e,s)=>t.jsxs("div",{className:"space-y-1.5",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[11px] font-mono font-bold px-1.5 py-0.5 rounded "+("GET"===e.method?"text-blue-600 bg-blue-50 dark:bg-blue-900/20":"text-emerald-600 bg-emerald-50 dark:bg-emerald-900/20"),children:e.method}),t.jsx("span",{className:"text-xs text-muted-foreground",children:e.label}),t.jsx(i,{text:e.badge,color:"#6366f1"})]}),t.jsx(a,{color:"text-primary",children:e.url})]},s)),t.jsxs("div",{className:"pt-1 space-y-1.5",children:[t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:"Authentication"}),t.jsx(a,{children:"Authorization: Bearer <your-token>"})]}),r.note&&t.jsxs("div",{className:"flex items-start gap-2 text-[11px] text-blue-600 dar
1k:text-blue-400 bg-blue-50 dark:bg-blue-900/10 rounded-lg px-3 py-2 mt-2",children:[t.jsx("span",{children:"ℹ️"}),t.jsx("span",{children:r.note})]})]})}),t.jsx(s,{title:j("请求体示例"),children:t.jsx("div",{className:"space-y-3",children:t.jsx(a,{color:"text-primary",children:o})})}),n&&t.jsx(s,{title:j("异步任务说明"),children:t.jsxs("div",{className:"space-y-3 text-sm text-muted-foreground",children:[t.jsx("p",{children:j("音频生成为异步任务,需要分两步完成:")}),t.jsxs("ol",{className:"space-y-2 list-decimal pl-5",children:[t.jsx("li",{children:j("调用提交接口,获取任务 ID(task_id / id 等字段)。")}),t.jsx("li",{children:j("按 1~3 秒间隔轮询查询接口,直到任务状态变为成功。")}),t.jsx("li",{children:j("从响应中取出音频 URL,下载或播放。")})]}),t.jsx("p",{className:"text-xs",children:j("Lab 会自动完成轮询,直接展示最终音频。调用 API 时需自行处理轮询逻辑。")})]})})]})})})(),"logs"===b&&t.jsx("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6 py-6",children:t.jsx("div",{className:"rounded-2xl border border-border bg-background shadow-sm p-5",children:t.jsx(ss,{pageSize:20,refreshTrigger:q})})})]})}const Ct=()=>{const{t:a}=_(),r=e(),[o]=i(),n=s.useMemo(()=>{const e=o.get("type");return e&&["chat","image","video","audio"].includes(e)?e:"chat"},[]),l=s.useMemo(()=>o.get("model")||Oe[n],[]),[d,m]=s.useState(()=>{const e=o.get("endpoints"),s=(e?e.split(",").filter(Boolean):[]).filter(e=>Fe[e]).map(e=>Fe[e]);return s.length>0?s:Ge}),[u,x]=s.useState(n),[g,h]=s.useState(l),v="chat"===u,[j,y]=s.useState("playground"),[k,N]=s.useState(()=>{const e=o.get("endpoints"),s=(e?e.split(",").filter(Boolean):[]).find(e=>Fe[e]);return s?Fe[s].id:"openai-chat"}),[w,S]=s.useState(null),[C,T]=s.useState([]),[P,R]=s.useState("success_rate"),[z,I]=s.useState(""),[$,O]=s.useState([]),[M,A]=s.useState(null),[E,U]=s.useState(!1),[D,F]=s.useState({}),[q,L]=s.useState(null),[G,B]=s.useState(!1),K=s.useRef(!1),H=s.useRef(null),J=s.useRef(null),W=s.useRef(null),Y=s.useCallback(async()=>{try{const s=await f.get("/api/token/filter?p=1&size=100");if(!s?.data?.success)return;const t=s.data.data,a=Array.isArray(t)?t:t?.items??[];if(T(a),localStorage.getItem("user")&&0===a.length&&!K.current){K.current=!0;try{const e=await f.post("/api/token/",{name:"默认令牌",expired_time:-1,remain_quota:0,unlimited_quota:!0,model_limits_enabled:!1,model_limits:""});if(e?.data?.success){c.success('已为您自动创建默认令牌,可在"API 令牌"页面管理');const e=await f.get("/api/token/filter?p=1&size=100");if(e?.data?.success){const s=e.data.data;T(Array.isArray(s)?s:s?.items??[])}}}catch(e){}}}catch(e){}},[]),X=s.useCallback(async()=>{try{const e=await f.get("/api/user/self");if(e?.data?.success){const s=e.data.data?.group||"";O(s?s.split(",").map(e=>e.trim()).filter(Boolean):[])}}catch(e){}},[]);s.useEffect(()=>{Y(),X()},[Y,X]),s.useEffect(()=>{const e=o.get("model"),s=o.get("type");if(!e)return;const t=s&&["chat","image","video","audio"].includes(s)?s:"chat";h(e),x(t),y("playground");const a=o.get("endpoints");if(a){const e=a.split(",").filter(Boolean).filter(e=>Fe[e]).map(e=>Fe[e]);e.length>0&&(m(e),N(e[0].id))}},[o]),s.useEffect(()=>{if(C.length>0&&!w){const e=Date.now(),s=C.find(s=>1===s.status&&(-1===s.expired_time||!s.expired_time||1e3*s.expired_time>e)&&(s.unlimited_quota||s.remain_quota>0))||C[0];s&&S(String(s.id))}},[C]),s.useEffect(()=>{f.get("/api/endpoint_map").then(e=>{e?.data?.success&&e.data.data&&F(e.data.data)}).catch(()=>{})},[]),s.useEffect(()=>{if(!g)return;const e=new AbortController;return f.get(`/api/model_preset?model=${encodeURIComponent(g)}`,{signal:e.signal}).then(e=>{if(e?.data?.success&&e.data.data){const s=e.data.data;L(s);const t=s.endpoint_configs||{},a=s.model_type||Object.keys(t).length>0?xe({modelType:s.model_type,endpointConfigs:t}):u;a&&a!==u&&x(a);const i=a||u;if("chat"===i||"audio"===i){let e=Object.entries(t).map(([e,s])=>function(e,s){if(Fe[e])return{...Fe[e],note:s||Fe[e].note};if(s&&Le[s])return{...Le[s],note:s};if("string"==typeof s){if(s.includes("-tts:"))return{id:"gemini-tts",label:"Gemini TTS",note:s};const e=te(s),t=qe.find(s=>
1e.startsWith(s.prefix));if(t)return{...t.proto,note:s}}return null}(e,s)).filter(Boolean);(function(e){const s=String(e||"").toLowerCase();return/gpt[\w.-]*audio/.test(s)||/audio-preview/.test(s)})(g)&&(0===e.length||e.some(e=>"openai-chat"===e.id))&&!e.some(e=>"gpt-audio"===e.id)&&(e=[Ve,...e]),e.length>0?(m(e),N(s=>e.some(e=>e.id===s)?s:e[0].id)):"chat"===i&&(m(Ge),N("openai-chat"))}}}).catch(()=>{}),()=>e.abort()},[g]);const Z=s.useCallback(async(e,s)=>{if(!e)return;H.current&&H.current.abort(),H.current=new AbortController;const{signal:t}=H.current;U(!0);try{const a=s&&"custom"!==s?`&priority=${encodeURIComponent(s)}`:"",i=await f.get(`/api/user/routing-preview?model=${encodeURIComponent(e)}${a}`,{signal:t});i?.data?.success?(J.current=i.data.data??null,A(i.data.data??null)):(J.current=null,A(null))}catch(a){if("AbortError"===a?.name||"CanceledError"===a?.name)return;J.current=null,A(null)}finally{U(!1)}},[]);if(s.useEffect(()=>(W.current&&clearTimeout(W.current),W.current=setTimeout(()=>Z(g,P),400),()=>clearTimeout(W.current)),[g,P,Z]),s.useEffect(()=>()=>{H.current&&H.current.abort()},[]),!o.get("model"))return t.jsx("div",{style:{paddingTop:64},children:t.jsx(fe,{})});const ee={selectedModel:g,tokens:C,selectedTokenId:w,setSelectedTokenId:S,routingMode:P,setRoutingMode:R,selectedGroup:z,routingPreview:M,previewLoading:E,modelPreset:q,activeTab:j};return t.jsxs("div",{className:"min-h-screen bg-background",style:{paddingTop:64},children:[t.jsxs("div",{className:"sticky z-20 border-b border-border bg-background/95 backdrop-blur-md",style:{to
1p:64},children:[t.jsx(p,{visible:G,onCancel:()=>B(!1),title:a("切换模型"),footer:null,width:Math.min(window.innerWidth-48,1200),centered:!0,bodyStyle:{padding:0,maxHeight:"80vh",overflowY:"auto"},children:t.jsx(fe,{onSelect:e=>{const s=e.supported_endpoint_types||[],t=xe({modelType:e.model_type}),a=s.filter(e=>["openai","openai-response","anthropic","gemini","jina-rerank","embedding","moderation","tts","stt"].includes(e)),i=new URLSearchParams({model:e.model_name,type:t});a.length&&i.set("endpoints",a.join(",")),s.length&&i.set("etypes",s.join(",")),B(!1),r(`/lab?${i.toString()}`)}})}),t.jsx("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6",children:t.jsxs("div",{className:"flex items-center gap-4 py-5",children:[q?.cover_image?t.jsx("div",{className:"flex-shrink-0 overflow-hidden rounded-xl border border-border",style:{width:152,height:96,background:"hsl(var(--muted))"},children:t.jsx("img",{src:q.cover_image,alt:g,style:{width:"100%",height:"100%",objectFit:"cover",display:"block"},onError:e=>{e.currentTarget.parentElement.style.display="none"}})}):t.jsx("div",{className:"flex-shrink-0 flex items-center justify-center rounded-2xl border border-border/50 overflow-hidden",style:{width:64,height:64,background:"hsl(var(--muted) / 0.5)"},children:q?.icon?b(q.icon,40):t.jsx("span",{className:"text-xl font-bold",style:{color:"hsl(var(--primary))"},children:g.slice(0,2).toUpperCase()})}),t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsxs("div",{className:"flex items-center gap-2 flex-wrap mb-1.5",children:[(()=>{const e=$e.find(e=>e.id===u);if(!e)return null;const s=e.icon;return t.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-md text-xs font-medium",style:{background:"hsl(var(--muted))",color:"hsl(var(--foreground) / 0.65)",border:"1px solid hsl(var(--border))"},children:[t.jsx(s,{size:11}),a(e.label)]})})(),q?.model_type&&t.jsx("span",{className:"inline-flex items-center px-2 py-0.5 rounded-md text-xs font-medium",style:{background:"hsl(var(--primary) / 0.08)",color:"hsl(var(--primary))",border:"1px solid hsl(var(--primary) / 0.20)"},children:q.model_type})]}),t.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[t.jsx("h1",{className:"text-xl font-bold tracking-tight truncate",children:g}),q?.name&&q.name!==g&&t.jsx("span",{className:"text-sm text-muted-foreground truncate hidden sm:inline",children:q.name})]}),q?.description&&t.jsx("p",{className:"text-xs text-muted-foreground mt-0.5 truncate",children:q.description}),q?.tags&&t.jsx("div",{className:"flex items-center gap-1.5 mt-2 flex-wrap",children:q.tags.split(",").map(e=>e.trim()).filter(Boolean).map(e=>t.jsx("span",{className:"inline-flex items-center px-2 py-0.5 rounded-full text-[11px] font-medium bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400",children:e},e))}),q?.model_link&&t.jsxs("a",{href:q.model_link,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-[11px] text-primary hover:underline mt-1",children:[t.jsx(V,{size:10}),a("查看模型文档")]})]}),t.jsxs("button",{type:"button",onClick:()=>B(!0),className:"ml-auto flex-shrink-0 flex items-center gap-2 px-4 py-2 rounded-xl border text-sm font-medium transition-all hover:bg-muted/60",style:{borderColor:"hsl(var(--border))",color:"hsl(var(--foreground) / 0.65)"},children:[t.jsx(Q,{size:13}),a("切换模型")]})]})}),t.jsx("div",{className:"max-w-[1600px] mx-auto px-4 sm:px-6",children:t.jsx("div",{className:"flex items-center",children:Me.map(({key:e,label:s,icon:a})=>t.jsxs("button",{onClick:()=>y(e),className:"flex items-center gap-1.5 px-4 py-2.5 text-sm font-medium border-b-2 transition-all "+(j===e?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"),children:[t.jsx(a,{size:13}),s]},e))})})]}),v&&t.jsx(dt,{...ee,modelType:u,chatProtocol:k,setChatProtocol:N,availableChatProtocols:d}),"audio"===u&&t.jsx(St,{...ee,modelType:u,chatProtocol:k,setChatProtocol:N,availableChatProtocols:d}),"image"===u&&t.jsx(ht,{...ee,modelType:u}),"video"===u&&t.jsx(kt,{...ee,modelType:u,labEndpointMap:D})]})};export{Ct as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.