| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /**
- * 真测试:mock ChatOpenAI 抛 'Request timed out' 错误(模拟 book 43 真实场景)
- * 看 invokeWithRetry 是否真切到 bailian / volcengine
- */
- const Module = require('module');
- const origResolve = Module._resolveFilename;
- const origLoad = Module._load;
- // Monkey-patch 拦截 @langchain/openai
- const fakeTimeoutMsg = 'Request timed out (fake mock)';
- let invokeCount = 0;
- const fakeChat = class {
- constructor(fields) { this.fields = fields; }
- async invoke() {
- invokeCount++;
- const modelName = this.fields?.model || 'unknown';
- console.log(` [MOCK] 模拟 ChatOpenAI.invoke 第${invokeCount}次, model=${modelName} 抛 timeout`);
- const err = new Error(fakeTimeoutMsg);
- err.name = 'AbortError';
- throw err;
- }
- };
- Module._load = function(request, parent, isMain) {
- if (request === '@langchain/openai' || request === 'langchain/chat_models/openai') {
- console.log(` [MOCK] 拦截模块加载: ${request}`);
- return { ChatOpenAI: fakeChat };
- }
- return origLoad.apply(this, arguments);
- };
- const { callLLMWithMessages } = require('/data/ai/audio/server/dist/services/llm/index');
- const messages = [
- { role: 'user', content: 'Reply: HA_REAL_OK' },
- ];
- const targetModel = 'MiniMax-M2.7'; // 起点:minimax
- console.log('---TEST START--- target=' + targetModel + ' (mock 全抛 timeout)');
- const t0 = Date.now();
- (async () => {
- try {
- const r = await callLLMWithMessages(messages, targetModel, 30);
- console.log('UNEXPECTED_OK:', r.substring(0, 80));
- } catch (e) {
- console.log('ERROR_NAME:', e.name);
- console.log('ERROR_MSG:', (e.message || '').substring(0, 500));
- if (e.attempts) {
- console.log('PROVIDERS_TRIED:', e.attempts.length);
- for (const a of e.attempts) {
- console.log(' >>', a.provider + '/' + a.model, '|', a.errorType, '|', a.attempts, '次 |', (a.error || '').substring(0, 80));
- }
- } else {
- console.log('NO_ATTEMPTS_FIELD');
- }
- }
- console.log('ELAPSED:', Date.now() - t0, 'ms');
- console.log('TOTAL_INVOKES:', invokeCount, '(预期 ≥ 3 = 同provider 3次 + 切下家)');
- })();
|