Skip to main content
Glama

MCP Gemini Server

by bsmi021
ConfigurationManager.multimodel.test.vitest.ts9.1 kB
// Using vitest globals - see vitest.config.ts globals: true import { ConfigurationManager } from "../../../src/config/ConfigurationManager.js"; describe("ConfigurationManager - Multi-Model Support", () => { let originalEnv: NodeJS.ProcessEnv; beforeEach(() => { originalEnv = { ...process.env }; ConfigurationManager["instance"] = null; vi.clearAllMocks(); }); afterEach(() => { process.env = originalEnv; ConfigurationManager["instance"] = null; }); describe("Model Array Configuration", () => { it("should parse GOOGLE_GEMINI_MODELS array", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; process.env.GOOGLE_GEMINI_MODELS = '["gemini-1.5-flash", "gemini-1.5-pro"]'; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); expect(config.textGeneration).toEqual([ "gemini-1.5-flash", "gemini-1.5-pro", ]); }); it("should parse GOOGLE_GEMINI_IMAGE_MODELS array", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; process.env.GOOGLE_GEMINI_IMAGE_MODELS = '["imagen-3.0-generate-002"]'; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); expect(config.imageGeneration).toEqual(["imagen-3.0-generate-002"]); }); it("should parse GOOGLE_GEMINI_CODE_MODELS array", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; process.env.GOOGLE_GEMINI_CODE_MODELS = '["gemini-2.5-pro-preview-05-06", "gemini-2.0-flash"]'; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); expect(config.codeReview).toEqual([ "gemini-2.5-pro-preview-05-06", "gemini-2.0-flash", ]); }); it("should handle invalid JSON gracefully", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; process.env.GOOGLE_GEMINI_MODELS = "invalid-json"; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); expect(config.textGeneration).toEqual(["gemini-2.5-flash-preview-05-20"]); }); it("should handle non-array JSON gracefully", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; process.env.GOOGLE_GEMINI_MODELS = '{"not": "array"}'; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); expect(config.textGeneration).toEqual(["gemini-2.5-flash-preview-05-20"]); }); }); describe("Routing Preferences", () => { it("should parse routing preferences correctly", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; process.env.GOOGLE_GEMINI_ROUTING_PREFER_COST = "true"; process.env.GOOGLE_GEMINI_ROUTING_PREFER_SPEED = "false"; process.env.GOOGLE_GEMINI_ROUTING_PREFER_QUALITY = "true"; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); expect(config.routing.preferCostEffective).toBe(true); expect(config.routing.preferSpeed).toBe(false); expect(config.routing.preferQuality).toBe(true); }); it("should default to quality preference when none specified", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); expect(config.routing.preferCostEffective).toBe(false); expect(config.routing.preferSpeed).toBe(false); expect(config.routing.preferQuality).toBe(true); }); }); describe("Model Capabilities", () => { it("should provide correct capabilities for gemini-2.5-pro", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); const capabilities = config.capabilities["gemini-2.5-pro-preview-05-06"]; expect(capabilities).toBeDefined(); expect(capabilities.textGeneration).toBe(true); expect(capabilities.imageInput).toBe(true); expect(capabilities.codeExecution).toBe("excellent"); expect(capabilities.complexReasoning).toBe("excellent"); expect(capabilities.costTier).toBe("high"); expect(capabilities.contextWindow).toBe(1048576); }); it("should provide correct capabilities for imagen model", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); const capabilities = config.capabilities["imagen-3.0-generate-002"]; expect(capabilities).toBeDefined(); expect(capabilities.textGeneration).toBe(false); expect(capabilities.imageGeneration).toBe(true); expect(capabilities.codeExecution).toBe("none"); expect(capabilities.complexReasoning).toBe("none"); }); }); describe("Default Model Selection", () => { it("should use GOOGLE_GEMINI_DEFAULT_MODEL when provided", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; process.env.GOOGLE_GEMINI_DEFAULT_MODEL = "gemini-2.5-pro-preview-05-06"; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); expect(config.default).toBe("gemini-2.5-pro-preview-05-06"); }); it("should fallback to first text generation model when default not specified", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; process.env.GOOGLE_GEMINI_MODELS = '["gemini-1.5-pro", "gemini-1.5-flash"]'; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); expect(config.default).toBe("gemini-1.5-pro"); }); }); describe("Complex Reasoning Models", () => { it("should filter high reasoning models correctly", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; process.env.GOOGLE_GEMINI_MODELS = '["gemini-2.5-pro-preview-05-06", "gemini-1.5-flash", "gemini-1.5-pro"]'; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); expect(config.complexReasoning).toContain("gemini-2.5-pro-preview-05-06"); expect(config.complexReasoning).toContain("gemini-1.5-pro"); expect(config.complexReasoning).not.toContain("gemini-1.5-flash"); }); }); describe("Backward Compatibility", () => { it("should migrate single model to array format", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; process.env.GOOGLE_GEMINI_MODEL = "gemini-1.5-pro"; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); expect(config.textGeneration).toContain("gemini-1.5-pro"); }); it("should use old GOOGLE_GEMINI_MODEL as fallback", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; process.env.GOOGLE_GEMINI_MODEL = "gemini-1.5-pro"; delete process.env.GOOGLE_GEMINI_MODELS; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); expect(config.textGeneration).toEqual(["gemini-1.5-pro"]); }); }); describe("Environment Variable Validation", () => { it("should handle missing environment variables gracefully", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); expect(config.default).toBeDefined(); expect(config.textGeneration).toBeDefined(); expect(config.imageGeneration).toBeDefined(); expect(config.codeReview).toBeDefined(); }); it("should provide sensible defaults for image models", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); expect(config.imageGeneration).toContain("imagen-3.0-generate-002"); }); it("should provide sensible defaults for code models", () => { process.env.NODE_ENV = "test"; process.env.GOOGLE_GEMINI_API_KEY = "test-key"; const manager = ConfigurationManager.getInstance(); const config = manager.getModelConfiguration(); expect(config.codeReview).toContain("gemini-2.5-pro-preview-05-06"); }); }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bsmi021/mcp-gemini-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server