From ea1261b48e08307fcbecef9837216c6c9b8c6790 Mon Sep 17 00:00:00 2001 From: zhengkunwang <31820853+zhengkunwang223@users.noreply.github.com> Date: Tue, 18 Feb 2025 18:08:52 +0800 Subject: [PATCH] feat: Added partial prompt messages (#7900) --- backend/app/dto/response/app.go | 7 ++-- backend/app/service/app_install.go | 1 + backend/app/service/app_utils.go | 36 +++++++++++++++++-- frontend/src/api/interface/app.ts | 1 + frontend/src/lang/modules/en.ts | 4 +-- frontend/src/lang/modules/ja.ts | 1 + frontend/src/lang/modules/ko.ts | 4 +-- frontend/src/lang/modules/ms.ts | 4 +-- frontend/src/lang/modules/pt-br.ts | 1 + frontend/src/lang/modules/ru.ts | 4 +-- frontend/src/lang/modules/tw.ts | 1 + frontend/src/lang/modules/zh.ts | 7 ++-- frontend/src/views/ai/model/domain/index.vue | 31 ++++++++++++++-- frontend/src/views/ai/model/index.vue | 7 ++-- .../app-store/installed/detail/index.vue | 13 ++++++- .../src/views/app-store/installed/index.vue | 4 +-- 16 files changed, 101 insertions(+), 25 deletions(-) diff --git a/backend/app/dto/response/app.go b/backend/app/dto/response/app.go index 07985de98..5beff1426 100644 --- a/backend/app/dto/response/app.go +++ b/backend/app/dto/response/app.go @@ -92,9 +92,10 @@ type AppInstalledDTO struct { } type AppDetail struct { - Website string `json:"website"` - Document string `json:"document"` - Github string `json:"github"` + Website string `json:"website"` + Document string `json:"document"` + Github string `json:"github"` + GpuSupport bool `json:"gpuSupport"` } type AppInstallDTO struct { diff --git a/backend/app/service/app_install.go b/backend/app/service/app_install.go index 210b5b9ed..46898c937 100644 --- a/backend/app/service/app_install.go +++ b/backend/app/service/app_install.go @@ -750,6 +750,7 @@ func (a *AppInstallService) GetParams(id uint) (*response.AppConfig, error) { } res.AppContainerConfig = config res.HostMode = isHostModel(install.DockerCompose) + res.GpuConfig = isGpuConfig(install.DockerCompose) return &res, nil } diff --git a/backend/app/service/app_utils.go b/backend/app/service/app_utils.go index 81c6ca215..1036afab0 100644 --- a/backend/app/service/app_utils.go +++ b/backend/app/service/app_utils.go @@ -1338,9 +1338,10 @@ func handleInstalled(appInstallList []model.AppInstall, updated bool, sync bool) Path: installed.GetPath(), CreatedAt: installed.CreatedAt, App: response.AppDetail{ - Github: installed.App.Github, - Website: installed.App.Website, - Document: installed.App.Document, + Github: installed.App.Github, + Website: installed.App.Website, + Document: installed.App.Document, + GpuSupport: installed.App.GpuSupport, }, } if updated { @@ -1509,6 +1510,8 @@ func addDockerComposeCommonParam(composeMap map[string]interface{}, serviceName }, }, } + } else { + delete(resource, "reservations") } ports, ok := serviceValue["ports"].([]interface{}) @@ -1612,6 +1615,33 @@ func isHostModel(dockerCompose string) bool { return false } +func isGpuConfig(dockerCompose string) bool { + composeMap := make(map[string]interface{}) + _ = yaml.Unmarshal([]byte(dockerCompose), &composeMap) + services, serviceValid := composeMap["services"].(map[string]interface{}) + if !serviceValid { + return false + } + for _, service := range services { + serviceValue := service.(map[string]interface{}) + deploy := map[string]interface{}{} + if de, ok := serviceValue["deploy"]; ok { + deploy = de.(map[string]interface{}) + } + resource := map[string]interface{}{} + if res, ok := deploy["resources"]; ok { + resource = res.(map[string]interface{}) + } + if reservations, ok := resource["reservations"]; ok { + reservationsMap := reservations.(map[string]interface{}) + if _, dOk := reservationsMap["devices"]; dOk { + return true + } + } + } + return false +} + func RequestDownloadCallBack(downloadCallBackUrl string) { if downloadCallBackUrl == "" { return diff --git a/frontend/src/api/interface/app.ts b/frontend/src/api/interface/app.ts index 9b0aac2a7..0a5560315 100644 --- a/frontend/src/api/interface/app.ts +++ b/frontend/src/api/interface/app.ts @@ -242,6 +242,7 @@ export namespace App { allowPort: boolean; dockerCompose: string; hostMode?: boolean; + gpuConfig?: boolean; } export interface IgnoredApp { diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index e4c9530e5..f38bb1880 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -1979,8 +1979,7 @@ const message = { pullImage: 'Pull Image', pullImageHelper: 'Execute docker pull to pull the image before the application starts', gpuConfig: 'GPU Acceleration', - gpuConfigHelper: - 'Please ensure that the server has NVIDIA drivers and NVIDIA Container Toolkit installed', + gpuConfigHelper: 'Please ensure that the server has NVIDIA drivers and NVIDIA Container Toolkit installed', }, website: { website: 'Website | Websites', @@ -2591,6 +2590,7 @@ const message = { proxyHelper4: 'Once created, you can view and manage it in the website list', proxyHelper5: 'After enabling, you can disable external access to the port in the App Store - Installed - Ollama - Parameters to improve security.', + proxyHelper6: 'To disable proxy configuration, you can delete it from the website list.', }, }; diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 493dacc7f..cad41dc77 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -2559,6 +2559,7 @@ const message = { proxyHelper4: '作成後、ウェブサイトリストで確認および管理できます', proxyHelper5: '有効にすると、アプリストア - インストール済み - Ollama - パラメータでポートの外部アクセスを無効にし、セキュリティを向上させることができます。', + proxyHelper6: 'プロキシ設定を無効にするには、ウェブサイトリストから削除できます。', }, }; export default { diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index fbde36ce2..13d30753e 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -1920,8 +1920,7 @@ const message = { pullImage: '이미지 풀', pullImageHelper: '애플리케이션 시작 전에 docker pull 을 실행하여 이미지를 다운로드하세요.', gpuConfig: 'GPU 가속', - gpuConfigHelper: - '서버에 NVIDIA 드라이버와 NVIDIA Container Toolkit이 설치되어 있는지 확인하십시오', + gpuConfigHelper: '서버에 NVIDIA 드라이버와 NVIDIA Container Toolkit이 설치되어 있는지 확인하십시오', }, website: { website: '웹사이트 | 웹사이트들', @@ -2521,6 +2520,7 @@ const message = { proxyHelper4: '생성 후, 웹사이트 목록에서 이를 보고 관리할 수 있습니다', proxyHelper5: '활성화한 후, 앱 스토어 - 설치됨 - Ollama - 매개변수에서 포트 외부 접근을 비활성화하여 보안을 강화할 수 있습니다.', + proxyHelper6: '프록시 구성을 비활성화하려면 웹사이트 목록에서 삭제할 수 있습니다.', }, }; diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 097d1ba64..478494aaf 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -2004,8 +2004,7 @@ const message = { pullImage: 'Tarik Imej', pullImageHelper: 'Laksanakan docker pull untuk menarik imej sebelum aplikasi dimulakan.', gpuConfig: 'Pecutan GPU', - gpuConfigHelper: - 'Sila pastikan bahawa pelayan telah dipasang pemacu NVIDIA dan NVIDIA Container Toolkit', + gpuConfigHelper: 'Sila pastikan bahawa pelayan telah dipasang pemacu NVIDIA dan NVIDIA Container Toolkit', }, website: { website: 'Laman Web | Laman Web', @@ -2620,6 +2619,7 @@ const message = { proxyHelper4: 'Setelah selesai, anda boleh melihat dan mengurusnya dalam senarai laman web', proxyHelper5: 'Selepas diaktifkan, anda boleh melumpuhkan akses luaran ke port dalam App Store - Dipasang - Ollama - Parameter untuk meningkatkan keselamatan.', + proxyHelper6: 'Untuk melumpuhkan konfigurasi proksi, anda boleh memadamnya dari senarai laman web.', }, }; diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index c7bc20263..cb34ce795 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -2614,6 +2614,7 @@ const message = { proxyHelper2: 'Limite o acesso por IP para evitar exposição na internet pública', proxyHelper3: 'Habilite a transmissão em fluxo', proxyHelper4: 'Após a criação, você pode visualizar e gerenciar no lista de sites', + proxyHelper6: 'Para desativar a configuração de proxy, você pode excluí-la da lista de sites.', }, }; diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index ab24d3934..61b8b9004 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -1997,8 +1997,7 @@ const message = { pullImage: 'Загрузить образ', pullImageHelper: 'Выполнить docker pull для загрузки образа перед запуском приложения', gpuConfig: 'GPU Hızlandırma', - gpuConfigHelper: - 'Пожалуйста, убедитесь, что на сервере установлены драйверы NVIDIA и NVIDIA Container Toolkit', + gpuConfigHelper: 'Пожалуйста, убедитесь, что на сервере установлены драйверы NVIDIA и NVIDIA Container Toolkit', }, website: { website: 'Веб-сайт | Веб-сайты', @@ -2613,6 +2612,7 @@ const message = { proxyHelper4: 'После создания вы можете просматривать и управлять этим в списке сайтов', proxyHelper5: 'После включения вы можете отключить внешний доступ к порту в Магазине приложений - Установленные - Ollama - Параметры для повышения безопасности.', + proxyHelper6: 'Чтобы отключить настройку прокси, вы можете удалить её из списка сайтов.', }, }; diff --git a/frontend/src/lang/modules/tw.ts b/frontend/src/lang/modules/tw.ts index 0021e3923..380c79bcb 100644 --- a/frontend/src/lang/modules/tw.ts +++ b/frontend/src/lang/modules/tw.ts @@ -2427,6 +2427,7 @@ const message = { proxyHelper3: '啟用流式傳輸', proxyHelper4: '創建後,您可以在網站列表中查看並管理', proxyHelper5: '啟用後,您可以在應用商店 - 已安裝 - Ollama - 參數中取消端口外部訪問以提高安全性。', + proxyHelper6: '如需關閉代理配置,可以在網站列表中刪除', }, }; export default { diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 96929d36d..75fad15af 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -2066,7 +2066,7 @@ const message = { ipv6: '监听 IPV6', leechReturnError: '请填写 HTTP 状态码', selectAcme: '选择 acme 账号', - imported: '手动创建', + imported: '存量/自签证书', importType: '导入方式', pasteSSL: '粘贴代码', localSSL: '选择服务器文件', @@ -2424,11 +2424,12 @@ const message = { }, aitool: { proxy: 'AI 代理增强', - proxyHelper1: '绑定域名,并开启 HTTPS,增强传输安全性', + proxyHelper1: '绑定域名并开启 HTTPS,增强传输安全性', proxyHelper2: '限制 IP 访问,防止在公网暴露', proxyHelper3: '开启流式传输', proxyHelper4: '创建完成之后可以在网站列表中查看并管理', - proxyHelper5: '开启之后可以在应用商店 - 已安装 - ollama - 参数中取消端口外部访问以提高安全性', + proxyHelper5: '创建完成之后可以在应用商店 - 已安装 - ollama - 参数中取消端口外部访问以提高安全性', + proxyHelper6: '如需关闭代理配置,可以在网站列表中删除', }, }; export default { diff --git a/frontend/src/views/ai/model/domain/index.vue b/frontend/src/views/ai/model/domain/index.vue index b91f25f5d..0b6eef241 100644 --- a/frontend/src/views/ai/model/domain/index.vue +++ b/frontend/src/views/ai/model/domain/index.vue @@ -25,7 +25,18 @@ - {{ $t('aitool.proxyHelper4') }} + {{ $t('aitool.proxyHelper4') + ' ' }} + + {{ $t('firewall.quickJump') }} + + + + {{ $t('aitool.proxyHelper6') }} @@ -52,6 +63,7 @@ :placeholder="$t('website.selectAcme')" @change="listSSL" > + { acmeAccounts.value = res.data.items || []; if (acmeAccounts.value.length > 0) { req.value.acmeAccountID = acmeAccounts.value[0].id; - listSSL(); } + listSSL(); }); }; @@ -230,7 +242,22 @@ const search = async (appInstallID: number) => { } catch (e) {} }; +const toWebsite = (websiteID: number) => { + if (websiteID != undefined && websiteID > 0) { + window.location.href = `/websites/${websiteID}/config/basic`; + } else { + window.location.href = '/websites'; + } +}; + defineExpose({ acceptParams, }); + + diff --git a/frontend/src/views/ai/model/index.vue b/frontend/src/views/ai/model/index.vue index 1dd689111..b84cfe5bd 100644 --- a/frontend/src/views/ai/model/index.vue +++ b/frontend/src/views/ai/model/index.vue @@ -33,6 +33,9 @@ {{ $t('ai_tools.model.create') }} + + {{ $t('aitool.proxy') }} + {{ $t('database.databaseConnInfo') }} @@ -48,9 +51,7 @@ > OpenWebUI - - {{ $t('aitool.proxy') }} - + {{ $t('commons.button.delete') }} diff --git a/frontend/src/views/app-store/installed/detail/index.vue b/frontend/src/views/app-store/installed/detail/index.vue index 6931a3ca2..1a9fe60b4 100644 --- a/frontend/src/views/app-store/installed/detail/index.vue +++ b/frontend/src/views/app-store/installed/detail/index.vue @@ -107,7 +107,10 @@ {{ $t('container.limitHelper', [limits.memory]) }} {{ paramModel.memoryUnit }}B - + + + {{ $t('app.gpuConfigHelper') }} + {{ $t('app.editComposeHelper') }} @@ -162,10 +165,12 @@ const extensions = [yaml(), oneDark]; interface ParamProps { id: Number; app: any; + gpuSupport?: boolean; } const paramData = ref({ id: 0, app: {}, + gpuSupport: false, }); interface EditForm extends App.InstallParams { @@ -190,6 +195,8 @@ const limits = ref({ cpu: null as number, memory: null as number, }); +const gpuSupport = ref(false); +const em = defineEmits(['close']); const changeUnit = () => { if (paramModel.value.memoryUnit == 'M') { @@ -212,6 +219,7 @@ const acceptParams = async (props: ParamProps) => { params.value = []; paramData.value.id = props.id; paramModel.value.params = {}; + gpuSupport.value = props.gpuSupport; edit.value = false; await get(); open.value = true; @@ -219,6 +227,7 @@ const acceptParams = async (props: ParamProps) => { const handleClose = () => { open.value = false; + em('close', open); }; const editParam = () => { params.value.forEach((param: EditForm) => { @@ -265,6 +274,7 @@ const get = async () => { paramModel.value.advanced = false; paramModel.value.dockerCompose = res.data.dockerCompose; paramModel.value.isHostMode = res.data.hostMode; + paramModel.value.gpuConfig = res.data.gpuConfig; } catch (error) { } finally { loading.value = false; @@ -303,6 +313,7 @@ const submit = async (formEl: FormInstance) => { submitModel.value.editCompose = paramModel.value.editCompose; submitModel.value.dockerCompose = paramModel.value.dockerCompose; } + submitModel.value.gpuConfig = paramModel.value.gpuConfig; } try { loading.value = true; diff --git a/frontend/src/views/app-store/installed/index.vue b/frontend/src/views/app-store/installed/index.vue index 3b0e9c7e1..41b31e229 100644 --- a/frontend/src/views/app-store/installed/index.vue +++ b/frontend/src/views/app-store/installed/index.vue @@ -302,7 +302,7 @@ - + @@ -605,7 +605,7 @@ const openUploads = (key: string, name: string) => { }; const openParam = (row: any) => { - appParamRef.value.acceptParams({ id: row.id }); + appParamRef.value.acceptParams({ id: row.id, gpuSupport: row.app.gpuSupport }); }; const isAppErr = (row: any) => {