This commit is contained in:
2026-05-14 20:55:48 +03:00
parent 78932e82af
commit 067bbd0708
25 changed files with 496 additions and 392 deletions
+34 -9
View File
@@ -8,7 +8,13 @@ import {AiDownloadedFile, attachmentsToDownloadedFiles, cleanupDownloads} from "
import {ChatMessage} from "./chat-messages-types";
import {aiProviderRequestQueue} from "./provider-request-queue";
import {prepareOllamaDocumentRag} from "./ollama-rag";
import {AI_VOICE_MODE_TRANSCRIPT, DEFAULT_AI_RESPONSE_LANGUAGE, resolveAiContextSizeForUser, resolveAiResponseLanguageForUser, resolveAiVoiceModeForUser} from "../common/user-ai-settings";
import {
AI_VOICE_MODE_TRANSCRIPT,
DEFAULT_AI_RESPONSE_LANGUAGE,
resolveAiContextSizeForUser,
resolveAiResponseLanguageForUser,
resolveAiVoiceModeForUser
} from "../common/user-ai-settings";
import {isTranscribableAudioDownload} from "./speech-to-text";
import {OpenAIChatMessage} from "./openai-chat-message";
import {MistralChatMessage} from "./mistral-chat-message";
@@ -22,7 +28,29 @@ import {runOpenAi, runOpenAiCompatibleChat} from "./unified-ai-runner.openai";
import {runOllama} from "./unified-ai-runner.ollama";
import {runMistral} from "./unified-ai-runner.mistral";
import {runGemini} from "./unified-ai-runner.gemini";
import {AI_REQUEST_TIMEOUT_MS, TELEGRAM_LIMIT, RuntimeConfigSnapshot, UnifiedRunOptions, appendTranscriptToChatMessages, collectCachedMessageAttachments, collectRequestedAttachmentKinds, collectTextMessages, deleteMistralLibrary, hasAudioAttachmentKind, initialStatus, isAbortError, prepareMistralDocuments, providerName, rejectUnsupportedAttachments, resolveAiRequestQueueTarget, snapshotModel, snapshotRuntimeConfig, stripAudioFromRunnerMessages, toolRuntimeContextFromDownloads, transcribeAudioIfNeeded} from "./unified-ai-runner.shared";
import {
AI_REQUEST_TIMEOUT_MS,
appendTranscriptToChatMessages,
collectCachedMessageAttachments,
collectRequestedAttachmentKinds,
collectTextMessages,
deleteMistralLibrary,
hasAudioAttachmentKind,
initialStatus,
isAbortError,
prepareMistralDocuments,
providerName,
rejectUnsupportedAttachments,
resolveAiRequestQueueTarget,
RuntimeConfigSnapshot,
snapshotModel,
snapshotRuntimeConfig,
stripAudioFromRunnerMessages,
TELEGRAM_LIMIT,
toolRuntimeContextFromDownloads,
transcribeAudioIfNeeded,
UnifiedRunOptions
} from "./unified-ai-runner.shared";
export type {ToolCallData} from "./unified-ai-runner.shared";
export {snapshotModel, providerTargets, ollamaModelNames} from "./unified-ai-runner.shared";
@@ -137,7 +165,8 @@ async function executeUnifiedAiRequest(
switch (options.provider) {
case AiProvider.OPENAI:
await runOpenAi(options.msg, chatMessages as OpenAIChatMessage[], streamMessage, controller.signal, options.stream ?? true, firstRoundStatus, options.msg, config, toolContext);
await runOpenAi(options.msg, chatMessages as OpenAIChatMessage[], streamMessage, controller.signal, options.stream ?? true, firstRoundStatus, options.msg, config, toolContext,
!!options.think);
break;
case AiProvider.OLLAMA:
const currentModel = config.ollamaChatTarget.model;
@@ -259,7 +288,7 @@ export async function runUnifiedAi(options: UnifiedRunOptions): Promise<void> {
aiLog("debug", "run.queue.target", {target: aiLogProviderTarget(queueTarget), cancelId: cancel.id});
try {
const queueMessage = await streamMessage.start(Environment.getAiQueueText(options.provider, 0));
const queueMessage = await streamMessage.start(Environment.waitThinkText);
setAiCancelMessageId(cancel.id, queueMessage.message_id);
aiLog("info", "run.queue.enter", {
cancelId: cancel.id,
@@ -326,8 +355,4 @@ export async function runUnifiedAi(options: UnifiedRunOptions): Promise<void> {
aborted: controller.signal.aborted,
});
}
}
export class UnifiedAiRunner {
static run = runUnifiedAi;
}
}