Skip to content

Commit 1074df1

Browse files
committed
1 parent 6128bed commit 1074df1

File tree

3 files changed

+31
-4
lines changed

3 files changed

+31
-4
lines changed

src/Extensions.Grok/GrokChatClient.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ public async Task<ChatResponse> GetResponseAsync(IEnumerable<ChatMessage> messag
9595

9696
return new ChatResponse(message)
9797
{
98+
ConversationId = options is GrokChatOptions { StoreMessages: true } ? response.Id : null,
9899
ResponseId = response.Id,
99100
ModelId = response.Model,
100101
CreatedAt = response.Created.ToDateTimeOffset(),
@@ -298,6 +299,11 @@ codeResult.RawRepresentation is ToolCall codeToolCall &&
298299
IList<IncludeOption> includes = [IncludeOption.InlineCitations];
299300
if (options is GrokChatOptions grokOptions)
300301
{
302+
request.StoreMessages = grokOptions.StoreMessages == true;
303+
// TODO: should we throw if we find a conversation id but not StoreMessages=true as it might be a user error?
304+
if (request.StoreMessages && options.ConversationId is not null)
305+
request.PreviousResponseId = options.ConversationId;
306+
301307
// NOTE: overrides our default include for inline citations, potentially.
302308
request.Include.Clear();
303309
request.Include.AddRange(grokOptions.Include);

src/Extensions.Grok/GrokChatOptions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,7 @@ public class GrokChatOptions : ChatOptions
3838
/// <summary>Additional outputs to include in responses.</summary>
3939
/// <remarks>Defaults to including <see cref="IncludeOption.InlineCitations"/>.</remarks>
4040
public IList<IncludeOption> Include { get; set; } = [IncludeOption.InlineCitations];
41+
42+
/// <summary>Whether to store request and responses.</summary>
43+
public bool? StoreMessages { get; set; }
4144
}

src/Tests/GrokTests.cs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,35 @@
11
using System.Text.Json;
2-
using System.Text.Json.Nodes;
3-
using Azure;
42
using Devlooped.Extensions.AI.Grok;
53
using Devlooped.Grok;
64
using Microsoft.Extensions.AI;
7-
using OpenAI.Realtime;
85
using static ConfigurationExtensions;
9-
using OpenAIClientOptions = OpenAI.OpenAIClientOptions;
106

117
namespace Devlooped.Extensions.AI;
128

139
public class GrokTests(ITestOutputHelper output)
1410
{
11+
[SecretsFact("XAI_API_KEY")]
12+
public async Task GrokRemembersConversation()
13+
{
14+
var chat = new GrokClient(Configuration["XAI_API_KEY"]!).AsIChatClient("grok-4-1-fast-non-reasoning")
15+
.AsBuilder()
16+
.UseLogging(output.AsLoggerFactory())
17+
.Build();
18+
19+
var options = new GrokChatOptions { StoreMessages = true };
20+
var response = await chat.GetResponseAsync("Hey, my alias is kzu. Keep that in mind.", options);
21+
22+
Assert.NotNull(response.ConversationId);
23+
24+
var id = response.ConversationId;
25+
options.ConversationId = id;
26+
27+
response = await chat.GetResponseAsync("What is my alias?", options);
28+
29+
Assert.Contains("kzu", response.Text);
30+
}
31+
32+
1533
[SecretsFact("XAI_API_KEY")]
1634
public async Task GrokInvokesTools()
1735
{

0 commit comments

Comments
 (0)