chore: Modify model account prompt information (#11815)

This commit is contained in:
ssongliu
2026-02-06 12:26:58 +00:00
committed by GitHub
parent 66428c0a8e
commit 607eae3ca8
17 changed files with 186 additions and 237 deletions
+1
View File
@@ -103,6 +103,7 @@ type ProviderModelInfo struct {
}
type ProviderInfo struct {
Sort uint `json:"-"`
Provider string `json:"provider"`
BaseURL string `json:"baseUrl"`
Models []ProviderModelInfo `json:"models"`
+24 -12
View File
@@ -8,6 +8,7 @@ import (
"fmt"
"net/http"
"path"
"sort"
"strconv"
"strings"
"time"
@@ -205,11 +206,15 @@ func (a AgentService) GetProviders() ([]dto.ProviderInfo, error) {
providers := make([]dto.ProviderInfo, 0, len(definitions))
for key, def := range definitions {
providers = append(providers, dto.ProviderInfo{
Sort: def.Sort,
Provider: key,
BaseURL: def.BaseURL,
Models: def.Models,
})
}
sort.Slice(providers, func(i, j int) bool {
return providers[i].Sort < providers[j].Sort
})
return providers, nil
}
@@ -673,13 +678,29 @@ func providerEnvKey(provider string) string {
}
type providerDefinition struct {
Sort uint
BaseURL string
Models []dto.ProviderModelInfo
}
func providerDefinitions() map[string]providerDefinition {
return map[string]providerDefinition{
"ollama": {
Sort: 1,
BaseURL: "",
Models: []dto.ProviderModelInfo{},
},
"deepseek": {
Sort: 2,
BaseURL: "https://api.deepseek.com/v1",
Models: []dto.ProviderModelInfo{
{ID: "deepseek/deepseek-chat", Name: "DeepSeek Chat"},
{ID: "deepseek/deepseek-reasoner", Name: "DeepSeek Reasoner"},
{ID: "deepseek/deepseek-r1:1.5b", Name: "DeepSeek R1 1.5B"},
},
},
"openai": {
Sort: 3,
BaseURL: "https://api.openai.com/v1",
Models: []dto.ProviderModelInfo{
{ID: "openai/codex-mini-latest", Name: "Codex Mini"},
@@ -691,6 +712,7 @@ func providerDefinitions() map[string]providerDefinition {
},
},
"anthropic": {
Sort: 4,
BaseURL: "https://api.anthropic.com",
Models: []dto.ProviderModelInfo{
{ID: "anthropic/claude-3-haiku-20240307", Name: "Claude 3 Haiku"},
@@ -701,6 +723,7 @@ func providerDefinitions() map[string]providerDefinition {
},
},
"gemini": {
Sort: 5,
BaseURL: "https://generativelanguage.googleapis.com",
Models: []dto.ProviderModelInfo{
{ID: "google/gemini-1.5-flash", Name: "Gemini 1.5 Flash"},
@@ -712,23 +735,12 @@ func providerDefinitions() map[string]providerDefinition {
},
},
"minimax": {
Sort: 6,
BaseURL: "https://api.minimax.chat/v1",
Models: []dto.ProviderModelInfo{
{ID: "minimax/Minimax-M2.1", Name: "Minimax M2.1"},
},
},
"deepseek": {
BaseURL: "https://api.deepseek.com/v1",
Models: []dto.ProviderModelInfo{
{ID: "deepseek/deepseek-chat", Name: "DeepSeek Chat"},
{ID: "deepseek/deepseek-reasoner", Name: "DeepSeek Reasoner"},
{ID: "deepseek/deepseek-r1:1.5b", Name: "DeepSeek R1 1.5B"},
},
},
"ollama": {
BaseURL: "",
Models: []dto.ProviderModelInfo{},
},
}
}
+2 -2
View File
@@ -14,14 +14,14 @@ func LoadMenus() string {
item := []dto.ShowMenu{
{ID: "1", Disabled: true, Title: "menu.home", IsShow: true, Label: "Home-Menu", Path: "/", Sort: 100},
{ID: "2", Disabled: true, Title: "menu.apps", IsShow: true, Label: "App-Menu", Path: "/apps/all", Sort: 200},
{ID: "3", Disabled: false, Title: "menu.aiTools", IsShow: true, Label: "AI-Menu", Path: "/ai/model", Sort: 400,
{ID: "3", Disabled: false, Title: "menu.aiTools", IsShow: true, Label: "AI-Menu", Path: "/ai/model", Sort: 300,
Children: []dto.ShowMenu{
{ID: "44", Disabled: false, Title: "aiTools.agents.agents", IsShow: true, Label: "Agents", Path: "/ai/agents/agent", Sort: 50},
{ID: "41", Disabled: false, Title: "aiTools.model.model", IsShow: true, Label: "OllamaModel", Path: "/ai/model", Sort: 100},
{ID: "42", Disabled: false, Title: "menu.mcp", IsShow: true, Label: "MCPServer", Path: "/ai/mcp", Sort: 200},
{ID: "43", Disabled: false, Title: "aiTools.gpu.gpu", IsShow: true, Label: "GPU", Path: "/ai/gpu", Sort: 300},
}},
{ID: "4", Disabled: false, Title: "menu.website", IsShow: true, Label: "Website-Menu", Path: "/websites", Sort: 300,
{ID: "4", Disabled: false, Title: "menu.website", IsShow: true, Label: "Website-Menu", Path: "/websites", Sort: 400,
Children: []dto.ShowMenu{
{ID: "31", Disabled: false, Title: "menu.website", IsShow: true, Label: "Website", Path: "/websites", Sort: 100},
{ID: "32", Disabled: false, Title: "menu.ssl", IsShow: true, Label: "SSL", Path: "/websites/ssl", Sort: 200},
+5 -11
View File
@@ -680,17 +680,12 @@ const message = {
agents: 'Agents',
agent: 'Agent',
createAgent: 'Create Agent',
createModel: 'Create Model',
agentList: 'Agent List',
modelList: 'Model List',
account: 'Account',
accountName: 'Account Name',
accountList: 'Account List',
createAccount: 'Create Account',
noAccountHint: 'Choose an existing account or add a new one.',
accountCount: '{0} accounts',
createModelAccount: 'Create model account',
account: 'Model Account',
noAccountHint: 'Choose an existing model account or add a new one.',
accountCount: '{0} model accounts',
syncAgents: 'Sync related agents',
syncAgentsHelper: 'Update openclaw.json for agents using this account',
syncAgentsHelper: 'Update openclaw.json for agents using this model account',
appVersion: 'App Version',
webuiPort: 'WebUI Port',
bridgePort: 'Bridge Port',
@@ -698,7 +693,6 @@ const message = {
apiKey: 'API Key',
baseUrl: 'Base URL',
token: 'Token',
modelName: 'Model Name',
manualModel: 'Manual input',
verified: 'Verified',
},
+17 -23
View File
@@ -673,30 +673,24 @@ const message = {
},
aiTools: {
agents: {
agents: 'Agents',
agent: 'Agent',
createAgent: 'Create Agent',
createModel: 'Create Model',
agentList: 'Agent List',
modelList: 'Model List',
account: 'Account',
accountName: 'Account Name',
accountList: 'Account List',
createAccount: 'Create Account',
noAccountHint: 'Selecciona una cuenta existente o agrega una nueva.',
accountCount: '{0} cuentas',
syncAgents: 'Sync related agents',
syncAgentsHelper: 'Update openclaw.json for agents using this account',
appVersion: 'App Version',
webuiPort: 'WebUI Port',
bridgePort: 'Bridge Port',
provider: 'Provider',
apiKey: 'API Key',
baseUrl: 'Base URL',
agents: 'Agentes',
agent: 'Agente',
createAgent: 'Crear agente',
createModelAccount: 'Crear cuenta de modelo',
account: 'Cuenta de modelo',
noAccountHint: 'Selecciona una cuenta de modelo existente o agrega una nueva.',
accountCount: '{0} cuentas de modelo',
syncAgents: 'Sincronizar agentes vinculados',
syncAgentsHelper: 'Actualiza openclaw.json para los agentes que usan esta cuenta de modelo',
appVersion: 'Versión de la app',
webuiPort: 'Puerto WebUI',
bridgePort: 'Puerto Bridge',
provider: 'Proveedor de modelos',
apiKey: 'Clave API',
baseUrl: 'URL base',
token: 'Token',
modelName: 'Model Name',
manualModel: 'Manual input',
verified: 'Verified',
manualModel: 'Entrada manual de modelo',
verified: 'Verificado',
},
model: {
model: 'Modelo',
+18 -24
View File
@@ -662,30 +662,24 @@ const message = {
},
aiTools: {
agents: {
agents: 'Agents',
agent: 'Agent',
createAgent: 'Create Agent',
createModel: 'Create Model',
agentList: 'Agent List',
modelList: 'Model List',
account: 'Account',
accountName: 'Account Name',
accountList: 'Account List',
createAccount: 'Create Account',
noAccountHint: '既存のアカウントを選択するか新規に追加してください',
accountCount: 'アカウント {0} ',
syncAgents: 'Sync related agents',
syncAgentsHelper: 'Update openclaw.json for agents using this account',
appVersion: 'App Version',
webuiPort: 'WebUI Port',
bridgePort: 'Bridge Port',
provider: 'Provider',
apiKey: 'API Key',
baseUrl: 'Base URL',
token: 'Token',
modelName: 'Model Name',
manualModel: 'Manual input',
verified: 'Verified',
agents: 'エージェント',
agent: 'エージェント',
createAgent: 'エージェントを作成',
createModelAccount: 'モデルアカウントを作成',
account: 'モデルアカウント',
noAccountHint: '既存のモデルアカウントを選択するか新規に追加してください',
accountCount: 'モデルアカウント {0} ',
syncAgents: '関連エージェントを同期',
syncAgentsHelper: 'このモデルアカウントを使用するエージェントの openclaw.json を更新',
appVersion: 'アプリバージョン',
webuiPort: 'WebUI ポート',
bridgePort: 'Bridge ポート',
provider: 'モデルプロバイダー',
apiKey: 'API キー',
baseUrl: 'ベースURL',
token: 'トークン',
manualModel: '手動入力',
verified: '検証済み',
},
model: {
model: 'モデル',
+18 -24
View File
@@ -659,30 +659,24 @@ const message = {
},
aiTools: {
agents: {
agents: 'Agents',
agent: 'Agent',
createAgent: 'Create Agent',
createModel: 'Create Model',
agentList: 'Agent List',
modelList: 'Model List',
account: 'Account',
accountName: 'Account Name',
accountList: 'Account List',
createAccount: 'Create Account',
noAccountHint: '기존 계정을 선택하거나 새로 추가하세요.',
accountCount: '계정 {0}개',
syncAgents: 'Sync related agents',
syncAgentsHelper: 'Update openclaw.json for agents using this account',
appVersion: 'App Version',
webuiPort: 'WebUI Port',
bridgePort: 'Bridge Port',
provider: 'Provider',
apiKey: 'API Key',
baseUrl: 'Base URL',
token: 'Token',
modelName: 'Model Name',
manualModel: 'Manual input',
verified: 'Verified',
agents: '에이전트',
agent: '에이전트',
createAgent: '에이전트 생성',
createModelAccount: '모델 계정 생성',
account: '모델 계정',
noAccountHint: '기존 모델 계정을 선택하거나 새로 추가하세요.',
accountCount: '모델 계정 {0}개',
syncAgents: '관련 에이전트 동기화',
syncAgentsHelper: '이 모델 계정을 사용하는 에이전트의 openclaw.json 업데이트',
appVersion: '앱 버전',
webuiPort: 'WebUI 포트',
bridgePort: 'Bridge 포트',
provider: '모델 제공자',
apiKey: 'API 키',
baseUrl: '기본 URL',
token: '토큰',
manualModel: '수동 입력',
verified: '검증됨',
},
model: {
model: '모델',
+17 -23
View File
@@ -674,30 +674,24 @@ const message = {
},
aiTools: {
agents: {
agents: 'Agents',
agent: 'Agent',
createAgent: 'Create Agent',
createModel: 'Create Model',
agentList: 'Agent List',
modelList: 'Model List',
account: 'Account',
accountName: 'Account Name',
accountList: 'Account List',
createAccount: 'Create Account',
noAccountHint: 'Pilih akaun sedia ada atau tambah yang baharu.',
accountCount: 'Akaun {0}',
syncAgents: 'Sync related agents',
syncAgentsHelper: 'Update openclaw.json for agents using this account',
appVersion: 'App Version',
webuiPort: 'WebUI Port',
bridgePort: 'Bridge Port',
provider: 'Provider',
apiKey: 'API Key',
baseUrl: 'Base URL',
agents: 'Agen',
agent: 'Agen',
createAgent: 'Cipta agen',
createModelAccount: 'Cipta akaun model',
account: 'Akaun model',
noAccountHint: 'Pilih akaun model sedia ada atau tambah yang baharu.',
accountCount: 'Akaun model {0}',
syncAgents: 'Segerakkan agen berkaitan',
syncAgentsHelper: 'Kemas kini openclaw.json untuk agen yang menggunakan akaun model ini',
appVersion: 'Versi aplikasi',
webuiPort: 'Port WebUI',
bridgePort: 'Port Bridge',
provider: 'Penyedia model',
apiKey: 'Kunci API',
baseUrl: 'URL asas',
token: 'Token',
modelName: 'Model Name',
manualModel: 'Manual input',
verified: 'Verified',
manualModel: 'Input manual',
verified: 'Disahkan',
},
model: {
model: 'Model',
+17 -23
View File
@@ -671,30 +671,24 @@ const message = {
},
aiTools: {
agents: {
agents: 'Agents',
agent: 'Agent',
createAgent: 'Create Agent',
createModel: 'Create Model',
agentList: 'Agent List',
modelList: 'Model List',
account: 'Account',
accountName: 'Account Name',
accountList: 'Account List',
createAccount: 'Create Account',
noAccountHint: 'Selecione uma conta existente ou adicione uma nova.',
accountCount: '{0} contas',
syncAgents: 'Sync related agents',
syncAgentsHelper: 'Update openclaw.json for agents using this account',
appVersion: 'App Version',
webuiPort: 'WebUI Port',
bridgePort: 'Bridge Port',
provider: 'Provider',
apiKey: 'API Key',
baseUrl: 'Base URL',
agents: 'Agentes',
agent: 'Agente',
createAgent: 'Criar agente',
createModelAccount: 'Criar conta de modelo',
account: 'Conta de modelo',
noAccountHint: 'Selecione uma conta de modelo existente ou adicione uma nova.',
accountCount: '{0} contas de modelo',
syncAgents: 'Sincronizar agentes vinculados',
syncAgentsHelper: 'Atualize o openclaw.json para agentes que usam esta conta de modelo',
appVersion: 'Versão do app',
webuiPort: 'Porta WebUI',
bridgePort: 'Porta Bridge',
provider: 'Provedor de modelos',
apiKey: 'Chave API',
baseUrl: 'URL base',
token: 'Token',
modelName: 'Model Name',
manualModel: 'Manual input',
verified: 'Verified',
manualModel: 'Entrada manual',
verified: 'Verificado',
},
model: {
model: 'Modelo',
+18 -24
View File
@@ -667,30 +667,24 @@ const message = {
},
aiTools: {
agents: {
agents: 'Agents',
agent: 'Agent',
createAgent: 'Create Agent',
createModel: 'Create Model',
agentList: 'Agent List',
modelList: 'Model List',
account: 'Account',
accountName: 'Account Name',
accountList: 'Account List',
createAccount: 'Create Account',
noAccountHint: 'Выберите существующий аккаунт или добавьте новый.',
accountCount: '{0} аккаунтов',
syncAgents: 'Sync related agents',
syncAgentsHelper: 'Update openclaw.json for agents using this account',
appVersion: 'App Version',
webuiPort: 'WebUI Port',
bridgePort: 'Bridge Port',
provider: 'Provider',
apiKey: 'API Key',
baseUrl: 'Base URL',
token: 'Token',
modelName: 'Model Name',
manualModel: 'Manual input',
verified: 'Verified',
agents: 'Агенты',
agent: 'Агент',
createAgent: 'Создать агента',
createModelAccount: 'Создать аккаунт модели',
account: 'Аккаунт модели',
noAccountHint: 'Выберите существующий аккаунт модели или добавьте новый.',
accountCount: '{0} аккаунтов модели',
syncAgents: 'Синхронизировать связанные агенты',
syncAgentsHelper: 'Обновите openclaw.json для агентов, использующих этот аккаунт модели',
appVersion: 'Версия приложения',
webuiPort: 'Порт WebUI',
bridgePort: 'Порт Bridge',
provider: 'Поставщик моделей',
apiKey: 'API ключ',
baseUrl: 'Базовый URL',
token: 'Токен',
manualModel: 'Ручной ввод',
verified: 'Проверено',
},
model: {
model: 'Модель',
+17 -23
View File
@@ -681,30 +681,24 @@ const message = {
},
aiTools: {
agents: {
agents: 'Agents',
agent: 'Agent',
createAgent: 'Create Agent',
createModel: 'Create Model',
agentList: 'Agent List',
modelList: 'Model List',
account: 'Account',
accountName: 'Account Name',
accountList: 'Account List',
createAccount: 'Create Account',
noAccountHint: 'Mevcut bir hesabı seçin veya yeni bir tane ekleyin.',
accountCount: '{0} hesap',
syncAgents: 'Sync related agents',
syncAgentsHelper: 'Update openclaw.json for agents using this account',
appVersion: 'App Version',
webuiPort: 'WebUI Port',
bridgePort: 'Bridge Port',
provider: 'Provider',
apiKey: 'API Key',
baseUrl: 'Base URL',
agents: 'Ajanlar',
agent: 'Ajan',
createAgent: 'Ajan oluştur',
createModelAccount: 'Model hesabı oluştur',
account: 'Model hesabı',
noAccountHint: 'Mevcut bir model hesabını seçin veya yeni bir tane ekleyin.',
accountCount: '{0} model hesabı',
syncAgents: 'İlişkili ajanları senkronize et',
syncAgentsHelper: 'Bu model hesabını kullanan ajanlar için openclaw.json dosyasını güncelleyin',
appVersion: 'Uygulama sürümü',
webuiPort: 'WebUI portu',
bridgePort: 'Bridge portu',
provider: 'Model sağlayıcı',
apiKey: 'API anahtarı',
baseUrl: 'Temel URL',
token: 'Token',
modelName: 'Model Name',
manualModel: 'Manual input',
verified: 'Verified',
manualModel: 'Manuel giriş',
verified: 'Doğrulandı',
},
model: {
model: 'Model',
+15 -21
View File
@@ -649,30 +649,24 @@ const message = {
},
aiTools: {
agents: {
agents: 'Agents',
agent: 'Agent',
createAgent: 'Create Agent',
createModel: 'Create Model',
agentList: 'Agent List',
modelList: 'Model List',
account: 'Account',
accountName: 'Account Name',
accountList: 'Account List',
createAccount: 'Create Account',
noAccountHint: '選擇已有帳號或直接新增',
accountCount: '帳號 {0} ',
syncAgents: 'Sync related agents',
syncAgentsHelper: 'Update openclaw.json for agents using this account',
appVersion: 'App Version',
webuiPort: 'WebUI Port',
bridgePort: 'Bridge Port',
provider: 'Provider',
agents: '智能體',
agent: '智能體',
createAgent: '建立智能體',
createModelAccount: '建立模型帳號',
account: '模型帳號',
noAccountHint: '選擇已有模型帳號或直接建立',
accountCount: '模型帳號 {0} ',
syncAgents: '同步關聯智能體',
syncAgentsHelper: '更新使用該模型帳號的智能體 openclaw.json',
appVersion: '應用版本',
webuiPort: 'WebUI ',
bridgePort: 'Bridge ',
provider: '模型供應商',
apiKey: 'API Key',
baseUrl: 'Base URL',
token: 'Token',
modelName: 'Model Name',
manualModel: 'Manual input',
verified: 'Verified',
manualModel: '手動輸入模型',
verified: '驗證狀態',
},
model: {
model: '模型',
+5 -10
View File
@@ -654,16 +654,12 @@ const message = {
agents: '智能体',
agent: '智能体',
createAgent: '创建智能体',
createModel: '创建模型',
agentList: '智能体列表',
modelList: '模型列表',
account: '账号',
accountName: '账号名称',
accountList: '账号列表',
noAccountHint: '选择已有账号或者直接添加',
accountCount: '账号 {0} ',
createModelAccount: '创建模型账号',
account: '模型账号',
noAccountHint: '选择已有模型账号或者直接创建',
accountCount: '模型账号 {0} ',
syncAgents: '同步关联智能体',
syncAgentsHelper: '更新使用该账号的智能体 openclaw.json',
syncAgentsHelper: '更新使用该模型账号的智能体 openclaw.json',
appVersion: '应用版本',
webuiPort: 'WebUI 端口',
bridgePort: 'Bridge 端口',
@@ -671,7 +667,6 @@ const message = {
apiKey: 'API Key',
baseUrl: 'Base URL',
token: 'Token',
modelName: '模型名称',
manualModel: '手动输入模型',
verified: '验证状态',
},
@@ -52,17 +52,17 @@
<el-select v-model="form.accountId" @change="handleAccountChange">
<el-option v-for="item in accountOptions" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
<span v-if="accountOptions.length === 0" class="input-help">
<span class="input-help">
{{ $t('aiTools.agents.noAccountHint') }}
<el-button type="primary" link class="inline-link" @click="openAccountCreate">
{{ $t('commons.button.add') }}
{{ $t('aiTools.agents.createModelAccount') }}
</el-button>
</span>
</el-form-item>
<el-form-item :label="$t('aiTools.agents.apiKey')" prop="apiKey">
<el-form-item :label="$t('aiTools.agents.apiKey')" v-if="form.accountId" prop="apiKey">
<el-input v-model="form.apiKey" type="password" show-password readonly />
</el-form-item>
<el-form-item :label="$t('aiTools.agents.baseUrl')" prop="baseURL">
<el-form-item :label="$t('aiTools.agents.baseUrl')" v-if="form.accountId" prop="baseURL">
<el-input v-model="form.baseURL" readonly />
</el-form-item>
<el-form-item :label="$t('aiTools.agents.token')">
@@ -117,7 +117,7 @@ const form = reactive({
appVersion: '',
webUIPort: 18789,
bridgePort: 18790,
provider: 'deepseek',
provider: 'ollama',
accountId: undefined as unknown as number,
model: '',
apiKey: '',
+1 -6
View File
@@ -2,12 +2,7 @@
<div>
<RouterMenu />
<DockerStatus v-model:isActive="isActive" v-model:isExist="isExist" />
<LayoutContent
v-loading="loading"
v-if="isExist"
:class="{ mask: !isActive }"
:title="$t('aiTools.agents.agentList')"
>
<LayoutContent v-loading="loading" v-if="isExist" :class="{ mask: !isActive }">
<template #leftToolBar>
<el-button type="primary" @click="openCreate">{{ $t('aiTools.agents.createAgent') }}</el-button>
</template>
@@ -14,12 +14,12 @@
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('aiTools.agents.baseUrl')" prop="baseURL">
<el-input v-model="form.baseURL" :disabled="form.provider !== 'ollama'" />
</el-form-item>
<el-form-item :label="$t('aiTools.agents.apiKey')" prop="apiKey">
<el-input v-model="form.apiKey" type="password" show-password />
</el-form-item>
<el-form-item :label="$t('aiTools.agents.baseUrl')" prop="baseURL">
<el-input v-model="form.baseURL" :disabled="form.provider !== 'ollama'" />
</el-form-item>
<el-form-item :label="$t('website.remark')" prop="remark">
<el-input v-model="form.remark" />
</el-form-item>
@@ -78,7 +78,7 @@ const form = reactive({
});
const headerTitle = computed(() =>
form.id ? i18n.global.t('commons.button.edit') : i18n.global.t('commons.button.add'),
form.id ? i18n.global.t('commons.button.edit') : i18n.global.t('aiTools.agents.createModelAccount'),
);
const rules = reactive({
+2 -2
View File
@@ -1,9 +1,9 @@
<template>
<div>
<RouterMenu />
<LayoutContent :title="$t('aiTools.agents.accountList')">
<LayoutContent>
<template #leftToolBar>
<el-button type="primary" @click="openCreate">{{ $t('commons.button.add') }}</el-button>
<el-button type="primary" @click="openCreate">{{ $t('aiTools.agents.createModelAccount') }}</el-button>
</template>
<template #rightToolBar>
<TableSearch v-model:searchName="searchName" @search="search" />