V13 / 7879e8b5740b
OllamaCliStreamReader.cs
Lilith/Core/Ollama/OllamaCliStreamReader.cs
Unchanged from the preceding versionCS
using System.Text;
using System.Text.Json;
using System.Text.RegularExpressions;
namespace Lilith.Core.Ollama;
internal static class OllamaCliStreamReader
{
public static async Task PumpAsync(TextReader reader, OllamaCliProgressTracker tracker, CancellationToken cancellationToken = default)
{
var buffer = new char[512];
var segment = new StringBuilder();
while (!cancellationToken.IsCancellationRequested)
{
int read = await reader.ReadAsync(buffer, cancellationToken);
if (read <= 0)
{
break;
}
for (int i = 0; i < read; i++)
{
char c = buffer[i];
if (c is '\r' or '\n')
{
Flush(segment, tracker);
}
else
{
segment.Append(c);
}
}
}
Flush(segment, tracker);
}
private static void Flush(StringBuilder segment, OllamaCliProgressTracker tracker)
{
if (segment.Length == 0)
{
return;
}
tracker.Update(segment.ToString());
segment.Clear();
}
}