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,g as r,at as d,aa as u,ad as c,h as m,ae as v,ai as p,au as g,w as _,v as f,a as y,D as h}from"./element-plus.DhcJM-BD.js";import{o as w,ej as k,B as b,t as V,H as S,K as $,I as x,J as C,R as M,am as I,u as A,v as D,Y as T,Z as O,V as j,X as H,M as U,aQ as L,a9 as z,r as P,c as E,ac as R,D as J,el as K}from"./.pnpm.DGfAnZKL.js";import{l as N,A as B}from"./index.BPA2kTd2.js";import{A as Z}from"./ai_config.OU8K-Y0S.js";import{K as q}from"./knowledge_base.DSwMkM2M.js";import{_ as F}from"./_plugin-vue_export-helper.BCo6x5W8.js";import"./codemirror.CR5zRbyM.js";const Q="/application/ai/model",X={enterprise_naming:"企业起名",enterprise_renaming:"企业改名",enterprise_scoring:"企业测名",enterprise_scoring_trial:"企业测名试用",personal_naming:"个人起名",personal_renaming:"个人改名",personal_scoring:"个人测名",personal_scoring_trial:"个人测名试用"},Y={enterprise:{label:"企业服务",types:["enterprise_naming","enterprise_renaming","enterprise_scoring","enterprise_scoring_trial"]},personal:{label:"个人服务",types:["personal_naming","personal_renaming","personal_scoring","personal_scoring_trial"]}},G={ // 获取模型配置详情(如果不存在会自动创建默认配置) detail:e=>N({url:`${Q}/detail/${e}`,method:"get"}), // 列表查询 list:e=>N({url:`${Q}/list`,method:"get",params:e}), // 更新配置 update:(e,a)=>N({url:`${Q}/update/${e}`,method:"put",data:a}), // 获取可用模型列表 getAvailableModels:e=>N({url:`${Q}/available-models/${e}`,method:"get"}), // 获取训练对话记录 getMessages:e=>N({url:`${Q}/messages/${e}`,method:"get"}), // 删除单条训练对话记录 deleteMessage:e=>N({url:`${Q}/message/${e}`,method:"delete"}), // 清空训练对话记录 clearMessages:e=>N({url:`${Q}/messages/${e}`,method:"delete"}), // 训练对话(流式输出) async chat(e,a){const l=B.getAccessToken();return fetch(`/api/v1${Q}/chat`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:l?`Bearer ${l}`:""},body:JSON.stringify(e),signal:a})}, // 起名测试(非流式,一次性返回) test:e=>N({url:`${Q}/test`,method:"post",data:e})},W={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"},re={class:"welcome-content"},de={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=F(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)}`}}),B=P("enterprise"),F=P("enterprise_naming"),Q=E(()=>Y[B.value].types);function Ie(e){return X[e].replace(/^企业|个人/,"")}function Ae(){const e=Y[B.value].types[0];F.value=e,la()}const De=P(),Te=R({provider_id:void 0,model_name:void 0,system_prompt:"",temperature:1,knowledge_base_ids:[]}),Oe=P({}),je=P(!1),He=P(!1),Ue=P(!1),Le=P([]),ze=P([]),Pe=P([]),Ee=P([]),Re=P(""),Je=P(""),Ke=P(!1),Ne=P(),Be=P(null),Ze=P(!1),qe=P(""),Fe=P(""),Qe=P(!1);async function Xe(){try{const e=await Z.list({page_no:1,page_size:100});Le.value=e.data.data.items}catch(e){}}async function Ye(){try{const e=await q.list({page_no:1,page_size:100,kb_status:2});Pe.value=e.data.data.items}catch(e){}}async function Ge(){je.value=!0;try{const e=(await G.detail(F.value)).data.data;Object.assign(Te,{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||[]}),Oe.value={...Te},e.provider_id&&await We(e.provider_id)}catch(e){}finally{je.value=!1}}async function We(e){try{const a=await G.getAvailableModels(e);ze.value=a.data.data||[]}catch(a){ze.value=[]}}async function ea(){Ue.value=!0;try{const e=await G.getMessages(F.value);Ee.value=e.data.data,ca()}catch(e){}finally{Ue.value=!1}}async function aa(e){Te.model_name=void 0,ze.value=[],e&&await We(e)}async function la(){await Promise.all([Ge(),ea()])}async function ta(){He.value=!0;try{await G.update(F.value,Te),Oe.value={...Te},y.success("配置保存成功")}catch(e){y.error("保存配置失败")}finally{He.value=!1}}async function sa(){var e;const a=Re.value.trim();if(!a||Ke.value)return;const l=JSON.stringify(Te)!==JSON.stringify(Oe.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()};Ee.value.push(t),ca();try{const t={model_type:F.value,message:a,config_changed:l,config_data:l?Te:void 0};Be.value=new AbortController;const s=await G.chat(t,Be.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&&(Oe.value={...Te}),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()};Ee.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()};Ee.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()};Ee.value.push(e)}}finally{Je.value="",Ke.value=!1,Be.value=null,ca()}}function na(){Be.value&&Be.value.abort()}async function ia(){const e=qe.value.trim();if(e&&!Qe.value){Qe.value=!0,Fe.value="";try{const a=await G.test({model_type:F.value,text:e});Fe.value=a.data.data}catch(a){y.error("测试失败,请检查配置和网络连接")}finally{Qe.value=!1}}}function oa(){qe.value="",Fe.value=""}async function ra(e){try{await h.confirm("确定删除这条对话记录吗?","提示",{type:"warning"}),await G.deleteMessage(e),Ee.value=Ee.value.filter(a=>a.id!==e),y.success("删除成功")}catch(a){}}async function da(){try{await h.confirm("确定清空所有对话记录吗?此操作不可恢复。","提示",{type:"warning"}),await G.clearMessages(F.value),Ee.value=[],y.success("对话已清空")}catch(e){}}function ua(e){if(!e)return"";const a=function(e){return e?e.replace(/