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 r,aa as u,ad as c,i as m,ae as v,ai as p,au as g,w as _,v as f,E as y,D as h}from"./element-plus.BfMFfVUv.js";import{J as w,ej as k,t as b,S as V,_ as S,a1 as $,$ as x,a0 as C,H as M,ay as I,o as T,T as A,a9 as D,aa as j,a6 as O,a8 as H,a3 as U,a_ as L,aw as z,r as E,j as P,ak as J,n as R,el as K}from"./.pnpm.BudmgPu7.js";import{l as N,A as q}from"./index.CjKO7M_A.js";import{A as B}from"./ai_config.CJOBnb2u.js";import{K as F}from"./knowledge_base.jxv-xf_v.js";import{_ as Z}from"./_plugin-vue_export-helper.BCo6x5W8.js";import"./codemirror.BdleaLZh.js";const G="/application/ai/model",Q={enterprise_naming:"企业起名",enterprise_renaming:"企业改名",enterprise_scoring:"企业测名",enterprise_scoring_trial:"企业测名试用",personal_naming:"个人起名",personal_renaming:"个人改名",personal_scoring:"个人测名",personal_scoring_trial:"个人测名试用"},W={enterprise:{label:"企业服务",types:["enterprise_naming","enterprise_renaming","enterprise_scoring","enterprise_scoring_trial"]},personal:{label:"个人服务",types:["personal_naming","personal_renaming","personal_scoring","personal_scoring_trial"]}},X={ // 获取模型配置详情(如果不存在会自动创建默认配置) detail:e=>N({url:`${G}/detail/${e}`,method:"get"}), // 列表查询 list:e=>N({url:`${G}/list`,method:"get",params:e}), // 更新配置 update:(e,a)=>N({url:`${G}/update/${e}`,method:"put",data:a}), // 获取可用模型列表 getAvailableModels:e=>N({url:`${G}/available-models/${e}`,method:"get"}), // 获取训练对话记录 getMessages:e=>N({url:`${G}/messages/${e}`,method:"get"}), // 删除单条训练对话记录 deleteMessage:e=>N({url:`${G}/message/${e}`,method:"delete"}), // 清空训练对话记录 clearMessages:e=>N({url:`${G}/messages/${e}`,method:"delete"}), // 训练对话(流式输出) async chat(e,a){const l=q.getAccessToken();return fetch(`undefined${G}/chat`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:l?`Bearer ${l}`:""},body:JSON.stringify(e),signal:a})}, // 起名测试(非流式,一次性返回) test:e=>N({url:`${G}/test`,method:"post",data:e})},Y={class:"ai-model-container"},ee={class:"config-panel"},ae={class:"model-type-selector"},le={class:"category-tabs"},te={class:"type-tabs"},se={class:"chat-panel"},ne={class:"panel-header"},ie={class:"header-actions"},oe={key:0,class:"welcome-screen"},de={class:"welcome-content"},re={key:1,class:"messages-list"},ue={class:"message-content"},ce={class:"message-header"},me=["innerHTML"],ve={class:"message-avatar"},pe={class:"message-avatar"},ge={class:"message-content"},_e={class:"message-header"},fe=["innerHTML"],ye={key:0,class:"message-item assistant"},he={class:"message-avatar"},we={class:"message-content"},ke={class:"message-body"},be=["innerHTML"],Ve={key:1,class:"typing-indicator"},Se={class:"chat-input"},$e={class:"input-wrapper"},xe={class:"test-dialog-content"},Ce={key:0,class:"test-result"},Me=["innerHTML"],Ie=Z(w({name:"AIModel",inheritAttrs:!1,__name:"index",setup(w){const N=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`${N.utils.escapeHtml(e)}`}}),q=E("enterprise"),Z=E("enterprise_naming"),G=P(()=>W[q.value].types);function Ie(e){return Q[e].replace(/^企业|个人/,"")}function Te(){const e=W[q.value].types[0];Z.value=e,la()}const Ae=E(),De=J({provider_id:void 0,model_name:void 0,system_prompt:"",temperature:1,knowledge_base_ids:[]}),je=E({}),Oe=E(!1),He=E(!1),Ue=E(!1),Le=E([]),ze=E([]),Ee=E([]),Pe=E([]),Je=E(""),Re=E(""),Ke=E(!1),Ne=E(),qe=E(null),Be=E(!1),Fe=E(""),Ze=E(""),Ge=E(!1);async function Qe(){try{const e=await B.list({page_no:1,page_size:100});Le.value=e.data.data.items}catch(e){}}async function We(){try{const e=await F.list({page_no:1,page_size:100,kb_status:2});Ee.value=e.data.data.items}catch(e){}}async function Xe(){Oe.value=!0;try{const e=(await X.detail(Z.value)).data.data;Object.assign(De,{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||[]}),je.value={...De},e.provider_id&&await Ye(e.provider_id)}catch(e){}finally{Oe.value=!1}}async function Ye(e){try{const a=await X.getAvailableModels(e);ze.value=a.data.data||[]}catch(a){ze.value=[]}}async function ea(){Ue.value=!0;try{const e=await X.getMessages(Z.value);Pe.value=e.data.data,ca()}catch(e){}finally{Ue.value=!1}}async function aa(e){De.model_name=void 0,ze.value=[],e&&await Ye(e)}async function la(){await Promise.all([Xe(),ea()])}async function ta(){He.value=!0;try{await X.update(Z.value,De),je.value={...De},y.success("配置保存成功")}catch(e){y.error("保存配置失败")}finally{He.value=!1}}async function sa(){var e;const a=Je.value.trim();if(!a||Ke.value)return;const l=JSON.stringify(De)!==JSON.stringify(je.value);Je.value="",Ke.value=!0,Re.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:Z.value,message:a,config_changed:l,config_data:l?De:void 0};qe.value=new AbortController;const s=await X.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});Re.value+=l,ca()}if(l&&(je.value={...De}),Re.value){const e={id:-Date.now()-1,model_config_id:0,role:"assistant",content:Re.value,created_time:(new Date).toISOString(),updated_time:(new Date).toISOString()};Pe.value.push(e)}}catch(s){if("AbortError"===s.name){if(Re.value){const e={id:-Date.now()-1,model_config_id:0,role:"assistant",content:Re.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{Re.value="",Ke.value=!1,qe.value=null,ca()}}function na(){qe.value&&qe.value.abort()}async function ia(){const e=Fe.value.trim();if(e&&!Ge.value){Ge.value=!0,Ze.value="";try{const a=await X.test({model_type:Z.value,text:e});Ze.value=a.data.data}catch(a){y.error("测试失败,请检查配置和网络连接")}finally{Ge.value=!1}}}function oa(){Fe.value="",Ze.value=""}async function da(e){try{await h.confirm("确定删除这条对话记录吗?","提示",{type:"warning"}),await X.deleteMessage(e),Pe.value=Pe.value.filter(a=>a.id!==e),y.success("删除成功")}catch(a){}}async function ra(){try{await h.confirm("确定清空所有对话记录吗?此操作不可恢复。","提示",{type:"warning"}),await X.clearMessages(Z.value),Pe.value=[],y.success("对话已清空")}catch(e){}}function ua(e){if(!e)return"";const a=function(e){return e?e.replace(/