Add feedback loop: SQLite-backed rating system + MCP tools + GUI Training tab

New crate: soundgen-feedback
- FeedbackDB with SQLite (rusqlite, bundled)
- CRUD: add, update_rating, get_all, get_unrated, top_rated, delete
- search_similar: keyword-based similarity for few-shot reference
- export_jsonl: export rated examples for fine-tuning
- 9 tests

MCP server: 5 tools (was 3)
- generate_batch: generate multiple sounds by name, store in DB
- get_reference_sounds: search DB for highly-rated similar sounds
- render_sound: now returns reference examples from DB in response
- --db flag to specify feedback database path

GUI: Training tab
- Open/create feedback DB (file dialog)
- Generate batch dialog (enter names, output dir)
- Sound list with star rating (1-5), feedback text, play button
- Export dataset as JSONL
- Stats display (total/rated/avg rating)

OpenCode config updated with --db feedback.db path
This commit is contained in:
Emil
2026-06-21 22:40:07 +03:00
parent c7d6c40683
commit 3e2376ac26
10 changed files with 1215 additions and 17 deletions
+5 -1
View File
@@ -8,6 +8,7 @@ members = [
"crates/soundgen-mcp",
"crates/soundgen-gui",
"crates/soundgen-runtime",
"crates/soundgen-feedback",
]
resolver = "2"
@@ -15,7 +16,7 @@ resolver = "2"
version = "0.1.0"
edition = "2021"
license = "MIT"
repository = "https://github.com/emil/soundgen"
repository = "https://github.com/emil28092005/Soundgen"
[workspace.dependencies]
soundgen-core = { path = "crates/soundgen-core" }
@@ -23,6 +24,7 @@ soundgen-fmt = { path = "crates/soundgen-fmt" }
soundgen-io = { path = "crates/soundgen-io" }
soundgen-seq = { path = "crates/soundgen-seq" }
soundgen-runtime = { path = "crates/soundgen-runtime" }
soundgen-feedback = { path = "crates/soundgen-feedback" }
hound = "3"
serde = { version = "1", features = ["derive"] }
@@ -32,3 +34,5 @@ cpal = "0.15"
eframe = "0.28"
egui = "0.28"
egui-file-dialog = "0.6"
rusqlite = { version = "0.31", features = ["bundled"] }
uuid = { version = "1", features = ["v4"] }