Clear AI state on data wipe and reseed
Details
Add rag_delete_all FFI function to truncate the rag_vectors table.
Wire SeedDataService to clear RAG vectors, AI conversation history,
and AI memories when wiping or reseeding data. Add ClearAll() methods
to AiConversationStore and AiMemoryService. Prevents stale embeddings
and chat history from referencing deleted entities.
Fix RAG pipeline build errors
Details
Switch EmbeddingService tokenizer from non-existent Tokenizer.CreateTiktokenForEncoding
to WordPieceTokenizer.Create for nomic-embed-text-v1.5 compatibility. Update
EmbeddingModelManager to download vocab.txt instead of tokenizer.json. Fix
System.Threading.Timer type ambiguity in RagIndexService debounce. Remove unused
to_c_string import from Rust rag.rs FFI module.
Wire embedding model download into Settings UI with auto-index on startup
Details
Adds "Semantic Search" card to AI settings with download/delete buttons,
progress bar, and status text. Uses nomic-embed-text-v1.5 (~260MB ONNX model).
After download completes, initializes EmbeddingService and kicks off full
RAG index in the background. On subsequent app starts, if model is already
downloaded, auto-initializes after a 5-second delay (to allow plugin activation)
and runs full index with content-hash skip for unchanged chunks.
SettingsViewModel.AI.cs: IsEmbeddingModelDownloading, CanDownloadEmbeddingModel,
EmbeddingModelDownloadLabel, DownloadEmbeddingModelCommand, DeleteEmbeddingModelCommand.
RagIndexService: deferred auto-init in constructor via Task.Run with 5s delay.
Generate derived datasets for AI insight charts
Details
Instead of referencing the original dataset for chart aggregation (which
fails when the AI uses column names that don't match the underlying table),
the orchestrator now creates small generated datasets from sample data.
For each chart the AI suggests:
1. Aggregates the sample rows client-side using the specified x/y/group
columns and aggregation function (sum/avg/count/min/max)
2. Creates a new dataset via ImportFromContentAsync named
"[AI] {ChartTitle} — {DatasetName}"
3. References the generated dataset ID in the chart block
This eliminates column mismatch errors entirely — the generated dataset
has exactly the columns the chart references. Falls back to the original
dataset when the generated one can't be created.
New file: ChartDatasetGenerator.cs (~170 lines) handles client-side
aggregation and CSV generation for single and grouped chart types.
Desktop 1.55.4 → 1.55.5
Filter chart markers against chart-eligible columns for view insights
Details
When insights are generated from a SQL view, the AI often references
computed columns (e.g., billable_pct) that exist in the view result but
not in the underlying dataset. These charts fail at render time with
"column not found" errors.
Now uses a two-pass approach:
1. Parse chart markers against all analysis columns (allows column name
normalization)
2. Validate parsed charts against EffectiveChartColumns (underlying
dataset) — skip charts with invalid columns instead of emitting them
3. Strip any unparsed [CHART:] markers so raw marker text never appears
in the rendered page
Desktop 1.55.3 → 1.55.4
Get notified about new releases