From 72517a1ec2c4dc76ad1b721f01eb1c193eef8a51 Mon Sep 17 00:00:00 2001 From: Baptiste Arnaud Date: Wed, 21 Aug 2024 16:07:30 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=EF=B8=8F(openai)=20Allow=20for=20cust?= =?UTF-8?q?om=20base=20URL=20when=20adding=20new=20creds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #1665 --- .../forge/blocks/openai/actions/createChatCompletion.tsx | 4 ++-- packages/forge/blocks/openai/actions/createSpeech.tsx | 6 +++--- .../forge/blocks/openai/actions/createTranscription.tsx | 2 +- packages/forge/blocks/openai/auth.ts | 6 ++++++ packages/forge/blocks/openai/baseOptions.ts | 2 -- packages/forge/blocks/openai/constants.ts | 3 +-- packages/forge/blocks/openai/helpers/fetchModels.ts | 5 ++--- .../forge/blocks/openai/shared/runOpenAIChatCompletion.ts | 7 +------ .../blocks/openai/shared/runOpenAIChatCompletionStream.ts | 7 +------ 9 files changed, 17 insertions(+), 25 deletions(-) diff --git a/packages/forge/blocks/openai/actions/createChatCompletion.tsx b/packages/forge/blocks/openai/actions/createChatCompletion.tsx index f8f64c4a1d..39b25113ca 100644 --- a/packages/forge/blocks/openai/actions/createChatCompletion.tsx +++ b/packages/forge/blocks/openai/actions/createChatCompletion.tsx @@ -57,7 +57,7 @@ export const createChatCompletion = createAction({ runOpenAIChatCompletion({ ...params, config: { - baseUrl: defaultOpenAIOptions.baseUrl, + baseUrl: params.credentials.baseUrl, defaultModel: defaultOpenAIOptions.model, }, compatibility: 'strict', @@ -68,7 +68,7 @@ export const createChatCompletion = createAction({ runOpenAIChatCompletionStream({ ...params, config: { - baseUrl: defaultOpenAIOptions.baseUrl, + baseUrl: params.credentials.baseUrl, defaultModel: defaultOpenAIOptions.model, }, compatibility: 'strict', diff --git a/packages/forge/blocks/openai/actions/createSpeech.tsx b/packages/forge/blocks/openai/actions/createSpeech.tsx index 291997186e..85e5d464cf 100644 --- a/packages/forge/blocks/openai/actions/createSpeech.tsx +++ b/packages/forge/blocks/openai/actions/createSpeech.tsx @@ -39,10 +39,10 @@ export const createSpeech = createAction({ fetch: async ({ credentials, options }) => { if (!credentials?.apiKey) return [] - const baseUrl = options?.baseUrl ?? defaultOpenAIOptions.baseUrl + const baseUrl = options?.baseUrl const config = { apiKey: credentials.apiKey, - baseURL: baseUrl ?? defaultOpenAIOptions.baseUrl, + baseURL: baseUrl, defaultHeaders: { 'api-key': credentials.apiKey, }, @@ -75,7 +75,7 @@ export const createSpeech = createAction({ const config = { apiKey, - baseURL: options.baseUrl ?? defaultOpenAIOptions.baseUrl, + baseURL: options.baseUrl, defaultHeaders: { 'api-key': apiKey, }, diff --git a/packages/forge/blocks/openai/actions/createTranscription.tsx b/packages/forge/blocks/openai/actions/createTranscription.tsx index 09aa72e96b..cb95e704e9 100644 --- a/packages/forge/blocks/openai/actions/createTranscription.tsx +++ b/packages/forge/blocks/openai/actions/createTranscription.tsx @@ -29,7 +29,7 @@ export const createTranscription = createAction({ const config = { apiKey, - baseURL: options.baseUrl ?? defaultOpenAIOptions.baseUrl, + baseURL: options.baseUrl, defaultHeaders: { 'api-key': apiKey, }, diff --git a/packages/forge/blocks/openai/auth.ts b/packages/forge/blocks/openai/auth.ts index 182b45624a..b6c7741a33 100644 --- a/packages/forge/blocks/openai/auth.ts +++ b/packages/forge/blocks/openai/auth.ts @@ -14,5 +14,11 @@ export const auth = createAuth({ withVariableButton: false, isDebounceDisabled: true, }), + baseUrl: option.string.layout({ + label: 'Base URL', + defaultValue: 'https://api.openai.com/v1', + moreInfoTooltip: + 'Use a different URL prefix for API calls, e.g. to use proxy servers.', + }), }), }) diff --git a/packages/forge/blocks/openai/baseOptions.ts b/packages/forge/blocks/openai/baseOptions.ts index aacfca00b7..02ecff5c08 100644 --- a/packages/forge/blocks/openai/baseOptions.ts +++ b/packages/forge/blocks/openai/baseOptions.ts @@ -1,12 +1,10 @@ import { option } from '@typebot.io/forge' -import { defaultOpenAIOptions } from './constants' export const baseOptions = option .object({ baseUrl: option.string.layout({ accordion: 'Customize provider', label: 'Base URL', - defaultValue: defaultOpenAIOptions.baseUrl, }), apiVersion: option.string.layout({ accordion: 'Customize provider', diff --git a/packages/forge/blocks/openai/constants.ts b/packages/forge/blocks/openai/constants.ts index a8022b9254..1419607a02 100644 --- a/packages/forge/blocks/openai/constants.ts +++ b/packages/forge/blocks/openai/constants.ts @@ -16,8 +16,7 @@ export const modelsWithImageUrlSupport = [ export const excludedModelsFromImageUrlSupport = ['gpt-4-turbo-preview'] export const defaultOpenAIOptions = { - baseUrl: 'https://api.openai.com/v1', - model: 'gpt-3.5-turbo', + model: 'gpt-4o-mini', voiceModel: 'tts-1', temperature: 1, } as const diff --git a/packages/forge/blocks/openai/helpers/fetchModels.ts b/packages/forge/blocks/openai/helpers/fetchModels.ts index 4c1377f37f..b4fb1d46e2 100644 --- a/packages/forge/blocks/openai/helpers/fetchModels.ts +++ b/packages/forge/blocks/openai/helpers/fetchModels.ts @@ -1,5 +1,4 @@ import OpenAI, { ClientOptions } from 'openai' -import { defaultOpenAIOptions } from '../constants' type Props = { apiKey?: string @@ -9,14 +8,14 @@ type Props = { export const fetchGPTModels = async ({ apiKey, - baseUrl = defaultOpenAIOptions.baseUrl, + baseUrl, apiVersion, }: Props) => { if (!apiKey) return [] const config = { apiKey: apiKey, - baseURL: baseUrl ?? defaultOpenAIOptions.baseUrl, + baseURL: baseUrl, defaultHeaders: { 'api-key': apiKey, }, diff --git a/packages/forge/blocks/openai/shared/runOpenAIChatCompletion.ts b/packages/forge/blocks/openai/shared/runOpenAIChatCompletion.ts index 1235da048e..cfb0752e1f 100644 --- a/packages/forge/blocks/openai/shared/runOpenAIChatCompletion.ts +++ b/packages/forge/blocks/openai/shared/runOpenAIChatCompletion.ts @@ -8,7 +8,7 @@ import { parseTools } from '@typebot.io/ai/parseTools' import { parseChatCompletionMessages } from '@typebot.io/ai/parseChatCompletionMessages' type OpenAIConfig = { - baseUrl: string + baseUrl?: string defaultModel?: string } @@ -37,11 +37,6 @@ export const runOpenAIChatCompletion = async ({ const model = createOpenAI({ baseURL: openAIConfig.baseUrl ?? options.baseUrl, - headers: options.baseUrl - ? { - 'api-key': apiKey, - } - : undefined, apiKey, compatibility, })(modelName) diff --git a/packages/forge/blocks/openai/shared/runOpenAIChatCompletionStream.ts b/packages/forge/blocks/openai/shared/runOpenAIChatCompletionStream.ts index 067cfe24a9..acbb75a1bb 100644 --- a/packages/forge/blocks/openai/shared/runOpenAIChatCompletionStream.ts +++ b/packages/forge/blocks/openai/shared/runOpenAIChatCompletionStream.ts @@ -13,7 +13,7 @@ type Props = { credentials: { apiKey?: string } options: ChatCompletionOptions variables: AsyncVariableStore - config: { baseUrl: string; defaultModel?: string } + config: { baseUrl?: string; defaultModel?: string } compatibility?: 'strict' | 'compatible' } @@ -34,11 +34,6 @@ export const runOpenAIChatCompletionStream = async ({ const model = createOpenAI({ baseURL: openAIConfig.baseUrl ?? options.baseUrl, - headers: options.baseUrl - ? { - 'api-key': apiKey, - } - : undefined, apiKey, compatibility, })(modelName)