diff --git a/apps/builder/src/features/blocks/integrations/openai/api/listModels.ts b/apps/builder/src/features/blocks/integrations/openai/api/listModels.ts index 134d9157f..9a707d525 100644 --- a/apps/builder/src/features/blocks/integrations/openai/api/listModels.ts +++ b/apps/builder/src/features/blocks/integrations/openai/api/listModels.ts @@ -5,15 +5,17 @@ import { z } from 'zod' import { isReadWorkspaceFobidden } from '@/features/workspace/helpers/isReadWorkspaceFobidden' import { Configuration, OpenAIApi, ResponseTypes } from 'openai-edge' import { decrypt } from '@typebot.io/lib/api' -import { OpenAICredentials } from '@typebot.io/schemas/features/blocks/integrations/openai' -import { IntegrationBlockType, typebotSchema } from '@typebot.io/schemas' +import { + OpenAICredentials, + defaultBaseUrl, +} from '@typebot.io/schemas/features/blocks/integrations/openai' import { isNotEmpty } from '@typebot.io/lib/utils' export const listModels = authenticatedProcedure .meta({ openapi: { method: 'GET', - path: '/typebots/{typebotId}/blocks/{blockId}/openai/models', + path: '/openai/models', protect: true, summary: 'List OpenAI models', tags: ['OpenAI'], @@ -21,10 +23,10 @@ export const listModels = authenticatedProcedure }) .input( z.object({ - typebotId: z.string(), - blockId: z.string(), credentialsId: z.string(), workspaceId: z.string(), + baseUrl: z.string().default(defaultBaseUrl), + apiVersion: z.string().optional(), }) ) .output( @@ -34,7 +36,7 @@ export const listModels = authenticatedProcedure ) .query( async ({ - input: { credentialsId, workspaceId, typebotId, blockId }, + input: { credentialsId, workspaceId, baseUrl, apiVersion }, ctx: { user }, }) => { const workspace = await prisma.workspace.findFirst({ @@ -45,14 +47,6 @@ export const listModels = authenticatedProcedure userId: true, }, }, - typebots: { - where: { - id: typebotId, - }, - select: { - groups: true, - }, - }, credentials: { where: { id: credentialsId, @@ -80,25 +74,6 @@ export const listModels = authenticatedProcedure message: 'No credentials found', }) - const typebot = workspace.typebots.at(0) - - if (!typebot) - throw new TRPCError({ - code: 'NOT_FOUND', - message: 'Typebot not found', - }) - - const block = typebotSchema._def.schema.shape.groups - .parse(workspace.typebots.at(0)?.groups) - .flatMap((group) => group.blocks) - .find((block) => block.id === blockId) - - if (!block || block.type !== IntegrationBlockType.OPEN_AI) - throw new TRPCError({ - code: 'NOT_FOUND', - message: 'OpenAI block not found', - }) - const data = (await decrypt( credentials.data, credentials.iv @@ -106,15 +81,15 @@ export const listModels = authenticatedProcedure const config = new Configuration({ apiKey: data.apiKey, - basePath: block.options.baseUrl, + basePath: baseUrl, baseOptions: { headers: { 'api-key': data.apiKey, }, }, - defaultQueryParams: isNotEmpty(block.options.apiVersion) + defaultQueryParams: isNotEmpty(apiVersion) ? new URLSearchParams({ - 'api-version': block.options.apiVersion, + 'api-version': apiVersion, }) : undefined, }) diff --git a/apps/builder/src/features/blocks/integrations/openai/components/OpenAISettings.tsx b/apps/builder/src/features/blocks/integrations/openai/components/OpenAISettings.tsx index 58dd60823..1c4b39473 100644 --- a/apps/builder/src/features/blocks/integrations/openai/components/OpenAISettings.tsx +++ b/apps/builder/src/features/blocks/integrations/openai/components/OpenAISettings.tsx @@ -33,7 +33,7 @@ type Props = { } export const OpenAISettings = ({ - block: { options, id }, + block: { options }, onOptionsChange, }: Props) => { const { workspace } = useWorkspace() @@ -126,7 +126,6 @@ export const OpenAISettings = ({ /> {options.task && ( @@ -140,24 +139,21 @@ export const OpenAISettings = ({ const OpenAITaskSettings = ({ options, onOptionsChange, - blockId, }: { options: ChatCompletionOpenAIOptions | CreateImageOpenAIOptions - blockId: string onOptionsChange: (options: OpenAIBlock['options']) => void }) => { switch (options.task) { case 'Create chat completion': { return ( ) } case 'Create image': { - return <> + return null } } } diff --git a/apps/builder/src/features/blocks/integrations/openai/components/createChatCompletion/ModelsDropdown.tsx b/apps/builder/src/features/blocks/integrations/openai/components/createChatCompletion/ModelsDropdown.tsx index 8cfef9ec4..c929f2892 100644 --- a/apps/builder/src/features/blocks/integrations/openai/components/createChatCompletion/ModelsDropdown.tsx +++ b/apps/builder/src/features/blocks/integrations/openai/components/createChatCompletion/ModelsDropdown.tsx @@ -1,35 +1,35 @@ import { Select } from '@/components/inputs/Select' -import { useTypebot } from '@/features/editor/providers/TypebotProvider' import { useWorkspace } from '@/features/workspace/WorkspaceProvider' import { useToast } from '@/hooks/useToast' import { trpc } from '@/lib/trpc' type Props = { + baseUrl: string + apiVersion?: string credentialsId: string - blockId: string defaultValue: string onChange: (model: string | undefined) => void } export const ModelsDropdown = ({ + baseUrl, + apiVersion, defaultValue, onChange, credentialsId, - blockId, }: Props) => { - const { typebot } = useTypebot() const { workspace } = useWorkspace() const { showToast } = useToast() const { data } = trpc.openAI.listModels.useQuery( { credentialsId, - blockId, - typebotId: typebot?.id as string, + baseUrl, workspaceId: workspace?.id as string, + apiVersion, }, { - enabled: !!typebot && !!workspace, + enabled: !!workspace, onError: (error) => { showToast({ description: error.message, diff --git a/apps/builder/src/features/blocks/integrations/openai/components/createChatCompletion/OpenAIChatCompletionSettings.tsx b/apps/builder/src/features/blocks/integrations/openai/components/createChatCompletion/OpenAIChatCompletionSettings.tsx index f928c316c..d2fcd710d 100644 --- a/apps/builder/src/features/blocks/integrations/openai/components/createChatCompletion/OpenAIChatCompletionSettings.tsx +++ b/apps/builder/src/features/blocks/integrations/openai/components/createChatCompletion/OpenAIChatCompletionSettings.tsx @@ -19,13 +19,11 @@ const apiReferenceUrl = 'https://platform.openai.com/docs/api-reference/chat/create' type Props = { - blockId: string options: ChatCompletionOpenAIOptions onOptionsChange: (options: ChatCompletionOpenAIOptions) => void } export const OpenAIChatCompletionSettings = ({ - blockId, options, onOptionsChange, }: Props) => { @@ -79,8 +77,9 @@ export const OpenAIChatCompletionSettings = ({