import type { Event, IMessage } from "../../types"; import { buildAdkUserParts } from "./parts"; import type { AdkProtocolOptions, BuildAdkUserPartsInput, MessageEventMeta, NormalizedAdkPart } from "./types"; /** * 获取消息对应的服务端 eventId。 * session events 补偿和去重会优先用服务端 id,避免前端临时 id 导致重复插入。 */ export declare const getAdkMessageEventId: (message: IMessage) => any; /** * 获取单次模型调用 id。流式分片与 sessionDetails 完整消息通常共享 invocationId, * 可用它判断哪些文本属于同一轮回复。 */ export declare const getAdkMessageInvocationId: (message: IMessage) => any; /** * 后端为异步任务补链路时可能插入 user task 事件,这类事件用于关联任务, * 默认不作为用户可见消息展示。 */ export declare const isAdkAsyncTaskEvent: (event: Event) => boolean; export declare const isUserFunctionResponseEvent: (event: Event) => boolean; /** * 提取 event 级元信息,保证 stream 最后一条里的 modelCode / usageMetadata * 能透传到 IMessage,业务侧可据此展示 token 消耗等信息。 */ export declare const getAdkEventMeta: (event: Event) => MessageEventMeta; export declare const createAdkMessage: (event: Event, part: NormalizedAdkPart, role?: IMessage["role"]) => IMessage; /** * 将单个 ADK event 转换为 SDK 消息。 * * followup 事件由上层作为 suggestedQuestions 处理;user functionResponse * 默认只用于回填对应 functionCall,不单独展示成一条用户消息。 */ export declare const mapAdkEventToMessages: (event: Event, options?: AdkProtocolOptions) => IMessage[]; export declare const mapAdkSessionEventsToMessages: (events?: Event[], options?: AdkProtocolOptions) => IMessage[]; /** * 消息去重分两层: * - 先按前端 id 去重。 * - 再按 invocationId + thought + fileUri 聚合同一轮 bot 文本,保留更完整的长文本。 * * 第二层主要解决 SSE 增量文本和 sessionDetails 完整文本同时存在时重复展示的问题。 */ export declare const dedupeAdkMessages: (messages: IMessage[]) => IMessage[]; export declare const insertMissingAdkSessionEvents: (currentMessages: IMessage[], sessionEvents: Event[], options?: AdkProtocolOptions & { removedInvocationIds?: Set; }) => IMessage[]; /** * 从 session events 中收集工具响应,用于回填前面已经渲染出来的 functionCall。 */ export declare const collectFunctionResponses: (events: Event[]) => Map; export declare const pairFunctionResponses: (messages: IMessage[], responses?: Map>) => IMessage[]; /** * 构造本地乐观用户消息。 * controller 在真正发请求前会先插入这些消息,让 UI 立即响应用户输入。 */ export declare const buildAdkUserMessage: ({ text, files, functionResponse, }: BuildAdkUserPartsInput) => IMessage[]; export { buildAdkUserParts };