forked from admin/VolcanicAgenticCore
63 lines
3.3 KiB
C#
63 lines
3.3 KiB
C#
using Volcanic.AgenticCore.Abstractions.Events;
|
|
using Volcanic.AgenticCore.Abstractions.Json;
|
|
using Volcanic.AgenticCore.Abstractions.Messages;
|
|
using Volcanic.AgenticCore.Abstractions.Providers;
|
|
using Volcanic.AgenticCore.Abstractions.Tools;
|
|
|
|
namespace Volcanic.AgenticCore.Tests.Abstractions;
|
|
|
|
/// <summary>A UI (or the headless sample) serialises every session event as JSON; none may throw.</summary>
|
|
public class AgentSessionEventJsonTests
|
|
{
|
|
[Fact]
|
|
public void Every_session_event_serialises_with_a_type_discriminator()
|
|
{
|
|
var builder = new AssistantMessageBuilder("faux", "faux", "echo");
|
|
builder.Start();
|
|
var delta = builder.AppendText("Hel");
|
|
var assistant = builder.Done(StopReason.Stop).Partial;
|
|
var model = new Model { Id = "echo", Name = "Echo", Provider = "faux", Api = "faux" };
|
|
|
|
AgentSessionEvent[] events =
|
|
[
|
|
new AgentSessionEvent.AgentStart(),
|
|
new AgentSessionEvent.TurnStart(0),
|
|
new AgentSessionEvent.MessageStart(UserMessage.FromText("hi")),
|
|
new AgentSessionEvent.MessageUpdate(delta.Partial, delta),
|
|
new AgentSessionEvent.MessageEnd(assistant),
|
|
new AgentSessionEvent.ToolExecutionStart("c1", "bash", VolcanicJson.Parse("""{"command":"ls"}""")),
|
|
new AgentSessionEvent.ToolExecutionUpdate("c1", "bash", VolcanicJson.EmptyObject, ToolResult.Text("partial")),
|
|
new AgentSessionEvent.ToolExecutionEnd("c1", "bash", ToolResult.Text("done"), false),
|
|
new AgentSessionEvent.TurnEnd(0, assistant, []),
|
|
new AgentSessionEvent.QueueUpdate(["steer"], []),
|
|
new AgentSessionEvent.CompactionStart(CompactionReason.Threshold),
|
|
new AgentSessionEvent.CompactionEnd(CompactionReason.Manual, new CompactionResult("sum", null, 10, 5), false, false, null),
|
|
new AgentSessionEvent.AutoRetryStart(1, 3, TimeSpan.FromSeconds(2), "529"),
|
|
new AgentSessionEvent.AutoRetryEnd(true, 1, null),
|
|
new AgentSessionEvent.SessionInfoChanged("name"),
|
|
new AgentSessionEvent.ThinkingLevelChanged(ThinkingLevel.High),
|
|
new AgentSessionEvent.ModelChanged(model),
|
|
new AgentSessionEvent.ExtensionError("ext", "tool_call", "boom"),
|
|
new AgentSessionEvent.Notification("hello", Volcanic.AgenticCore.Abstractions.Ui.NotifyKind.Warning),
|
|
new AgentSessionEvent.AgentEnd([assistant], false),
|
|
new AgentSessionEvent.AgentSettled(),
|
|
];
|
|
|
|
foreach (var e in events)
|
|
{
|
|
var json = VolcanicJson.Serialize(e);
|
|
Assert.StartsWith("{\"type\":\"", json);
|
|
}
|
|
|
|
var update = VolcanicJson.Serialize<AgentSessionEvent>(new AgentSessionEvent.MessageUpdate(delta.Partial, delta));
|
|
Assert.Contains("\"type\":\"message_update\"", update);
|
|
Assert.Contains("\"assistantMessageEvent\":{\"type\":\"text_delta\"", update);
|
|
Assert.Contains("\"delta\":\"Hel\"", update);
|
|
Assert.DoesNotContain("\"partial\"", update);
|
|
|
|
var end = VolcanicJson.Deserialize<AgentSessionEvent>(VolcanicJson.Serialize<AgentSessionEvent>(new AgentSessionEvent.MessageEnd(assistant)));
|
|
var typed = Assert.IsType<AgentSessionEvent.MessageEnd>(end);
|
|
Assert.Equal("Hel", typed.Message.Text);
|
|
}
|
|
}
|