Files
xin-school/public/assets/ai-L4EiXBaM.js
T
2026-06-17 13:08:53 +08:00

2 lines
5.5 KiB
JavaScript

import{t as e}from"./alert-nEKP-pli.js";import{t}from"./XinForm-DX04WSwD.js";import{t as n}from"./card-BDbI8Gdq.js";import{t as r}from"./spin-D1ik486_.js";import{Ca as i,Ct as a,Ea as o,Jt as s,Pt as c,b as l,c as u,gn as d,rt as f,s as p,ya as m,yt as h}from"./index-DThTpSPU.js";var g=o(i(),1);async function _(){return m({url:`/system/ai/list`,method:`get`})}async function v(){return m({url:`/system/ai/config`,method:`get`})}async function y(e){return m({url:`/system/ai/save`,method:`post`,data:e})}var b=p(),{Text:x,Title:S}=f,C=()=>{let{t:i}=u(),o=(0,g.useRef)(null),[f]=c.useForm(),[p,m]=(0,g.useState)({default:[]}),[C,w]=(0,g.useState)(!1),[T,E]=(0,g.useState)(null),[D,O]=(0,g.useState)(null),k=e=>({dependencies:[`default`],visible:t=>t.default===e}),A=e=>({dataIndex:[`providers`,e,`key`],valueType:`password`,title:i(`system.ai.provider.api_key`,{lab:e}),fieldProps:{placeholder:`sk-...`},colProps:{span:16},dependency:k(e)}),j=(e,t=``)=>({dataIndex:[`providers`,e,`url`],valueType:`text`,title:i(`system.ai.provider.url`,{lab:e}),fieldProps:{placeholder:i(`system.ai.provider.url.placeholder`,{url:t})},colProps:{span:8},dependency:k(e)}),M=[A(`anthropic`),j(`anthropic`,`https://api.anthropic.com/v1`)],N=[A(`openai`),j(`openai`,`https://api.openai.com/v1`)],P=[A(`gemini`),j(`gemini`,`https://generativelanguage.googleapis.com/v1beta/`)],F=[A(`ollama`),j(`ollama`,`http://localhost:11434`)],I=[A(`azure`),j(`azure`,`https://<resource>.openai.azure.com`),{dataIndex:[`providers`,`azure`,`api_version`],valueType:`text`,title:i(`system.ai.azure.api_version`),fieldProps:{placeholder:`2025-04-01-preview`},colProps:{span:8},dependency:k(`azure`)},{dataIndex:[`providers`,`azure`,`deployment`],valueType:`text`,title:i(`system.ai.azure.deployment`),fieldProps:{placeholder:`gpt-4o`},colProps:{span:8},dependency:k(`azure`)},{dataIndex:[`providers`,`azure`,`embedding_deployment`],valueType:`text`,title:i(`system.ai.azure.embedding_deployment`),fieldProps:{placeholder:`text-embedding-3-small`},colProps:{span:8},dependency:k(`azure`)},{dataIndex:[`providers`,`azure`,`image_deployment`],valueType:`text`,title:i(`system.ai.azure.image_deployment`),fieldProps:{placeholder:`gpt-image-1`},colProps:{span:12},dependency:k(`azure`)}],L=[{dataIndex:[`providers`,`bedrock`,`region`],valueType:`text`,title:i(`system.ai.bedrock.region`),fieldProps:{placeholder:`us-east-1`},colProps:{span:12},dependency:k(`bedrock`)},A(`bedrock`),{dataIndex:[`providers`,`bedrock`,`access_key_id`],valueType:`password`,title:i(`system.ai.bedrock.access_key_id`),fieldProps:{placeholder:i(`system.ai.provider.api_key.placeholder`)},colProps:{span:12},dependency:k(`bedrock`)},{dataIndex:[`providers`,`bedrock`,`secret_access_key`],valueType:`password`,title:i(`system.ai.bedrock.secret_access_key`),fieldProps:{placeholder:i(`system.ai.provider.api_key.placeholder`)},colProps:{span:12},dependency:k(`bedrock`)},{dataIndex:[`providers`,`bedrock`,`session_token`],valueType:`password`,title:i(`system.ai.bedrock.session_token`),fieldProps:{placeholder:i(`system.ai.provider.api_key.placeholder`)},colProps:{span:24},dependency:k(`bedrock`)}],R=[{dataIndex:`default`,valueType:`radio`,title:i(`system.ai.default`),tooltip:i(`system.ai.default.tooltip`),colProps:{span:24},fieldProps:{options:p.default.map(e=>({label:e,value:e}))}},...M,...N,...P,...I,...L,...F,A(`cohere`),A(`deepseek`),A(`eleven`),A(`groq`),A(`jina`),A(`mistral`),A(`openrouter`),A(`voyageai`),A(`xai`)];(0,g.useEffect)(()=>{z(),_().then(e=>e.data.data&&m(e.data.data))},[]);let z=async()=>{let{data:e}=await v();e.success&&f.setFieldsValue(e.data)};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(`div`,{className:`mb-5`,children:[(0,b.jsx)(S,{level:3,children:i(`system.ai.page.title`)}),(0,b.jsx)(x,{type:`secondary`,children:i(`system.ai.page.description`)})]}),(0,b.jsxs)(h,{gutter:24,children:[(0,b.jsx)(s,{span:16,children:(0,b.jsx)(n,{variant:`borderless`,children:(0,b.jsx)(t,{columns:R,layout:`vertical`,formRef:o,form:f,grid:!0,onFinish:async e=>{await y(e),a.success(i(`system.ai.save.success`))},rowProps:{gutter:[10,0]}})})}),(0,b.jsx)(s,{span:8,children:(0,b.jsx)(n,{title:i(`system.ai.test.title`),children:(0,b.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,b.jsx)(x,{type:`secondary`,children:i(`system.ai.test.hint`)}),(0,b.jsx)(d,{type:`primary`,block:!0,icon:(0,b.jsx)(l,{}),loading:C,onClick:async()=>{w(!0),E(null),O(null);try{let e=localStorage.getItem(`token`),t=await fetch(`/index.php/system/ai/test`,{method:`POST`,headers:{Authorization:`Bearer ${e}`,Accept:`text/event-stream`}});if(!t.ok){let e=await t.json().catch(()=>null);throw Error(e?.msg||`HTTP ${t.status}`)}let n=t.body?.getReader();if(!n)throw Error(`Stream not supported`);let r=new TextDecoder,o=``,s=``;for(;;){let{done:e,value:t}=await n.read();if(e)break;o+=r.decode(t,{stream:!0});let i=o.split(`
`);o=i.pop()||``;for(let e of i){if(!e.startsWith(`data: `))continue;let t=e.slice(6).trim();if(t!==`[DONE]`)try{let e=JSON.parse(t);e.type===`text_delta`&&e.delta&&(s+=e.delta,E(s))}catch{}}}a.success(i(`system.ai.test.success`))}catch(e){let t=e?.message||`Connection test failed`;O(t),a.error(t)}finally{w(!1)}},children:i(C?`system.ai.test.testing`:`system.ai.test.button`)}),C&&!T&&(0,b.jsx)(`div`,{className:`flex justify-center py-8`,children:(0,b.jsx)(r,{description:i(`system.ai.test.testing`)})}),T&&(0,b.jsx)(e,{type:`success`,title:i(`system.ai.test.success`),description:T,showIcon:!0}),D&&(0,b.jsx)(e,{type:`error`,title:i(`system.ai.test.error`),description:D,showIcon:!0})]})})})]})]})};export{C as default};