refactor: Move OpenAI Base URL option to credentials (#12175)

This commit is contained in:
Ricardo Espinoza
2024-12-17 09:12:15 -05:00
committed by GitHub
parent 27bd3c85b3
commit 4d8e9cfc61
6 changed files with 40 additions and 10 deletions

View File

@@ -79,7 +79,7 @@ export class EmbeddingsOpenAi implements INodeType {
},
],
group: ['transform'],
version: [1, 1.1],
version: [1, 1.1, 1.2],
description: 'Use Embeddings OpenAI',
defaults: {
name: 'Embeddings OpenAI',
@@ -106,7 +106,7 @@ export class EmbeddingsOpenAi implements INodeType {
requestDefaults: {
ignoreHttpStatusErrors: true,
baseURL:
'={{ $parameter.options?.baseURL?.split("/").slice(0,-1).join("/") || "https://api.openai.com" }}',
'={{ $parameter.options?.baseURL?.split("/").slice(0,-1).join("/") || $credentials.url?.split("/").slice(0,-1).join("/") || "https://api.openai.com" }}',
},
properties: [
getConnectionHintNoticeField([NodeConnectionType.AiVectorStore]),
@@ -171,6 +171,11 @@ export class EmbeddingsOpenAi implements INodeType {
default: 'https://api.openai.com/v1',
description: 'Override the default base URL for the API',
type: 'string',
displayOptions: {
hide: {
'@version': [{ _cnd: { gte: 1.2 } }],
},
},
},
{
displayName: 'Batch Size',
@@ -219,6 +224,8 @@ export class EmbeddingsOpenAi implements INodeType {
const configuration: ClientOptions = {};
if (options.baseURL) {
configuration.baseURL = options.baseURL;
} else if (credentials.url) {
configuration.baseURL = credentials.url as string;
}
const embeddings = new OpenAIEmbeddings(

View File

@@ -22,7 +22,7 @@ export class LmChatOpenAi implements INodeType {
name: 'lmChatOpenAi',
icon: { light: 'file:openAiLight.svg', dark: 'file:openAiLight.dark.svg' },
group: ['transform'],
version: 1,
version: [1, 1.1],
description: 'For advanced usage with an AI chain',
defaults: {
name: 'OpenAI Chat Model',
@@ -55,7 +55,7 @@ export class LmChatOpenAi implements INodeType {
requestDefaults: {
ignoreHttpStatusErrors: true,
baseURL:
'={{ $parameter.options?.baseURL?.split("/").slice(0,-1).join("/") || "https://api.openai.com" }}',
'={{ $parameter.options?.baseURL?.split("/").slice(0,-1).join("/") || $credentials?.url?.split("/").slice(0,-1).join("/") || "https://api.openai.com" }}',
},
properties: [
getConnectionHintNoticeField([NodeConnectionType.AiChain, NodeConnectionType.AiAgent]),
@@ -82,7 +82,7 @@ export class LmChatOpenAi implements INodeType {
routing: {
request: {
method: 'GET',
url: '={{ $parameter.options?.baseURL?.split("/").slice(-1).pop() || "v1" }}/models',
url: '={{ $parameter.options?.baseURL?.split("/").slice(-1).pop() || $credentials?.url?.split("/").slice(-1).pop() || "v1" }}/models',
},
output: {
postReceive: [
@@ -98,6 +98,7 @@ export class LmChatOpenAi implements INodeType {
// If the baseURL is not set or is set to api.openai.com, include only chat models
pass: `={{
($parameter.options?.baseURL && !$parameter.options?.baseURL?.includes('api.openai.com')) ||
($credentials?.url && !$credentials.url.includes('api.openai.com')) ||
$responseItem.id.startsWith('ft:') ||
$responseItem.id.startsWith('o1') ||
($responseItem.id.startsWith('gpt-') && !$responseItem.id.includes('instruct'))
@@ -156,6 +157,11 @@ export class LmChatOpenAi implements INodeType {
default: 'https://api.openai.com/v1',
description: 'Override the default base URL for the API',
type: 'string',
displayOptions: {
hide: {
'@version': [{ _cnd: { gte: 1.1 } }],
},
},
},
{
displayName: 'Frequency Penalty',
@@ -261,6 +267,8 @@ export class LmChatOpenAi implements INodeType {
const configuration: ClientOptions = {};
if (options.baseURL) {
configuration.baseURL = options.baseURL;
} else if (credentials.url) {
configuration.baseURL = credentials.url as string;
}
const model = new ChatOpenAI({

View File

@@ -106,6 +106,11 @@ const properties: INodeProperties[] = [
default: 'https://api.openai.com/v1',
description: 'Override the default base URL for the API',
type: 'string',
displayOptions: {
hide: {
'@version': [{ _cnd: { gte: 1.8 } }],
},
},
},
{
displayName: 'Max Retries',
@@ -182,11 +187,13 @@ export async function execute(this: IExecuteFunctions, i: number): Promise<INode
preserveOriginalTools?: boolean;
};
const baseURL = (options.baseURL ?? credentials.url) as string;
const client = new OpenAIClient({
apiKey: credentials.apiKey as string,
maxRetries: options.maxRetries ?? 2,
timeout: options.timeout ?? 10000,
baseURL: options.baseURL,
baseURL,
});
const agent = new OpenAIAssistantRunnable({ assistantId, client, asAgent: true });

View File

@@ -77,7 +77,7 @@ export const versionDescription: INodeTypeDescription = {
name: 'openAi',
icon: { light: 'file:openAi.svg', dark: 'file:openAi.dark.svg' },
group: ['transform'],
version: [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7],
version: [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8],
subtitle: `={{(${prettifyOperation})($parameter.resource, $parameter.operation)}}`,
description: 'Message an assistant or GPT, analyze images, generate audio, etc.',
defaults: {

View File

@@ -30,6 +30,13 @@ export class OpenAiApi implements ICredentialType {
description:
"For users who belong to multiple organizations, you can set which organization is used for an API request. Usage from these API requests will count against the specified organization's subscription quota.",
},
{
displayName: 'Base URL',
name: 'url',
type: 'string',
default: 'https://api.openai.com/v1',
description: 'Override the default base URL for the API',
},
];
authenticate: IAuthenticateGeneric = {
@@ -44,8 +51,8 @@ export class OpenAiApi implements ICredentialType {
test: ICredentialTestRequest = {
request: {
baseURL: 'https://api.openai.com',
url: '/v1/models',
baseURL: '={{$credentials?.url}}',
url: '/models',
},
};
}

View File

@@ -28,7 +28,8 @@ export class OpenAi implements INodeType {
],
requestDefaults: {
ignoreHttpStatusErrors: true,
baseURL: 'https://api.openai.com',
baseURL:
'={{ $credentials.url?.split("/").slice(0,-1).join("/") || https://api.openai.com }}',
},
properties: [
oldVersionNotice,