MultiMindChat / types.ts
samlax12's picture
Upload 19 files
05f86a6 verified
// 动态消息发送者枚举 - 现在支持自定义角色名称
export enum MessageSender {
User = '用户',
System = '系统',
// 动态角色将在运行时创建,这里保留一些常用的默认值
Cognito = 'Cognito',
Muse = 'Muse',
}
// 消息用途枚举
export enum MessagePurpose {
UserInput = 'user-input',
SystemNotification = 'system-notification',
CognitoToMuse = 'cognito-to-muse', // AI角色之间的讨论(保持兼容性)
MuseToCognito = 'muse-to-cognito', // AI角色之间的讨论(保持兼容性)
FinalResponse = 'final-response', // 最终回复用户
RoleDiscussion = 'role-discussion', // 通用的角色间讨论
}
// 聊天消息接口
export interface ChatMessage {
id: string;
text: string;
sender: MessageSender | string; // 现在支持动态角色名称
purpose: MessagePurpose;
timestamp: Date;
durationMs?: number; // AI消息的生成时间
image?: { // 用户消息的可选图片数据
dataUrl: string; // 用于显示的base64数据URL
name: string;
type: string;
};
roleId?: string; // 可选的角色ID,用于关联具体的AI角色配置
isStreaming?: boolean; // 标记消息是否正在流式传输
}
// 讨论记录接口
export interface DiscussionRecord {
id: string;
timestamp: Date;
userQuery: string;
userImage?: {
name: string;
type: string;
size: number;
};
discussionMode: string;
activeRoles: Array<{
id: string;
name: string;
modelName: string;
channelName: string;
}>;
turns: Array<{
id: string;
role: string;
roleId?: string;
message: string;
timestamp: Date;
durationMs?: number;
purpose: MessagePurpose;
}>;
notepadUpdates: Array<{
id: string;
updater: string;
updaterId?: string;
content: string;
timestamp: Date;
}>;
finalAnswer?: {
content: string;
provider: string;
providerId?: string;
timestamp: Date;
durationMs?: number;
};
totalDuration: number; // 总讨论时长(毫秒)
isCompleted: boolean; // 讨论是否正常完成
wasInterrupted: boolean; // 是否被用户中断
interruptedAt?: Date; // 中断时间
settings: {
discussionMode: string;
manualFixedTurns?: number;
isReducedCapacityEnabled: boolean;
activeRoleCount: number;
};
metadata: {
version: string;
exportedAt?: Date;
messageCount: number;
notepadUpdateCount: number;
};
}
// 讨论统计接口
export interface DiscussionStats {
totalTurns: number;
averageResponseTime: number;
longestResponseTime: number;
shortestResponseTime: number;
totalTokensUsed?: number; // 如果API提供token使用情况
roleParticipation: Record<string, {
turnCount: number;
totalResponseTime: number;
averageResponseTime: number;
}>;
notepadUpdateFrequency: number;
}
// 流式传输状态接口
export interface StreamingState {
messageId: string;
currentText: string;
targetText: string;
isComplete: boolean;
startTime: Date;
speed: number; // 字符/秒
}
// AI模型配置接口(从constants.ts导入,但在这里声明以保持类型完整性)
export interface AiModelConfig {
id: string;
name: string;
apiName: string;
baseUrl?: string;
supportsImages: boolean;
supportsReducedCapacity: boolean;
category: string;
maxTokens: number;
temperature: number;
isCustom: boolean;
createdAt: Date;
}
// AI角色配置接口
export interface AiRoleConfig {
id: string;
name: string;
systemPrompt: string;
modelId: string;
isActive: boolean;
color?: string; // 可选的UI显示颜色
description?: string; // 可选的角色描述
}
// 讨论配置接口
export interface DiscussionConfig {
mode: 'fixed' | 'ai-driven';
fixedTurns?: number;
maxTurnsPerRole?: number;
allowSameModel?: boolean; // 是否允许多个角色使用相同模型
enableNotepadSharing?: boolean; // 是否启用记事本共享
enableStreamingTypewriter?: boolean; // 是否启用流式打字机效果
typewriterSpeed?: number; // 打字机速度(毫秒/字符)
}
// API响应接口
export interface ApiResponse {
text: string;
durationMs: number;
error?: string;
usage?: {
promptTokens: number;
completionTokens: number;
totalTokens: number;
};
streamingChunks?: string[]; // 流式响应的块
}
// 配置导出/导入接口
export interface ConfigExportData {
models: AiModelConfig[];
roles: AiRoleConfig[];
discussionConfig?: DiscussionConfig;
discussionRecords?: DiscussionRecord[]; // 可选的讨论记录
exportedAt: string;
version: string;
}
// 讨论记录导出接口
export interface DiscussionExportData {
record: DiscussionRecord;
stats: DiscussionStats;
fullTranscript: string; // 完整的文本记录
exportFormat: 'json' | 'markdown' | 'html' | 'txt';
exportedAt: string;
version: string;
}
// 验证结果接口
export interface ValidationResult {
isValid: boolean;
errors: string[];
warnings?: string[];
}
// 角色状态接口(运行时使用)
export interface RoleState {
id: string;
name: string;
isProcessing: boolean;
lastResponse?: string;
totalResponseTime?: number;
messageCount?: number;
currentStreamingMessageId?: string; // 当前正在流式传输的消息ID
}
// 会话状态接口
export interface SessionState {
isActive: boolean;
startTime?: Date;
currentTurn: number;
activeRoles: RoleState[];
discussionLog: Array<{
roleId: string;
roleName: string;
message: string;
timestamp: Date;
}>;
canBeInterrupted: boolean; // 是否可以被中断
interruptionRequested: boolean; // 是否请求了中断
}
// 讨论控制接口
export interface DiscussionControl {
canStart: boolean;
canPause: boolean;
canResume: boolean;
canInterrupt: boolean;
canExport: boolean;
currentPhase: 'idle' | 'initializing' | 'discussing' | 'synthesizing' | 'completed' | 'interrupted';
estimatedTimeRemaining?: number; // 估算剩余时间(毫秒)
}
// 导出选项接口
export interface ExportOptions {
format: 'json' | 'markdown' | 'html' | 'txt';
includeMetadata: boolean;
includeStats: boolean;
includeNotepadHistory: boolean;
includeSystemMessages: boolean;
timestampFormat: 'iso' | 'local' | 'relative';
compressOutput: boolean;
}
// 消息过滤器接口
export interface MessageFilter {
senders?: (MessageSender | string)[];
purposes?: MessagePurpose[];
dateRange?: {
start: Date;
end: Date;
};
textSearch?: string;
hasDuration?: boolean;
hasImage?: boolean;
minDuration?: number;
maxDuration?: number;
}
// 通知接口
export interface Notification {
id: string;
type: 'info' | 'success' | 'warning' | 'error';
title: string;
message: string;
timestamp: Date;
duration?: number; // 自动消失时间(毫秒)
actions?: Array<{
label: string;
action: () => void;
style?: 'primary' | 'secondary' | 'danger';
}>;
}
// 应用状态接口
export interface AppState {
ui: {
theme: 'light' | 'dark' | 'auto';
sidebarCollapsed: boolean;
roleManagerOpen: boolean;
configManagerOpen: boolean;
notifications: Notification[];
};
discussion: {
current?: DiscussionRecord;
history: DiscussionRecord[];
control: DiscussionControl;
streaming: Map<string, StreamingState>;
};
session: SessionState;
config: {
channels: any[];
models: any[];
roles: any[];
discussionSettings: DiscussionConfig;
};
}