import{Z as e,P as a,ao as l,x as t,aq as s,ar as n,y as i,as as o,h as d,at as u,aa as r,ad as c,i as v,ae as m,ai as p,au as f,w as _,v as y,E as g,D as h}from"./element-plus.BQf8a6uP.js";import{J as w,ej as k,t as b,S as V,_ as S,a1 as x,$ as C,a0 as I,H as D,ay as j,o as M,T,a9 as A,aa as H,a6 as O,a8 as U,a3 as L,a_ as z,aw as E,r as $,j as P,ak as R,n as J,el as K}from"./.pnpm.BudmgPu7.js";import{A as N,a as q,b as F}from"./ai_model.CBMFuUP5.js";import{A as Z}from"./ai_config.DiUMU-rR.js";import{K as B}from"./knowledge_base.C1Pk-lUi.js";import{_ as G}from"./_plugin-vue_export-helper.BCo6x5W8.js";import"./index.DW5SWAAE.js";import"./codemirror.BdleaLZh.js";const Q={class:"ai-model-container"},W={class:"config-panel"},X={class:"model-type-selector"},Y={class:"category-tabs"},ee={class:"type-tabs"},ae={class:"chat-panel"},le={class:"panel-header"},te={class:"header-actions"},se={key:0,class:"welcome-screen"},ne={class:"welcome-content"},ie={key:1,class:"messages-list"},oe={class:"message-content"},de={class:"message-header"},ue=["innerHTML"],re={class:"message-avatar"},ce={class:"message-avatar"},ve={class:"message-content"},me={class:"message-header"},pe=["innerHTML"],fe={key:0,class:"message-item assistant"},_e={class:"message-avatar"},ye={class:"message-content"},ge={class:"message-body"},he=["innerHTML"],we={key:1,class:"typing-indicator"},ke={class:"chat-input"},be={class:"input-wrapper"},Ve={class:"test-dialog-content"},Se={key:0,class:"test-result"},xe=["innerHTML"],Ce=G(w({name:"AIModel",inheritAttrs:!1,__name:"index",setup(w){const G=new k({html:!0,linkify:!0,typographer:!0,breaks:!0,highlight(e,a){if(a&&K.getLanguage(a))try{return`
${K.highlight(e,{language:a,ignoreIllegals:!0}).value}
`}catch{}return`
${G.utils.escapeHtml(e)}
`}}),Ce=$("enterprise"),Ie=$("enterprise_naming"),De=P(()=>N[Ce.value].types);function je(e){return q[e].replace(/^企业|个人/,"")}function Me(){const e=N[Ce.value].types[0];Ie.value=e,la()}const Te=$(),Ae=R({provider_id:void 0,model_name:void 0,system_prompt:"",temperature:1,knowledge_base_ids:[]}),He=$({}),Oe=$(!1),Ue=$(!1),Le=$(!1),ze=$([]),Ee=$([]),$e=$([]),Pe=$([]),Re=$(""),Je=$(""),Ke=$(!1),Ne=$(),qe=$(null),Fe=$(!1),Ze=$(""),Be=$(""),Ge=$(!1);async function Qe(){try{const e=await Z.list({page_no:1,page_size:100});ze.value=e.data.data.items}catch(e){}}async function We(){try{const e=await B.list({page_no:1,page_size:100,kb_status:2});$e.value=e.data.data.items}catch(e){}}async function Xe(){Oe.value=!0;try{const e=(await F.detail(Ie.value)).data.data;Object.assign(Ae,{provider_id:e.provider_id,model_name:e.model_name,system_prompt:e.system_prompt||"",temperature:e.temperature??1,knowledge_base_ids:e.knowledge_base_ids||[]}),He.value={...Ae},e.provider_id&&await Ye(e.provider_id)}catch(e){}finally{Oe.value=!1}}async function Ye(e){try{const a=await F.getAvailableModels(e);Ee.value=a.data.data||[]}catch(a){Ee.value=[]}}async function ea(){Le.value=!0;try{const e=await F.getMessages(Ie.value);Pe.value=e.data.data,ca()}catch(e){}finally{Le.value=!1}}async function aa(e){Ae.model_name=void 0,Ee.value=[],e&&await Ye(e)}async function la(){await Promise.all([Xe(),ea()])}async function ta(){Ue.value=!0;try{await F.update(Ie.value,Ae),He.value={...Ae},g.success("配置保存成功")}catch(e){g.error("保存配置失败")}finally{Ue.value=!1}}async function sa(){var e;const a=Re.value.trim();if(!a||Ke.value)return;const l=JSON.stringify(Ae)!==JSON.stringify(He.value);Re.value="",Ke.value=!0,Je.value="";const t={id:-Date.now(),model_config_id:0,role:"user",content:a,created_time:(new Date).toISOString(),updated_time:(new Date).toISOString()};Pe.value.push(t),ca();try{const t={model_type:Ie.value,message:a,config_changed:l,config_data:l?Ae:void 0};qe.value=new AbortController;const s=await F.chat(t,qe.value.signal);if(!s.ok)throw new Error(`HTTP error! status: ${s.status}`);const n=null==(e=s.body)?void 0:e.getReader();if(!n)throw new Error("无法获取响应流");const i=new TextDecoder;for(;;){const{done:e,value:a}=await n.read();if(e)break;const l=i.decode(a,{stream:!0});Je.value+=l,ca()}if(l&&(He.value={...Ae}),Je.value){const e={id:-Date.now()-1,model_config_id:0,role:"assistant",content:Je.value,created_time:(new Date).toISOString(),updated_time:(new Date).toISOString()};Pe.value.push(e)}}catch(s){if("AbortError"===s.name){if(Je.value){const e={id:-Date.now()-1,model_config_id:0,role:"assistant",content:Je.value+"\n\n*[已停止生成]*",created_time:(new Date).toISOString(),updated_time:(new Date).toISOString()};Pe.value.push(e)}}else{const e={id:-Date.now()-1,model_config_id:0,role:"assistant",content:"发送消息失败,请检查配置和网络连接",created_time:(new Date).toISOString(),updated_time:(new Date).toISOString()};Pe.value.push(e)}}finally{Je.value="",Ke.value=!1,qe.value=null,ca()}}function na(){qe.value&&qe.value.abort()}async function ia(){const e=Ze.value.trim();if(e&&!Ge.value){Ge.value=!0,Be.value="";try{const a=await F.test({model_type:Ie.value,text:e});Be.value=a.data.data}catch(a){g.error("测试失败,请检查配置和网络连接")}finally{Ge.value=!1}}}function oa(){Ze.value="",Be.value=""}async function da(e){try{await h.confirm("确定删除这条对话记录吗?","提示",{type:"warning"}),await F.deleteMessage(e),Pe.value=Pe.value.filter(a=>a.id!==e),g.success("删除成功")}catch(a){}}async function ua(){try{await h.confirm("确定清空所有对话记录吗?此操作不可恢复。","提示",{type:"warning"}),await F.clearMessages(Ie.value),Pe.value=[],g.success("对话已清空")}catch(e){}}function ra(e){if(!e)return"";const a=function(e){return e?e.replace(/([\s\S]*?)<\/think>/g,(e,a)=>`
💭 思考过程
${G.render(a.trim())}
`):""}(e);if(a!==e){const a=e.split(/[\s\S]*?<\/think>/g),l=e.match(/[\s\S]*?<\/think>/g)||[];let t="";for(let e=0;e/g,"").trim();t+=`
💭 思考过程
${G.render(a)}
`}return t}return G.render(e)}function ca(){J(()=>{Ne.value&&(Ne.value.scrollTop=Ne.value.scrollHeight)})}return b(async()=>{await Promise.all([Qe(),We()]),await Promise.all([Xe(),ea()])}),(g,h)=>{const w=e,k=a,b=n,$=s,P=t,R=i,J=o,K=d,F=_,Z=v,B=y,G=l;return V(),S("div",Q,[x("div",W,[h[13]||(h[13]=x("div",{class:"panel-header"},[x("h3",null,"模型配置")],-1)),x("div",X,[x("div",Y,[C(k,{modelValue:Ce.value,"onUpdate:modelValue":h[0]||(h[0]=e=>Ce.value=e),onChange:Me},{default:I(()=>[(V(!0),S(D,null,j(M(N),(e,a)=>(V(),T(w,{key:a,value:a},{default:I(()=>[A(H(e.label),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue"])]),x("div",ee,[C(k,{modelValue:Ie.value,"onUpdate:modelValue":h[1]||(h[1]=e=>Ie.value=e),onChange:la},{default:I(()=>[(V(!0),S(D,null,j(M(De),e=>(V(),T(w,{key:e,value:e},{default:I(()=>[A(H(je(e)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue"])])]),O((V(),T(F,{ref_key:"configFormRef",ref:Te,model:Ae,"label-position":"top",class:"config-form"},{default:I(()=>[C(P,{label:"AI供应商"},{default:I(()=>[C($,{modelValue:Ae.provider_id,"onUpdate:modelValue":h[2]||(h[2]=e=>Ae.provider_id=e),placeholder:"请选择AI供应商",style:{width:"100%"},onChange:aa},{default:I(()=>[(V(!0),S(D,null,j(ze.value,e=>(V(),T(b,{key:e.id,label:e.name,value:e.id||""},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),C(P,{label:"模型"},{default:I(()=>[C($,{modelValue:Ae.model_name,"onUpdate:modelValue":h[3]||(h[3]=e=>Ae.model_name=e),placeholder:"请选择或输入模型名称",style:{width:"100%"},disabled:!Ae.provider_id,filterable:"","allow-create":"","default-first-option":""},{default:I(()=>[(V(!0),S(D,null,j(Ee.value,e=>(V(),T(b,{key:e.id,label:e.name,value:e.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","disabled"])]),_:1}),C(P,{label:"系统提示词"},{default:I(()=>[C(R,{modelValue:Ae.system_prompt,"onUpdate:modelValue":h[4]||(h[4]=e=>Ae.system_prompt=e),type:"textarea",rows:6,placeholder:"请输入系统提示词"},null,8,["modelValue"])]),_:1}),C(P,{label:"模型温度"},{default:I(()=>[C(J,{modelValue:Ae.temperature,"onUpdate:modelValue":h[5]||(h[5]=e=>Ae.temperature=e),min:0,max:2,step:.1,"show-input":"","show-input-controls":!1,"input-size":"small"},null,8,["modelValue"])]),_:1}),C(P,{label:"关联知识库"},{default:I(()=>[C($,{modelValue:Ae.knowledge_base_ids,"onUpdate:modelValue":h[6]||(h[6]=e=>Ae.knowledge_base_ids=e),multiple:"",placeholder:"请选择关联的知识库",style:{width:"100%"}},{default:I(()=>[(V(!0),S(D,null,j($e.value,e=>(V(),T(b,{key:e.id,label:e.name,value:e.id||""},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),C(P,null,{default:I(()=>[C(K,{type:"primary",loading:Ue.value,onClick:ta,style:{width:"100%"}},{default:I(()=>[...h[12]||(h[12]=[A(" 保存配置 ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"])),[[G,Oe.value]])]),x("div",ae,[x("div",le,[x("h3",null,"对话训练 - "+H(M(q)[Ie.value]),1),x("div",te,[C(K,{text:"",icon:M(u),onClick:h[7]||(h[7]=e=>Fe.value=!0)},{default:I(()=>[...h[14]||(h[14]=[A(" 起名测试 ",-1)])]),_:1},8,["icon"]),Pe.value.length>0?(V(),T(K,{key:0,text:"",icon:M(r),onClick:ua},{default:I(()=>[...h[15]||(h[15]=[A(" 清空对话 ",-1)])]),_:1},8,["icon"])):U("",!0)])]),x("div",{ref_key:"messagesContainer",ref:Ne,class:"chat-messages"},[0!==Pe.value.length||Le.value?O((V(),S("div",ie,[(V(!0),S(D,null,j(Pe.value,e=>(V(),S("div",{key:e.id,class:L(["message-item",e.role])},["user"===e.role?(V(),S(D,{key:0},[x("div",oe,[x("div",de,[C(K,{text:"",size:"small",icon:M(r),class:"delete-btn",onClick:a=>da(e.id)},null,8,["icon","onClick"]),h[17]||(h[17]=x("span",{class:"sender-name"},"用户",-1))]),x("div",{class:"message-body",innerHTML:ra(e.content)},null,8,ue)]),x("div",re,[C(Z,null,{default:I(()=>[C(M(m))]),_:1})])],64)):(V(),S(D,{key:1},[x("div",ce,[C(Z,null,{default:I(()=>[C(M(c))]),_:1})]),x("div",ve,[x("div",me,[h[18]||(h[18]=x("span",{class:"sender-name"},"AI",-1)),C(K,{text:"",size:"small",icon:M(r),class:"delete-btn",onClick:a=>da(e.id)},null,8,["icon","onClick"])]),x("div",{class:"message-body",innerHTML:ra(e.content)},null,8,pe)])],64))],2))),128)),Ke.value?(V(),S("div",fe,[x("div",_e,[C(Z,null,{default:I(()=>[C(M(c))]),_:1})]),x("div",ye,[h[20]||(h[20]=x("div",{class:"message-header"},[x("span",{class:"sender-name"},"AI")],-1)),x("div",ge,[Je.value?(V(),S("span",{key:0,innerHTML:ra(Je.value)},null,8,he)):(V(),S("span",we,[...h[19]||(h[19]=[x("span",null,null,-1),x("span",null,null,-1),x("span",null,null,-1)])]))])])])):U("",!0)])),[[G,Le.value]]):(V(),S("div",se,[x("div",ne,[C(Z,{size:"48"},{default:I(()=>[C(M(c))]),_:1}),x("h2",null,H(M(q)[Ie.value])+"训练",1),h[16]||(h[16]=x("p",null,"通过与AI对话来训练和优化模型效果",-1))])]))],512),x("div",ke,[x("div",be,[C(R,{modelValue:Re.value,"onUpdate:modelValue":h[8]||(h[8]=e=>Re.value=e),type:"textarea",rows:1,autosize:{minRows:1,maxRows:4},placeholder:"输入消息进行训练...",disabled:Ke.value,onKeydown:z(E(sa,["exact","prevent"]),["enter"])},null,8,["modelValue","disabled","onKeydown"]),Ke.value?(V(),T(K,{key:1,type:"danger",icon:M(f),circle:"",onClick:na},null,8,["icon"])):(V(),T(K,{key:0,type:"primary",icon:M(p),disabled:!Re.value.trim(),circle:"",onClick:sa},null,8,["icon","disabled"]))]),h[21]||(h[21]=x("div",{class:"input-hint"}," 按 Enter 发送消息,Shift + Enter 换行 ",-1))])]),C(B,{modelValue:Fe.value,"onUpdate:modelValue":h[11]||(h[11]=e=>Fe.value=e),title:"起名测试",width:"600px","close-on-click-modal":!1,onClosed:oa},{footer:I(()=>[C(K,{onClick:h[10]||(h[10]=e=>Fe.value=!1)},{default:I(()=>[...h[23]||(h[23]=[A("关闭",-1)])]),_:1}),C(K,{type:"primary",loading:Ge.value,disabled:!Ze.value.trim(),onClick:ia},{default:I(()=>[...h[24]||(h[24]=[A(" 提交测试 ",-1)])]),_:1},8,["loading","disabled"])]),default:I(()=>[x("div",Ve,[C(F,{"label-position":"top"},{default:I(()=>[C(P,{label:"测试内容"},{default:I(()=>[C(R,{modelValue:Ze.value,"onUpdate:modelValue":h[9]||(h[9]=e=>Ze.value=e),type:"textarea",rows:4,placeholder:"请输入要测试的内容...",disabled:Ge.value},null,8,["modelValue","disabled"])]),_:1})]),_:1}),Be.value?(V(),S("div",Se,[h[22]||(h[22]=x("div",{class:"result-header"},[x("span",null,"测试结果")],-1)),x("div",{class:"result-content",innerHTML:ra(Be.value)},null,8,xe)])):U("",!0)])]),_:1},8,["modelValue"])])}}}),[["__scopeId","data-v-b7d6e58d"]]);export{Ce as default};