diff --git a/src/renderer/src/aiCore/chunk/AiSdkToChunkAdapter.ts b/src/renderer/src/aiCore/chunk/AiSdkToChunkAdapter.ts index 0430c750d2..d441f228c1 100644 --- a/src/renderer/src/aiCore/chunk/AiSdkToChunkAdapter.ts +++ b/src/renderer/src/aiCore/chunk/AiSdkToChunkAdapter.ts @@ -28,11 +28,14 @@ export interface CherryStudioChunk { */ export class AiSdkToChunkAdapter { toolCallHandler: ToolCallChunkHandler + private accumulate: boolean | undefined constructor( private onChunk: (chunk: Chunk) => void, - mcpTools: MCPTool[] = [] + mcpTools: MCPTool[] = [], + accumulate?: boolean ) { this.toolCallHandler = new ToolCallChunkHandler(onChunk, mcpTools) + this.accumulate = accumulate } /** @@ -95,7 +98,11 @@ export class AiSdkToChunkAdapter { }) break case 'text-delta': - final.text += chunk.text || '' + if (this.accumulate) { + final.text += chunk.text || '' + } else { + final.text = chunk.text || '' + } this.onChunk({ type: ChunkType.TEXT_DELTA, text: final.text || '' diff --git a/src/renderer/src/aiCore/index_new.ts b/src/renderer/src/aiCore/index_new.ts index 553010c5ae..9d94fdb544 100644 --- a/src/renderer/src/aiCore/index_new.ts +++ b/src/renderer/src/aiCore/index_new.ts @@ -43,10 +43,12 @@ export default class ModernAiProvider { private legacyProvider: LegacyAiProvider private config: ReturnType private actualProvider: Provider + private model: Model constructor(model: Model, provider?: Provider) { this.actualProvider = provider || getActualProvider(model) this.legacyProvider = new LegacyAiProvider(this.actualProvider) + this.model = model // 只保存配置,不预先创建executor this.config = providerToAiSdkConfig(this.actualProvider, model) @@ -237,7 +239,8 @@ export default class ModernAiProvider { topicId: config.topicId }) - const adapter = new AiSdkToChunkAdapter(config.onChunk, config.mcpTools) + const accumulate = this.model.supported_text_delta !== false // true and undefined + const adapter = new AiSdkToChunkAdapter(config.onChunk, config.mcpTools, accumulate) logger.debug('Final params before streamText', { modelId,