MCP Terminal Server

/** * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { Genkit, ModelReference } from 'genkit'; import { GenkitPlugin, genkitPlugin } from 'genkit/plugin'; import { SUPPORTED_MODELS as EMBEDDER_MODELS, defineGoogleAIEmbedder, textEmbedding004, textEmbeddingGecko001, } from './embedder.js'; import { GeminiConfigSchema, SUPPORTED_V15_MODELS, SUPPORTED_V1_MODELS, defineGoogleAIModel, gemini, gemini10Pro, gemini15Flash, gemini15Flash8b, gemini15Pro, gemini20Flash, gemini20ProExp0205, type GeminiConfig, type GeminiVersionString, } from './gemini.js'; export { gemini, gemini10Pro, gemini15Flash, gemini15Flash8b, gemini15Pro, gemini20Flash, gemini20ProExp0205, textEmbedding004, textEmbeddingGecko001, type GeminiConfig, type GeminiVersionString, }; export interface PluginOptions { apiKey?: string; apiVersion?: string | string[]; baseUrl?: string; models?: ( | ModelReference</** @ignore */ typeof GeminiConfigSchema> | string )[]; experimental_debugTraces?: boolean; } /** * Google Gemini Developer API plugin. */ export function googleAI(options?: PluginOptions): GenkitPlugin { return genkitPlugin('googleai', async (ai: Genkit) => { let apiVersions = ['v1']; if (options?.apiVersion) { if (Array.isArray(options?.apiVersion)) { apiVersions = options?.apiVersion; } else { apiVersions = [options?.apiVersion]; } } if (apiVersions.includes('v1beta')) { Object.keys(SUPPORTED_V15_MODELS).forEach((name) => defineGoogleAIModel({ ai, name, apiKey: options?.apiKey, apiVersion: 'v1beta', baseUrl: options?.baseUrl, debugTraces: options?.experimental_debugTraces, }) ); } if (apiVersions.includes('v1')) { Object.keys(SUPPORTED_V1_MODELS).forEach((name) => defineGoogleAIModel({ ai, name, apiKey: options?.apiKey, apiVersion: undefined, baseUrl: options?.baseUrl, debugTraces: options?.experimental_debugTraces, }) ); Object.keys(SUPPORTED_V15_MODELS).forEach((name) => defineGoogleAIModel({ ai, name, apiKey: options?.apiKey, apiVersion: undefined, baseUrl: options?.baseUrl, debugTraces: options?.experimental_debugTraces, }) ); Object.keys(EMBEDDER_MODELS).forEach((name) => defineGoogleAIEmbedder(ai, name, { apiKey: options?.apiKey }) ); } if (options?.models) { for (const modelOrRef of options?.models) { const modelName = typeof modelOrRef === 'string' ? modelOrRef : // strip out the `googleai/` prefix modelOrRef.name.split('/')[1]; const modelRef = typeof modelOrRef === 'string' ? gemini(modelOrRef) : modelOrRef; defineGoogleAIModel({ ai, name: modelName, apiKey: options?.apiKey, baseUrl: options?.baseUrl, info: { ...modelRef.info, label: `Google AI - ${modelName}`, }, debugTraces: options?.experimental_debugTraces, }); } } }); } export default googleAI;