diff --git a/scripts/init.js b/scripts/init.js index f168429a..65f36fc8 100755 --- a/scripts/init.js +++ b/scripts/init.js @@ -30,6 +30,7 @@ import { convertAllRulesToProfileRules, getRulesProfile } from '../src/utils/rule-transformer.js'; +import { updateConfigMaxTokens } from './modules/update-config-tokens.js'; import { execSync } from 'child_process'; import { @@ -622,6 +623,14 @@ function createProjectStructure( ...replacements } ); + + // Update config.json with correct maxTokens values from supported-models.json + const configPath = path.join(targetDir, TASKMASTER_CONFIG_FILE); + if (updateConfigMaxTokens(configPath)) { + log('info', 'Updated config with correct maxTokens values'); + } else { + log('warn', 'Could not update maxTokens in config'); + } // Copy .gitignore with GitTasks preference try { diff --git a/scripts/modules/update-config-tokens.js b/scripts/modules/update-config-tokens.js new file mode 100644 index 00000000..403bf35c --- /dev/null +++ b/scripts/modules/update-config-tokens.js @@ -0,0 +1,53 @@ +/** + * update-config-tokens.js + * Updates config.json with correct maxTokens values from supported-models.json + */ + +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { dirname } from 'path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +/** + * Updates the config file with correct maxTokens values from supported-models.json + * @param {string} configPath - Path to the config.json file to update + * @returns {boolean} True if successful, false otherwise + */ +export function updateConfigMaxTokens(configPath) { + try { + // Load supported models + const supportedModelsPath = path.join(__dirname, 'supported-models.json'); + const supportedModels = JSON.parse(fs.readFileSync(supportedModelsPath, 'utf-8')); + + // Load config + const config = JSON.parse(fs.readFileSync(configPath, 'utf-8')); + + // Update each role's maxTokens if the model exists in supported-models.json + const roles = ['main', 'research', 'fallback']; + + for (const role of roles) { + if (config.models && config.models[role]) { + const provider = config.models[role].provider; + const modelId = config.models[role].modelId; + + // Find the model in supported models + if (supportedModels[provider]) { + const modelData = supportedModels[provider].find(m => m.id === modelId); + if (modelData && modelData.max_tokens) { + config.models[role].maxTokens = modelData.max_tokens; + } + } + } + } + + // Write back the updated config + fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); + return true; + } catch (error) { + console.error('Error updating config maxTokens:', error.message); + return false; + } +} \ No newline at end of file