ai: add unified runtime and provider adapters
This commit is contained in:
@@ -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;
|
||||
Reference in New Issue
Block a user