From 2338242018a25e3c8ad59aac3f53855f68a87af0 Mon Sep 17 00:00:00 2001 From: abearxiong Date: Fri, 9 May 2025 19:50:32 +0800 Subject: [PATCH] feat: add chatStream --- src/provider/core/chat.ts | 4 ++-- src/provider/core/index.ts | 8 ++++++++ src/provider/core/type.ts | 4 +++- src/test/siliconflow/get.ts | 4 ++-- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/provider/core/chat.ts b/src/provider/core/chat.ts index f537a88..0ab38e5 100644 --- a/src/provider/core/chat.ts +++ b/src/provider/core/chat.ts @@ -1,5 +1,5 @@ import { OpenAI } from 'openai'; -import type { BaseChatInterface, ChatMessageComplete, ChatMessage, ChatMessageOptions, BaseChatUsageInterface } from './type.ts'; +import type { BaseChatInterface, ChatMessageComplete, ChatMessage, ChatMessageOptions, BaseChatUsageInterface, ChatStream } from './type.ts'; export type BaseChatOptions> = { /** @@ -87,7 +87,7 @@ export class BaseChat implements BaseChatInterface, BaseChatUsageInterface { if (createParams.response_format) { throw new Error('response_format is not supported in stream mode'); } - return this.openai.chat.completions.create(createParams) as any; + return this.openai.chat.completions.create(createParams) as unknown as ChatStream; } /** diff --git a/src/provider/core/index.ts b/src/provider/core/index.ts index 476437a..5502217 100644 --- a/src/provider/core/index.ts +++ b/src/provider/core/index.ts @@ -1,2 +1,10 @@ +import { ChatStream } from './type.ts'; + export * from './chat.ts'; export * from './type.ts'; + +export const readStream = async (chatStream: ChatStream) => { + for await (const chunk of chatStream) { + console.log(chunk); + } +}; diff --git a/src/provider/core/type.ts b/src/provider/core/type.ts index 01db2d6..80eeb89 100644 --- a/src/provider/core/type.ts +++ b/src/provider/core/type.ts @@ -1,6 +1,6 @@ import OpenAI from 'openai'; -export type ChatMessage = OpenAI.Chat.Completions.ChatCompletionMessageParam ; +export type ChatMessage = OpenAI.Chat.Completions.ChatCompletionMessageParam; export type ChatMessageOptions = Partial; export type ChatMessageComplete = OpenAI.Chat.Completions.ChatCompletion; export type ChatMessageStream = OpenAI.Chat.Completions.ChatCompletion; @@ -23,3 +23,5 @@ export interface BaseChatUsageInterface { */ completion_tokens: number; } + +export type ChatStream = AsyncGenerator; diff --git a/src/test/siliconflow/get.ts b/src/test/siliconflow/get.ts index 2be66f9..48422ba 100644 --- a/src/test/siliconflow/get.ts +++ b/src/test/siliconflow/get.ts @@ -13,10 +13,10 @@ const main = async () => { console.log(usage); }; -// main(); +main(); const mainChat = async () => { const res = await siliconflow.chat([{ role: 'user', content: 'Hello, world! 1 + 1 equals ?' }]); console.log(res); }; -mainChat(); +// mainChat();