UNPKG

@genkit-ai/compat-oai

Version:

Genkit AI framework plugin for OpenAI APIs.

109 lines 2.94 kB
import { GenkitError, modelActionMetadata } from "genkit"; import { logger } from "genkit/logging"; import { defineCompatOpenAIImageModel } from "../image.js"; import { openAICompatible } from "../index.js"; import { defineCompatOpenAIModel } from "../model.js"; import { SUPPORTED_IMAGE_MODELS, xaiImageModelRef } from "./grok-image.js"; import { grokRequestBuilder, SUPPORTED_LANGUAGE_MODELS, xaiModelRef } from "./grok.js"; const resolver = async (ai, client, actionType, actionName) => { if (actionType === "model") { const modelRef = xaiModelRef({ name: `xai/${actionName}` }); defineCompatOpenAIModel({ ai, name: modelRef.name, client, modelRef, requestBuilder: grokRequestBuilder }); } else { logger.warn("Only model actions are supported by the XAI plugin"); } }; const listActions = async (client) => { return await client.models.list().then( (response) => response.data.filter((model2) => model2.object === "model").map((model2) => { if (model2.id.includes("image")) { const modelRef = SUPPORTED_IMAGE_MODELS[model2.id] ?? xaiImageModelRef({ name: `xai/${model2.id}` }); return modelActionMetadata({ name: modelRef.name, info: modelRef.info, configSchema: modelRef.configSchema }); } else { const modelRef = SUPPORTED_LANGUAGE_MODELS[model2.id] ?? xaiModelRef({ name: `xai/${model2.id}` }); return modelActionMetadata({ name: modelRef.name, info: modelRef.info, configSchema: modelRef.configSchema }); } }) ); }; function xAIPlugin(options) { const apiKey = options?.apiKey ?? process.env.XAI_API_KEY; if (!apiKey) { throw new GenkitError({ status: "FAILED_PRECONDITION", message: "Please pass in the API key or set the XAI_API_KEY environment variable." }); } return openAICompatible({ name: "xai", baseURL: "https://api.x.ai/v1", apiKey, ...options, initializer: async (ai, client) => { Object.values(SUPPORTED_LANGUAGE_MODELS).forEach( (modelRef) => defineCompatOpenAIModel({ ai, name: modelRef.name, client, modelRef, requestBuilder: grokRequestBuilder }) ); Object.values(SUPPORTED_IMAGE_MODELS).forEach( (modelRef) => defineCompatOpenAIImageModel({ ai, name: modelRef.name, client, modelRef }) ); }, resolver, listActions }); } const model = (name, config) => { if (name.includes("image")) { return xaiImageModelRef({ name: `xai/${name}`, config }); } return xaiModelRef({ name: `xai/${name}`, config }); }; const xAI = Object.assign(xAIPlugin, { model }); var xai_default = xAI; export { xai_default as default, xAI, xAIPlugin }; //# sourceMappingURL=index.mjs.map