From a62a0f4469d4ce63009f96bb0a810c39f56ed460 Mon Sep 17 00:00:00 2001 From: GodricLee <2300109991@qq.com> Date: Tue, 12 Aug 2025 10:32:06 +0000 Subject: [PATCH 1/4] feat: add Azure Openai api support, user can manually input base_url to get things work --- .../ModelProviderCredentialsForm.tsx | 31 +++++++++++++++++++ .../route.tsx | 14 +++++++++ .../app/routes/providers.$name/route.tsx | 15 +++++++++ .../db/seeds/aiModels/aiModels.js | 11 +++++++ 4 files changed, 71 insertions(+) diff --git a/reagent-remix-vite/app/components/ModelProviderCredentials/ModelProviderCredentialsForm.tsx b/reagent-remix-vite/app/components/ModelProviderCredentials/ModelProviderCredentialsForm.tsx index 25405d4..25cde8c 100644 --- a/reagent-remix-vite/app/components/ModelProviderCredentials/ModelProviderCredentialsForm.tsx +++ b/reagent-remix-vite/app/components/ModelProviderCredentials/ModelProviderCredentialsForm.tsx @@ -8,10 +8,19 @@ import './ModelProviderCredentialsForm.css'; type SingleCredentialType = string; +// Added: allow passing extra optional fields not present in credentialsSchema +type ExtraField = { + key: string; + label: string; + helperText?: string; +}; + export function ModelProviderCredentialsForm({ credentialsSchema, currentCredentials, onSubmit, + // Added: new optional prop for extra fields + extraFields, }: { credentialsSchema: Record< string, @@ -22,6 +31,8 @@ export function ModelProviderCredentialsForm({ >; currentCredentials: Record; onSubmit: (credentials: Record) => any; + // Added + extraFields?: ExtraField[]; }) { const [credentials, setCredentials] = useState(currentCredentials); @@ -51,6 +62,26 @@ export function ModelProviderCredentialsForm({ ); })} + {/* Added: render extra optional fields that are not in credentialsSchema */} + {extraFields + ?.filter((f) => !(f.key in credentialsSchema)) + .map((f) => ( +
+ { + setCredentials({ + ...credentials, + [f.key]: e.target.value, + }); + }} + /> +
+ ))} + diff --git a/reagent-remix-vite/app/routes/organizations.$orgId.providers.$name/route.tsx b/reagent-remix-vite/app/routes/organizations.$orgId.providers.$name/route.tsx index 2c68578..1c2d71f 100644 --- a/reagent-remix-vite/app/routes/organizations.$orgId.providers.$name/route.tsx +++ b/reagent-remix-vite/app/routes/organizations.$orgId.providers.$name/route.tsx @@ -97,6 +97,19 @@ export default function Provider() { const actionResponse = useActionData(); const submit = useSubmit(); + // Added: optional extra field for OpenAI provider only + const extraFields = + provider.name === 'openai' + ? [ + { + key: 'base_url', + label: 'Base URL (optional)', + helperText: + 'Optional. If left blank, the default OpenAI API endpoint will be used.', + }, + ] + : undefined; + return ( @@ -128,6 +141,7 @@ export default function Provider() { provider.credentialsSchema as any // TODO get this type outta there } currentCredentials={currentCredentials as Record} + extraFields={extraFields} onSubmit={(credentials: any) => { // alert(JSON.stringify(credentials)); submit( diff --git a/reagent-remix-vite/app/routes/providers.$name/route.tsx b/reagent-remix-vite/app/routes/providers.$name/route.tsx index fe7a439..beb8ee3 100644 --- a/reagent-remix-vite/app/routes/providers.$name/route.tsx +++ b/reagent-remix-vite/app/routes/providers.$name/route.tsx @@ -87,6 +87,19 @@ export default function Provider() { const actionResponse = useActionData(); const submit = useSubmit(); + // Added: optional extra field for OpenAI provider only + const extraFields = + provider.name === 'openai' + ? [ + { + key: 'base_url', + label: 'Base URL (optional)', + helperText: + 'Optional. If left blank, the default OpenAI API endpoint will be used.', + }, + ] + : undefined; + return ( @@ -131,6 +144,8 @@ export default function Provider() { provider.credentialsSchema as any // TODO get this type outta there } currentCredentials={currentCredentials as Record} + // Added: pass optional extra fields for OpenAI + extraFields={extraFields} onSubmit={(credentials: any) => { // alert(JSON.stringify(credentials)); submit( diff --git a/reagent-remix-vite/db/seeds/aiModels/aiModels.js b/reagent-remix-vite/db/seeds/aiModels/aiModels.js index 64a8cf9..5390cc5 100644 --- a/reagent-remix-vite/db/seeds/aiModels/aiModels.js +++ b/reagent-remix-vite/db/seeds/aiModels/aiModels.js @@ -18,6 +18,17 @@ async function main() { en_US: 'API Key', }, }, + // 新增可选 Azure 端点,保持后向兼容 + base_url: { + type: 'string', + name: { + en_US: 'Base URL (Azure endpoint, optional)', + }, + description: { + en_US: + 'If set to an Azure domain (https://{resource}.openai.azure.com/ or https://{resource}.cognitiveservices.azure.com/), Azure OpenAI will be used automatically. Model-to-deployment mapping is derived from the selected model; you do not need to enter a deployment name.', + }, + }, }, needsCredentials: true, }, From 3cbf6d90d38bdc17a9734434508449d066ea1143 Mon Sep 17 00:00:00 2001 From: GodricLee <2300109991@qq.com> Date: Tue, 12 Aug 2025 10:46:08 +0000 Subject: [PATCH 2/4] chore: bump noggin-server submodule to latest on my fork --- noggin-server | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noggin-server b/noggin-server index 9f417e9..e9477bb 160000 --- a/noggin-server +++ b/noggin-server @@ -1 +1 @@ -Subproject commit 9f417e921fb39be4d14145299da7b4b1c16e485f +Subproject commit e9477bb1e3929732b51eae96bfd9fc3c814b0353 From 3ff554d5e7305cbe2e6eca746dac737332171805 Mon Sep 17 00:00:00 2001 From: GodricLee <2300109991@qq.com> Date: Tue, 12 Aug 2025 10:47:30 +0000 Subject: [PATCH 3/4] chore: point submodule to my fork (GUI convenience) --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index a49bf6c..54d6b34 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "noggin-server"] path = noggin-server - url = git@github.com:timothyaveni/noggin-server.git + url = git@github.com:GodricLee/noggin-server.git From 58b643de318f2c047f309d1619a57e7928f2d5e6 Mon Sep 17 00:00:00 2001 From: GodricLee <2300109991@qq.com> Date: Thu, 14 Aug 2025 18:23:50 +0000 Subject: [PATCH 4/4] feat: add Azure Openai support, minor changes --- .../ModelProviderCredentialsForm.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/reagent-remix-vite/app/components/ModelProviderCredentials/ModelProviderCredentialsForm.tsx b/reagent-remix-vite/app/components/ModelProviderCredentials/ModelProviderCredentialsForm.tsx index 25cde8c..cb5862b 100644 --- a/reagent-remix-vite/app/components/ModelProviderCredentials/ModelProviderCredentialsForm.tsx +++ b/reagent-remix-vite/app/components/ModelProviderCredentials/ModelProviderCredentialsForm.tsx @@ -66,7 +66,11 @@ export function ModelProviderCredentialsForm({ {extraFields ?.filter((f) => !(f.key in credentialsSchema)) .map((f) => ( -
+