V3 / 536edbbdbb6e
Lilith.Boot.cs
Lilith/Agent/Lilith.Boot.cs
Changed in this versionCS
using Lilith.Core.Logging;
using Lilith.Core.Ollama;
namespace Lilith.Agent;
public partial class Lilith
{
public bool IsBooted { get; private set; }
public async Task BootAsync(bool startServerIfNotRunning = true)
{
using var operation = EnterOperation();
try
{
if (IsBooted) return;
if (string.IsNullOrWhiteSpace(Credentials.Model) || string.IsNullOrWhiteSpace(Credentials.SystemPrompt) ||
string.IsNullOrWhiteSpace(Credentials.AgentName)) throw new ArgumentException("Model, system prompt, and agent name are required.");
await Logger.TimeStageAsync("Total agent boot", () => BootCoreAsync(startServerIfNotRunning));
}
catch
{
_llmclient?.Dispose();
_llmclient = null!;
IsBooted = false;
throw;
}
}
private async Task BootCoreAsync(bool startServerIfNotRunning)
{
IsBooted = false;
await Logger.TimeStageAsync("Client initialization", () => InitializeProviderAsync(startServerIfNotRunning));
await Logger.TimeStageAsync("Chat readiness validation", () => { EnsureChatReadiness(); return Task.CompletedTask; });
if (Credentials.Tts is { Enabled: true } options && _tts is null)
{
try
{
_tts = await Logger.TimeStageAsync("Kokoro initialization", () =>
global::Lilith.Core.Kokoro.KokoroTts.CreateAsync(Logger, options));
}
catch (Exception ex) { Logger.SystemWriteLine($"Speech unavailable: {ex.Message}. Text chat remains available.", LogColors.Orange); }
}
Logger.SystemWriteLine($"=== {Credentials.AgentName} AI Chat ({Credentials.Model} via {Credentials.Provider}) ===");
Logger.SystemWriteLine("Type your message and press Enter. Type 'exit' to quit.\n");
Logger.SystemPromptWriteLine($"SYSTEM: {Credentials.SystemPrompt}");
await Logger.TimeStageAsync("Greeting generation", GreetingCoreAsync);
Logger.SystemWriteLine("", LogColors.White);
IsBooted = true;
}
public async Task GreetAsync()
{
using var operation = EnterOperation("Boot the agent before greeting.");
await GreetingCoreAsync();
}
private async Task GreetingCoreAsync()
{
if (!EnableScenarios)
{
await ChatCoreAsync("Please greet the user.");
return;
}
string greeting = await Client.RunScenarioAsync("greeting", new Dictionary<string, string>
{
["agent_name"] = Credentials.AgentName
});
if (_tts is not null) await _tts.SpeakAsync(greeting);
}
private void EnsureChatReadiness()
{
_llmclient.IsNull();
this.EnsureSystemPromptContent();
this.EnsureContextInitialized();
}
}