mirror of
https://github.com/geekgeekrun/geekgeekrun.git
synced 2026-09-05 23:47:54 +08:00
adjust ui text; add more intro; add 3rd list about apply a secret
This commit is contained in:
@@ -40,12 +40,6 @@ import {
|
|||||||
} from '../../READ_NO_REPLY_AUTO_REMINDER/boss-operation'
|
} from '../../READ_NO_REPLY_AUTO_REMINDER/boss-operation'
|
||||||
|
|
||||||
export default function initIpc() {
|
export default function initIpc() {
|
||||||
ipcMain.on('open-external-link', (_, link) => {
|
|
||||||
shell.openExternal(link, {
|
|
||||||
activate: true
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
ipcMain.handle('fetch-config-file-content', async () => {
|
ipcMain.handle('fetch-config-file-content', async () => {
|
||||||
const configFileContentList = configFileNameList.map((fileName) => {
|
const configFileContentList = configFileNameList.map((fileName) => {
|
||||||
return readConfigFile(fileName)
|
return readConfigFile(fileName)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { BrowserWindow, ipcMain } from 'electron'
|
import { BrowserWindow, ipcMain, shell } from 'electron'
|
||||||
|
|
||||||
export default function initPublicIpc() {
|
export default function initPublicIpc() {
|
||||||
ipcMain.on(
|
ipcMain.on(
|
||||||
@@ -18,4 +18,9 @@ export default function initPublicIpc() {
|
|||||||
win.setSize(size.width, size.height, size.animate)
|
win.setSize(size.width, size.height, size.animate)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
ipcMain.on('open-external-link', (_, link) => {
|
||||||
|
shell.openExternal(link, {
|
||||||
|
activate: true
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,52 @@
|
|||||||
<div class="main-wrapper">
|
<div class="main-wrapper">
|
||||||
<main>
|
<main>
|
||||||
<div class="mt1em mb1em">
|
<div class="mt1em mb1em">
|
||||||
<span>大语言模型设置</span>
|
<div class="flex flex-items-center flex-justify-between">
|
||||||
|
<div>大语言模型设置</div>
|
||||||
|
<el-dropdown @command="(item) => openExternalLink(item.url)">
|
||||||
|
<el-button size="small"
|
||||||
|
>申请 API Secret <el-icon class="el-icon--right"><arrow-down /></el-icon
|
||||||
|
></el-button>
|
||||||
|
<template #dropdown>
|
||||||
|
<el-dropdown-menu>
|
||||||
|
<el-dropdown-item v-for="item in providerList" :key="item.name" :command="item">{{
|
||||||
|
item.name
|
||||||
|
}}</el-dropdown-item>
|
||||||
|
</el-dropdown-menu>
|
||||||
|
</template>
|
||||||
|
</el-dropdown>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<el-alert type="info" :closable="false" mb20px line-height-1.25em>
|
||||||
|
<ul pl16px>
|
||||||
|
<li>
|
||||||
|
请确保当前服务商提供的模型支持<a
|
||||||
|
:style="{
|
||||||
|
color: 'var(--el-color-primary)'
|
||||||
|
}"
|
||||||
|
href="javascript:void(0)"
|
||||||
|
@click.prevent="
|
||||||
|
openExternalLink('https://api-docs.deepseek.com/zh-cn/api/create-chat-completion')
|
||||||
|
"
|
||||||
|
>对话补全</a
|
||||||
|
>且兼容
|
||||||
|
<a
|
||||||
|
:style="{
|
||||||
|
color: 'var(--el-color-primary)'
|
||||||
|
}"
|
||||||
|
href="javascript:void(0)"
|
||||||
|
@click.prevent="openExternalLink('https://www.npmjs.com/package/openai')"
|
||||||
|
>OpenAI SDK</a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li><b class="color-red">暂不支持推理模型</b>(例如 DeepSeek-R1)</li>
|
||||||
|
<li>
|
||||||
|
请自行确保您所接入的服务商能够保护您的隐私。<b class="color-red"
|
||||||
|
>此处所列举“服务商-模型”由第三方提供,仅供配置参考,不能保证它们能够合法使用您的数据,不表示本程序认可相关模型</b
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</el-alert>
|
||||||
<el-form
|
<el-form
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
:model="formContent"
|
:model="formContent"
|
||||||
@@ -83,7 +127,7 @@
|
|||||||
font-size-12px
|
font-size-12px
|
||||||
></el-input>
|
></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item prop="model" label="要使用的模型">
|
<el-form-item prop="model" label="要使用的模型(model参数)">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="conf.model"
|
v-model="conf.model"
|
||||||
:autosize="{
|
:autosize="{
|
||||||
@@ -153,7 +197,9 @@
|
|||||||
<footer pt10px pb10px flex flex-justify-center>
|
<footer pt10px pb10px flex flex-justify-center>
|
||||||
<div w480px flex flex-justify-between>
|
<div w480px flex flex-justify-between>
|
||||||
<div>
|
<div>
|
||||||
<el-button type="text" @click="addConfig">添加其它服务</el-button>
|
<el-button font-size-12px type="text" @click="addConfig"
|
||||||
|
>添加其它模型<span v-if="formContent.length <= 1">,以生成更随机的内容</span></el-button
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<el-button @click="handleCancel">取消</el-button>
|
<el-button @click="handleCancel">取消</el-button>
|
||||||
@@ -236,6 +282,26 @@ const llmPresetList: {
|
|||||||
enabled: true
|
enabled: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: '由 火山引擎 提供的 DeepSeek-V3 模型',
|
||||||
|
config: {
|
||||||
|
model: 'deepseek-v3-250324',
|
||||||
|
providerApiSecret: '',
|
||||||
|
providerCompleteApiUrl: 'https://ark.cn-beijing.volces.com/api/v3',
|
||||||
|
serveWeight: 100,
|
||||||
|
enabled: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '由 阿里云百炼 提供的 DeepSeek-V3 模型',
|
||||||
|
config: {
|
||||||
|
model: 'deepseek-v3',
|
||||||
|
providerApiSecret: '',
|
||||||
|
providerCompleteApiUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
|
||||||
|
serveWeight: 100,
|
||||||
|
enabled: true
|
||||||
|
}
|
||||||
|
},
|
||||||
// TODO:
|
// TODO:
|
||||||
// {
|
// {
|
||||||
// name: '通过 Ollama 部署的 DeepSeek-R1(14B)模型',
|
// name: '通过 Ollama 部署的 DeepSeek-R1(14B)模型',
|
||||||
@@ -269,6 +335,29 @@ const llmPresetList: {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
const providerList: Array<{ name: string; url: string }> = [
|
||||||
|
{
|
||||||
|
name: 'DeepSeek',
|
||||||
|
url: 'https://platform.deepseek.com/'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '火山引擎 - 火山方舟',
|
||||||
|
url: 'https://console.volcengine.com/ark'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '阿里云百炼',
|
||||||
|
url: 'https://bailian.console.aliyun.com/?tab=model#/api-key'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'OpenAI (国内可能不可用)',
|
||||||
|
url: 'https://platform.openai.com/api-keys'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'FREE-CHATGPT-API (免费)',
|
||||||
|
url: 'https://github.com/popjane/free_chatgpt_api'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
function handlePresetClick(selected: (typeof llmPresetList)[number], index) {
|
function handlePresetClick(selected: (typeof llmPresetList)[number], index) {
|
||||||
for (const k of Object.keys(formContent.value[index])) {
|
for (const k of Object.keys(formContent.value[index])) {
|
||||||
formContent.value[index][k] = selected.config[k]
|
formContent.value[index][k] = selected.config[k]
|
||||||
@@ -306,7 +395,7 @@ watch(
|
|||||||
if (nVal <= 1) {
|
if (nVal <= 1) {
|
||||||
electron.ipcRenderer.send('update-window-size', {
|
electron.ipcRenderer.send('update-window-size', {
|
||||||
width: window.innerWidth,
|
width: window.innerWidth,
|
||||||
height: 360
|
height: 500
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
electron.ipcRenderer.send('update-window-size', {
|
electron.ipcRenderer.send('update-window-size', {
|
||||||
@@ -319,6 +408,9 @@ watch(
|
|||||||
immediate: true
|
immediate: true
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
const openExternalLink = (url) => {
|
||||||
|
electron.ipcRenderer.send('open-external-link', url)
|
||||||
|
}
|
||||||
|
|
||||||
// function handleTestAvailability() {}
|
// function handleTestAvailability() {}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -53,16 +53,7 @@
|
|||||||
style="background-color: #462ac4"
|
style="background-color: #462ac4"
|
||||||
>Qwen2.5</span
|
>Qwen2.5</span
|
||||||
>
|
>
|
||||||
模型,通过<a
|
模型;支持多个“服务商-模型”组合按权重搭配使用
|
||||||
class="font-size-12px pt0 pb0"
|
|
||||||
:style="{
|
|
||||||
color: 'var(--el-color-primary)',
|
|
||||||
}"
|
|
||||||
type="text"
|
|
||||||
href="javascript:void(0)"
|
|
||||||
@click.prevent="openIntroOfCompletion"
|
|
||||||
>对话补全</a
|
|
||||||
>接口实现消息生成;支持多个“服务商-模型”组合按权重搭配使用
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -80,14 +71,14 @@
|
|||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<el-button size="small" type="primary" @click="handleClickEditPrompt">
|
<el-button size="small" type="primary" @click="handleClickEditPrompt">
|
||||||
使用外部编辑器编辑 Prompt 模板
|
使用外部编辑器编辑提示词模板
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button size="small" type="primary" @click="restoreDefaultTemplate">
|
<el-button size="small" type="primary" @click="restoreDefaultTemplate">
|
||||||
还原默认 Prompt 模板
|
还原默认提示词模板
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="font-size-12px color-#666">
|
<div class="font-size-12px color-#666">
|
||||||
对生成效果不够满意?可在此查看、编辑 Prompt 模板。请在模板中需要插入简历的位置插入
|
对生成效果不够满意?可在此查看、编辑提示词模板。请在模板中需要插入简历的位置插入
|
||||||
__REPLACE_REAL_RESUME_HERE__
|
__REPLACE_REAL_RESUME_HERE__
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -228,9 +219,9 @@ const handleSubmit = async () => {
|
|||||||
await electron.ipcRenderer.invoke('check-if-auto-remind-prompt-valid')
|
await electron.ipcRenderer.invoke('check-if-auto-remind-prompt-valid')
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err?.message?.includes(`RESUME_PLACEHOLDER_NOT_EXIST`)) {
|
if (err?.message?.includes(`RESUME_PLACEHOLDER_NOT_EXIST`)) {
|
||||||
console.log(`Prompt 模板无效`, err)
|
console.log(`提示词模板无效`, err)
|
||||||
ElMessageBox.confirm(
|
ElMessageBox.confirm(
|
||||||
'Prompt 模板缺少简历内容占位符:<br /><b>__REPLACE_REAL_RESUME_HERE__</b><br /><br />您是否希望还原默认的 Prompt 模板?',
|
'提示词模板缺少简历内容占位符:<br /><b>__REPLACE_REAL_RESUME_HERE__</b><br /><br />您是否希望还原默认的提示词模板?',
|
||||||
'',
|
'',
|
||||||
{
|
{
|
||||||
confirmButtonText: '是',
|
confirmButtonText: '是',
|
||||||
@@ -247,7 +238,7 @@ const handleSubmit = async () => {
|
|||||||
} else {
|
} else {
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
message: '用于生成自动提醒消息的 Prompt 检查未通过,请重试'
|
message: '用于生成自动提醒消息的提示词检查未通过,请重试'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
@@ -314,13 +305,6 @@ const handleClickEditResume = async () => {
|
|||||||
const handleClickEditPrompt = async () => {
|
const handleClickEditPrompt = async () => {
|
||||||
await electron.ipcRenderer.send('no-reply-reminder-prompt-edit')
|
await electron.ipcRenderer.send('no-reply-reminder-prompt-edit')
|
||||||
}
|
}
|
||||||
|
|
||||||
const openIntroOfCompletion = () => {
|
|
||||||
electron.ipcRenderer.send(
|
|
||||||
'open-external-link',
|
|
||||||
'https://api-docs.deepseek.com/zh-cn/api/create-chat-completion'
|
|
||||||
)
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|||||||
Reference in New Issue
Block a user