Checkpoint: Phase 8 Complete: Fix Orchestrator Chat

Исправлено:
- Chat.tsx: убрана хардкодированная модель "qwen2.5:7b" из мутации — теперь оркестратор использует модель из конфига БД (minimax-m2.7)
- Chat.tsx: добавлен Streamdown для markdown рендеринга ответов оркестратора
- Подтверждено: tool calling работает — команда "Покажи файлы проекта" вызывает file_list и возвращает структуру проекта
- Подтверждено: model в header показывает "minimax-m2.7" из БД
- TypeScript: 0 ошибок (pnpm tsc --noEmit)
- Тесты: 24/24 passed
This commit is contained in:
Manus
2026-03-20 18:20:37 -04:00
parent 7aa8eee2ca
commit 46e384c341
10 changed files with 477 additions and 29 deletions

View File

@@ -522,31 +522,32 @@ export async function orchestratorChat(
while (iterations < maxToolIterations) {
iterations++;
// Call LLM with tools
// Call LLM with tools using the model from DB config
let llmResult: any;
try {
llmResult = await invokeLLM({
messages: conversation as any,
tools: ORCHESTRATOR_TOOLS,
llmResult = await chatCompletion(activeModel, conversation as any, {
temperature: config.temperature,
max_tokens: config.maxTokens,
tools: ORCHESTRATOR_TOOLS as any,
tool_choice: "auto",
});
} catch (err: any) {
// Fallback: try without tools if LLM doesn't support them
// Fallback: try without tools if model doesn't support them
try {
const fallbackResult = await chatCompletion(activeModel, conversation as any, {
temperature: 0.7,
max_tokens: 4096,
temperature: config.temperature,
max_tokens: config.maxTokens,
});
finalResponse = fallbackResult.choices[0]?.message?.content ?? "";
lastUsage = fallbackResult.usage;
lastModel = fallbackResult.model;
lastModel = fallbackResult.model ?? activeModel;
break;
} catch (fallbackErr: any) {
return {
success: false,
response: "",
toolCalls,
error: `LLM error: ${fallbackErr.message}`,
error: `LLM error (model: ${activeModel}): ${fallbackErr.message}`,
};
}
}