diff --git a/src/locales/en-US/models.ts b/src/locales/en-US/models.ts index cfd736b2..7cc8fdb3 100644 --- a/src/locales/en-US/models.ts +++ b/src/locales/en-US/models.ts @@ -61,6 +61,7 @@ export default { 'models.table.layers': 'Layers', 'models.form.backend': 'Backend', 'models.form.backend_parameters': 'Backend Parameters', + 'models.form.backend_parameters.injected': 'Injected Backend Parameters', 'models.search.gguf.tips': 'GGUF models use llama-box(supports Linux, macOS and Windows).', 'models.search.vllm.tips': diff --git a/src/locales/ja-JP/models.ts b/src/locales/ja-JP/models.ts index e1c74851..ca7e6955 100644 --- a/src/locales/ja-JP/models.ts +++ b/src/locales/ja-JP/models.ts @@ -62,6 +62,7 @@ export default { 'models.table.layers': 'レイヤー', 'models.form.backend': 'バックエンド', 'models.form.backend_parameters': 'バックエンドパラメータ', + 'models.form.backend_parameters.injected': '注入されたバックエンドパラメータ', 'models.search.gguf.tips': 'GGUFモデルはllama-boxを使用します(Linux、macOS、Windowsをサポート)。', 'models.search.vllm.tips': diff --git a/src/locales/ru-RU/models.ts b/src/locales/ru-RU/models.ts index 252eb61a..1c123982 100644 --- a/src/locales/ru-RU/models.ts +++ b/src/locales/ru-RU/models.ts @@ -63,6 +63,7 @@ export default { 'models.table.layers': 'Слои', 'models.form.backend': 'Бэкенд', 'models.form.backend_parameters': 'Параметры бэкенда', + 'models.form.backend_parameters.injected': 'Внедрённые параметры бэкенда', 'models.search.gguf.tips': 'GGUF-модели используют llama-box (поддерживает Linux, macOS и Windows).', 'models.search.vllm.tips': diff --git a/src/locales/tr-TR/models.ts b/src/locales/tr-TR/models.ts index cbc3bbc2..06d2399d 100644 --- a/src/locales/tr-TR/models.ts +++ b/src/locales/tr-TR/models.ts @@ -61,6 +61,8 @@ export default { 'models.table.layers': 'Katmanlar', 'models.form.backend': 'Altyapı', 'models.form.backend_parameters': 'Altyapı Parametreleri', + 'models.form.backend_parameters.injected': + 'Enjekte Edilen Altyapı Parametreleri', 'models.search.gguf.tips': 'GGUF modelleri llama-box kullanır (Linux, macOS ve Windows destekler).', 'models.search.vllm.tips': diff --git a/src/locales/zh-CN/models.ts b/src/locales/zh-CN/models.ts index 9a8a3241..8abbd2a9 100644 --- a/src/locales/zh-CN/models.ts +++ b/src/locales/zh-CN/models.ts @@ -61,6 +61,7 @@ export default { 'models.table.layers': '层', 'models.form.backend': '后端', 'models.form.backend_parameters': '后端参数', + 'models.form.backend_parameters.injected': '注入的后端参数', 'models.search.gguf.tips': 'GGUF 模型用 llama-box(支持 Linux, macOS 和 Windows)。', 'models.search.vllm.tips': diff --git a/src/pages/benchmark/components/summary/instance.tsx b/src/pages/benchmark/components/summary/instance.tsx index a667304b..75b4d9ae 100644 --- a/src/pages/benchmark/components/summary/instance.tsx +++ b/src/pages/benchmark/components/summary/instance.tsx @@ -55,35 +55,39 @@ const Instance: React.FC = () => { const [instanceName, instanceData] = Object.entries(snapshot?.instances || {})[0] || []; - const params = [ - ...(instanceData?.backend_parameters || []), - ...(instanceData?.injected_backend_parameters || []) - ]; + const renderParams = (params: string[]) => + params.length > 0 ? ( + + {params.map((param: string, index: number) => ( + + {param} + + ))} + + ) : ( + '-' + ); return [ { key: '1', label: intl.formatMessage({ id: 'models.form.backend_parameters' }), - children: - params.length > 0 ? ( - - {params?.map((param: string, index: number) => ( - - {param} - - ))} - - ) : ( - '-' - ) + children: renderParams(instanceData?.backend_parameters || []) + }, + { + key: '1-1', + label: intl.formatMessage({ + id: 'models.form.backend_parameters.injected' + }), + children: renderParams(instanceData?.injected_backend_parameters || []) }, { key: '3', diff --git a/src/pages/llmodels/components/api-access-info.tsx b/src/pages/llmodels/components/api-access-info.tsx index ba7f204e..b7f5170d 100644 --- a/src/pages/llmodels/components/api-access-info.tsx +++ b/src/pages/llmodels/components/api-access-info.tsx @@ -46,7 +46,6 @@ const API_MAP: Record = { const ApiAccessInfoWrapper = styled.div` display: grid; - padding-left: 20px; grid-template-columns: max-content 1fr max-content; gap: 8px 0px; justify-items: start; @@ -103,7 +102,7 @@ const ApiAccessInfo = ({ open, data, onClose }: ApiAccessInfoProps) => { if (!data.generic_proxy) { return `${window.location.origin}/${OPENAI_COMPATIBLE}`; } - return `${window.location.origin}${MODEL_PROXY}/`; + return `${window.location.origin}${MODEL_PROXY}/${data.id}/`; }, [data]); const isRanker = useMemo(() => { @@ -114,29 +113,8 @@ const ApiAccessInfo = ({ open, data, onClose }: ApiAccessInfoProps) => { onClose(); }; - useEffect(() => { - if (open && data.generic_proxy) { - openProxyModal(data); - } - }, [open, data, openProxyModal]); - - return ( - + const renderTips = () => { + return (
@@ -155,7 +133,36 @@ const ApiAccessInfo = ({ open, data, onClose }: ApiAccessInfoProps) => { >
+ ); + }; + useEffect(() => { + if (open && data.generic_proxy) { + openProxyModal(data); + } + }, [open, data, openProxyModal]); + + return ( + + {intl.formatMessage({ id: 'models.table.button.apiAccessInfo' })} + + } + width={600} + destroyOnHidden + closable={true} + mask={{ + closable: false + }} + onOk={handleClose} + onCancel={handleClose} + footer={null} + > {intl.formatMessage({ id: 'models.table.apiAccessInfo.endpoint' })} @@ -212,9 +219,7 @@ const ApiAccessInfo = ({ open, data, onClose }: ApiAccessInfoProps) => { {data.generic_proxy && ( -
- {GenericProxyCommandCode} -
+
{GenericProxyCommandCode}
)}
); diff --git a/src/pages/llmodels/hooks/use-generic-proxy.tsx b/src/pages/llmodels/hooks/use-generic-proxy.tsx index b15857f6..2bb4730c 100644 --- a/src/pages/llmodels/hooks/use-generic-proxy.tsx +++ b/src/pages/llmodels/hooks/use-generic-proxy.tsx @@ -113,6 +113,7 @@ const useGenericProxy = () => { codeValue: generateCurlCode({ api, modelProxy: true, + routeID: data?.id || '', parameters: { model: data?.name || '', ...parameters diff --git a/src/pages/playground/view-code/audio.ts b/src/pages/playground/view-code/audio.ts index 40c7fd3b..cd643cd5 100644 --- a/src/pages/playground/view-code/audio.ts +++ b/src/pages/playground/view-code/audio.ts @@ -5,17 +5,18 @@ import { fomatNodeJsParams, formatCurlArgs, formatPyParams } from './utils'; export const generateSpeechToTextCurlCode = ({ api: url, modelProxy, + routeID, parameters }: Record) => { const host = window.location.origin; // replace url OPENAI_COMPATIBLE with GPUSTACK - const api = modelProxy ? `${MODEL_PROXY}/\${YOUR_API_PATH}` : url; + const api = modelProxy ? `${MODEL_PROXY}/${routeID}/\${YOUR_API_PATH}` : url; // ========================= Curl ========================= const curlCode = ` curl ${host}${api} \\ -H "Content-Type: multipart/form-data" \\ --H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\${modelProxy ? `\n-H "X-GPUStack-Model: ${parameters.model}" \\` : ''} +-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\ -F model="${parameters.model}" \\ -F file="@/path/to/file/audio.mp3;type=audio/mpeg" \\ ${formatCurlArgs(_.omit(parameters, 'model'), true)}` @@ -85,16 +86,17 @@ main();`.trim(); export const generateTextToSpeechCurlCode = ({ api: url, modelProxy, + routeID, parameters }: Record) => { const host = window.location.origin; - const api = modelProxy ? `${MODEL_PROXY}/\${YOUR_API_PATH}` : url; + const api = modelProxy ? `${MODEL_PROXY}/${routeID}/\${YOUR_API_PATH}` : url; // ========================= Curl ========================= const curlCode = ` curl ${host}${api} \\ -H "Content-Type: application/json" \\ --H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\${modelProxy ? `\n-H "X-GPUStack-Model: ${parameters.model}" \\` : ''} +-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\ ${formatCurlArgs(parameters, false)} \\\n--output output.${parameters.response_format}`.trim(); return curlCode; diff --git a/src/pages/playground/view-code/embedding.ts b/src/pages/playground/view-code/embedding.ts index 76dd9bb8..66838236 100644 --- a/src/pages/playground/view-code/embedding.ts +++ b/src/pages/playground/view-code/embedding.ts @@ -4,16 +4,17 @@ import { fomatNodeJsParams, formatCurlArgs, formatPyParams } from './utils'; export const generateEmbeddingCurlCode = ({ api: url, modelProxy, + routeID, parameters }: Record) => { const host = window.location.origin; - const api = modelProxy ? `${MODEL_PROXY}/\${YOUR_API_PATH}` : url; + const api = modelProxy ? `${MODEL_PROXY}/${routeID}/\${YOUR_API_PATH}` : url; // ========================= Curl ========================= const curlCode = ` curl ${host}${api} \\ -H "Content-Type: application/json" \\ --H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\${modelProxy ? `\n-H "X-GPUStack-Model: ${parameters.model}" \\` : ''} +-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\ ${formatCurlArgs(parameters, false)}`.trim(); return curlCode; diff --git a/src/pages/playground/view-code/image.ts b/src/pages/playground/view-code/image.ts index 1134f5ec..1eb2f885 100644 --- a/src/pages/playground/view-code/image.ts +++ b/src/pages/playground/view-code/image.ts @@ -6,24 +6,25 @@ export const generateImageCurlCode = ({ api: url, parameters, modelProxy, + routeID, isFormdata = false, edit = false }: Record) => { const host = window.location.origin; - const api = modelProxy ? `${MODEL_PROXY}/\${YOUR_API_PATH}` : url; + const api = modelProxy ? `${MODEL_PROXY}/${routeID}/\${YOUR_API_PATH}` : url; // ========================= Curl ========================= let curlCode = ` curl ${host}${api} \\ -H "Content-Type: application/json" \\ --H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\${modelProxy ? `\n-H "X-GPUStack-Model: ${parameters.model}" \\` : ''} +-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\ ${formatCurlArgs(parameters, isFormdata)}`.trim(); if (edit) { curlCode = ` curl ${host}${api} \\ -H "Content-Type: multipart/form-data" \\ --H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\${modelProxy ? `\n-H "X-GPUStack-Model: ${parameters.model}" \\` : ''} +-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\ -F image="@image.png" \\ -F mask="@mask.png" \\ ${formatCurlArgs(_.omit(parameters, ['mask', 'image']), isFormdata)}` diff --git a/src/pages/playground/view-code/llm.ts b/src/pages/playground/view-code/llm.ts index 5eb4bcf6..2693a9f0 100644 --- a/src/pages/playground/view-code/llm.ts +++ b/src/pages/playground/view-code/llm.ts @@ -4,16 +4,17 @@ import { fomatNodeJsParams, formatCurlArgs, formatPyParams } from './utils'; export const generateLLmCurlCode = ({ api: url, modelProxy, + routeID, parameters }: Record) => { const host = window.location.origin; - const api = modelProxy ? `${MODEL_PROXY}/\${YOUR_API_PATH}` : url; + const api = modelProxy ? `${MODEL_PROXY}/${routeID}/\${YOUR_API_PATH}` : url; // ========================= Curl ========================= const curlCode = ` curl ${host}${api} \\ -H "Content-Type: application/json" \\ --H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\${modelProxy ? `\n-H "X-GPUStack-Model: ${parameters.model}" \\` : ''} +-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\ ${formatCurlArgs(parameters, false)}`.trim(); return curlCode; diff --git a/src/pages/playground/view-code/rerank.ts b/src/pages/playground/view-code/rerank.ts index 962b7263..ee190f34 100644 --- a/src/pages/playground/view-code/rerank.ts +++ b/src/pages/playground/view-code/rerank.ts @@ -4,16 +4,19 @@ import { formatCurlArgs } from './utils'; export const generateRerankCurlCode = ({ api, modelProxy, + routeID, parameters }: Record) => { const host = window.location.origin; - const apiUrl = modelProxy ? `${MODEL_PROXY}/\${YOUR_API_PATH}` : api; + const apiUrl = modelProxy + ? `${MODEL_PROXY}/${routeID}/\${YOUR_API_PATH}` + : api; // ========================= Curl ========================= const curlCode = ` curl ${host}${apiUrl} \\ -H "Content-Type: application/json" \\ --H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\${modelProxy ? `\n-H "X-GPUStack-Model: ${parameters.model}" \\` : ''} +-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\ ${formatCurlArgs(parameters, false)}`.trim(); return curlCode; diff --git a/src/pages/playground/view-code/video.ts b/src/pages/playground/view-code/video.ts index a6cb258f..7fe179c6 100644 --- a/src/pages/playground/view-code/video.ts +++ b/src/pages/playground/view-code/video.ts @@ -6,18 +6,19 @@ export const generateCurlCode = ({ api: url, parameters, modelProxy, + routeID, isFormdata = false, edit = false }: Record) => { const host = window.location.origin; - const api = modelProxy ? `${MODEL_PROXY}/\${YOUR_API_PATH}` : url; + const api = modelProxy ? `${MODEL_PROXY}/${routeID}/\${YOUR_API_PATH}` : url; // ========================= Curl ========================= const curlCode = ` curl ${host}${api} \\ -H "Content-Type: multipart/form-data" \\ --H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\${modelProxy ? `\n-H "X-GPUStack-Model: ${parameters.model}" \\` : ''} +-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\ ${formatCurlArgs(_.omit(parameters, ['mask', 'image']), isFormdata)}` .trim() .replace(/\\$/, '');