@quantumai/quantum-cli-core
Version:
Quantum CLI Core - Multi-LLM Collaboration System
71 lines • 3.09 kB
JavaScript
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { GoogleGenAI, } from '@google/genai';
import { createCodeAssistContentGenerator } from '../code_assist/codeAssist.js';
import { DEFAULT_GEMINI_MODEL } from '../config/models.js';
import { getEffectiveModel } from './modelCheck.js';
export var AuthType;
(function (AuthType) {
AuthType["LOGIN_WITH_GOOGLE"] = "oauth-personal";
AuthType["USE_GEMINI"] = "gemini-api-key";
AuthType["USE_VERTEX_AI"] = "vertex-ai";
AuthType["CLOUD_SHELL"] = "cloud-shell";
})(AuthType || (AuthType = {}));
export async function createContentGeneratorConfig(model, authType) {
const geminiApiKey = process.env.GEMINI_API_KEY;
const googleApiKey = process.env.GOOGLE_API_KEY;
const googleCloudProject = process.env.GOOGLE_CLOUD_PROJECT;
const googleCloudLocation = process.env.GOOGLE_CLOUD_LOCATION;
// Use runtime model from config if available, otherwise fallback to parameter or default
const effectiveModel = model || DEFAULT_GEMINI_MODEL;
const contentGeneratorConfig = {
model: effectiveModel,
authType,
};
// If we are using Google auth or we are in Cloud Shell, there is nothing else to validate for now
if (authType === AuthType.LOGIN_WITH_GOOGLE ||
authType === AuthType.CLOUD_SHELL) {
return contentGeneratorConfig;
}
if (authType === AuthType.USE_GEMINI && geminiApiKey) {
contentGeneratorConfig.apiKey = geminiApiKey;
contentGeneratorConfig.model = await getEffectiveModel(contentGeneratorConfig.apiKey, contentGeneratorConfig.model);
return contentGeneratorConfig;
}
if (authType === AuthType.USE_VERTEX_AI &&
!!googleApiKey &&
googleCloudProject &&
googleCloudLocation) {
contentGeneratorConfig.apiKey = googleApiKey;
contentGeneratorConfig.vertexai = true;
contentGeneratorConfig.model = await getEffectiveModel(contentGeneratorConfig.apiKey, contentGeneratorConfig.model);
return contentGeneratorConfig;
}
return contentGeneratorConfig;
}
export async function createContentGenerator(config, sessionId) {
const version = process.env.CLI_VERSION || process.version;
const httpOptions = {
headers: {
'User-Agent': `GeminiCLI/${version} (${process.platform}; ${process.arch})`,
},
};
if (config.authType === AuthType.LOGIN_WITH_GOOGLE ||
config.authType === AuthType.CLOUD_SHELL) {
return createCodeAssistContentGenerator(httpOptions, config.authType, sessionId);
}
if (config.authType === AuthType.USE_GEMINI ||
config.authType === AuthType.USE_VERTEX_AI) {
const googleGenAI = new GoogleGenAI({
apiKey: config.apiKey === '' ? undefined : config.apiKey,
vertexai: config.vertexai,
httpOptions,
});
return googleGenAI.models;
}
throw new Error(`Error creating contentGenerator: Unsupported authType: ${config.authType}`);
}
//# sourceMappingURL=contentGenerator.js.map