@genkit-ai/compat-oai
Version:
Genkit AI framework plugin for OpenAI APIs.
109 lines • 2.94 kB
JavaScript
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