mirror of
https://github.com/vastxie/99AI.git
synced 2025-09-26 05:16:37 +08:00
11 lines
18 KiB
JavaScript
11 lines
18 KiB
JavaScript
|
||
/**
|
||
* 由 Fantastic-admin 提供技术支持
|
||
* Powered by Fantastic-admin
|
||
* Gitee https://gitee.com/hooray/fantastic-admin
|
||
* Github https://github.com/hooray/fantastic-admin
|
||
*/
|
||
|
||
import{_ as _e}from"./index-38e73db4.js";import{Y as K,d as ge,r as w,Q as W,B as J,x as ke,h as r,R as be,o as n,c as S,e,f as t,S as q,U as C,b as m,l as s,a as k,w as Z,I as c,t as f,J as R,V as we,E as ee,X as ve,q as le}from"./index-b779f4e0.js";import{u as Te}from"./utcformatTime-e76e5157.js";import{f as Ve,g as te,M as he,b as xe,h as Ue,i as Me}from"./index-7b2ba868.js";const j={queryModels:N=>K.get("models/query",{params:N}),setModels:N=>K.post("models/setModel",N),delModels:N=>K.post("models/delModel",N)},Se={style:{float:"right"}},Ne={class:"overflow-y-scroll w-full whitespace-nowrap"},qe=k("div",{style:{width:"250px"}}," 账号启用状态、一旦锁定当前key将停止工作! ",-1),Ce=k("div",{style:{width:"250px"}}," 给定了部分可选的模型列表、你可以可以手动填写您需要调用的模型、请确保填写的模型是当前key支持的类型、否则可能会在调用中出现不可预知错误! ",-1),Oe=k("div",{style:{width:"250px"}}," 设置当前key的扣费类型、扣除普通积分或是高级积分。 ",-1),Re=k("div",{style:{width:"250px"}}," 设置当前key的单次调用扣除积分、建议同模型或名称key设置相同的金额、避免扣费发生异常! ",-1),Fe=k("div",{style:{width:"250px"}}," 填写此配置可以限制用户在选择模型时候的高级配置中的最大上下文轮次、可以通过限制此数量减少token的损耗、减低上下文的损耗量、 如果设置了模型的最大token和返回量、那么两个限制会同时生效! ",-1),Be=k("div",{style:{width:"250px"}}," 当前轮询是根据模型下的列表按顺序调用、如果权重为2则表示轮到此key的时候会调用两次之后再轮询下一个key 保证每个key的调用顺序以及限制每次调用的准确次数 ",-1),De=k("div",{style:{width:"250px"}}," 基于 token 计费,计费方式为(基础消费 * token消耗) ",-1),Le=k("div",null,"选择是否开启文件上传及其格式",-1),ze=k("div",{style:{width:"250px"}}," 开启 Token 计费后生效,每积分等价于多少 Token ",-1),Ae={class:"flex justify-end mr-5"},Pe=ge({__name:"key",setup(N){w();const Q=w(),E=w(0),x=w(!1),F=w(!1),oe=w(!1);w(!1);const y=W({keyType:"",model:"",status:null,page:1,size:10}),D=w(),U=w(0),a=W({keyType:1,modelName:"",key:"",modelAvatar:"",status:!0,model:"",isTokenBased:!1,tokenFeeRatio:1e3,keyWeight:1,modelOrder:1,maxModelTokens:4e3,proxyUrl:"",timeout:300,deduct:1,deductType:1,maxRounds:12,isFileUpload:0}),ae=W({keyType:[{required:!0,message:"请选择调用模型类型",trigger:"blur"}],modelName:[{required:!0,message:"请填写您的模型名称",trigger:"blur"}],key:[{required:!1,message:"请填写您的调用模型key",trigger:"blur"}],status:[{required:!0,message:"请选择key的启用状态",trigger:"change"}],isFileUpload:[{required:!1,message:"请选择当前模型是否开启文件上传及支持种类",trigger:"change"}],isTokenBased:[{required:!0,message:"请选择当前key是否基于token计费",trigger:"change"}],tokenFeeRatio:[{required:!1,message:"token计费比例",trigger:"change"}],model:[{required:!0,message:"请选择当前key需要绑定的模型",trigger:"change"}],modelOrder:[{required:!0,message:"请填写当前模型排序",trigger:"blur"}],keyWeight:[{required:!0,message:"请填写key的权重值",trigger:"blur"}],maxModelTokens:[{required:!0,message:"请填写模型最大token数",trigger:"blur"}],proxyUrl:[{required:!1,message:"请填写指定代理地址",trigger:"blur"}],modelAvatar:[{required:!1,message:"请填写AI模型使用的头像, 不填写使用系统默认",trigger:"blur"}],timeout:[{required:!0,message:"请填写超时时间 默认 60 单位(秒)",trigger:"blur"}],deductType:[{required:!0,message:"请选择当前模型扣费类型",trigger:"change"}],deduct:[{required:!0,message:"请填写当前模型扣费金额(需要是正整数)",trigger:"blur"}],maxRounds:[{required:!0,message:"请填写允许用户选择的最大上下文轮次",trigger:"blur"}]});function de(u){U.value=0,u==null||u.resetFields()}const re=J(()=>Ve[a.keyType]),se=J(()=>U.value?"修改模型":"新增模型"),ue=J(()=>U.value?"确认更新":"确认新增"),X=w([]);async function M(){try{F.value=!0;const u=await j.queryModels(y);F.value=!1;const{rows:o,count:p}=u.data;E.value=p,X.value=o}catch{F.value=!1}}async function ne(u){const{id:o}=u;await j.delModels({id:o}),ee({type:"success",message:"操作完成!"}),M()}function ie(u){U.value=u.id;const{keyType:o,modelName:p,key:v,status:d,model:b,keyWeight:L,modelOrder:_,maxModelTokens:B,proxyUrl:O,timeout:z,deductType:T,deduct:i,maxRounds:A,modelAvatar:P,isTokenBased:I,tokenFeeRatio:Y,isFileUpload:g}=u;ve(()=>{Object.assign(a,{keyType:o,modelName:p,key:v,status:d,model:b,keyWeight:L,modelOrder:_,maxModelTokens:B,proxyUrl:O,timeout:z,deductType:T,deduct:i,maxRounds:A,modelAvatar:P,isTokenBased:I,tokenFeeRatio:Y,isFileUpload:g})}),x.value=!0}function pe(u){u==null||u.resetFields(),M()}async function me(u){u==null||u.validate(async o=>{if(o){const p=JSON.parse(JSON.stringify(a));if(delete p.id,U.value&&(p.id=U.value),Number(a.keyType)===1){const d=JSON.parse(JSON.stringify(a.key)).split(`
|
||
`);p.key=d}await j.setModels(p),ee({type:"success",message:"操作成功!"}),U.value=0,x.value=!1,M()}})}return ke(()=>{M()}),(u,o)=>{const p=r("el-option"),v=r("el-select"),d=r("el-form-item"),b=r("el-button"),L=r("Plus"),_=r("el-icon"),B=r("el-form"),O=_e,z=r("el-alert"),T=r("el-tag"),i=r("el-table-column"),A=r("el-popconfirm"),P=r("el-table"),I=r("el-pagination"),Y=r("el-row"),g=r("el-input"),G=r("el-switch"),V=r("QuestionFilled"),h=r("el-tooltip"),$=r("el-radio"),ce=r("el-radio-group"),fe=r("el-dialog"),H=be("loading");return n(),S("div",null,[e(O,null,{default:t(()=>[e(B,{ref_key:"formRef",ref:Q,inline:!0,model:y},{default:t(()=>[e(d,{label:"模型类型",prop:"model"},{default:t(()=>[e(v,{modelValue:y.keyType,"onUpdate:modelValue":o[0]||(o[0]=l=>y.keyType=l),filterable:"","allow-create":"",placeholder:"请选择或填写绑定的模型",clearable:""},{default:t(()=>[(n(!0),S(q,null,C(m(te),l=>(n(),c(p,{key:l,label:l.label,value:l.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"使用模型",prop:"model"},{default:t(()=>[e(v,{modelValue:y.model,"onUpdate:modelValue":o[1]||(o[1]=l=>y.model=l),filterable:"","allow-create":"",placeholder:"请选择或填写绑定的模型",clearable:""},{default:t(()=>[(n(!0),S(q,null,C(m(he),l=>(n(),c(p,{key:l,label:l,value:l},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"启用状态",prop:"status"},{default:t(()=>[e(v,{modelValue:y.status,"onUpdate:modelValue":o[2]||(o[2]=l=>y.status=l),placeholder:"请选择key启用状态",clearable:""},{default:t(()=>[(n(!0),S(q,null,C(m(xe),l=>(n(),c(p,{key:l.value,label:l.label,value:l.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(d,null,{default:t(()=>[e(b,{type:"primary",onClick:M},{default:t(()=>[s(" 查询 ")]),_:1}),e(b,{onClick:o[3]||(o[3]=l=>pe(m(Q)))},{default:t(()=>[s(" 重置 ")]),_:1})]),_:1}),k("span",Se,[e(b,{type:"success",onClick:o[4]||(o[4]=l=>x.value=!0)},{default:t(()=>[s(" 添加模型Key "),e(_,{class:"ml-3"},{default:t(()=>[e(L)]),_:1})]),_:1})])]),_:1},8,["model"])]),_:1}),e(O,null,{default:t(()=>[e(z,{"show-icon":"",title:"模型配置说明",description:"模型分为(对话模型|绘画模型|特殊模型三类),对话模型和绘画模型均在前端显示,特殊模型默认隐藏,其中,开启翻译、导图、gpts均需单独配置对应模型",type:"success"})]),_:1}),e(O,{style:{width:"100%"}},{default:t(()=>[Z((n(),c(P,{border:"",data:m(X),style:{width:"100%"},size:"large"},{default:t(()=>[e(i,{prop:"keyType",label:"模型类型",width:"120"},{default:t(l=>[e(T,{type:"success"},{default:t(()=>[s(f(m(Ue)[l.row.keyType]),1)]),_:2},1024)]),_:1}),e(i,{prop:"modelOrder",label:"模型排序",width:"90",align:"center"}),e(i,{prop:"modelName",label:"模型名称",width:"180"}),e(i,{prop:"status",align:"center",label:"启用状态",width:"90"},{default:t(l=>[e(T,{type:l.row.status?"success":"danger"},{default:t(()=>[s(f(l.row.status?"使用中":"已暂停"),1)]),_:2},1032,["type"])]),_:1}),e(i,{prop:"key",label:"模型KEY",width:"460"},{default:t(l=>[k("div",Ne,f(l.row.key),1)]),_:1}),e(i,{prop:"model",align:"center",label:"绑定模型",width:"180"},{default:t(l=>[e(T,{type:l.row.model.includes("gpt-4")?"success":""},{default:t(()=>[s(f(l.row.model),1)]),_:2},1032,["type"])]),_:1}),e(i,{prop:"isTokenBased",align:"center",label:"Token计费",width:"120"},{default:t(l=>[e(T,{type:l.row.isTokenBased?"success":"danger"},{default:t(()=>[s(f(l.row.isTokenBased?"是":"否"),1)]),_:2},1032,["type"])]),_:1}),e(i,{prop:"deductType",align:"center",label:"扣费类型",width:"90"},{default:t(l=>[e(T,{type:l.row.deductType===1?"success":"warning"},{default:t(()=>[s(f(l.row.deductType===1?"普通积分":"高级积分"),1)]),_:2},1032,["type"])]),_:1}),e(i,{prop:"deduct",align:"center",label:"单次扣除",width:"90"},{default:t(l=>[e(T,{type:l.row.deductType===1?"success":"warning"},{default:t(()=>[s(f(`${l.row.deduct} 积分`),1)]),_:2},1032,["type"])]),_:1}),e(i,{prop:"useCount",align:"center",label:"调用次数",width:"90"}),e(i,{prop:"useToken",align:"center",label:"已使用Token",width:"120"}),e(i,{prop:"keyStatus",align:"center",label:"key状态",width:"110"},{default:t(l=>[e(T,{type:l.row.keyStatus===1?"success":"danger"},{default:t(()=>[s(f(l.row.keyStatus===1?"正常工作":l.row.keyStatus===-1?"已被封禁":"余额耗尽 "),1)]),_:2},1032,["type"])]),_:1}),e(i,{prop:"maxModelTokens",align:"center",label:"模型最大上下文",width:"140"},{default:t(l=>[e(b,{type:"info",text:""},{default:t(()=>[s(f(l.row.maxModelTokens||"-"),1)]),_:2},1024)]),_:1}),e(i,{prop:"proxyUrl",align:"center",label:"绑定的代理地址",width:"140"},{default:t(l=>[e(b,{type:"info",text:""},{default:t(()=>[s(f(l.row.proxyUrl||"-"),1)]),_:2},1024)]),_:1}),e(i,{prop:"proxyUrl",align:"center",label:"变更提示信息",width:"180"},{default:t(l=>[s(f(l.row.remark||"-"),1)]),_:1}),e(i,{prop:"createdAt",align:"center",label:"添加时间",width:"120"},{default:t(l=>[s(f(m(Te)(l.row.createdAt,"YYYY-MM-DD")),1)]),_:1}),e(i,{fixed:"right",label:"操作",width:"200"},{default:t(l=>[e(b,{link:"",type:"primary",size:"small",onClick:ye=>ie(l.row)},{default:t(()=>[s(" 变更 ")]),_:2},1032,["onClick"]),e(A,{title:"确认删除此秘钥么?",width:"180","icon-color":"red",onConfirm:ye=>ne(l.row)},{reference:t(()=>[e(b,{link:"",type:"danger",size:"small"},{default:t(()=>[s(" 删除秘钥 ")]),_:1})]),_:2},1032,["onConfirm"])]),_:1})]),_:1},8,["data"])),[[H,m(F)]]),e(Y,{class:"flex justify-end mt-5"},{default:t(()=>[e(I,{"current-page":y.page,"onUpdate:currentPage":o[5]||(o[5]=l=>y.page=l),"page-size":y.size,"onUpdate:pageSize":o[6]||(o[6]=l=>y.size=l),class:"mr-5","page-sizes":[10,20,30,50],layout:"total, sizes, prev, pager, next, jumper",total:m(E),onSizeChange:M,onCurrentChange:M},null,8,["current-page","page-size","total"])]),_:1})]),_:1}),e(fe,{modelValue:m(x),"onUpdate:modelValue":o[25]||(o[25]=l=>we(x)?x.value=l:null),"close-on-click-modal":!1,title:se.value,width:"770",onClose:o[26]||(o[26]=l=>de(m(D)))},{footer:t(()=>[k("span",Ae,[e(b,{onClick:o[23]||(o[23]=l=>x.value=!1)},{default:t(()=>[s("取消")]),_:1}),e(b,{type:"primary",onClick:o[24]||(o[24]=l=>me(m(D)))},{default:t(()=>[s(f(ue.value),1)]),_:1})])]),default:t(()=>[Z((n(),c(B,{ref_key:"formPackageRef",ref:D,"label-position":"right","label-width":"120px",model:a,rules:ae},{default:t(()=>[e(d,{label:"模型类型选择",prop:"keyType"},{default:t(()=>[e(v,{modelValue:a.keyType,"onUpdate:modelValue":o[7]||(o[7]=l=>a.keyType=l),placeholder:"请选择模型类型",style:{width:"100%"}},{default:t(()=>[(n(!0),S(q,null,C(m(te),l=>(n(),c(p,{key:l.value,label:l.label,value:l.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"模型中文名称",prop:"modelName"},{default:t(()=>[e(g,{modelValue:a.modelName,"onUpdate:modelValue":o[8]||(o[8]=l=>a.modelName=l),placeholder:"请填写模型中文名称(用户选择的)"},null,8,["modelValue"])]),_:1}),e(d,{label:"模型排序",prop:"modelOrder"},{default:t(()=>[e(g,{modelValue:a.modelOrder,"onUpdate:modelValue":o[9]||(o[9]=l=>a.modelOrder=l),modelModifiers:{number:!0},placeholder:"模型排序,越小越靠前。"},null,8,["modelValue"])]),_:1}),e(d,{label:"模型启用状态",prop:"status"},{default:t(()=>[e(G,{modelValue:a.status,"onUpdate:modelValue":o[10]||(o[10]=l=>a.status=l)},null,8,["modelValue"]),e(h,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[qe]),default:t(()=>[e(_,{class:"ml-3 cursor-pointer"},{default:t(()=>[e(V)]),_:1})]),_:1})]),_:1}),e(d,{label:"模型密钥",prop:"key"},{default:t(()=>[e(g,{modelValue:a.key,"onUpdate:modelValue":o[11]||(o[11]=l=>a.key=l),type:"text",placeholder:"请填写模型Key",style:{width:"95%"}},null,8,["modelValue"])]),_:1}),e(d,{label:"指定代理地址",prop:"proxyUrl"},{default:t(()=>[e(g,{modelValue:a.proxyUrl,"onUpdate:modelValue":o[12]||(o[12]=l=>a.proxyUrl=l),modelModifiers:{number:!0},placeholder:"如需使用代理请填写、不填写默认使用全局配置!"},null,8,["modelValue"])]),_:1}),e(d,{label:"账号关联模型",prop:"model"},{default:t(()=>[e(v,{modelValue:a.model,"onUpdate:modelValue":o[13]||(o[13]=l=>a.model=l),filterable:"",clearable:"",placeholder:"请选用或填写绑定的模型","allow-create":"",style:{width:"80%"}},{default:t(()=>[(n(!0),S(q,null,C(re.value,l=>(n(),c(p,{key:l,label:l,value:l},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e(h,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[Ce]),default:t(()=>[e(_,{class:"ml-3 cursor-pointer"},{default:t(()=>[e(V)]),_:1})]),_:1})]),_:1}),e(d,{label:"模型扣费类型",prop:"deductType"},{default:t(()=>[e(v,{modelValue:a.deductType,"onUpdate:modelValue":o[14]||(o[14]=l=>a.deductType=l),filterable:"","allow-create":"",clearable:"",placeholder:"请选用模型扣费类型",style:{width:"80%"}},{default:t(()=>[(n(!0),S(q,null,C(m(Me),l=>(n(),c(p,{key:l.value,label:l.label,value:l.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e(h,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[Oe]),default:t(()=>[e(_,{class:"ml-3 cursor-pointer"},{default:t(()=>[e(V)]),_:1})]),_:1})]),_:1}),e(d,{label:"单次扣除金额",prop:"deduct"},{default:t(()=>[e(g,{modelValue:a.deduct,"onUpdate:modelValue":o[15]||(o[15]=l=>a.deduct=l),modelModifiers:{number:!0},placeholder:"请填写单次调用此key的扣费金额!",style:{width:"80%"}},null,8,["modelValue"]),e(h,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[Re]),default:t(()=>[e(_,{class:"ml-3 cursor-pointer"},{default:t(()=>[e(V)]),_:1})]),_:1})]),_:1}),[1].includes(Number(a.keyType))?(n(),c(d,{key:0,label:"上下文限制",prop:"maxRounds"},{default:t(()=>[e(g,{modelValue:a.maxRounds,"onUpdate:modelValue":o[16]||(o[16]=l=>a.maxRounds=l),modelModifiers:{number:!0},placeholder:"请填写允许用户选择的最高上下文轮次!",style:{width:"80%"}},null,8,["modelValue"]),e(h,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[Fe]),default:t(()=>[e(_,{class:"ml-3 cursor-pointer"},{default:t(()=>[e(V)]),_:1})]),_:1})]),_:1})):R("",!0),[1].includes(Number(a.keyType))?(n(),c(d,{key:1,label:"调用轮询权重",prop:"keyWeight"},{default:t(()=>[e(g,{modelValue:a.keyWeight,"onUpdate:modelValue":o[17]||(o[17]=l=>a.keyWeight=l),modelModifiers:{number:!0},placeholder:"请填写key的权重、数字越大使用评率越高!",style:{width:"80%"}},null,8,["modelValue"]),e(h,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[Be]),default:t(()=>[e(_,{class:"ml-3 cursor-pointer"},{default:t(()=>[e(V)]),_:1})]),_:1})]),_:1})):R("",!0),[1].includes(Number(a.keyType))?(n(),c(d,{key:2,label:"模型最大Token",prop:"maxModelTokens"},{default:t(()=>[e(g,{modelValue:a.maxModelTokens,"onUpdate:modelValue":o[18]||(o[18]=l=>a.maxModelTokens=l),modelModifiers:{number:!0},placeholder:"请填写模型最大Token、不填写默认使用默认!"},null,8,["modelValue"])]),_:1})):R("",!0),e(d,{label:"调用超时时间",prop:"timeout"},{default:t(()=>[e(g,{modelValue:a.timeout,"onUpdate:modelValue":o[19]||(o[19]=l=>a.timeout=l),modelModifiers:{number:!0},placeholder:"请填写key的超时时间单位(秒)!"},null,8,["modelValue"])]),_:1}),[1,3].includes(Number(a.keyType))?(n(),c(d,{key:3,label:"设为token计费",prop:"isTokenBased"},{default:t(()=>[e(G,{modelValue:a.isTokenBased,"onUpdate:modelValue":o[20]||(o[20]=l=>a.isTokenBased=l)},null,8,["modelValue"]),e(h,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[De]),default:t(()=>[e(_,{class:"ml-3 cursor-pointer"},{default:t(()=>[e(V)]),_:1})]),_:1})]),_:1})):R("",!0),e(d,{label:"文件上传",prop:"isFileUpload"},{default:t(()=>[e(ce,{modelValue:a.isFileUpload,"onUpdate:modelValue":o[21]||(o[21]=l=>a.isFileUpload=l)},{default:t(()=>[e($,{label:0},{default:t(()=>[s("不使用")]),_:1}),e($,{label:1},{default:t(()=>[s("ALL格式-直接附带链接")]),_:1}),e($,{label:2},{default:t(()=>[s("4V-格式")]),_:1})]),_:1},8,["modelValue"]),e(h,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[Le]),default:t(()=>[e(_,{class:"ml-3 cursor-pointer"},{default:t(()=>[e(V)]),_:1})]),_:1})]),_:1}),[1,3].includes(Number(a.keyType))?(n(),c(d,{key:4,label:"token计费比例",prop:"tokenFeeRatio"},{default:t(()=>[e(g,{modelValue:a.tokenFeeRatio,"onUpdate:modelValue":o[22]||(o[22]=l=>a.tokenFeeRatio=l),modelModifiers:{number:!0},placeholder:"请填写token计费比例",style:{width:"80%"}},null,8,["modelValue"]),e(h,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[ze]),default:t(()=>[e(_,{class:"ml-3 cursor-pointer"},{default:t(()=>[e(V)]),_:1})]),_:1})]),_:1})):R("",!0)]),_:1},8,["model","rules"])),[[H,m(oe)]])]),_:1},8,["modelValue","title"])])}}});typeof le=="function"&&le(Pe);export{Pe as default};
|