Skip to main content

genkitx-openai

Firebase Genkit - OpenAI Plugin

OpenAI Community Plugin for Google Firebase Genkit

Github lerna versionNPM DownloadsGitHub Org's starsGitHub LicenseStatic Badge
GitHub Issues or Pull RequestsGitHub Issues or Pull RequestsGitHub commit activity

genkitx-openai is a community plugin for using OpenAI APIs with Firebase Genkit. Built by The Fire Company. 🔥

This Genkit plugin allows to use OpenAI models through their official APIs.

Supported models​

The plugin supports several OpenAI models:

  • GPT-4o, GPT-4 with all its variants (Turbo, Vision), and GPT-3.5 Turbo for text generation;
  • DALL-E 3 for image generation;
  • Text Embedding Small, Text Embedding Large, and Ada for text embedding generation;
  • Whisper for speech recognition;
  • Text-to-speech 1 and Text-to-speech 1 HD for speech synthesis.

Installation​

Install the plugin in your project with your favorite package manager:

  • npm install genkitx-openai
  • yarn add genkitx-openai
  • pnpm add genkitx-openai

Usage​

Initialize​

import dotenv from 'dotenv';
import { genkit } from 'genkit';
import openAI, { gpt35Turbo } from 'genkitx-openai';

dotenv.config();

const ai = genkit({
plugins: [openAI({ apiKey: process.env.OPENAI_API_KEY })],
// specify a default model if not provided in generate params:
model: gpt35Turbo,
});

Basic examples​

The simplest way to generate text is by using the generate method:

const response = await ai.generate({
model: gpt4o
prompt: 'Tell me a joke.',
});

console.log(response.text);

Multi-modal prompt​

const response = await ai.generate({
model: gpt4o,
prompt: [
{ text: 'What animal is in the photo?' },
{ media: { url: imageUrl } },
],
config: {
// control of the level of visual detail when processing image embeddings
// Low detail level also decreases the token usage
visualDetailLevel: 'low',
},
});
console.log(response.text);

Text Embeddings​

import { textEmbeddingAda002 } from 'genkitx-openai';

const embedding = await ai.embed({
embedder: textEmbeddingAda002,
content: 'Hello world',
});

console.log(embedding);

Within a flow​

import { z } from 'genkit';

export const jokeFlow = ai.defineFlow(
{
name: 'jokeFlow',
inputSchema: z.string(),
outputSchema: z.string(),
},
async (subject) => {
const llmResponse = await ai.generate({
prompt: `tell me a joke about ${subject}`,
});
return llmResponse.text;
}
);

Tool use​

import { z } from 'genkit';

// ...initialize genkit (as shown above)

const createReminder = ai.defineTool(
{
name: 'createReminder',
description: 'Use this to create reminders for things in the future',
inputSchema: z.object({
time: z
.string()
.describe('ISO timestamp string, e.g. 2024-04-03T12:23:00Z'),
reminder: z.string().describe('the content of the reminder'),
}),
outputSchema: z.number().describe('the ID of the created reminder'),
},
(reminder) => Promise.resolve(3)
);

const result = await ai.generate({
tools: [createReminder],
prompt: `
You are a reminder assistant.
If you create a reminder, describe in text the reminder you created as a response.

Query: I have a meeting with Anna at 3 for dinner - can you set a reminder for the time?
`,
});

console.log(result.text);

For more detailed examples and the explanation of other functionalities, refer to the examples in the official Github repo of the plugin or in the official Genkit documentation.

Contributing​

Want to contribute to the project? That's awesome! Head over to our Contribution Guidelines.

Need support?​

info

This repository depends on Google's Firebase Genkit. For issues and questions related to Genkit, please refer to instructions available in Genkit's repository. :::

Reach out by opening a discussion on Github Discussions.

Credits​

This plugin is proudly maintained by the team at The Fire Company. 🔥

License​

This project is licensed under the Apache 2.0 License.

License: Apache 2.0