From 2bdecf6e9670de43aa6efc1e5869e15395fff15e Mon Sep 17 00:00:00 2001 From: minhphuc429 Date: Wed, 14 Jan 2026 15:43:25 +0700 Subject: [PATCH] fix: ensure account manager initialized for count_tokens - Add ensureInitialized() call before count_tokens handler - Use hybrid approach: local estimation for text, API for images/docs - This prevents "No accounts available" error on first request --- src/cloudcode/count-tokens.js | 2 +- src/server.js | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/cloudcode/count-tokens.js b/src/cloudcode/count-tokens.js index d70586a..f37a21f 100644 --- a/src/cloudcode/count-tokens.js +++ b/src/cloudcode/count-tokens.js @@ -278,7 +278,7 @@ export function createCountTokensHandler(accountManager) { const result = await countTokens( { messages, model, system, tools, tool_choice, thinking }, accountManager, - { useAPI: true } // Use API for accurate token counting + { useAPI: false } // Use local estimation by default, API for complex content (images/docs) ); res.json(result); diff --git a/src/server.js b/src/server.js index 809467e..40c41d8 100644 --- a/src/server.js +++ b/src/server.js @@ -601,7 +601,17 @@ app.get('/v1/models', async (req, res) => { * Count tokens endpoint - Anthropic Messages API compatible * Uses hybrid approach: local tokenizer for text, API for complex content (images, documents) */ -app.post('/v1/messages/count_tokens', createCountTokensHandler(accountManager)); +app.post('/v1/messages/count_tokens', async (req, res) => { + try { + // Ensure account manager is initialized for API-based counting + await ensureInitialized(); + } catch (error) { + // If initialization fails, handler will fall back to local estimation + logger.debug(`[TokenCounter] Account manager not initialized: ${error.message}`); + } + + return createCountTokensHandler(accountManager)(req, res); +}); /** * Main messages endpoint - Anthropic Messages API compatible