import {
genkitPluginV2,
type GenkitPluginV2,
} from 'genkit/plugin';
import {
modelRef,
type ModelReference,
type GenerateRequest,
type GenerateResponseData,
} from 'genkit/model';
import { z } from 'genkit';
const ConfigSchema = z.object({
temperature: z.number().min(0).max(2).optional(),
});
type MyPluginOptions = {
apiKey?: string;
};
function myPlugin(options?: MyPluginOptions): GenkitPluginV2 {
const apiKey = options?.apiKey || process.env.MY_API_KEY;
return genkitPluginV2({
name: 'my-plugin',
init: async () => {
return [
{
name: 'my-plugin/model',
label: 'My Model',
configSchema: ConfigSchema,
info: {
supports: {
multiturn: true,
tools: true,
},
},
async generate(
input: GenerateRequest,
streamingCallback?
): Promise<GenerateResponseData> {
// Implementation
return {
message: {
role: 'model',
content: [{ text: 'Response' }],
},
finishReason: 'stop',
};
},
},
];
},
});
}
// Export with model helper
export const myProvider = myPlugin as typeof myPlugin & {
model: (name: string) => ModelReference<typeof ConfigSchema>;
};
myProvider.model = (name: string) => {
return modelRef({
name: `my-plugin/${name}`,
configSchema: ConfigSchema,
});
};
export default myProvider;