/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { ModelSlashCommandEvent, logModelSlashCommand, } from '@google/gemini-cli-core'; import { type CommandContext, CommandKind, type SlashCommand, } from './types.js'; import { MessageType } from '../types.js'; const setModelCommand: SlashCommand = { name: 'set', description: 'Set the model to use. Usage: /model set [--persist]', kind: CommandKind.BUILT_IN, autoExecute: false, action: async (context: CommandContext, args: string) => { const parts = args.trim().split(/\s+/).filter(Boolean); if (parts.length === 0) { context.ui.addItem({ type: MessageType.ERROR, text: 'Usage: /model set [--persist]', }); return; } const modelName = parts[0]; const persist = parts.includes('--persist'); if (context.services.config) { context.services.config.setModel(modelName, !persist); const event = new ModelSlashCommandEvent(modelName); logModelSlashCommand(context.services.config, event); context.ui.addItem({ type: MessageType.INFO, text: `Model set to ${modelName}${persist ? ' (persisted)' : ''}`, }); } }, }; const manageModelCommand: SlashCommand = { name: 'manage', description: 'Opens a dialog to configure the model', kind: CommandKind.BUILT_IN, autoExecute: true, action: async (context: CommandContext) => { if (context.services.config) { await context.services.config.refreshUserQuota(); } return { type: 'dialog', dialog: 'model', }; }, }; export const modelCommand: SlashCommand = { name: 'model', description: 'Manage model configuration', kind: CommandKind.BUILT_IN, autoExecute: false, subCommands: [manageModelCommand, setModelCommand], action: async (context: CommandContext, args: string) => manageModelCommand.action!(context, args), };