Skip to content

Commit

Permalink
feat: add groq chat stream (#88)
Browse files Browse the repository at this point in the history
  • Loading branch information
danijerez authored Oct 25, 2024
1 parent e6c1162 commit 847afee
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 9 deletions.
3 changes: 1 addition & 2 deletions src/Google.VertexAI/src/VertexAIChatModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ public override async IAsyncEnumerable<ChatResponse> GenerateAsync(
ChatSettings? settings = null,
[EnumeratorCancellation] CancellationToken cancellationToken = default)
{
if (request == null)
throw new ArgumentNullException(nameof(request));
request = request ?? throw new ArgumentNullException(nameof(request));

var prompt = ToPrompt(request.Messages);
var watch = Stopwatch.StartNew();
Expand Down
30 changes: 23 additions & 7 deletions src/Groq/src/GroqChatModel.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.Diagnostics;
using GroqSharp.Models;
using System.Diagnostics;
using System.Runtime.CompilerServices;
using GroqSharp.Models;
using MessageGroq = GroqSharp.Models.Message;

namespace LangChain.Providers.Groq;
Expand All @@ -21,23 +21,39 @@ public override async IAsyncEnumerable<ChatResponse> GenerateAsync(
var prompt = ToPrompt(request.Messages);
Provider.Api.SetModel(Id);
var watch = Stopwatch.StartNew();
var response = await Provider.Api.CreateChatCompletionAsync(prompt).ConfigureAwait(false);

if (settings?.UseStreaming == true)
{
var responseStream = Provider.Api.CreateChatCompletionStreamAsync(prompt);
await foreach (var response in responseStream.WithCancellation(cancellationToken))
{
yield return BuildChatResponse(response, request, settings, watch);
}
}
else
{
var response = await Provider.Api.CreateChatCompletionAsync(prompt).ConfigureAwait(false);
yield return BuildChatResponse(response, request, settings, watch);
}

}

private ChatResponse BuildChatResponse(string response, ChatRequest request, ChatSettings? settings, Stopwatch watch)
{
var usage = Usage.Empty with
{
Time = watch.Elapsed,
};
AddUsage(usage);
provider.AddUsage(usage);

var result = request.Messages.ToList();
provider.AddUsage(usage);
result.Add(response.AsAiMessage());

yield return new ChatResponse
return new ChatResponse
{
Messages = result,
Usage = usage,
UsedSettings = ChatSettings.Default,
UsedSettings = settings ?? ChatSettings.Default,
};
}

Expand Down

0 comments on commit 847afee

Please sign in to comment.