feat(engine): 添加运行时上下文支持并重构工具迭代限制
添加 RuntimeContext 类用于捕获模型运行时的日期时间信息, 包括UTC时间、本地时间和时区信息,并在系统提示中显示这些信息。 同时增加最大上下文消息数和工具迭代次数的配置选项, 将验证服务从引擎加载器中移除,并更新相关的数据结构和接口。 BREAKING CHANGE: 移除了验证服务,相关字段被替换为证据状态和接受状态。 - 添加 RuntimeContext 类和相关渲染方法 - 增加 max_context_messages 和 max_tool_iterations 配置 - 移除 ValidationService 相关代码 - 更新消息记录中的验证状态字段 - 添加原始工具调用检测和回退处理
This commit is contained in:
@ -271,7 +271,7 @@ export async function sendMessage(
|
||||
run_id?: string;
|
||||
task_id?: string | null;
|
||||
task_status?: string | null;
|
||||
validation_result?: Record<string, unknown> | null;
|
||||
evidence_status?: string | null;
|
||||
}> {
|
||||
const body: Record<string, unknown> = { message, session_id: sessionId };
|
||||
if (attachments && attachments.length > 0) {
|
||||
@ -293,7 +293,7 @@ export async function sendMessage(
|
||||
finish_reason?: string;
|
||||
task_id?: string | null;
|
||||
task_status?: string | null;
|
||||
validation_result?: Record<string, unknown> | null;
|
||||
evidence_status?: string | null;
|
||||
}>('/api/chat', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(body),
|
||||
@ -305,28 +305,29 @@ export async function sendMessage(
|
||||
run_id: result.run_id,
|
||||
task_id: result.task_id,
|
||||
task_status: result.task_status,
|
||||
validation_result: result.validation_result,
|
||||
evidence_status: result.evidence_status,
|
||||
};
|
||||
}
|
||||
|
||||
export async function submitChatFeedback(params: {
|
||||
sessionId: string;
|
||||
runId: string;
|
||||
feedbackType: 'satisfied' | 'revise' | 'abandon';
|
||||
feedbackType: 'accept' | 'revise' | 'abandon';
|
||||
comment?: string;
|
||||
}): Promise<{
|
||||
session_id: string;
|
||||
run_id: string;
|
||||
task_id: string;
|
||||
task_status: string;
|
||||
acceptance_type: string;
|
||||
feedback_type: string;
|
||||
}> {
|
||||
return fetchJSON('/api/chat/feedback', {
|
||||
return fetchJSON('/api/chat/acceptance', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
session_id: params.sessionId,
|
||||
run_id: params.runId,
|
||||
feedback_type: params.feedbackType,
|
||||
acceptance_type: params.feedbackType,
|
||||
comment: params.comment,
|
||||
}),
|
||||
});
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
import { getTaskCardMessageIndexes, mergeServerWithPendingUsers, shouldMergePendingUsers } from '@/lib/chat-messages';
|
||||
import { getTaskCardMessageIndexes, mergeServerWithPendingUsers, shouldDisplayChatMessage, shouldMergePendingUsers } from '@/lib/chat-messages';
|
||||
import type { ChatMessage } from '@/types';
|
||||
|
||||
describe('chat message helpers', () => {
|
||||
@ -85,10 +85,17 @@ describe('chat message helpers', () => {
|
||||
content: 'Final answer.',
|
||||
run_id: 'run-1',
|
||||
task_id: 'task-1',
|
||||
task_status: 'awaiting_feedback',
|
||||
task_status: 'awaiting_acceptance',
|
||||
},
|
||||
];
|
||||
|
||||
expect(Array.from(getTaskCardMessageIndexes(messages))).toEqual([2]);
|
||||
});
|
||||
|
||||
it('hides empty assistant records from session history', () => {
|
||||
expect(shouldDisplayChatMessage({ role: 'assistant', content: '', task_id: 'task-1', run_id: 'run-1' })).toBe(false);
|
||||
expect(shouldDisplayChatMessage({ role: 'assistant', content: '\u200B\uFEFF', task_id: 'task-1', run_id: 'run-1' })).toBe(false);
|
||||
expect(shouldDisplayChatMessage({ role: 'assistant', content: 'Final answer.', task_id: 'task-1', run_id: 'run-1' })).toBe(true);
|
||||
expect(shouldDisplayChatMessage({ role: 'user', content: '' })).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,5 +1,28 @@
|
||||
import type { ChatMessage } from '@/types';
|
||||
|
||||
const INVISIBLE_CONTENT_CHARS = /[\u200B-\u200D\uFEFF]/g;
|
||||
|
||||
export function normalizedMessageText(content: unknown): string {
|
||||
if (typeof content === 'string') {
|
||||
return content.replace(INVISIBLE_CONTENT_CHARS, '').trim();
|
||||
}
|
||||
if (content == null) {
|
||||
return '';
|
||||
}
|
||||
return String(content).replace(INVISIBLE_CONTENT_CHARS, '').trim();
|
||||
}
|
||||
|
||||
export function hasVisibleChatContent(msg: ChatMessage): boolean {
|
||||
if (normalizedMessageText(msg.content)) {
|
||||
return true;
|
||||
}
|
||||
return Boolean(msg.attachments?.length);
|
||||
}
|
||||
|
||||
export function shouldDisplayChatMessage(msg: ChatMessage): boolean {
|
||||
return msg.role !== 'assistant' || hasVisibleChatContent(msg);
|
||||
}
|
||||
|
||||
export function messageFingerprint(msg: ChatMessage): string {
|
||||
const attachmentKey = (msg.attachments ?? [])
|
||||
.map((a) => `${a.file_id ?? ''}:${a.name}:${a.content_type}:${a.size ?? ''}`)
|
||||
|
||||
Reference in New Issue
Block a user