55using System . ClientModel ;
66using Chats . BE . DB ;
77using System . ClientModel . Primitives ;
8- using System . Text . Json ;
9- using Chats . BE . Services . Models . ChatServices . OpenAI . ReasoningContents ;
10- using Chats . BE . DB . Enums ;
11- using Chats . BE . Services . Models . Extensions ;
128
139namespace Chats . BE . Services . Models . ChatServices . OpenAI ;
1410
@@ -40,11 +36,7 @@ internal static OpenAIClient CreateOpenAIClient(ModelKey modelKey, Uri? suggeste
4036 return api ;
4137 }
4238
43- static Func < StreamingChatCompletionUpdate , string ? > StreamingReasoningContentAccessor { get ; } = ReasoningContentFactory . CreateStreamingReasoningContentAccessor ( ) ;
44- static Func < ChatCompletion , string ? > ReasoningContentAccessor { get ; } = ReasoningContentFactory . CreateReasoningContentAccessor ( ) ;
45-
46- protected virtual string ? GetReasoningContent ( ChatCompletion delta ) => ReasoningContentAccessor ( delta ) ;
47- protected virtual string ? GetReasoningContent ( StreamingChatCompletionUpdate delta ) => StreamingReasoningContentAccessor ( delta ) ;
39+ protected virtual ReadOnlySpan < byte > ReasoningEffortPropName => "$.reasoning_content"u8 ;
4840
4941 public override async IAsyncEnumerable < ChatSegment > ChatStreamed ( IReadOnlyList < ChatMessage > messages , ChatCompletionOptions options , [ EnumeratorCancellation ] CancellationToken cancellationToken )
5042 {
@@ -66,6 +58,15 @@ public override async IAsyncEnumerable<ChatSegment> ChatStreamed(IReadOnlyList<C
6658 Usage = delta . Usage != null ? GetUsage ( delta . Usage ) : null ,
6759 } ;
6860 }
61+
62+ string ? GetReasoningContent ( StreamingChatCompletionUpdate delta )
63+ {
64+ if ( delta . Choices [ 0 ] . Delta . Patch . TryGetValue ( ReasoningEffortPropName , out string ? val ) )
65+ {
66+ return val ;
67+ }
68+ return null ;
69+ }
6970 }
7071
7172 public override async Task < ChatSegment > Chat ( IReadOnlyList < ChatMessage > messages , ChatCompletionOptions options , CancellationToken cancellationToken )
@@ -80,6 +81,15 @@ public override async Task<ChatSegment> Chat(IReadOnlyList<ChatMessage> messages
8081 FinishReason = delta . FinishReason ,
8182 Usage = delta . Usage != null ? GetUsage ( delta . Usage ) : null ,
8283 } ;
84+
85+ string ? GetReasoningContent ( ChatCompletion delta )
86+ {
87+ if ( delta . Choices [ 0 ] . Patch . TryGetValue ( ReasoningEffortPropName , out string ? val ) )
88+ {
89+ return val ;
90+ }
91+ return null ;
92+ }
8393 }
8494
8595 protected virtual Dtos . ChatTokenUsage GetUsage ( global ::OpenAI . Chat . ChatTokenUsage usage )
0 commit comments