11using System . Text . Json ;
2-
3- using Microsoft . Extensions . AI ;
4-
2+ using Devlooped . Grok ;
53using Grpc . Core ;
64using Grpc . Net . Client ;
7- using Devlooped . Grok ;
5+ using Microsoft . Extensions . AI ;
86using static Devlooped . Grok . Chat ;
97
108namespace Devlooped . Extensions . AI . Grok ;
@@ -25,7 +23,7 @@ internal GrokChatClient(GrpcChannel channel, GrokClientOptions clientOptions, st
2523 public async Task < ChatResponse > GetResponseAsync ( IEnumerable < ChatMessage > messages , ChatOptions ? options = null , CancellationToken cancellationToken = default )
2624 {
2725 var requestDto = MapToRequest ( messages , options ) ;
28-
26+
2927 var protoResponse = await client . GetCompletionAsync ( requestDto , cancellationToken : cancellationToken ) ;
3028
3129 var chatMessages = protoResponse . Outputs
@@ -34,7 +32,7 @@ public async Task<ChatResponse> GetResponseAsync(IEnumerable<ChatMessage> messag
3432 . ToList ( ) ;
3533
3634 var lastOutput = protoResponse . Outputs . LastOrDefault ( ) ;
37-
35+
3836 return new ChatResponse ( chatMessages )
3937 {
4038 ResponseId = protoResponse . Id ,
@@ -52,13 +50,13 @@ public IAsyncEnumerable<ChatResponseUpdate> GetStreamingResponseAsync(IEnumerabl
5250 async IAsyncEnumerable < ChatResponseUpdate > CompleteChatStreamingCore ( IEnumerable < ChatMessage > messages , ChatOptions ? options , [ System . Runtime . CompilerServices . EnumeratorCancellation ] CancellationToken cancellationToken )
5351 {
5452 var requestDto = MapToRequest ( messages , options ) ;
55-
53+
5654 using var call = client . GetCompletionChunk ( requestDto , cancellationToken : cancellationToken ) ;
57-
55+
5856 await foreach ( var chunk in call . ResponseStream . ReadAllAsync ( cancellationToken ) )
5957 {
6058 var outputChunk = chunk . Outputs [ 0 ] ;
61-
59+
6260 // Use positional arguments for ChatResponseUpdate
6361 var update = new ChatResponseUpdate (
6462 outputChunk . Delta . Role != MessageRole . InvalidRole ? MapRole ( outputChunk . Delta . Role ) : null ,
@@ -79,7 +77,7 @@ async IAsyncEnumerable<ChatResponseUpdate> CompleteChatStreamingCore(IEnumerable
7977 textContent = new TextContent ( string . Empty ) ;
8078 update . Contents . Add ( textContent ) ;
8179 }
82-
80+
8381 foreach ( var citation in citations . Distinct ( ) )
8482 {
8583 ( textContent . Annotations ??= [ ] ) . Add ( new CitationAnnotation { Url = new ( citation ) } ) ;
@@ -150,7 +148,7 @@ GetCompletionsRequest MapToRequest(IEnumerable<ChatMessage> messages, ChatOption
150148 foreach ( var message in messages )
151149 {
152150 var gmsg = new Message { Role = MapRole ( message . Role ) } ;
153-
151+
154152 foreach ( var content in message . Contents )
155153 {
156154 if ( content is TextContent textContent && ! string . IsNullOrEmpty ( textContent . Text ) )
@@ -250,6 +248,10 @@ GetCompletionsRequest MapToRequest(IEnumerable<ChatMessage> messages, ChatOption
250248 request . Tools . Add ( new Tool { WebSearch = new WebSearch ( ) } ) ;
251249 }
252250 }
251+ else if ( tool is HostedCodeInterpreterTool )
252+ {
253+ request . Tools . Add ( new Tool { CodeExecution = new CodeExecution { } } ) ;
254+ }
253255 }
254256 }
255257
@@ -272,7 +274,7 @@ GetCompletionsRequest MapToRequest(IEnumerable<ChatMessage> messages, ChatOption
272274 _ when role == ChatRole . Tool => MessageRole . RoleTool ,
273275 _ => MessageRole . RoleUser
274276 } ;
275-
277+
276278 static ChatRole MapRole ( MessageRole role ) => role switch
277279 {
278280 MessageRole . RoleSystem => ChatRole . System ,
@@ -299,8 +301,8 @@ GetCompletionsRequest MapToRequest(IEnumerable<ChatMessage> messages, ChatOption
299301 TotalTokenCount = usage . TotalTokens
300302 } ;
301303
302- public object ? GetService ( Type serviceType , object ? serviceKey = null ) =>
304+ public object ? GetService ( Type serviceType , object ? serviceKey = null ) =>
303305 serviceType == typeof ( GrokChatClient ) ? this : null ;
304306
305- public void Dispose ( ) { }
307+ public void Dispose ( ) { }
306308}
0 commit comments