@elizaos/plugin-google-genai 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -3,6 +3,13 @@ import { Plugin } from '@elizaos/core';
3
3
  /**
4
4
  * Defines the Google Generative AI plugin with its name, description, and configuration options.
5
5
  * @type {Plugin}
6
+ *
7
+ * Available models as of March 2025:
8
+ * - gemini-2.0-flash-001: Fast, efficient model for everyday tasks
9
+ * - gemini-2.5-pro-exp-03-25: Latest experimental model with advanced reasoning (March 25, 2025)
10
+ * - gemini-2.5-pro-preview-05-06: Preview version from Google I/O 2025
11
+ * - gemini-2.5-pro: General model name for Gemini 2.5 Pro
12
+ * - text-embedding-004: For text embeddings
6
13
  */
7
14
  declare const googleGenAIPlugin: Plugin;
8
15
 
package/dist/index.js CHANGED
@@ -12,10 +12,10 @@ function getSmallModel(runtime) {
12
12
  return getSetting(runtime, "GOOGLE_SMALL_MODEL") ?? getSetting(runtime, "SMALL_MODEL", "gemini-2.0-flash-001") ?? "gemini-2.0-flash-001";
13
13
  }
14
14
  function getLargeModel(runtime) {
15
- return getSetting(runtime, "GOOGLE_LARGE_MODEL") ?? getSetting(runtime, "LARGE_MODEL", "gemini-2.0-flash-001") ?? "gemini-2.0-flash-001";
15
+ return getSetting(runtime, "GOOGLE_LARGE_MODEL") ?? getSetting(runtime, "LARGE_MODEL", "gemini-2.5-pro-preview-03-25") ?? "gemini-2.5-pro-preview-03-25";
16
16
  }
17
17
  function getImageModel(runtime) {
18
- return getSetting(runtime, "GOOGLE_IMAGE_MODEL") ?? getSetting(runtime, "IMAGE_MODEL", "gemini-2.0-flash-001") ?? "gemini-2.0-flash-001";
18
+ return getSetting(runtime, "GOOGLE_IMAGE_MODEL") ?? getSetting(runtime, "IMAGE_MODEL", "gemini-2.5-pro-preview-03-25") ?? "gemini-2.5-pro-preview-03-25";
19
19
  }
20
20
  function getEmbeddingModel(runtime) {
21
21
  return getSetting(runtime, "GOOGLE_EMBEDDING_MODEL", "text-embedding-004") ?? "text-embedding-004";
@@ -161,14 +161,19 @@ var googleGenAIPlugin = {
161
161
  }
162
162
  },
163
163
  models: {
164
- [ModelType.TEXT_SMALL]: async (runtime, { prompt, stopSequences = [] }) => {
164
+ [ModelType.TEXT_SMALL]: async (runtime, {
165
+ prompt,
166
+ stopSequences = [],
167
+ maxTokens = 8192,
168
+ temperature = 0.7,
169
+ frequencyPenalty = 0.7,
170
+ presencePenalty = 0.7
171
+ }) => {
165
172
  const genAI = createGoogleGenAI(runtime);
166
173
  if (!genAI) {
167
174
  throw new Error("Google Generative AI client not initialized");
168
175
  }
169
176
  const modelName = getSmallModel(runtime);
170
- const temperature = 0.7;
171
- const maxOutputTokens = 8192;
172
177
  logger.log(`[TEXT_SMALL] Using model: ${modelName}`);
173
178
  logger.debug(`[TEXT_SMALL] Prompt: ${prompt}`);
174
179
  try {
@@ -180,7 +185,7 @@ var googleGenAIPlugin = {
180
185
  temperature,
181
186
  topK: 40,
182
187
  topP: 0.95,
183
- maxOutputTokens,
188
+ maxOutputTokens: maxTokens,
184
189
  stopSequences,
185
190
  safetySettings: getSafetySettings(),
186
191
  ...systemInstruction && { systemInstruction }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { GoogleGenAI, HarmCategory, HarmBlockThreshold } from '@google/genai';\nimport type {\n IAgentRuntime,\n ModelTypeName,\n ObjectGenerationParams,\n Plugin,\n GenerateTextParams,\n ImageDescriptionParams,\n TextEmbeddingParams,\n} from '@elizaos/core';\nimport { EventType, logger, ModelType } from '@elizaos/core';\nimport { fetch } from 'undici';\n\n/**\n * Retrieves a configuration setting from the runtime, falling back to environment variables or a default value if not found.\n *\n * @param key - The name of the setting to retrieve.\n * @param defaultValue - The value to return if the setting is not found in the runtime or environment.\n * @returns The resolved setting value, or {@link defaultValue} if not found.\n */\nfunction getSetting(\n runtime: IAgentRuntime,\n key: string,\n defaultValue?: string\n): string | undefined {\n return runtime.getSetting(key) ?? process.env[key] ?? defaultValue;\n}\n\n/**\n * Helper function to get the API key for Google AI\n *\n * @param runtime The runtime context\n * @returns The configured API key\n */\nfunction getApiKey(runtime: IAgentRuntime): string | undefined {\n return getSetting(runtime, 'GOOGLE_GENERATIVE_AI_API_KEY');\n}\n\n/**\n * Helper function to get the small model name with fallbacks\n *\n * @param runtime The runtime context\n * @returns The configured small model name\n */\nfunction getSmallModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, 'GOOGLE_SMALL_MODEL') ??\n getSetting(runtime, 'SMALL_MODEL', 'gemini-2.0-flash-001') ??\n 'gemini-2.0-flash-001'\n );\n}\n\n/**\n * Helper function to get the large model name with fallbacks\n *\n * @param runtime The runtime context\n * @returns The configured large model name\n */\nfunction getLargeModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, 'GOOGLE_LARGE_MODEL') ??\n getSetting(runtime, 'LARGE_MODEL', 'gemini-2.0-flash-001') ??\n 'gemini-2.0-flash-001'\n );\n}\n\n/**\n * Helper function to get the image model name with fallbacks\n *\n * @param runtime The runtime context\n * @returns The configured image model name\n */\nfunction getImageModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, 'GOOGLE_IMAGE_MODEL') ??\n getSetting(runtime, 'IMAGE_MODEL', 'gemini-2.0-flash-001') ??\n 'gemini-2.0-flash-001'\n );\n}\n\n/**\n * Helper function to get the embedding model name with fallbacks\n *\n * @param runtime The runtime context\n * @returns The configured embedding model name\n */\nfunction getEmbeddingModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, 'GOOGLE_EMBEDDING_MODEL', 'text-embedding-004') ?? 'text-embedding-004'\n );\n}\n\n/**\n * Create a Google Generative AI client instance with proper configuration\n *\n * @param runtime The runtime context\n * @returns Configured Google Generative AI instance\n */\nfunction createGoogleGenAI(runtime: IAgentRuntime): GoogleGenAI | null {\n const apiKey = getApiKey(runtime);\n if (!apiKey) {\n logger.error('Google Generative AI API Key is missing');\n return null;\n }\n\n return new GoogleGenAI({ apiKey });\n}\n\n/**\n * Convert safety settings to Google format\n */\nfunction getSafetySettings() {\n return [\n {\n category: HarmCategory.HARM_CATEGORY_HARASSMENT,\n threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,\n },\n {\n category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,\n threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,\n },\n {\n category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,\n threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,\n },\n {\n category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,\n threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,\n },\n ];\n}\n\n/**\n * Emits a model usage event\n * @param runtime The runtime context\n * @param type The model type\n * @param prompt The prompt used\n * @param usage The usage data\n */\nfunction emitModelUsageEvent(\n runtime: IAgentRuntime,\n type: ModelTypeName,\n prompt: string,\n usage: { promptTokens: number; completionTokens: number; totalTokens: number }\n) {\n runtime.emitEvent(EventType.MODEL_USED, {\n provider: 'google',\n type,\n prompt,\n tokens: {\n prompt: usage.promptTokens,\n completion: usage.completionTokens,\n total: usage.totalTokens,\n },\n });\n}\n\n/**\n * Helper function to count tokens for a given text (estimation)\n */\nasync function countTokens(text: string): Promise<number> {\n // Rough estimation: ~1 token per 4 characters\n return Math.ceil(text.length / 4);\n}\n\n/**\n * Helper function to generate objects using specified model type\n */\nasync function generateObjectByModelType(\n runtime: IAgentRuntime,\n params: ObjectGenerationParams,\n modelType: string,\n getModelFn: (runtime: IAgentRuntime) => string\n): Promise<any> {\n const genAI = createGoogleGenAI(runtime);\n if (!genAI) {\n throw new Error('Google Generative AI client not initialized');\n }\n\n const modelName = getModelFn(runtime);\n const temperature = params.temperature ?? 0.1;\n\n logger.info(`Using ${modelType} model: ${modelName}`);\n\n try {\n // Add schema instructions to prompt if provided\n let enhancedPrompt = params.prompt;\n if (params.schema) {\n enhancedPrompt += `\\n\\nPlease respond with a JSON object that follows this schema:\\n${JSON.stringify(params.schema, null, 2)}`;\n }\n\n const response = await genAI.models.generateContent({\n model: modelName,\n contents: enhancedPrompt,\n config: {\n temperature,\n topK: 40,\n topP: 0.95,\n maxOutputTokens: 8192,\n responseMimeType: 'application/json',\n safetySettings: getSafetySettings(),\n },\n });\n\n const text = response.text || '';\n\n // Count tokens for usage tracking\n const promptTokens = await countTokens(enhancedPrompt);\n const completionTokens = await countTokens(text);\n\n emitModelUsageEvent(runtime, modelType as ModelTypeName, params.prompt, {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n });\n\n try {\n return JSON.parse(text);\n } catch (parseError) {\n logger.error('Failed to parse JSON response:', parseError);\n // Try to extract JSON from the response\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n try {\n return JSON.parse(jsonMatch[0]);\n } catch (secondParseError) {\n throw new Error('Failed to parse JSON from response');\n }\n }\n throw parseError;\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`[generateObject] Error: ${message}`);\n throw error;\n }\n}\n\n/**\n * Defines the Google Generative AI plugin with its name, description, and configuration options.\n * @type {Plugin}\n */\nexport const googleGenAIPlugin: Plugin = {\n name: 'google-genai',\n description: 'Google Generative AI plugin for Gemini models',\n config: {\n GOOGLE_GENERATIVE_AI_API_KEY: process.env.GOOGLE_GENERATIVE_AI_API_KEY,\n GOOGLE_SMALL_MODEL: process.env.GOOGLE_SMALL_MODEL,\n GOOGLE_LARGE_MODEL: process.env.GOOGLE_LARGE_MODEL,\n GOOGLE_IMAGE_MODEL: process.env.GOOGLE_IMAGE_MODEL,\n GOOGLE_EMBEDDING_MODEL: process.env.GOOGLE_EMBEDDING_MODEL,\n SMALL_MODEL: process.env.SMALL_MODEL,\n LARGE_MODEL: process.env.LARGE_MODEL,\n IMAGE_MODEL: process.env.IMAGE_MODEL,\n },\n async init(_config, runtime) {\n try {\n const apiKey = getApiKey(runtime);\n if (!apiKey) {\n logger.warn(\n 'GOOGLE_GENERATIVE_AI_API_KEY is not set in environment - Google AI functionality will be limited'\n );\n return;\n }\n\n // Test the API key by listing models\n try {\n const genAI = new GoogleGenAI({ apiKey });\n const modelList = await genAI.models.list();\n const models = [];\n for await (const model of modelList) {\n models.push(model);\n }\n logger.log(`Google AI API key validated successfully. Available models: ${models.length}`);\n } catch (fetchError: unknown) {\n const message = fetchError instanceof Error ? fetchError.message : String(fetchError);\n logger.warn(`Error validating Google AI API key: ${message}`);\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.warn(\n `Google AI plugin configuration issue: ${message} - You need to configure the GOOGLE_GENERATIVE_AI_API_KEY in your environment variables`\n );\n }\n },\n models: {\n [ModelType.TEXT_SMALL]: async (\n runtime: IAgentRuntime,\n { prompt, stopSequences = [] }: GenerateTextParams\n ) => {\n const genAI = createGoogleGenAI(runtime);\n if (!genAI) {\n throw new Error('Google Generative AI client not initialized');\n }\n\n const modelName = getSmallModel(runtime);\n const temperature = 0.7;\n const maxOutputTokens = 8192;\n\n logger.log(`[TEXT_SMALL] Using model: ${modelName}`);\n logger.debug(`[TEXT_SMALL] Prompt: ${prompt}`);\n\n try {\n const systemInstruction = runtime.character.system || undefined;\n const response = await genAI.models.generateContent({\n model: modelName,\n contents: prompt,\n config: {\n temperature,\n topK: 40,\n topP: 0.95,\n maxOutputTokens,\n stopSequences,\n safetySettings: getSafetySettings(),\n ...(systemInstruction && { systemInstruction }),\n },\n });\n\n const text = response.text || '';\n\n // Count tokens for usage tracking\n const promptTokens = await countTokens(prompt);\n const completionTokens = await countTokens(text);\n\n emitModelUsageEvent(runtime, ModelType.TEXT_SMALL, prompt, {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n });\n\n return text;\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`[TEXT_SMALL] Error: ${message}`);\n throw error;\n }\n },\n [ModelType.TEXT_LARGE]: async (\n runtime: IAgentRuntime,\n {\n prompt,\n stopSequences = [],\n maxTokens = 8192,\n temperature = 0.7,\n frequencyPenalty = 0.7,\n presencePenalty = 0.7,\n }: GenerateTextParams\n ) => {\n const genAI = createGoogleGenAI(runtime);\n if (!genAI) {\n throw new Error('Google Generative AI client not initialized');\n }\n\n const modelName = getLargeModel(runtime);\n\n logger.log(`[TEXT_LARGE] Using model: ${modelName}`);\n logger.debug(`[TEXT_LARGE] Prompt: ${prompt}`);\n\n try {\n const systemInstruction = runtime.character.system || undefined;\n const response = await genAI.models.generateContent({\n model: modelName,\n contents: prompt,\n config: {\n temperature,\n topK: 40,\n topP: 0.95,\n maxOutputTokens: maxTokens,\n stopSequences,\n safetySettings: getSafetySettings(),\n ...(systemInstruction && { systemInstruction }),\n },\n });\n\n const text = response.text || '';\n\n // Count tokens for usage tracking\n const promptTokens = await countTokens(prompt);\n const completionTokens = await countTokens(text);\n\n emitModelUsageEvent(runtime, ModelType.TEXT_LARGE, prompt, {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n });\n\n return text;\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`[TEXT_LARGE] Error: ${message}`);\n throw error;\n }\n },\n [ModelType.TEXT_EMBEDDING]: async (\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n ): Promise<number[]> => {\n const genAI = createGoogleGenAI(runtime);\n if (!genAI) {\n throw new Error('Google Generative AI client not initialized');\n }\n\n const embeddingModelName = getEmbeddingModel(runtime);\n logger.debug(`[TEXT_EMBEDDING] Using model: ${embeddingModelName}`);\n\n // Handle null case for initialization\n if (params === null) {\n logger.debug('Creating test embedding for initialization');\n // Return 768-dimensional vector for text-embedding-004\n const dimension = 768;\n const testVector = Array(dimension).fill(0);\n testVector[0] = 0.1;\n return testVector;\n }\n\n // Extract text from params\n let text: string;\n if (typeof params === 'string') {\n text = params;\n } else if (typeof params === 'object' && params.text) {\n text = params.text;\n } else {\n logger.warn('Invalid input format for embedding');\n const dimension = 768;\n const fallbackVector = Array(dimension).fill(0);\n fallbackVector[0] = 0.2;\n return fallbackVector;\n }\n\n if (!text.trim()) {\n logger.warn('Empty text for embedding');\n const dimension = 768;\n const emptyVector = Array(dimension).fill(0);\n emptyVector[0] = 0.3;\n return emptyVector;\n }\n\n try {\n const response = await genAI.models.embedContent({\n model: embeddingModelName,\n contents: text,\n });\n\n const embedding = response.embeddings?.[0]?.values || [];\n\n // Count tokens for usage tracking\n const promptTokens = await countTokens(text);\n\n emitModelUsageEvent(runtime, ModelType.TEXT_EMBEDDING, text, {\n promptTokens,\n completionTokens: 0,\n totalTokens: promptTokens,\n });\n\n logger.log(`Got embedding with length ${embedding.length}`);\n return embedding;\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error generating embedding: ${message}`);\n // Return error vector\n const dimension = 768;\n const errorVector = Array(dimension).fill(0);\n errorVector[0] = 0.6;\n return errorVector;\n }\n },\n [ModelType.IMAGE_DESCRIPTION]: async (\n runtime: IAgentRuntime,\n params: ImageDescriptionParams | string\n ) => {\n const genAI = createGoogleGenAI(runtime);\n if (!genAI) {\n throw new Error('Google Generative AI client not initialized');\n }\n\n let imageUrl: string;\n let promptText: string | undefined;\n const modelName = getImageModel(runtime);\n logger.log(`[IMAGE_DESCRIPTION] Using model: ${modelName}`);\n\n if (typeof params === 'string') {\n imageUrl = params;\n promptText = 'Please analyze this image and provide a title and detailed description.';\n } else {\n imageUrl = params.imageUrl;\n promptText =\n params.prompt ||\n 'Please analyze this image and provide a title and detailed description.';\n }\n\n try {\n // Fetch image data\n const imageResponse = await fetch(imageUrl);\n if (!imageResponse.ok) {\n throw new Error(`Failed to fetch image: ${imageResponse.statusText}`);\n }\n\n const imageData = await imageResponse.arrayBuffer();\n const base64Image = Buffer.from(imageData).toString('base64');\n\n // Determine MIME type from URL or response headers\n const contentType = imageResponse.headers.get('content-type') || 'image/jpeg';\n\n const response = await genAI.models.generateContent({\n model: modelName,\n contents: [\n {\n role: 'user',\n parts: [\n { text: promptText },\n {\n inlineData: {\n mimeType: contentType,\n data: base64Image,\n },\n },\n ],\n },\n ],\n config: {\n temperature: 0.7,\n topK: 40,\n topP: 0.95,\n maxOutputTokens: 8192,\n safetySettings: getSafetySettings(),\n },\n });\n\n const responseText = response.text || '';\n\n logger.log('Received response for image description');\n\n // Check if a custom prompt was provided\n const isCustomPrompt =\n typeof params === 'object' &&\n params.prompt &&\n params.prompt !==\n 'Please analyze this image and provide a title and detailed description.';\n\n // If custom prompt is used, return the raw content\n if (isCustomPrompt) {\n return responseText;\n }\n\n // Try to parse the response as JSON first\n try {\n const jsonResponse = JSON.parse(responseText);\n if (jsonResponse.title && jsonResponse.description) {\n return jsonResponse;\n }\n } catch (e) {\n // If not valid JSON, process as text\n logger.debug(`Parsing as JSON failed, processing as text: ${e}`);\n }\n\n // Extract title and description from text format\n const titleMatch = responseText.match(/title[:\\s]+(.+?)(?:\\n|$)/i);\n const title = titleMatch?.[1]?.trim() || 'Image Analysis';\n const description = responseText.replace(/title[:\\s]+(.+?)(?:\\n|$)/i, '').trim();\n\n return { title, description };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error analyzing image: ${message}`);\n return {\n title: 'Failed to analyze image',\n description: `Error: ${message}`,\n };\n }\n },\n [ModelType.OBJECT_SMALL]: async (runtime: IAgentRuntime, params: ObjectGenerationParams) => {\n return generateObjectByModelType(runtime, params, ModelType.OBJECT_SMALL, getSmallModel);\n },\n [ModelType.OBJECT_LARGE]: async (runtime: IAgentRuntime, params: ObjectGenerationParams) => {\n return generateObjectByModelType(runtime, params, ModelType.OBJECT_LARGE, getLargeModel);\n },\n },\n tests: [\n {\n name: 'google_genai_plugin_tests',\n tests: [\n {\n name: 'google_test_api_key_validation',\n fn: async (runtime: IAgentRuntime) => {\n const apiKey = getApiKey(runtime);\n if (!apiKey) {\n throw new Error('GOOGLE_GENERATIVE_AI_API_KEY not set');\n }\n const genAI = new GoogleGenAI({ apiKey });\n const modelList = await genAI.models.list();\n const models = [];\n for await (const model of modelList) {\n models.push(model);\n }\n logger.log('Available models:', models.length);\n },\n },\n {\n name: 'google_test_text_embedding',\n fn: async (runtime: IAgentRuntime) => {\n try {\n const embedding = await runtime.useModel(ModelType.TEXT_EMBEDDING, {\n text: 'Hello, world!',\n });\n logger.log('Embedding dimension:', embedding.length);\n if (embedding.length === 0) {\n throw new Error('Failed to generate embedding');\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in test_text_embedding: ${message}`);\n throw error;\n }\n },\n },\n {\n name: 'google_test_text_small',\n fn: async (runtime: IAgentRuntime) => {\n try {\n const text = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt: 'What is the nature of reality in 10 words?',\n });\n if (text.length === 0) {\n throw new Error('Failed to generate text');\n }\n logger.log('Generated with TEXT_SMALL:', text);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in test_text_small: ${message}`);\n throw error;\n }\n },\n },\n {\n name: 'google_test_text_large',\n fn: async (runtime: IAgentRuntime) => {\n try {\n const text = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt: 'Explain quantum mechanics in simple terms.',\n });\n if (text.length === 0) {\n throw new Error('Failed to generate text');\n }\n logger.log('Generated with TEXT_LARGE:', text.substring(0, 100) + '...');\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in test_text_large: ${message}`);\n throw error;\n }\n },\n },\n {\n name: 'google_test_image_description',\n fn: async (runtime: IAgentRuntime) => {\n try {\n const result = await runtime.useModel(\n ModelType.IMAGE_DESCRIPTION,\n 'https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Vitalik_Buterin_TechCrunch_London_2015_%28cropped%29.jpg/537px-Vitalik_Buterin_TechCrunch_London_2015_%28cropped%29.jpg'\n );\n\n if (\n result &&\n typeof result === 'object' &&\n 'title' in result &&\n 'description' in result\n ) {\n logger.log('Image description:', result);\n } else {\n logger.error('Invalid image description result format:', result);\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in test_image_description: ${message}`);\n throw error;\n }\n },\n },\n {\n name: 'google_test_object_generation',\n fn: async (runtime: IAgentRuntime) => {\n try {\n const schema = {\n type: 'object',\n properties: {\n name: { type: 'string' },\n age: { type: 'number' },\n hobbies: { type: 'array', items: { type: 'string' } },\n },\n required: ['name', 'age', 'hobbies'],\n };\n\n const result = await runtime.useModel(ModelType.OBJECT_SMALL, {\n prompt: 'Generate a person profile with name, age, and hobbies.',\n schema,\n });\n\n logger.log('Generated object:', result);\n\n if (!result.name || !result.age || !result.hobbies) {\n throw new Error('Generated object missing required fields');\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in test_object_generation: ${message}`);\n throw error;\n }\n },\n },\n ],\n },\n ],\n};\n\nexport default googleGenAIPlugin;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { GoogleGenAI, HarmCategory, HarmBlockThreshold } from '@google/genai';\nimport type {\n IAgentRuntime,\n ModelTypeName,\n ObjectGenerationParams,\n Plugin,\n GenerateTextParams,\n ImageDescriptionParams,\n TextEmbeddingParams,\n} from '@elizaos/core';\nimport { EventType, logger, ModelType } from '@elizaos/core';\nimport { fetch } from 'undici';\n\n/**\n * Retrieves a configuration setting from the runtime, falling back to environment variables or a default value if not found.\n *\n * @param key - The name of the setting to retrieve.\n * @param defaultValue - The value to return if the setting is not found in the runtime or environment.\n * @returns The resolved setting value, or {@link defaultValue} if not found.\n */\nfunction getSetting(\n runtime: IAgentRuntime,\n key: string,\n defaultValue?: string\n): string | undefined {\n return runtime.getSetting(key) ?? process.env[key] ?? defaultValue;\n}\n\n/**\n * Helper function to get the API key for Google AI\n *\n * @param runtime The runtime context\n * @returns The configured API key\n */\nfunction getApiKey(runtime: IAgentRuntime): string | undefined {\n return getSetting(runtime, 'GOOGLE_GENERATIVE_AI_API_KEY');\n}\n\n/**\n * Helper function to get the small model name with fallbacks\n *\n * @param runtime The runtime context\n * @returns The configured small model name\n */\nfunction getSmallModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, 'GOOGLE_SMALL_MODEL') ??\n getSetting(runtime, 'SMALL_MODEL', 'gemini-2.0-flash-001') ??\n 'gemini-2.0-flash-001'\n );\n}\n\n/**\n * Helper function to get the large model name with fallbacks\n *\n * @param runtime The runtime context\n * @returns The configured large model name\n */\nfunction getLargeModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, 'GOOGLE_LARGE_MODEL') ??\n getSetting(runtime, 'LARGE_MODEL', 'gemini-2.5-pro-preview-03-25') ??\n 'gemini-2.5-pro-preview-03-25'\n );\n}\n\n/**\n * Helper function to get the image model name with fallbacks\n *\n * @param runtime The runtime context\n * @returns The configured image model name\n */\nfunction getImageModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, 'GOOGLE_IMAGE_MODEL') ??\n getSetting(runtime, 'IMAGE_MODEL', 'gemini-2.5-pro-preview-03-25') ??\n 'gemini-2.5-pro-preview-03-25'\n );\n}\n\n/**\n * Helper function to get the embedding model name with fallbacks\n *\n * @param runtime The runtime context\n * @returns The configured embedding model name\n */\nfunction getEmbeddingModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, 'GOOGLE_EMBEDDING_MODEL', 'text-embedding-004') ?? 'text-embedding-004'\n );\n}\n\n/**\n * Create a Google Generative AI client instance with proper configuration\n *\n * @param runtime The runtime context\n * @returns Configured Google Generative AI instance\n */\nfunction createGoogleGenAI(runtime: IAgentRuntime): GoogleGenAI | null {\n const apiKey = getApiKey(runtime);\n if (!apiKey) {\n logger.error('Google Generative AI API Key is missing');\n return null;\n }\n\n return new GoogleGenAI({ apiKey });\n}\n\n/**\n * Convert safety settings to Google format\n */\nfunction getSafetySettings() {\n return [\n {\n category: HarmCategory.HARM_CATEGORY_HARASSMENT,\n threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,\n },\n {\n category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,\n threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,\n },\n {\n category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,\n threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,\n },\n {\n category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,\n threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,\n },\n ];\n}\n\n/**\n * Emits a model usage event\n * @param runtime The runtime context\n * @param type The model type\n * @param prompt The prompt used\n * @param usage The usage data\n */\nfunction emitModelUsageEvent(\n runtime: IAgentRuntime,\n type: ModelTypeName,\n prompt: string,\n usage: { promptTokens: number; completionTokens: number; totalTokens: number }\n) {\n runtime.emitEvent(EventType.MODEL_USED, {\n provider: 'google',\n type,\n prompt,\n tokens: {\n prompt: usage.promptTokens,\n completion: usage.completionTokens,\n total: usage.totalTokens,\n },\n });\n}\n\n/**\n * Helper function to count tokens for a given text (estimation)\n */\nasync function countTokens(text: string): Promise<number> {\n // Rough estimation: ~1 token per 4 characters\n return Math.ceil(text.length / 4);\n}\n\n/**\n * Helper function to generate objects using specified model type\n */\nasync function generateObjectByModelType(\n runtime: IAgentRuntime,\n params: ObjectGenerationParams,\n modelType: string,\n getModelFn: (runtime: IAgentRuntime) => string\n): Promise<any> {\n const genAI = createGoogleGenAI(runtime);\n if (!genAI) {\n throw new Error('Google Generative AI client not initialized');\n }\n\n const modelName = getModelFn(runtime);\n const temperature = params.temperature ?? 0.1;\n\n logger.info(`Using ${modelType} model: ${modelName}`);\n\n try {\n // Add schema instructions to prompt if provided\n let enhancedPrompt = params.prompt;\n if (params.schema) {\n enhancedPrompt += `\\n\\nPlease respond with a JSON object that follows this schema:\\n${JSON.stringify(params.schema, null, 2)}`;\n }\n\n const response = await genAI.models.generateContent({\n model: modelName,\n contents: enhancedPrompt,\n config: {\n temperature,\n topK: 40,\n topP: 0.95,\n maxOutputTokens: 8192,\n responseMimeType: 'application/json',\n safetySettings: getSafetySettings(),\n },\n });\n\n const text = response.text || '';\n\n // Count tokens for usage tracking\n const promptTokens = await countTokens(enhancedPrompt);\n const completionTokens = await countTokens(text);\n\n emitModelUsageEvent(runtime, modelType as ModelTypeName, params.prompt, {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n });\n\n try {\n return JSON.parse(text);\n } catch (parseError) {\n logger.error('Failed to parse JSON response:', parseError);\n // Try to extract JSON from the response\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n try {\n return JSON.parse(jsonMatch[0]);\n } catch (secondParseError) {\n throw new Error('Failed to parse JSON from response');\n }\n }\n throw parseError;\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`[generateObject] Error: ${message}`);\n throw error;\n }\n}\n\n/**\n * Defines the Google Generative AI plugin with its name, description, and configuration options.\n * @type {Plugin}\n *\n * Available models as of March 2025:\n * - gemini-2.0-flash-001: Fast, efficient model for everyday tasks\n * - gemini-2.5-pro-exp-03-25: Latest experimental model with advanced reasoning (March 25, 2025)\n * - gemini-2.5-pro-preview-05-06: Preview version from Google I/O 2025\n * - gemini-2.5-pro: General model name for Gemini 2.5 Pro\n * - text-embedding-004: For text embeddings\n */\nexport const googleGenAIPlugin: Plugin = {\n name: 'google-genai',\n description: 'Google Generative AI plugin for Gemini models',\n config: {\n GOOGLE_GENERATIVE_AI_API_KEY: process.env.GOOGLE_GENERATIVE_AI_API_KEY,\n GOOGLE_SMALL_MODEL: process.env.GOOGLE_SMALL_MODEL,\n GOOGLE_LARGE_MODEL: process.env.GOOGLE_LARGE_MODEL,\n GOOGLE_IMAGE_MODEL: process.env.GOOGLE_IMAGE_MODEL,\n GOOGLE_EMBEDDING_MODEL: process.env.GOOGLE_EMBEDDING_MODEL,\n SMALL_MODEL: process.env.SMALL_MODEL,\n LARGE_MODEL: process.env.LARGE_MODEL,\n IMAGE_MODEL: process.env.IMAGE_MODEL,\n },\n async init(_config, runtime) {\n try {\n const apiKey = getApiKey(runtime);\n if (!apiKey) {\n logger.warn(\n 'GOOGLE_GENERATIVE_AI_API_KEY is not set in environment - Google AI functionality will be limited'\n );\n return;\n }\n\n // Test the API key by listing models\n try {\n const genAI = new GoogleGenAI({ apiKey });\n const modelList = await genAI.models.list();\n const models = [];\n for await (const model of modelList) {\n models.push(model);\n }\n logger.log(`Google AI API key validated successfully. Available models: ${models.length}`);\n } catch (fetchError: unknown) {\n const message = fetchError instanceof Error ? fetchError.message : String(fetchError);\n logger.warn(`Error validating Google AI API key: ${message}`);\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.warn(\n `Google AI plugin configuration issue: ${message} - You need to configure the GOOGLE_GENERATIVE_AI_API_KEY in your environment variables`\n );\n }\n },\n models: {\n [ModelType.TEXT_SMALL]: async (\n runtime: IAgentRuntime,\n {\n prompt,\n stopSequences = [],\n maxTokens = 8192,\n temperature = 0.7,\n frequencyPenalty = 0.7,\n presencePenalty = 0.7,\n }: GenerateTextParams\n ) => {\n const genAI = createGoogleGenAI(runtime);\n if (!genAI) {\n throw new Error('Google Generative AI client not initialized');\n }\n\n const modelName = getSmallModel(runtime);\n\n logger.log(`[TEXT_SMALL] Using model: ${modelName}`);\n logger.debug(`[TEXT_SMALL] Prompt: ${prompt}`);\n\n try {\n const systemInstruction = runtime.character.system || undefined;\n const response = await genAI.models.generateContent({\n model: modelName,\n contents: prompt,\n config: {\n temperature,\n topK: 40,\n topP: 0.95,\n maxOutputTokens: maxTokens,\n stopSequences,\n safetySettings: getSafetySettings(),\n ...(systemInstruction && { systemInstruction }),\n },\n });\n\n const text = response.text || '';\n\n // Count tokens for usage tracking\n const promptTokens = await countTokens(prompt);\n const completionTokens = await countTokens(text);\n\n emitModelUsageEvent(runtime, ModelType.TEXT_SMALL, prompt, {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n });\n\n return text;\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`[TEXT_SMALL] Error: ${message}`);\n throw error;\n }\n },\n [ModelType.TEXT_LARGE]: async (\n runtime: IAgentRuntime,\n {\n prompt,\n stopSequences = [],\n maxTokens = 8192,\n temperature = 0.7,\n frequencyPenalty = 0.7,\n presencePenalty = 0.7,\n }: GenerateTextParams\n ) => {\n const genAI = createGoogleGenAI(runtime);\n if (!genAI) {\n throw new Error('Google Generative AI client not initialized');\n }\n\n const modelName = getLargeModel(runtime);\n\n logger.log(`[TEXT_LARGE] Using model: ${modelName}`);\n logger.debug(`[TEXT_LARGE] Prompt: ${prompt}`);\n\n try {\n const systemInstruction = runtime.character.system || undefined;\n const response = await genAI.models.generateContent({\n model: modelName,\n contents: prompt,\n config: {\n temperature,\n topK: 40,\n topP: 0.95,\n maxOutputTokens: maxTokens,\n stopSequences,\n safetySettings: getSafetySettings(),\n ...(systemInstruction && { systemInstruction }),\n },\n });\n\n const text = response.text || '';\n\n // Count tokens for usage tracking\n const promptTokens = await countTokens(prompt);\n const completionTokens = await countTokens(text);\n\n emitModelUsageEvent(runtime, ModelType.TEXT_LARGE, prompt, {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n });\n\n return text;\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`[TEXT_LARGE] Error: ${message}`);\n throw error;\n }\n },\n [ModelType.TEXT_EMBEDDING]: async (\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n ): Promise<number[]> => {\n const genAI = createGoogleGenAI(runtime);\n if (!genAI) {\n throw new Error('Google Generative AI client not initialized');\n }\n\n const embeddingModelName = getEmbeddingModel(runtime);\n logger.debug(`[TEXT_EMBEDDING] Using model: ${embeddingModelName}`);\n\n // Handle null case for initialization\n if (params === null) {\n logger.debug('Creating test embedding for initialization');\n // Return 768-dimensional vector for text-embedding-004\n const dimension = 768;\n const testVector = Array(dimension).fill(0);\n testVector[0] = 0.1;\n return testVector;\n }\n\n // Extract text from params\n let text: string;\n if (typeof params === 'string') {\n text = params;\n } else if (typeof params === 'object' && params.text) {\n text = params.text;\n } else {\n logger.warn('Invalid input format for embedding');\n const dimension = 768;\n const fallbackVector = Array(dimension).fill(0);\n fallbackVector[0] = 0.2;\n return fallbackVector;\n }\n\n if (!text.trim()) {\n logger.warn('Empty text for embedding');\n const dimension = 768;\n const emptyVector = Array(dimension).fill(0);\n emptyVector[0] = 0.3;\n return emptyVector;\n }\n\n try {\n const response = await genAI.models.embedContent({\n model: embeddingModelName,\n contents: text,\n });\n\n const embedding = response.embeddings?.[0]?.values || [];\n\n // Count tokens for usage tracking\n const promptTokens = await countTokens(text);\n\n emitModelUsageEvent(runtime, ModelType.TEXT_EMBEDDING, text, {\n promptTokens,\n completionTokens: 0,\n totalTokens: promptTokens,\n });\n\n logger.log(`Got embedding with length ${embedding.length}`);\n return embedding;\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error generating embedding: ${message}`);\n // Return error vector\n const dimension = 768;\n const errorVector = Array(dimension).fill(0);\n errorVector[0] = 0.6;\n return errorVector;\n }\n },\n [ModelType.IMAGE_DESCRIPTION]: async (\n runtime: IAgentRuntime,\n params: ImageDescriptionParams | string\n ) => {\n const genAI = createGoogleGenAI(runtime);\n if (!genAI) {\n throw new Error('Google Generative AI client not initialized');\n }\n\n let imageUrl: string;\n let promptText: string | undefined;\n const modelName = getImageModel(runtime);\n logger.log(`[IMAGE_DESCRIPTION] Using model: ${modelName}`);\n\n if (typeof params === 'string') {\n imageUrl = params;\n promptText = 'Please analyze this image and provide a title and detailed description.';\n } else {\n imageUrl = params.imageUrl;\n promptText =\n params.prompt ||\n 'Please analyze this image and provide a title and detailed description.';\n }\n\n try {\n // Fetch image data\n const imageResponse = await fetch(imageUrl);\n if (!imageResponse.ok) {\n throw new Error(`Failed to fetch image: ${imageResponse.statusText}`);\n }\n\n const imageData = await imageResponse.arrayBuffer();\n const base64Image = Buffer.from(imageData).toString('base64');\n\n // Determine MIME type from URL or response headers\n const contentType = imageResponse.headers.get('content-type') || 'image/jpeg';\n\n const response = await genAI.models.generateContent({\n model: modelName,\n contents: [\n {\n role: 'user',\n parts: [\n { text: promptText },\n {\n inlineData: {\n mimeType: contentType,\n data: base64Image,\n },\n },\n ],\n },\n ],\n config: {\n temperature: 0.7,\n topK: 40,\n topP: 0.95,\n maxOutputTokens: 8192,\n safetySettings: getSafetySettings(),\n },\n });\n\n const responseText = response.text || '';\n\n logger.log('Received response for image description');\n\n // Check if a custom prompt was provided\n const isCustomPrompt =\n typeof params === 'object' &&\n params.prompt &&\n params.prompt !==\n 'Please analyze this image and provide a title and detailed description.';\n\n // If custom prompt is used, return the raw content\n if (isCustomPrompt) {\n return responseText;\n }\n\n // Try to parse the response as JSON first\n try {\n const jsonResponse = JSON.parse(responseText);\n if (jsonResponse.title && jsonResponse.description) {\n return jsonResponse;\n }\n } catch (e) {\n // If not valid JSON, process as text\n logger.debug(`Parsing as JSON failed, processing as text: ${e}`);\n }\n\n // Extract title and description from text format\n const titleMatch = responseText.match(/title[:\\s]+(.+?)(?:\\n|$)/i);\n const title = titleMatch?.[1]?.trim() || 'Image Analysis';\n const description = responseText.replace(/title[:\\s]+(.+?)(?:\\n|$)/i, '').trim();\n\n return { title, description };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error analyzing image: ${message}`);\n return {\n title: 'Failed to analyze image',\n description: `Error: ${message}`,\n };\n }\n },\n [ModelType.OBJECT_SMALL]: async (runtime: IAgentRuntime, params: ObjectGenerationParams) => {\n return generateObjectByModelType(runtime, params, ModelType.OBJECT_SMALL, getSmallModel);\n },\n [ModelType.OBJECT_LARGE]: async (runtime: IAgentRuntime, params: ObjectGenerationParams) => {\n return generateObjectByModelType(runtime, params, ModelType.OBJECT_LARGE, getLargeModel);\n },\n },\n tests: [\n {\n name: 'google_genai_plugin_tests',\n tests: [\n {\n name: 'google_test_api_key_validation',\n fn: async (runtime: IAgentRuntime) => {\n const apiKey = getApiKey(runtime);\n if (!apiKey) {\n throw new Error('GOOGLE_GENERATIVE_AI_API_KEY not set');\n }\n const genAI = new GoogleGenAI({ apiKey });\n const modelList = await genAI.models.list();\n const models = [];\n for await (const model of modelList) {\n models.push(model);\n }\n logger.log('Available models:', models.length);\n },\n },\n {\n name: 'google_test_text_embedding',\n fn: async (runtime: IAgentRuntime) => {\n try {\n const embedding = await runtime.useModel(ModelType.TEXT_EMBEDDING, {\n text: 'Hello, world!',\n });\n logger.log('Embedding dimension:', embedding.length);\n if (embedding.length === 0) {\n throw new Error('Failed to generate embedding');\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in test_text_embedding: ${message}`);\n throw error;\n }\n },\n },\n {\n name: 'google_test_text_small',\n fn: async (runtime: IAgentRuntime) => {\n try {\n const text = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt: 'What is the nature of reality in 10 words?',\n });\n if (text.length === 0) {\n throw new Error('Failed to generate text');\n }\n logger.log('Generated with TEXT_SMALL:', text);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in test_text_small: ${message}`);\n throw error;\n }\n },\n },\n {\n name: 'google_test_text_large',\n fn: async (runtime: IAgentRuntime) => {\n try {\n const text = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt: 'Explain quantum mechanics in simple terms.',\n });\n if (text.length === 0) {\n throw new Error('Failed to generate text');\n }\n logger.log('Generated with TEXT_LARGE:', text.substring(0, 100) + '...');\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in test_text_large: ${message}`);\n throw error;\n }\n },\n },\n {\n name: 'google_test_image_description',\n fn: async (runtime: IAgentRuntime) => {\n try {\n const result = await runtime.useModel(\n ModelType.IMAGE_DESCRIPTION,\n 'https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Vitalik_Buterin_TechCrunch_London_2015_%28cropped%29.jpg/537px-Vitalik_Buterin_TechCrunch_London_2015_%28cropped%29.jpg'\n );\n\n if (\n result &&\n typeof result === 'object' &&\n 'title' in result &&\n 'description' in result\n ) {\n logger.log('Image description:', result);\n } else {\n logger.error('Invalid image description result format:', result);\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in test_image_description: ${message}`);\n throw error;\n }\n },\n },\n {\n name: 'google_test_object_generation',\n fn: async (runtime: IAgentRuntime) => {\n try {\n const schema = {\n type: 'object',\n properties: {\n name: { type: 'string' },\n age: { type: 'number' },\n hobbies: { type: 'array', items: { type: 'string' } },\n },\n required: ['name', 'age', 'hobbies'],\n };\n\n const result = await runtime.useModel(ModelType.OBJECT_SMALL, {\n prompt: 'Generate a person profile with name, age, and hobbies.',\n schema,\n });\n\n logger.log('Generated object:', result);\n\n if (!result.name || !result.age || !result.hobbies) {\n throw new Error('Generated object missing required fields');\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in test_object_generation: ${message}`);\n throw error;\n }\n },\n },\n ],\n },\n ],\n};\n\nexport default googleGenAIPlugin;\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elizaos/plugin-google-genai",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",