Corrections router (kiwi#73): - Wire make_corrections_router() from cf-core at /api/v1/corrections - Add get_db() dependency in session.py yielding store.conn (raw sqlite3.Connection as cf-core expects); cloud-aware via get_session - Migration 040: corrections table + indexes (copied from cf-core DDL) - Feeds Avocet SFT training pipeline via GET /corrections/export JSONL Magpie flywheel hook (kiwi#28): - app/services/magpie_hook.py: async fire_recipe_signal() that reads magpie_opt_in setting, checks external_id, POSTs anonymized payload to MAGPIE_INGEST_URL; stubs gracefully when URL unset or Magpie unreachable (DEBUG log, never raises) - Hooks into save_recipe and update_saved_recipe as background tasks - MAGPIE_INGEST_URL config key added to Settings - SettingsView: "Data Sharing" toggle for magpie_opt_in, cloud-only (v-if VITE_CLOUD_MODE), plain-language consent label
21 lines
883 B
SQL
21 lines
883 B
SQL
-- 040_corrections.sql — corrections table for SFT training data
|
|
-- Schema from circuitforge_core.api.corrections.CORRECTIONS_MIGRATION_SQL
|
|
CREATE TABLE IF NOT EXISTS corrections (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
item_id TEXT NOT NULL DEFAULT '',
|
|
product TEXT NOT NULL,
|
|
correction_type TEXT NOT NULL,
|
|
input_text TEXT NOT NULL,
|
|
original_output TEXT NOT NULL,
|
|
corrected_output TEXT NOT NULL DEFAULT '',
|
|
rating TEXT NOT NULL DEFAULT 'down',
|
|
context TEXT NOT NULL DEFAULT '{}',
|
|
opted_in INTEGER NOT NULL DEFAULT 0,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_corrections_product
|
|
ON corrections (product);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_corrections_opted_in
|
|
ON corrections (opted_in);
|