diff --git a/packages/aiCore/src/clients/PluginEnabledAiClient.ts b/packages/aiCore/src/clients/PluginEnabledAiClient.ts index 0eeffea7b3..1f719f38f4 100644 --- a/packages/aiCore/src/clients/PluginEnabledAiClient.ts +++ b/packages/aiCore/src/clients/PluginEnabledAiClient.ts @@ -19,14 +19,7 @@ * }) * ``` */ -import { - generateObject, - generateText, - LanguageModelV1Middleware, - simulateStreamingMiddleware, - streamObject, - streamText -} from 'ai' +import { generateObject, generateText, LanguageModelV1Middleware, streamObject, streamText } from 'ai' import { AiPlugin, createContext, PluginManager } from '../plugins' import { isProviderSupported } from '../providers/registry' @@ -196,7 +189,7 @@ export class PluginEnabledAiClient { this.providerId, modelId, this.options, - middlewares.length > 0 ? middlewares : [simulateStreamingMiddleware()] //TODO: 这里需要改成非流时调用simulateStreamingMiddleware(),这里先随便传一个 + middlewares.length > 0 ? middlewares : undefined ) } diff --git a/packages/aiCore/src/index.ts b/packages/aiCore/src/index.ts index 98c3352b6d..107c07a5c2 100644 --- a/packages/aiCore/src/index.ts +++ b/packages/aiCore/src/index.ts @@ -79,7 +79,7 @@ export type { ToolExecutionError, ToolResult } from 'ai' -export { defaultSettingsMiddleware, extractReasoningMiddleware, simulateStreamingMiddleware } from 'ai' +export { defaultSettingsMiddleware, extractReasoningMiddleware, simulateStreamingMiddleware, smoothStream } from 'ai' // 重新导出所有 Provider Settings 类型 export type { diff --git a/src/renderer/src/aiCore/index_new.ts b/src/renderer/src/aiCore/index_new.ts index b8aec419f3..2622c55335 100644 --- a/src/renderer/src/aiCore/index_new.ts +++ b/src/renderer/src/aiCore/index_new.ts @@ -14,6 +14,7 @@ import { createClient, type OpenAICompatibleProviderSettings, type ProviderId, + smoothStream, StreamTextParams } from '@cherrystudio/ai-core' import { isDedicatedImageGenerationModel } from '@renderer/config/models' @@ -176,7 +177,13 @@ export default class ModernAiProvider { if (middlewareConfig.onChunk) { // 流式处理 - 使用适配器 const adapter = new AiSdkToChunkAdapter(middlewareConfig.onChunk) - const streamResult = await clientWithMiddlewares.streamText(modelId, params) + const streamResult = await clientWithMiddlewares.streamText(modelId, { + ...params, + experimental_transform: smoothStream({ + delayInMs: 100, + chunking: 'word' + }) + }) const finalText = await adapter.processStream(streamResult) return {