ai: add unified runtime and provider adapters

This commit is contained in:
2026-05-10 22:52:35 +03:00
parent 4c2a5471df
commit 32c35f54aa
15 changed files with 4038 additions and 8 deletions
+90
View File
@@ -0,0 +1,90 @@
import {AiToolCall} from "./tool-types";
import {OllamaChatMessage} from "./ollama-chat-message";
import {GeminiMessage} from "./gemini-chat-message";
import {MistralChatMessage} from "./mistral-chat-message";
import {MessageAudioPart, MessageImagePart} from "../common/message-part";
import {OpenAIChatMessage} from "./openai-chat-message";
export type ChatMessage = {
role: "system" | "user" | "assistant" | "tool";
content: string;
images?: string[];
imageParts?: MessageImagePart[];
documents?: string[];
audios?: string[];
audioParts?: MessageAudioPart[];
videos?: string[];
videoNotes?: string[];
thinking?: string;
tool_calls?: AiToolCall[];
tool_name?: string;
}
export function asOllamaChatMessage(message: ChatMessage): OllamaChatMessage {
return {
role: message.role,
content: message.content,
thinking: message.thinking,
images: message.images,
tool_calls: message.tool_calls,
tool_name: message.tool_name
};
}
// export function asGeminiChatMessage(message: ChatMessage): GeminiMessage {
// if (message.images) {
// return {
// role: message.role,
// content: message.images.map(() => {
// return {
// type: "image",
// };
// })
// };
// }
//
// return {
// role: message.role,
// content: {
// type: "text",
// text: message.content,
// },
// };
// }
export function asMistralChatMessage(message: ChatMessage): MistralChatMessage {
return {
role: message.role,
content: message.content,
};
}
// export function asOpenAIChatMessage(message: ChatMessage): OpenAIChatMessage {
// return {
//
// }
// }
/*
const messages: any[] = ordered.map(part => {
const content: any[] = [{
type: "input_text",
text: (Environment.USE_NAMES_IN_PROMPT && !part.bot ? `MESSAGE FROM USER \"${part.name}\":\n` : "") + part.content,
}];
if (!part.bot) {
for (const image of part.images ?? []) {
content.push({type: "input_image", image_url: `data:image/jpeg;base64,${image}`, detail: "auto"});
}
}
return {role: part.bot ? "assistant" : "user", content};
});
if (Environment.SYSTEM_PROMPT && Environment.USE_SYSTEM_PROMPT) {
messages.unshift({role: "system", content: Environment.SYSTEM_PROMPT});
}
return {parts: messages, imageCount};
*/
export type AiChatMessage = | OpenAIChatMessage | OllamaChatMessage | MistralChatMessage | GeminiMessage;