feat: Introduce a /reset command to clear the chat session and token tracking, and update documentation.
This commit is contained in:
37
ReplLoop.cs
37
ReplLoop.cs
@@ -64,37 +64,44 @@ internal sealed class ReplLoop
|
||||
if (update.RawRepresentation is OpenAI.Chat.StreamingChatCompletionUpdate raw
|
||||
&& raw.Usage != null)
|
||||
{
|
||||
respIn += raw.Usage.InputTokenCount;
|
||||
respOut += raw.Usage.OutputTokenCount;
|
||||
respIn = raw.Usage.InputTokenCount; // last call = actual context size
|
||||
respOut += raw.Usage.OutputTokenCount; // additive — each round generates new output
|
||||
}
|
||||
}
|
||||
|
||||
object consoleLock = new();
|
||||
using var spinnerCts = CancellationTokenSource.CreateLinkedTokenSource(responseCts.Token);
|
||||
bool showSpinner = true;
|
||||
|
||||
CommandTool.PauseSpinner = () =>
|
||||
{
|
||||
|
||||
CommandTool.PauseSpinner = () =>
|
||||
{
|
||||
lock (consoleLock)
|
||||
{
|
||||
showSpinner = false;
|
||||
Console.Write("\r" + new string(' ', 40) + "\r");
|
||||
showSpinner = false;
|
||||
Console.Write("\r" + new string(' ', 40) + "\r");
|
||||
}
|
||||
};
|
||||
CommandTool.ResumeSpinner = () =>
|
||||
{
|
||||
CommandTool.ResumeSpinner = () =>
|
||||
{
|
||||
lock (consoleLock)
|
||||
{
|
||||
showSpinner = true;
|
||||
showSpinner = true;
|
||||
}
|
||||
};
|
||||
FileTools.OnFileRead = _ =>
|
||||
{
|
||||
int n = ContextCompactor.CompactStaleToolResults(_session.History);
|
||||
if (n > 0)
|
||||
AnsiConsole.MarkupLine(
|
||||
$"[dim grey] ♻ Compacted {n} stale tool result(s)[/]");
|
||||
};
|
||||
|
||||
var spinnerTask = Task.Run(async () =>
|
||||
{
|
||||
var frames = Spinner.Known.BouncingBar.Frames;
|
||||
var interval = Spinner.Known.BouncingBar.Interval;
|
||||
int i = 0;
|
||||
|
||||
|
||||
Console.Write("\x1b[?25l");
|
||||
try
|
||||
{
|
||||
@@ -143,6 +150,7 @@ internal sealed class ReplLoop
|
||||
await Task.WhenAny(spinnerTask);
|
||||
CommandTool.PauseSpinner = null;
|
||||
CommandTool.ResumeSpinner = null;
|
||||
FileTools.OnFileRead = null;
|
||||
}
|
||||
|
||||
if (firstChunk != null)
|
||||
@@ -184,13 +192,6 @@ internal sealed class ReplLoop
|
||||
|
||||
_session.History.Add(new ChatMessage(ChatRole.Assistant, fullResponse));
|
||||
|
||||
int compactedResults = ContextCompactor.CompactStaleToolResults(_session.History);
|
||||
if (compactedResults > 0)
|
||||
{
|
||||
AnsiConsole.MarkupLine(
|
||||
$"[dim grey] ♻ Compacted {compactedResults} stale tool result(s) from previous turns[/]");
|
||||
}
|
||||
|
||||
if (_tokenTracker.ShouldCompact())
|
||||
{
|
||||
var pct = _tokenTracker.ContextUsagePercent;
|
||||
|
||||
Reference in New Issue
Block a user