/** * 由 Fantastic-admin 提供技术支持 * Powered by Fantastic-admin * Gitee https://gitee.com/hooray/fantastic-admin * Github https://github.com/hooray/fantastic-admin */ import{_ as ye}from"./index-a0d19af7.js";import{A as W}from"./models-0bafcb68.js";import{u as ce}from"./utcformatTime-e76e5157.js";import{f as fe,g as ke,h as Q,M as _e,b as ge,i as be,j as we}from"./index-d342e869.js";import{d as Te,r as w,Q as $,B as L,x as ve,o as n,c as N,e as l,f as t,R as S,S as D,b as u,k as i,a as g,w as X,I as _,t as y,J as I,U as xe,E as G,W as Ve,h as p,X as he,q as H}from"./index-364622c9.js";const Me={style:{float:"right"}},Ue={class:"overflow-y-scroll w-full whitespace-nowrap"},Ne=g("div",{style:{width:"250px"}}," 账号启用状态、一旦锁定当前key将停止工作! ",-1),Se=g("div",{style:{width:"250px"}}," 不同模型的设置不同、例如openai仅设置key即可、如果是百度大模型、则填写clientId以及同时需要填写secret。对于OPENAI模型、我们支持批量导入、如果您需要批量导入key、则一行一个key即可、多个key使用换行隔离、其余配置将共享、多个key可以重复选用默认模型。 ",-1),De=g("div",{style:{width:"250px"}}," 不同账号填写的内容不同、但是都代表的是Secret秘钥 ",-1),Re=g("div",{style:{width:"250px"}}," 给定了部分可选的模型列表、你可以可以手动填写您需要调用的模型、请确保填写的模型是当前key支持的类型、否则可能会在调用中出现不可预知错误! ",-1),Ce=g("div",{style:{width:"250px"}}," 设置当前key的扣费类型、扣除普通余额或是高级余额。 ",-1),qe=g("div",{style:{width:"250px"}}," 设置当前key的单词调用扣除余额、建议同模型或名称key设置相同的金额、避免扣费发生异常! ",-1),Le=g("div",{style:{width:"250px"}}," 填写此配置可以限制用户在选择模型时候的高级配置中的最大上下文轮次、可以通过限制此数量减少token的损耗、减低上下文的损耗量、 如果设置了模型的最大token和返回量、那么两个限制会同时生效! ",-1),Ie=g("div",{style:{width:"250px"}}," 当前轮询是根据模型下的列表按顺序调用、如果权重为2则表示轮到此key的时候会调用两次之后再轮询下一个key 保证每个key的调用顺序以及限制每次调用的准确次数 ",-1),Oe=g("div",{style:{width:"250px"}}," 基础绘画来自于OPENAI的DALL-E模型、所以需要为官方的apiKey、请确定至少设置一张key为基础绘画key即可使用绘画功能!同时当前版本的mind思维导图和mj联想绘图等功能都会走当前设置的key,会后后续版本解除此限制! ",-1),Pe={class:"flex justify-end mr-5"},ze=Te({__name:"key",setup(Ae){w();const j=w(),B=w(0),h=w(!1),C=w(!1),Z=w(!1);w(!1);const c=$({keyType:"",model:"",status:null,page:1,size:10}),O=w(),M=w(0),o=$({keyType:1,modelName:"",key:"",secret:null,status:!0,model:"",isDraw:!1,keyWeight:1,maxModelTokens:4096,maxResponseTokens:2e3,proxyUrl:"",timeout:300,deduct:1,deductType:1,maxRounds:12}),ee=$({keyType:[{required:!0,message:"请填写您的调用模型类型",trigger:"blur"}],modelName:[{required:!0,message:"请填写您的模型名称",trigger:"blur"}],key:[{required:!0,message:"请填写您的调用模型key",trigger:"blur"}],secret:[{required:!0,message:"请填写您的调用模型的secret",trigger:"blur"}],status:[{required:!0,message:"请选择key的启用状态",trigger:"change"}],isDraw:[{required:!0,message:"请选择当前key是否作为基础绘画key",trigger:"change"}],model:[{required:!0,message:"请选择当前key需要绑定的模型",trigger:"change"}],keyWeight:[{required:!0,message:"请填写key的权重值",trigger:"blur"}],maxModelTokens:[{required:!0,message:"请填写模型最大token数",trigger:"blur"}],maxResponseTokens:[{required:!0,message:"请填写允许用户使用的最大回复token数",trigger:"blur"}],proxyUrl:[{required:!1,message:"请填写指定代理地址",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 le(s){M.value=0,s==null||s.resetFields()}const te=L(()=>fe[o.keyType]),ae=L(()=>M.value?"更新秘钥":"新增秘钥"),oe=L(()=>ke[o.keyType]),re=L(()=>M.value?"确认更新":"确认新增"),E=w([]);async function U(){try{C.value=!0;const s=await W.queryModels(c);C.value=!1;const{rows:a,count:m}=s.data;B.value=m,E.value=a}catch{C.value=!1}}async function se(s){const{id:a}=s;await W.delModels({id:a}),G({type:"success",message:"操作完成!"}),U()}function de(s){M.value=s.id;const{keyType:a,modelName:m,key:T,secret:r,status:f,model:P,keyWeight:k,maxModelTokens:q,maxResponseTokens:R,proxyUrl:z,timeout:v,deductType:d,deduct:A,maxRounds:K,isDraw:Y}=s;Ve(()=>{Object.assign(o,{keyType:a,modelName:m,key:T,secret:r,status:f,model:P,keyWeight:k,maxModelTokens:q,maxResponseTokens:R,proxyUrl:z,timeout:v,deductType:d,deduct:A,maxRounds:K,isDraw:Y})}),h.value=!0}function ne(s){s==null||s.resetFields(),U()}async function ue(s){s==null||s.validate(async a=>{if(a){const m=JSON.parse(JSON.stringify(o));if(delete m.id,M.value&&(m.id=M.value),Number(o.keyType)===1){const r=JSON.parse(JSON.stringify(o.key)).split(` `);m.key=r}await W.setModels(m),G({type:"success",message:"操作成功!"}),M.value=0,h.value=!1,U()}})}return ve(()=>{U()}),(s,a)=>{const m=p("el-option"),T=p("el-select"),r=p("el-form-item"),f=p("el-button"),P=p("Plus"),k=p("el-icon"),q=p("el-form"),R=ye,z=p("el-alert"),v=p("el-tag"),d=p("el-table-column"),A=p("el-popconfirm"),K=p("el-table"),Y=p("el-pagination"),ie=p("el-row"),F=p("el-switch"),x=p("QuestionFilled"),V=p("el-tooltip"),b=p("el-input"),pe=p("el-dialog"),J=he("loading");return n(),N("div",null,[l(R,null,{default:t(()=>[l(q,{ref_key:"formRef",ref:j,inline:!0,model:c},{default:t(()=>[l(r,{label:"模型类型",prop:"model"},{default:t(()=>[l(T,{modelValue:c.keyType,"onUpdate:modelValue":a[0]||(a[0]=e=>c.keyType=e),filterable:"","allow-create":"",placeholder:"请选择或填写绑定的模型",clearable:""},{default:t(()=>[(n(!0),N(S,null,D(u(Q),e=>(n(),_(m,{key:e,label:e.label,value:e.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),l(r,{label:"使用模型",prop:"model"},{default:t(()=>[l(T,{modelValue:c.model,"onUpdate:modelValue":a[1]||(a[1]=e=>c.model=e),filterable:"","allow-create":"",placeholder:"请选择或填写绑定的模型",clearable:""},{default:t(()=>[(n(!0),N(S,null,D(u(_e),e=>(n(),_(m,{key:e,label:e,value:e},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),l(r,{label:"启用状态",prop:"status"},{default:t(()=>[l(T,{modelValue:c.status,"onUpdate:modelValue":a[2]||(a[2]=e=>c.status=e),placeholder:"请选择key启用状态",clearable:""},{default:t(()=>[(n(!0),N(S,null,D(u(ge),e=>(n(),_(m,{key:e.value,label:e.label,value:e.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),l(r,null,{default:t(()=>[l(f,{type:"primary",onClick:U},{default:t(()=>[i(" 查询 ")]),_:1}),l(f,{onClick:a[3]||(a[3]=e=>ne(u(j)))},{default:t(()=>[i(" 重置 ")]),_:1})]),_:1}),g("span",Me,[l(f,{type:"success",onClick:a[4]||(a[4]=e=>h.value=!0)},{default:t(()=>[i(" 添加模型Key "),l(k,{class:"ml-3"},{default:t(()=>[l(P)]),_:1})]),_:1})])]),_:1},8,["model"])]),_:1}),l(R,null,{default:t(()=>[l(z,{"show-icon":"",title:"KEY池说明",description:"所有key会根据你所选的模型自动分类、会以第一个加入的key为标准、建议所有同模型的key参数配置相同、否则可能特殊场景会有迷惑性。不同模型可以设置不同的扣费类型以及单次调用扣除的额度、额度不再以次为单位、改为(积分)概念!你可以设置模型最大上限和回复上限、以及最大轮次用以限制用户的最大上下文、当限制token后、用户端可选范围受其影响、轮次同理、到达轮次之后会移除掉更靠前的上下文!",type:"success"})]),_:1}),l(R,{style:{width:"100%"}},{default:t(()=>[X((n(),_(K,{border:"",data:u(E),style:{width:"100%"},size:"large"},{default:t(()=>[l(d,{prop:"keyType",label:"模型类型",width:"120"},{default:t(e=>[l(v,{type:"success"},{default:t(()=>[i(y(u(be)[e.row.keyType]),1)]),_:2},1024)]),_:1}),l(d,{prop:"modelName",label:"模型名称",width:"180"}),l(d,{prop:"status",align:"center",label:"启用状态",width:"90"},{default:t(e=>[l(v,{type:e.row.status?"success":"danger"},{default:t(()=>[i(y(e.row.status?"使用中":"已暂停"),1)]),_:2},1032,["type"])]),_:1}),l(d,{prop:"key",label:"模型KEY",width:"460"},{default:t(e=>[g("div",Ue,y(e.row.key),1)]),_:1}),l(d,{prop:"keyWeight",label:"模型权重",width:"90",align:"center"}),l(d,{prop:"model",align:"center",label:"绑定模型",width:"180"},{default:t(e=>[l(v,{type:e.row.model.includes("gpt-4")?"success":""},{default:t(()=>[i(y(e.row.model),1)]),_:2},1032,["type"])]),_:1}),l(d,{prop:"isDraw",align:"center",label:"是否绘画KEY",width:"120"},{default:t(e=>[l(v,{type:e.row.isDraw?"success":"danger"},{default:t(()=>[i(y(e.row.isDraw?"是":"否"),1)]),_:2},1032,["type"])]),_:1}),l(d,{prop:"deductType",align:"center",label:"扣费类型",width:"90"},{default:t(e=>[l(v,{type:e.row.deductType===1?"success":"warning"},{default:t(()=>[i(y(e.row.deductType===1?"普通余额":"高级余额"),1)]),_:2},1032,["type"])]),_:1}),l(d,{prop:"deduct",align:"center",label:"单次扣除",width:"90"},{default:t(e=>[l(v,{type:e.row.deductType===1?"success":"warning"},{default:t(()=>[i(y(`${e.row.deduct} 余额`),1)]),_:2},1032,["type"])]),_:1}),l(d,{prop:"useCount",align:"center",label:"调用次数",width:"90"}),l(d,{prop:"useToken",align:"center",label:"已使用Token",width:"120"}),l(d,{prop:"keyStatus",align:"center",label:"key状态",width:"110"},{default:t(e=>[l(v,{type:e.row.keyStatus===1?"success":"danger"},{default:t(()=>[i(y(e.row.keyStatus===1?"正常工作":e.row.keyStatus===-1?"已被封禁":"余额耗尽 "),1)]),_:2},1032,["type"])]),_:1}),l(d,{prop:"maxModelTokens",align:"center",label:"模型最大上下文",width:"140"},{default:t(e=>[l(f,{type:"info",text:""},{default:t(()=>[i(y(e.row.maxModelTokens||"-"),1)]),_:2},1024)]),_:1}),l(d,{prop:"maxResponseTokens",align:"center",label:"最大回复Token",width:"160"},{default:t(e=>[l(f,{type:"info",text:""},{default:t(()=>[i(y(e.row.maxResponseTokens||"-"),1)]),_:2},1024)]),_:1}),l(d,{prop:"proxyUrl",align:"center",label:"绑定的代理地址",width:"140"},{default:t(e=>[l(f,{type:"info",text:""},{default:t(()=>[i(y(e.row.proxyUrl||"-"),1)]),_:2},1024)]),_:1}),l(d,{prop:"proxyUrl",align:"center",label:"变更提示信息",width:"180"},{default:t(e=>[i(y(e.row.remark||"-"),1)]),_:1}),l(d,{prop:"createdAt",align:"center",label:"添加时间",width:"120"},{default:t(e=>[i(y(u(ce)(e.row.createdAt,"YYYY-MM-DD")),1)]),_:1}),l(d,{fixed:"right",label:"操作",width:"200"},{default:t(e=>[l(f,{link:"",type:"primary",size:"small",onClick:me=>de(e.row)},{default:t(()=>[i(" 变更 ")]),_:2},1032,["onClick"]),l(A,{title:"确认删除此秘钥么?",width:"180","icon-color":"red",onConfirm:me=>se(e.row)},{reference:t(()=>[l(f,{link:"",type:"danger",size:"small"},{default:t(()=>[i(" 删除秘钥 ")]),_:1})]),_:2},1032,["onConfirm"])]),_:1})]),_:1},8,["data"])),[[J,u(C)]]),l(ie,{class:"flex justify-end mt-5"},{default:t(()=>[l(Y,{"current-page":c.page,"onUpdate:currentPage":a[5]||(a[5]=e=>c.page=e),"page-size":c.size,"onUpdate:pageSize":a[6]||(a[6]=e=>c.size=e),class:"mr-5","page-sizes":[10,20,30,50],layout:"total, sizes, prev, pager, next, jumper",total:u(B),onSizeChange:U,onCurrentChange:U},null,8,["current-page","page-size","total"])]),_:1})]),_:1}),l(pe,{modelValue:u(h),"onUpdate:modelValue":a[24]||(a[24]=e=>xe(h)?h.value=e:null),"close-on-click-modal":!1,title:u(ae),width:"770",onClose:a[25]||(a[25]=e=>le(u(O)))},{footer:t(()=>[g("span",Pe,[l(f,{onClick:a[22]||(a[22]=e=>h.value=!1)},{default:t(()=>[i("取消")]),_:1}),l(f,{type:"primary",onClick:a[23]||(a[23]=e=>ue(u(O)))},{default:t(()=>[i(y(u(re)),1)]),_:1})])]),default:t(()=>[X((n(),_(q,{ref_key:"formPackageRef",ref:O,"label-position":"right","label-width":"120px",model:o,rules:ee},{default:t(()=>[l(r,{label:"模型类型选择",prop:"keyType"},{default:t(()=>[l(T,{modelValue:o.keyType,"onUpdate:modelValue":a[7]||(a[7]=e=>o.keyType=e),placeholder:"请选择模型类型",style:{width:"100%"}},{default:t(()=>[(n(!0),N(S,null,D(u(Q),e=>(n(),_(m,{key:e.value,label:e.label,value:e.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),l(r,{label:"模型启用状态",prop:"status"},{default:t(()=>[l(F,{modelValue:o.status,"onUpdate:modelValue":a[8]||(a[8]=e=>o.status=e)},null,8,["modelValue"]),l(V,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[Ne]),default:t(()=>[l(k,{class:"ml-3 cursor-pointer"},{default:t(()=>[l(x)]),_:1})]),_:1})]),_:1}),l(r,{label:"模型中文名称",prop:"modelName"},{default:t(()=>[l(b,{modelValue:o.modelName,"onUpdate:modelValue":a[9]||(a[9]=e=>o.modelName=e),placeholder:"请填写模型中文名称(用户选择的)"},null,8,["modelValue"])]),_:1}),l(r,{label:u(oe),prop:"key"},{default:t(()=>[l(b,{modelValue:o.key,"onUpdate:modelValue":a[10]||(a[10]=e=>o.key=e),type:Number(o.keyType)===1?"textarea":"text",rows:5,placeholder:"请填写模型Key|clientId|AppId",style:{width:"95%"}},null,8,["modelValue","type"]),l(V,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[Se]),default:t(()=>[l(k,{class:"ml-3 cursor-pointer"},{default:t(()=>[l(x)]),_:1})]),_:1})]),_:1},8,["label"]),[2].includes(Number(o.keyType))?(n(),_(r,{key:0,label:"SecretKey",prop:"secret"},{default:t(()=>[l(b,{modelValue:o.secret,"onUpdate:modelValue":a[11]||(a[11]=e=>o.secret=e),placeholder:"请填写模型调用所需的Secret[部分类型模型需要]",style:{width:"80%"}},null,8,["modelValue"]),l(V,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[De]),default:t(()=>[l(k,{class:"ml-3 cursor-pointer"},{default:t(()=>[l(x)]),_:1})]),_:1})]),_:1})):I("",!0),l(r,{label:"账号关联模型",prop:"model"},{default:t(()=>[l(T,{modelValue:o.model,"onUpdate:modelValue":a[12]||(a[12]=e=>o.model=e),filterable:"",clearable:"",placeholder:"请选用或填写绑定的模型","allow-create":Number(o.keyType)===1,style:{width:"80%"}},{default:t(()=>[(n(!0),N(S,null,D(u(te),e=>(n(),_(m,{key:e,label:e,value:e},null,8,["label","value"]))),128))]),_:1},8,["modelValue","allow-create"]),l(V,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[Re]),default:t(()=>[l(k,{class:"ml-3 cursor-pointer"},{default:t(()=>[l(x)]),_:1})]),_:1})]),_:1}),l(r,{label:"模型扣费类型",prop:"deductType"},{default:t(()=>[l(T,{modelValue:o.deductType,"onUpdate:modelValue":a[13]||(a[13]=e=>o.deductType=e),filterable:"","allow-create":"",clearable:"",placeholder:"请选用模型扣费类型",style:{width:"80%"}},{default:t(()=>[(n(!0),N(S,null,D(u(we),e=>(n(),_(m,{key:e.value,label:e.label,value:e.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),l(V,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[Ce]),default:t(()=>[l(k,{class:"ml-3 cursor-pointer"},{default:t(()=>[l(x)]),_:1})]),_:1})]),_:1}),l(r,{label:"单词扣除金额",prop:"deduct"},{default:t(()=>[l(b,{modelValue:o.deduct,"onUpdate:modelValue":a[14]||(a[14]=e=>o.deduct=e),modelModifiers:{number:!0},placeholder:"请填写单词调用此key的扣费金额!",style:{width:"80%"}},null,8,["modelValue"]),l(V,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[qe]),default:t(()=>[l(k,{class:"ml-3 cursor-pointer"},{default:t(()=>[l(x)]),_:1})]),_:1})]),_:1}),l(r,{label:"上下文限制",prop:"maxRounds"},{default:t(()=>[l(b,{modelValue:o.maxRounds,"onUpdate:modelValue":a[15]||(a[15]=e=>o.maxRounds=e),modelModifiers:{number:!0},placeholder:"请填写允许用户选择的最高上下文轮次!",style:{width:"80%"}},null,8,["modelValue"]),l(V,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[Le]),default:t(()=>[l(k,{class:"ml-3 cursor-pointer"},{default:t(()=>[l(x)]),_:1})]),_:1})]),_:1}),l(r,{label:"调用轮询权重",prop:"keyWeight"},{default:t(()=>[l(b,{modelValue:o.keyWeight,"onUpdate:modelValue":a[16]||(a[16]=e=>o.keyWeight=e),modelModifiers:{number:!0},placeholder:"请填写key的权重、数字越大使用评率越高!",style:{width:"80%"}},null,8,["modelValue"]),l(V,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[Ie]),default:t(()=>[l(k,{class:"ml-3 cursor-pointer"},{default:t(()=>[l(x)]),_:1})]),_:1})]),_:1}),l(r,{label:"模型最大Token",prop:"maxModelTokens"},{default:t(()=>[l(b,{modelValue:o.maxModelTokens,"onUpdate:modelValue":a[17]||(a[17]=e=>o.maxModelTokens=e),modelModifiers:{number:!0},placeholder:"请填写模型最大Token、不填写默认使用默认!"},null,8,["modelValue"])]),_:1}),l(r,{label:"最大回复Token",prop:"maxResponseTokens"},{default:t(()=>[l(b,{modelValue:o.maxResponseTokens,"onUpdate:modelValue":a[18]||(a[18]=e=>o.maxResponseTokens=e),modelModifiers:{number:!0},placeholder:"请填写最大回复Token、不填写使用默认!"},null,8,["modelValue"])]),_:1}),[1].includes(Number(o.keyType))?(n(),_(r,{key:1,label:"调用超时时间",prop:"timeout"},{default:t(()=>[l(b,{modelValue:o.timeout,"onUpdate:modelValue":a[19]||(a[19]=e=>o.timeout=e),modelModifiers:{number:!0},placeholder:"请填写key的超时时间单位(秒)!"},null,8,["modelValue"])]),_:1})):I("",!0),[1].includes(Number(o.keyType))?(n(),_(r,{key:2,label:"设为特殊key",prop:"isDraw"},{default:t(()=>[l(F,{modelValue:o.isDraw,"onUpdate:modelValue":a[20]||(a[20]=e=>o.isDraw=e)},null,8,["modelValue"]),l(V,{class:"box-item",effect:"dark",placement:"right"},{content:t(()=>[Oe]),default:t(()=>[l(k,{class:"ml-3 cursor-pointer"},{default:t(()=>[l(x)]),_:1})]),_:1})]),_:1})):I("",!0),[1].includes(Number(o.keyType))?(n(),_(r,{key:3,label:"指定代理地址",prop:"proxyUrl"},{default:t(()=>[l(b,{modelValue:o.proxyUrl,"onUpdate:modelValue":a[21]||(a[21]=e=>o.proxyUrl=e),modelModifiers:{number:!0},placeholder:"如需使用代理请填写、不填写默认使用全局配置!"},null,8,["modelValue"])]),_:1})):I("",!0)]),_:1},8,["model","rules"])),[[J,u(Z)]])]),_:1},8,["modelValue","title"])])}}});typeof H=="function"&&H(ze);export{ze as default};