feat: chat stats, regenerate with version history, edit & resubmit, image/file attachments

This commit is contained in:
Xianren Studio
2026-08-13 18:18:51 +08:00
parent 4718e41433
commit cd77f75066
12 changed files with 1156 additions and 199 deletions
+40
View File
@@ -71,6 +71,9 @@ export interface Message {
content: string;
tokens_in: number | null;
tokens_out: number | null;
elapsed_ms: number | null;
first_token_ms: number | null;
images: string[];
created_at: string;
}
@@ -87,6 +90,7 @@ export interface ChatSendPayload {
model_id: string;
content: string;
params: ChatParams;
images: string[];
}
export interface ChatTokenEvent {
@@ -100,7 +104,9 @@ export interface ChatDoneEvent {
content: string;
tokens_in: number | null;
tokens_out: number | null;
tokens_estimated: boolean;
elapsed_ms: number;
first_token_ms: number | null;
}
export interface ChatErrorEvent {
@@ -108,6 +114,22 @@ export interface ChatErrorEvent {
message: string;
}
export interface ChatMessageUpdatedEvent {
conversation_id: string;
message: Message;
}
export interface MessageVersion {
id: string;
message_id: string;
content: string;
tokens_out: number | null;
elapsed_ms: number | null;
first_token_ms: number | null;
seq: number;
created_at: string;
}
export interface EngineDeployEvent {
model_id: string;
file_name: string;
@@ -167,6 +189,24 @@ export const api = {
engineStop: () => invoke<void>("engine_stop"),
engineStatus: () => invoke<EngineStatus>("engine_status"),
chatSend: (payload: ChatSendPayload) => invoke<string>("chat_send", { payload }),
regenerateMessage: (
conversationId: string,
messageId: string,
params: ChatParams,
) => invoke<void>("regenerate_message", { conversationId, messageId, params }),
editMessage: (
conversationId: string,
messageId: string,
content: string,
params: ChatParams,
) => invoke<void>("edit_message", { conversationId, messageId, content, params }),
listMessageVersions: (messageId: string) =>
invoke<MessageVersion[]>("list_message_versions", { messageId }),
applyMessageVersion: (
conversationId: string,
messageId: string,
versionId: string,
) => invoke<void>("apply_message_version", { conversationId, messageId, versionId }),
downloadEnqueue: (
url: string,
fileName: string,