diff --git a/containers/api-proxy/providers/gemini.js b/containers/api-proxy/providers/gemini.js index 23db14ad0..8b39a3253 100644 --- a/containers/api-proxy/providers/gemini.js +++ b/containers/api-proxy/providers/gemini.js @@ -15,7 +15,7 @@ * All configuration lives in GOOGLE_PROVIDER_SPECS.gemini (google-provider-specs.js). */ -const { createGoogleProviderAdapter } = require('./google-adapter'); +const { makeGoogleProviderFactory } = require('./google-adapter'); /** * Create the Google Gemini provider adapter. @@ -24,6 +24,6 @@ const { createGoogleProviderAdapter } = require('./google-adapter'); * @param {{ bodyTransform?: ((body: Buffer) => (Buffer | null | Promise))|null }} [deps={}] - Injected dependencies * @returns {import('./index').ProviderAdapter} */ -const createGeminiAdapter = createGoogleProviderAdapter.bind(null, 'gemini'); +const createGeminiAdapter = makeGoogleProviderFactory('gemini'); module.exports = { createGeminiAdapter }; diff --git a/containers/api-proxy/providers/google-adapter.js b/containers/api-proxy/providers/google-adapter.js index d82a51465..1cd51cbf9 100644 --- a/containers/api-proxy/providers/google-adapter.js +++ b/containers/api-proxy/providers/google-adapter.js @@ -126,4 +126,14 @@ function createGoogleProviderAdapter(providerKey, env, deps = {}) { }); } -module.exports = { createGoogleApiKeyAdapter, createGoogleProviderAdapter }; +/** + * Create a named Google provider adapter factory. + * + * @param {string} providerKey - Key into GOOGLE_PROVIDER_SPECS (e.g. 'gemini') + * @returns {(env: Record, deps?: { bodyTransform?: ((body: Buffer) => (Buffer | null | Promise))|null }) => import('./index').ProviderAdapter} + */ +function makeGoogleProviderFactory(providerKey) { + return (env, deps = {}) => createGoogleProviderAdapter(providerKey, env, deps); +} + +module.exports = { createGoogleApiKeyAdapter, createGoogleProviderAdapter, makeGoogleProviderFactory }; diff --git a/containers/api-proxy/providers/google-adapter.test.js b/containers/api-proxy/providers/google-adapter.test.js index 7406ed86d..6cf84e7c3 100644 --- a/containers/api-proxy/providers/google-adapter.test.js +++ b/containers/api-proxy/providers/google-adapter.test.js @@ -1,6 +1,6 @@ 'use strict'; -const { createGoogleProviderAdapter } = require('./google-adapter'); +const { createGoogleProviderAdapter, makeGoogleProviderFactory } = require('./google-adapter'); const { GOOGLE_PROVIDER_SPECS } = require('./google-provider-specs'); const { createGeminiAdapter } = require('./gemini'); const { createVertexAdapter } = require('./vertex'); @@ -10,6 +10,13 @@ describe('createGoogleProviderAdapter', () => { expect(() => createGoogleProviderAdapter('bogus', {})).toThrow(/Unknown Google provider spec: bogus/); }); + it('creates reusable provider factories from provider keys', () => { + const createGemini = makeGoogleProviderFactory('gemini'); + expect(createGemini({ GEMINI_API_KEY: 'key' }).getAuthHeaders()).toEqual({ + 'x-goog-api-key': 'key', + }); + }); + it('derives gemini ports, targets and messages from the spec', () => { const adapter = createGoogleProviderAdapter('gemini', {}); expect(adapter.name).toBe('gemini'); diff --git a/containers/api-proxy/providers/vertex.js b/containers/api-proxy/providers/vertex.js index 21056b2d2..43c86fc44 100644 --- a/containers/api-proxy/providers/vertex.js +++ b/containers/api-proxy/providers/vertex.js @@ -17,7 +17,7 @@ * All configuration lives in GOOGLE_PROVIDER_SPECS.vertex (google-provider-specs.js). */ -const { createGoogleProviderAdapter } = require('./google-adapter'); +const { makeGoogleProviderFactory } = require('./google-adapter'); /** * Create the Google Vertex AI provider adapter. @@ -26,6 +26,6 @@ const { createGoogleProviderAdapter } = require('./google-adapter'); * @param {{ bodyTransform?: ((body: Buffer) => (Buffer | null | Promise))|null }} [deps={}] - Injected dependencies * @returns {import('./index').ProviderAdapter} */ -const createVertexAdapter = createGoogleProviderAdapter.bind(null, 'vertex'); +const createVertexAdapter = makeGoogleProviderFactory('vertex'); module.exports = { createVertexAdapter };