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('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) => {