Ship Assistent 0.13.0: real QLoRA pipeline and GGUF Ollama register.

Replace fake train loop with TRL SFTTrainer, HF column mapping with fiction preset,
safetensors to GGUF conversion, and ollama create using ollama_base plus ADAPTER.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-22 14:45:07 +03:00
co-authored by Cursor
parent 1a03c3178f
commit 474a674a35
12 changed files with 1002 additions and 133 deletions
+10 -1
View File
@@ -296,6 +296,7 @@ public partial class SwarmAssistentExtension
{
List<JObject> samples = Memory.ListTrainSamples(status, null, null, 5000);
StringBuilder sb = new();
int exported = 0;
foreach (JObject s in samples)
{
JArray messages = s["messages"] as JArray ?? [];
@@ -303,6 +304,7 @@ public partial class SwarmAssistentExtension
{
continue;
}
exported++;
if (string.Equals(format, "sharegpt", StringComparison.OrdinalIgnoreCase))
{
JArray conv = [];
@@ -328,7 +330,7 @@ public partial class SwarmAssistentExtension
}
string path = Path.Combine(TrainingRoot(), "datasets", $"export_{DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()}.jsonl");
await File.WriteAllTextAsync(path, sb.ToString(), Encoding.UTF8);
return new JObject { ["success"] = true, ["path"] = path, ["count"] = samples.Count, ["content"] = sb.ToString() };
return new JObject { ["success"] = true, ["path"] = path, ["count"] = exported, ["content"] = sb.ToString() };
}
catch (Exception ex)
{
@@ -416,11 +418,18 @@ public partial class SwarmAssistentExtension
{
await Task.CompletedTask;
JObject job = string.IsNullOrWhiteSpace(id) ? Memory.GetActiveTrainJob() : Memory.GetTrainJob(id);
if (job is not null && TrainingJobManager.IsRunning && string.Equals(job["id"]?.ToString(), TrainingJobManager.CurrentJobId, StringComparison.OrdinalIgnoreCase))
{
JObject live = TrainingJobManager.GetProgress();
job["progress_json"] = live.ToString(Newtonsoft.Json.Formatting.None);
job["status"] = live["status"]?.ToString() ?? job["status"];
}
return new JObject
{
["success"] = true,
["job"] = job,
["training_active"] = TrainingJobManager.IsRunning,
["progress"] = TrainingJobManager.IsRunning ? TrainingJobManager.GetProgress() : null,
};
}