diff --git a/examples/nextjs-example/src/jobs/openai.ts b/examples/nextjs-example/src/jobs/openai.ts index 6faa2316a..73998698c 100644 --- a/examples/nextjs-example/src/jobs/openai.ts +++ b/examples/nextjs-example/src/jobs/openai.ts @@ -64,6 +64,11 @@ new Job(client, { input: "Thsi is ridddled with erors", instruction: "Fix the spelling errors", }); + + await io.openai.createEmbedding("embedding", { + model: "text-embedding-ada-002", + input: "The food was delicious and the waiter...", + }); }, }); diff --git a/integrations/openai/src/index.ts b/integrations/openai/src/index.ts index 7c68c1df2..492c3c625 100644 --- a/integrations/openai/src/index.ts +++ b/integrations/openai/src/index.ts @@ -7,6 +7,7 @@ import { createChatCompletion, createCompletion, createEdit, + createEmbedding, createFile, createFineTune, createFineTuneFile, @@ -30,6 +31,7 @@ const tasks = { backgroundCreateChatCompletion, createEdit, createImage, + createEmbedding, createFile, listFiles, createFineTuneFile, diff --git a/integrations/openai/src/tasks.ts b/integrations/openai/src/tasks.ts index 052fc5486..74dbf8eef 100644 --- a/integrations/openai/src/tasks.ts +++ b/integrations/openai/src/tasks.ts @@ -3,6 +3,7 @@ import { CreateChatCompletionRequest, CreateCompletionRequest, CreateEditRequest, + CreateEmbeddingRequest, CreateFineTuneRequest, CreateImageRequest, OpenAIApi, @@ -268,7 +269,7 @@ export const createImage: AuthenticatedTask< Prettify, CreateImageResponseData > = { - run: async (params, client) => { + run: async (params, client, task) => { return client.createImage(params).then((res) => res.data); }, init: (params) => { @@ -309,6 +310,40 @@ export const createImage: AuthenticatedTask< }, }; +type CreateEmbeddingResponseData = Prettify< + Awaited>["data"] +>; + +export const createEmbedding: AuthenticatedTask< + OpenAIClientType, + Prettify, + CreateEmbeddingResponseData +> = { + run: async (params, client) => { + return client.createEmbedding(params).then((res) => res.data); + }, + init: (params) => { + return { + name: "Create embedding", + params, + icon: "openai", + properties: [ + { + label: "Model", + text: params.model, + }, + { + label: "Input", + text: + typeof params.input === "string" + ? truncate(params.input, 40) + : truncate(params.input.at(0) ?? "none", 40), + }, + ], + }; + }, +}; + type CreateFileResponseData = Awaited< ReturnType >["data"];