@@ -32,43 +32,65 @@ export class OpenAiHandler implements ApiHandler {
3232 }
3333 }
3434
35- // Include stream_options for OpenAI Compatible providers if the checkbox is checked
3635 async * createMessage ( systemPrompt : string , messages : Anthropic . Messages . MessageParam [ ] ) : ApiStream {
37- const openAiMessages : OpenAI . Chat . ChatCompletionMessageParam [ ] = [
38- { role : "system" , content : systemPrompt } ,
39- ...convertToOpenAiMessages ( messages ) ,
40- ]
4136 const modelInfo = this . getModel ( ) . info
42- const requestOptions : OpenAI . Chat . ChatCompletionCreateParams = {
43- model : this . options . openAiModelId ?? "" ,
44- messages : openAiMessages ,
45- temperature : 0 ,
46- stream : true ,
47- }
48- if ( this . options . includeMaxTokens ) {
49- requestOptions . max_tokens = modelInfo . maxTokens
50- }
37+ const modelId = this . options . openAiModelId ?? ""
5138
52- if ( this . options . includeStreamOptions ?? true ) {
53- requestOptions . stream_options = { include_usage : true }
54- }
39+ if ( this . options . openAiStreamingEnabled ?? true ) {
40+ const systemMessage : OpenAI . Chat . ChatCompletionSystemMessageParam = {
41+ role : "system" ,
42+ content : systemPrompt
43+ }
44+ const requestOptions : OpenAI . Chat . Completions . ChatCompletionCreateParamsStreaming = {
45+ model : modelId ,
46+ temperature : 0 ,
47+ messages : [ systemMessage , ...convertToOpenAiMessages ( messages ) ] ,
48+ stream : true as const ,
49+ stream_options : { include_usage : true } ,
50+ }
51+ if ( this . options . includeMaxTokens ) {
52+ requestOptions . max_tokens = modelInfo . maxTokens
53+ }
54+
55+ const stream = await this . client . chat . completions . create ( requestOptions )
5556
56- const stream = await this . client . chat . completions . create ( requestOptions )
57- for await ( const chunk of stream ) {
58- const delta = chunk . choices [ 0 ] ?. delta
59- if ( delta ?. content ) {
60- yield {
61- type : "text" ,
62- text : delta . content ,
57+ for await ( const chunk of stream ) {
58+ const delta = chunk . choices [ 0 ] ?. delta
59+ if ( delta ?. content ) {
60+ yield {
61+ type : "text" ,
62+ text : delta . content ,
63+ }
6364 }
64- }
65- if ( chunk . usage ) {
66- yield {
67- type : " usage" ,
68- inputTokens : chunk . usage . prompt_tokens || 0 ,
69- outputTokens : chunk . usage . completion_tokens || 0 ,
65+ if ( chunk . usage ) {
66+ yield {
67+ type : "usage" ,
68+ inputTokens : chunk . usage . prompt_tokens || 0 ,
69+ outputTokens : chunk . usage . completion_tokens || 0 ,
70+ }
7071 }
7172 }
73+ } else {
74+ // o1 for instance doesnt support streaming, non-1 temp, or system prompt
75+ const systemMessage : OpenAI . Chat . ChatCompletionUserMessageParam = {
76+ role : "user" ,
77+ content : systemPrompt
78+ }
79+ const requestOptions : OpenAI . Chat . Completions . ChatCompletionCreateParamsNonStreaming = {
80+ model : modelId ,
81+ messages : [ systemMessage , ...convertToOpenAiMessages ( messages ) ] ,
82+ }
83+ const response = await this . client . chat . completions . create ( requestOptions )
84+
85+ yield {
86+ type : "text" ,
87+ text : response . choices [ 0 ] ?. message . content || "" ,
88+ }
89+ yield {
90+ type : "usage" ,
91+ inputTokens : response . usage ?. prompt_tokens || 0 ,
92+ outputTokens : response . usage ?. completion_tokens || 0 ,
93+ }
7294 }
7395 }
7496
0 commit comments