fix: append routeID to model proxy URL and drop X-GPUStack-Model header
This commit is contained in:
@@ -61,6 +61,7 @@ export default {
|
|||||||
'models.table.layers': 'Layers',
|
'models.table.layers': 'Layers',
|
||||||
'models.form.backend': 'Backend',
|
'models.form.backend': 'Backend',
|
||||||
'models.form.backend_parameters': 'Backend Parameters',
|
'models.form.backend_parameters': 'Backend Parameters',
|
||||||
|
'models.form.backend_parameters.injected': 'Injected Backend Parameters',
|
||||||
'models.search.gguf.tips':
|
'models.search.gguf.tips':
|
||||||
'GGUF models use llama-box(supports Linux, macOS and Windows).',
|
'GGUF models use llama-box(supports Linux, macOS and Windows).',
|
||||||
'models.search.vllm.tips':
|
'models.search.vllm.tips':
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ export default {
|
|||||||
'models.table.layers': 'レイヤー',
|
'models.table.layers': 'レイヤー',
|
||||||
'models.form.backend': 'バックエンド',
|
'models.form.backend': 'バックエンド',
|
||||||
'models.form.backend_parameters': 'バックエンドパラメータ',
|
'models.form.backend_parameters': 'バックエンドパラメータ',
|
||||||
|
'models.form.backend_parameters.injected': '注入されたバックエンドパラメータ',
|
||||||
'models.search.gguf.tips':
|
'models.search.gguf.tips':
|
||||||
'GGUFモデルはllama-boxを使用します(Linux、macOS、Windowsをサポート)。',
|
'GGUFモデルはllama-boxを使用します(Linux、macOS、Windowsをサポート)。',
|
||||||
'models.search.vllm.tips':
|
'models.search.vllm.tips':
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ export default {
|
|||||||
'models.table.layers': 'Слои',
|
'models.table.layers': 'Слои',
|
||||||
'models.form.backend': 'Бэкенд',
|
'models.form.backend': 'Бэкенд',
|
||||||
'models.form.backend_parameters': 'Параметры бэкенда',
|
'models.form.backend_parameters': 'Параметры бэкенда',
|
||||||
|
'models.form.backend_parameters.injected': 'Внедрённые параметры бэкенда',
|
||||||
'models.search.gguf.tips':
|
'models.search.gguf.tips':
|
||||||
'GGUF-модели используют llama-box (поддерживает Linux, macOS и Windows).',
|
'GGUF-модели используют llama-box (поддерживает Linux, macOS и Windows).',
|
||||||
'models.search.vllm.tips':
|
'models.search.vllm.tips':
|
||||||
|
|||||||
@@ -61,6 +61,8 @@ export default {
|
|||||||
'models.table.layers': 'Katmanlar',
|
'models.table.layers': 'Katmanlar',
|
||||||
'models.form.backend': 'Altyapı',
|
'models.form.backend': 'Altyapı',
|
||||||
'models.form.backend_parameters': 'Altyapı Parametreleri',
|
'models.form.backend_parameters': 'Altyapı Parametreleri',
|
||||||
|
'models.form.backend_parameters.injected':
|
||||||
|
'Enjekte Edilen Altyapı Parametreleri',
|
||||||
'models.search.gguf.tips':
|
'models.search.gguf.tips':
|
||||||
'GGUF modelleri llama-box kullanır (Linux, macOS ve Windows destekler).',
|
'GGUF modelleri llama-box kullanır (Linux, macOS ve Windows destekler).',
|
||||||
'models.search.vllm.tips':
|
'models.search.vllm.tips':
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ export default {
|
|||||||
'models.table.layers': '层',
|
'models.table.layers': '层',
|
||||||
'models.form.backend': '后端',
|
'models.form.backend': '后端',
|
||||||
'models.form.backend_parameters': '后端参数',
|
'models.form.backend_parameters': '后端参数',
|
||||||
|
'models.form.backend_parameters.injected': '注入的后端参数',
|
||||||
'models.search.gguf.tips':
|
'models.search.gguf.tips':
|
||||||
'GGUF 模型用 llama-box(支持 Linux, macOS 和 Windows)。',
|
'GGUF 模型用 llama-box(支持 Linux, macOS 和 Windows)。',
|
||||||
'models.search.vllm.tips':
|
'models.search.vllm.tips':
|
||||||
|
|||||||
@@ -55,35 +55,39 @@ const Instance: React.FC = () => {
|
|||||||
const [instanceName, instanceData] =
|
const [instanceName, instanceData] =
|
||||||
Object.entries(snapshot?.instances || {})[0] || [];
|
Object.entries(snapshot?.instances || {})[0] || [];
|
||||||
|
|
||||||
const params = [
|
const renderParams = (params: string[]) =>
|
||||||
...(instanceData?.backend_parameters || []),
|
params.length > 0 ? (
|
||||||
...(instanceData?.injected_backend_parameters || [])
|
<Flex
|
||||||
];
|
gap={'4px 8px'}
|
||||||
|
wrap="wrap"
|
||||||
|
style={{
|
||||||
|
backgroundColor: 'var(--ant-color-fill-quaternary)',
|
||||||
|
padding: '4px 6px',
|
||||||
|
borderRadius: '2px'
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{params.map((param: string, index: number) => (
|
||||||
|
<span key={index} style={{ margin: 0 }}>
|
||||||
|
{param}
|
||||||
|
</span>
|
||||||
|
))}
|
||||||
|
</Flex>
|
||||||
|
) : (
|
||||||
|
'-'
|
||||||
|
);
|
||||||
|
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
key: '1',
|
key: '1',
|
||||||
label: intl.formatMessage({ id: 'models.form.backend_parameters' }),
|
label: intl.formatMessage({ id: 'models.form.backend_parameters' }),
|
||||||
children:
|
children: renderParams(instanceData?.backend_parameters || [])
|
||||||
params.length > 0 ? (
|
},
|
||||||
<Flex
|
{
|
||||||
gap={8}
|
key: '1-1',
|
||||||
wrap="wrap"
|
label: intl.formatMessage({
|
||||||
style={{
|
id: 'models.form.backend_parameters.injected'
|
||||||
backgroundColor: 'var(--ant-color-fill-quaternary)',
|
}),
|
||||||
padding: '4px',
|
children: renderParams(instanceData?.injected_backend_parameters || [])
|
||||||
borderRadius: '2px'
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{params?.map((param: string, index: number) => (
|
|
||||||
<span key={index} style={{ margin: 0 }}>
|
|
||||||
{param}
|
|
||||||
</span>
|
|
||||||
))}
|
|
||||||
</Flex>
|
|
||||||
) : (
|
|
||||||
'-'
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: '3',
|
key: '3',
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ const API_MAP: Record<string, { api: string }> = {
|
|||||||
|
|
||||||
const ApiAccessInfoWrapper = styled.div`
|
const ApiAccessInfoWrapper = styled.div`
|
||||||
display: grid;
|
display: grid;
|
||||||
padding-left: 20px;
|
|
||||||
grid-template-columns: max-content 1fr max-content;
|
grid-template-columns: max-content 1fr max-content;
|
||||||
gap: 8px 0px;
|
gap: 8px 0px;
|
||||||
justify-items: start;
|
justify-items: start;
|
||||||
@@ -103,7 +102,7 @@ const ApiAccessInfo = ({ open, data, onClose }: ApiAccessInfoProps) => {
|
|||||||
if (!data.generic_proxy) {
|
if (!data.generic_proxy) {
|
||||||
return `${window.location.origin}/${OPENAI_COMPATIBLE}`;
|
return `${window.location.origin}/${OPENAI_COMPATIBLE}`;
|
||||||
}
|
}
|
||||||
return `${window.location.origin}${MODEL_PROXY}/<YOUR_API_PATH>`;
|
return `${window.location.origin}${MODEL_PROXY}/${data.id}/<YOUR_API_PATH>`;
|
||||||
}, [data]);
|
}, [data]);
|
||||||
|
|
||||||
const isRanker = useMemo(() => {
|
const isRanker = useMemo(() => {
|
||||||
@@ -114,29 +113,8 @@ const ApiAccessInfo = ({ open, data, onClose }: ApiAccessInfoProps) => {
|
|||||||
onClose();
|
onClose();
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
const renderTips = () => {
|
||||||
if (open && data.generic_proxy) {
|
return (
|
||||||
openProxyModal(data);
|
|
||||||
}
|
|
||||||
}, [open, data, openProxyModal]);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ScrollerModal
|
|
||||||
open={open}
|
|
||||||
style={{
|
|
||||||
top: '20%'
|
|
||||||
}}
|
|
||||||
title={intl.formatMessage({ id: 'models.table.button.apiAccessInfo' })}
|
|
||||||
width={600}
|
|
||||||
destroyOnHidden
|
|
||||||
closable={true}
|
|
||||||
mask={{
|
|
||||||
closable: false
|
|
||||||
}}
|
|
||||||
onOk={handleClose}
|
|
||||||
onCancel={handleClose}
|
|
||||||
footer={null}
|
|
||||||
>
|
|
||||||
<Tips>
|
<Tips>
|
||||||
<dl className="tips">
|
<dl className="tips">
|
||||||
<dt>
|
<dt>
|
||||||
@@ -155,7 +133,36 @@ const ApiAccessInfo = ({ open, data, onClose }: ApiAccessInfoProps) => {
|
|||||||
></dd>
|
></dd>
|
||||||
</dl>
|
</dl>
|
||||||
</Tips>
|
</Tips>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (open && data.generic_proxy) {
|
||||||
|
openProxyModal(data);
|
||||||
|
}
|
||||||
|
}, [open, data, openProxyModal]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ScrollerModal
|
||||||
|
open={open}
|
||||||
|
style={{
|
||||||
|
top: '20%'
|
||||||
|
}}
|
||||||
|
title={
|
||||||
|
<span style={{ marginBottom: 8 }}>
|
||||||
|
{intl.formatMessage({ id: 'models.table.button.apiAccessInfo' })}
|
||||||
|
</span>
|
||||||
|
}
|
||||||
|
width={600}
|
||||||
|
destroyOnHidden
|
||||||
|
closable={true}
|
||||||
|
mask={{
|
||||||
|
closable: false
|
||||||
|
}}
|
||||||
|
onOk={handleClose}
|
||||||
|
onCancel={handleClose}
|
||||||
|
footer={null}
|
||||||
|
>
|
||||||
<ApiAccessInfoWrapper>
|
<ApiAccessInfoWrapper>
|
||||||
<span className="label">
|
<span className="label">
|
||||||
{intl.formatMessage({ id: 'models.table.apiAccessInfo.endpoint' })}
|
{intl.formatMessage({ id: 'models.table.apiAccessInfo.endpoint' })}
|
||||||
@@ -212,9 +219,7 @@ const ApiAccessInfo = ({ open, data, onClose }: ApiAccessInfoProps) => {
|
|||||||
</span>
|
</span>
|
||||||
</ApiAccessInfoWrapper>
|
</ApiAccessInfoWrapper>
|
||||||
{data.generic_proxy && (
|
{data.generic_proxy && (
|
||||||
<div style={{ paddingLeft: 20, marginTop: 12 }}>
|
<div style={{ marginTop: 12 }}>{GenericProxyCommandCode}</div>
|
||||||
{GenericProxyCommandCode}
|
|
||||||
</div>
|
|
||||||
)}
|
)}
|
||||||
</ScrollerModal>
|
</ScrollerModal>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ const useGenericProxy = () => {
|
|||||||
codeValue: generateCurlCode({
|
codeValue: generateCurlCode({
|
||||||
api,
|
api,
|
||||||
modelProxy: true,
|
modelProxy: true,
|
||||||
|
routeID: data?.id || '',
|
||||||
parameters: {
|
parameters: {
|
||||||
model: data?.name || '',
|
model: data?.name || '',
|
||||||
...parameters
|
...parameters
|
||||||
|
|||||||
@@ -5,17 +5,18 @@ import { fomatNodeJsParams, formatCurlArgs, formatPyParams } from './utils';
|
|||||||
export const generateSpeechToTextCurlCode = ({
|
export const generateSpeechToTextCurlCode = ({
|
||||||
api: url,
|
api: url,
|
||||||
modelProxy,
|
modelProxy,
|
||||||
|
routeID,
|
||||||
parameters
|
parameters
|
||||||
}: Record<string, any>) => {
|
}: Record<string, any>) => {
|
||||||
const host = window.location.origin;
|
const host = window.location.origin;
|
||||||
// replace url OPENAI_COMPATIBLE with GPUSTACK
|
// 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 =========================
|
// ========================= Curl =========================
|
||||||
const curlCode = `
|
const curlCode = `
|
||||||
curl ${host}${api} \\
|
curl ${host}${api} \\
|
||||||
-H "Content-Type: multipart/form-data" \\
|
-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 model="${parameters.model}" \\
|
||||||
-F file="@/path/to/file/audio.mp3;type=audio/mpeg" \\
|
-F file="@/path/to/file/audio.mp3;type=audio/mpeg" \\
|
||||||
${formatCurlArgs(_.omit(parameters, 'model'), true)}`
|
${formatCurlArgs(_.omit(parameters, 'model'), true)}`
|
||||||
@@ -85,16 +86,17 @@ main();`.trim();
|
|||||||
export const generateTextToSpeechCurlCode = ({
|
export const generateTextToSpeechCurlCode = ({
|
||||||
api: url,
|
api: url,
|
||||||
modelProxy,
|
modelProxy,
|
||||||
|
routeID,
|
||||||
parameters
|
parameters
|
||||||
}: Record<string, any>) => {
|
}: Record<string, any>) => {
|
||||||
const host = window.location.origin;
|
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 =========================
|
// ========================= Curl =========================
|
||||||
const curlCode = `
|
const curlCode = `
|
||||||
curl ${host}${api} \\
|
curl ${host}${api} \\
|
||||||
-H "Content-Type: application/json" \\
|
-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();
|
${formatCurlArgs(parameters, false)} \\\n--output output.${parameters.response_format}`.trim();
|
||||||
|
|
||||||
return curlCode;
|
return curlCode;
|
||||||
|
|||||||
@@ -4,16 +4,17 @@ import { fomatNodeJsParams, formatCurlArgs, formatPyParams } from './utils';
|
|||||||
export const generateEmbeddingCurlCode = ({
|
export const generateEmbeddingCurlCode = ({
|
||||||
api: url,
|
api: url,
|
||||||
modelProxy,
|
modelProxy,
|
||||||
|
routeID,
|
||||||
parameters
|
parameters
|
||||||
}: Record<string, any>) => {
|
}: Record<string, any>) => {
|
||||||
const host = window.location.origin;
|
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 =========================
|
// ========================= Curl =========================
|
||||||
const curlCode = `
|
const curlCode = `
|
||||||
curl ${host}${api} \\
|
curl ${host}${api} \\
|
||||||
-H "Content-Type: application/json" \\
|
-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();
|
${formatCurlArgs(parameters, false)}`.trim();
|
||||||
|
|
||||||
return curlCode;
|
return curlCode;
|
||||||
|
|||||||
@@ -6,24 +6,25 @@ export const generateImageCurlCode = ({
|
|||||||
api: url,
|
api: url,
|
||||||
parameters,
|
parameters,
|
||||||
modelProxy,
|
modelProxy,
|
||||||
|
routeID,
|
||||||
isFormdata = false,
|
isFormdata = false,
|
||||||
edit = false
|
edit = false
|
||||||
}: Record<string, any>) => {
|
}: Record<string, any>) => {
|
||||||
const host = window.location.origin;
|
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 =========================
|
// ========================= Curl =========================
|
||||||
let curlCode = `
|
let curlCode = `
|
||||||
curl ${host}${api} \\
|
curl ${host}${api} \\
|
||||||
-H "Content-Type: application/json" \\
|
-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();
|
${formatCurlArgs(parameters, isFormdata)}`.trim();
|
||||||
|
|
||||||
if (edit) {
|
if (edit) {
|
||||||
curlCode = `
|
curlCode = `
|
||||||
curl ${host}${api} \\
|
curl ${host}${api} \\
|
||||||
-H "Content-Type: multipart/form-data" \\
|
-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 image="@image.png" \\
|
||||||
-F mask="@mask.png" \\
|
-F mask="@mask.png" \\
|
||||||
${formatCurlArgs(_.omit(parameters, ['mask', 'image']), isFormdata)}`
|
${formatCurlArgs(_.omit(parameters, ['mask', 'image']), isFormdata)}`
|
||||||
|
|||||||
@@ -4,16 +4,17 @@ import { fomatNodeJsParams, formatCurlArgs, formatPyParams } from './utils';
|
|||||||
export const generateLLmCurlCode = ({
|
export const generateLLmCurlCode = ({
|
||||||
api: url,
|
api: url,
|
||||||
modelProxy,
|
modelProxy,
|
||||||
|
routeID,
|
||||||
parameters
|
parameters
|
||||||
}: Record<string, any>) => {
|
}: Record<string, any>) => {
|
||||||
const host = window.location.origin;
|
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 =========================
|
// ========================= Curl =========================
|
||||||
const curlCode = `
|
const curlCode = `
|
||||||
curl ${host}${api} \\
|
curl ${host}${api} \\
|
||||||
-H "Content-Type: application/json" \\
|
-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();
|
${formatCurlArgs(parameters, false)}`.trim();
|
||||||
|
|
||||||
return curlCode;
|
return curlCode;
|
||||||
|
|||||||
@@ -4,16 +4,19 @@ import { formatCurlArgs } from './utils';
|
|||||||
export const generateRerankCurlCode = ({
|
export const generateRerankCurlCode = ({
|
||||||
api,
|
api,
|
||||||
modelProxy,
|
modelProxy,
|
||||||
|
routeID,
|
||||||
parameters
|
parameters
|
||||||
}: Record<string, any>) => {
|
}: Record<string, any>) => {
|
||||||
const host = window.location.origin;
|
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 =========================
|
// ========================= Curl =========================
|
||||||
const curlCode = `
|
const curlCode = `
|
||||||
curl ${host}${apiUrl} \\
|
curl ${host}${apiUrl} \\
|
||||||
-H "Content-Type: application/json" \\
|
-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();
|
${formatCurlArgs(parameters, false)}`.trim();
|
||||||
|
|
||||||
return curlCode;
|
return curlCode;
|
||||||
|
|||||||
@@ -6,18 +6,19 @@ export const generateCurlCode = ({
|
|||||||
api: url,
|
api: url,
|
||||||
parameters,
|
parameters,
|
||||||
modelProxy,
|
modelProxy,
|
||||||
|
routeID,
|
||||||
isFormdata = false,
|
isFormdata = false,
|
||||||
edit = false
|
edit = false
|
||||||
}: Record<string, any>) => {
|
}: Record<string, any>) => {
|
||||||
const host = window.location.origin;
|
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 =========================
|
// ========================= Curl =========================
|
||||||
|
|
||||||
const curlCode = `
|
const curlCode = `
|
||||||
curl ${host}${api} \\
|
curl ${host}${api} \\
|
||||||
-H "Content-Type: multipart/form-data" \\
|
-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)}`
|
${formatCurlArgs(_.omit(parameters, ['mask', 'image']), isFormdata)}`
|
||||||
.trim()
|
.trim()
|
||||||
.replace(/\\$/, '');
|
.replace(/\\$/, '');
|
||||||
|
|||||||
Reference in New Issue
Block a user