agent: lumotia-rebrand — rust workspace crates magnotia-* -> lumotia-*
Phase 2 of the rebrand cascade. Renames all 9 workspace crates from magnotia-* to lumotia-* plus the src-tauri binary crate name: - magnotia-ai-formatting -> lumotia-ai-formatting - magnotia-audio -> lumotia-audio - magnotia-cloud-providers -> lumotia-cloud-providers - magnotia-core -> lumotia-core - magnotia-hotkey -> lumotia-hotkey - magnotia-llm -> lumotia-llm - magnotia-mcp -> lumotia-mcp - magnotia-storage -> lumotia-storage - magnotia-transcription -> lumotia-transcription - magnotia -> lumotia (src-tauri binary) - magnotia_lib -> lumotia_lib (src-tauri lib target) Crate directories (crates/audio/ etc.) stay as-is; only the Cargo.toml [package] name field changes plus all consumer module imports (magnotia_core -> lumotia_core, etc.). Remaining magnotia_* references at this point are intentional and scoped to later phases: tracing targets (Phase 4), DB setting keys magnotia_preferences/magnotia_history (Phase 5). cargo build --workspace passes. cargo test --workspace: 330 pass, 0 fail. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
[package]
|
||||
name = "magnotia-transcription"
|
||||
name = "lumotia-transcription"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
description = "Speech-to-text engine wrappers, model management, and inference concurrency for Magnotia"
|
||||
@@ -15,18 +15,18 @@ build = "build.rs"
|
||||
# `whisper-vulkan` is a separate feature so a non-Vulkan target (Android
|
||||
# without GPU drivers, a CPU-only Windows build) can pull in whisper-rs
|
||||
# but skip the Vulkan backend. Build CPU-only with:
|
||||
# cargo build -p magnotia-transcription --no-default-features --features whisper
|
||||
# cargo build -p lumotia-transcription --no-default-features --features whisper
|
||||
default = ["whisper", "whisper-vulkan"]
|
||||
whisper = ["dep:whisper-rs"]
|
||||
whisper-vulkan = ["whisper-rs?/vulkan"]
|
||||
|
||||
[dependencies]
|
||||
magnotia-core = { path = "../core" }
|
||||
lumotia-core = { path = "../core" }
|
||||
|
||||
# TranscriptionProvider async trait + EngineProfile + ProviderId. The
|
||||
# trait lives in cloud-providers so an OEM licensee can implement it
|
||||
# without depending on transcription internals.
|
||||
magnotia-cloud-providers = { path = "../cloud-providers" }
|
||||
lumotia-cloud-providers = { path = "../cloud-providers" }
|
||||
|
||||
# Async-trait for the LocalProviderAdapter impl.
|
||||
async-trait = "0.1"
|
||||
@@ -57,12 +57,12 @@ thiserror = "2"
|
||||
tracing = "0.1"
|
||||
|
||||
[dev-dependencies]
|
||||
# TcpListener fixture for the download resume tests (mirrors magnotia-llm).
|
||||
# TcpListener fixture for the download resume tests (mirrors lumotia-llm).
|
||||
# `macros` and `rt-multi-thread` enable #[tokio::test] and the multi-threaded
|
||||
# scheduler used by the orchestrator tests.
|
||||
tokio = { version = "1", features = ["rt", "rt-multi-thread", "sync", "net", "io-util", "macros"] }
|
||||
tempfile = "3"
|
||||
# Test-only — used by tests/thread_sweep.rs to label physical vs logical
|
||||
# core counts in the scaling table. Production code uses the
|
||||
# `magnotia_core::constants::inference_thread_count` helper instead.
|
||||
# `lumotia_core::constants::inference_thread_count` helper instead.
|
||||
num_cpus = "1"
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
//! workspace ever pulls `tokenizers` into the dependency graph on a
|
||||
//! Windows target. If we ever legitimately need it we can reintroduce
|
||||
//! it via a sidecar (isolated process, separate CRT) rather than
|
||||
//! linking it into `magnotia_lib`.
|
||||
//! linking it into `lumotia_lib`.
|
||||
//!
|
||||
//! The check is advisory on non-Windows targets — it still prints a
|
||||
//! cargo:warning if `tokenizers` appears, so the Windows failure isn't
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use magnotia_core::error::{MagnotiaError, Result};
|
||||
use magnotia_core::types::{AudioSamples, TranscriptionOptions};
|
||||
use lumotia_core::error::{MagnotiaError, Result};
|
||||
use lumotia_core::types::{AudioSamples, TranscriptionOptions};
|
||||
|
||||
use crate::local_engine::{LocalEngine, TimedTranscript};
|
||||
|
||||
|
||||
@@ -23,11 +23,11 @@ pub use transcribe_rs::SpeechModel;
|
||||
pub use transcriber::{Transcriber, TranscriberCapabilities};
|
||||
|
||||
// Re-export the trait surface so downstream crates depend only on
|
||||
// `magnotia_transcription` to access both local engines and the
|
||||
// provider trait without a separate `magnotia_cloud_providers`
|
||||
// `lumotia_transcription` to access both local engines and the
|
||||
// provider trait without a separate `lumotia_cloud_providers`
|
||||
// dependency. This is the seam an OEM licensee uses when they swap
|
||||
// providers.
|
||||
pub use magnotia_cloud_providers::{
|
||||
pub use lumotia_cloud_providers::{
|
||||
CostClass, EngineProfile, NetworkRequirement, ProviderCapabilities, ProviderId, ProviderKind,
|
||||
ProviderTranscript, TranscriptionProvider,
|
||||
};
|
||||
|
||||
@@ -4,8 +4,8 @@ use std::time::Instant;
|
||||
|
||||
use transcribe_rs::{SpeechModel, TranscribeOptions, TranscriptionResult};
|
||||
|
||||
use magnotia_core::error::{MagnotiaError, Result};
|
||||
use magnotia_core::types::{
|
||||
use lumotia_core::error::{MagnotiaError, Result};
|
||||
use lumotia_core::types::{
|
||||
AudioSamples, EngineName, ModelId, Segment, Transcript, TranscriptionOptions,
|
||||
};
|
||||
|
||||
@@ -28,7 +28,7 @@ pub struct SpeechModelAdapter(pub Box<dyn SpeechModel + Send>);
|
||||
impl Transcriber for SpeechModelAdapter {
|
||||
fn capabilities(&self) -> TranscriberCapabilities {
|
||||
TranscriberCapabilities {
|
||||
sample_rate: magnotia_core::constants::WHISPER_SAMPLE_RATE,
|
||||
sample_rate: lumotia_core::constants::WHISPER_SAMPLE_RATE,
|
||||
channels: 1,
|
||||
supports_initial_prompt: false,
|
||||
}
|
||||
|
||||
@@ -2,9 +2,9 @@ use std::collections::HashSet;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::{LazyLock, Mutex};
|
||||
|
||||
use magnotia_core::error::{MagnotiaError, Result};
|
||||
use magnotia_core::model_registry::{find_model, ModelFile};
|
||||
use magnotia_core::types::{DownloadProgress, ModelId};
|
||||
use lumotia_core::error::{MagnotiaError, Result};
|
||||
use lumotia_core::model_registry::{find_model, ModelFile};
|
||||
use lumotia_core::types::{DownloadProgress, ModelId};
|
||||
|
||||
static ACTIVE_DOWNLOADS: LazyLock<Mutex<HashSet<String>>> =
|
||||
LazyLock::new(|| Mutex::new(HashSet::new()));
|
||||
@@ -40,12 +40,12 @@ impl Drop for DownloadReservation {
|
||||
/// Windows: %LOCALAPPDATA%/magnotia/models
|
||||
/// Unix: ~/.magnotia/models
|
||||
pub fn models_dir() -> PathBuf {
|
||||
magnotia_core::paths::app_paths().models_dir()
|
||||
lumotia_core::paths::app_paths().models_dir()
|
||||
}
|
||||
|
||||
/// Get the directory path where a specific model's files are stored.
|
||||
pub fn model_dir(id: &ModelId) -> PathBuf {
|
||||
magnotia_core::paths::app_paths().speech_model_dir(id)
|
||||
lumotia_core::paths::app_paths().speech_model_dir(id)
|
||||
}
|
||||
|
||||
/// Check whether all files for a model have been downloaded.
|
||||
@@ -61,7 +61,7 @@ pub fn is_downloaded(id: &ModelId) -> bool {
|
||||
|
||||
/// List all downloaded model IDs.
|
||||
pub fn list_downloaded() -> Vec<ModelId> {
|
||||
magnotia_core::model_registry::all_models()
|
||||
lumotia_core::model_registry::all_models()
|
||||
.iter()
|
||||
.filter(|m| is_downloaded(&m.id))
|
||||
.map(|m| m.id.clone())
|
||||
@@ -117,7 +117,7 @@ fn verified_manifest_path(dir: &Path) -> PathBuf {
|
||||
}
|
||||
|
||||
fn verified_manifest_matches(
|
||||
entry: &magnotia_core::model_registry::ModelEntry,
|
||||
entry: &lumotia_core::model_registry::ModelEntry,
|
||||
dir: &Path,
|
||||
) -> bool {
|
||||
let manifest = match std::fs::read_to_string(verified_manifest_path(dir)) {
|
||||
@@ -140,7 +140,7 @@ fn verified_manifest_matches(
|
||||
}
|
||||
|
||||
fn write_verified_manifest(
|
||||
entry: &magnotia_core::model_registry::ModelEntry,
|
||||
entry: &lumotia_core::model_registry::ModelEntry,
|
||||
dir: &Path,
|
||||
) -> std::io::Result<()> {
|
||||
let mut lines = Vec::with_capacity(entry.files.len() + 1);
|
||||
@@ -357,7 +357,7 @@ mod tests {
|
||||
let list = list_downloaded();
|
||||
// In test environment, no models are downloaded
|
||||
// This just verifies the function doesn't panic
|
||||
assert!(list.len() <= magnotia_core::model_registry::all_models().len());
|
||||
assert!(list.len() <= lumotia_core::model_registry::all_models().len());
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -481,7 +481,7 @@ mod tests {
|
||||
let file = ModelFile {
|
||||
filename: leak(dest.file_name().unwrap().to_string_lossy().into_owned()),
|
||||
url: leak(format!("http://{addr}/fixture.bin")),
|
||||
size: magnotia_core::types::Megabytes(0),
|
||||
size: lumotia_core::types::Megabytes(0),
|
||||
sha256: leak(expected_sha.clone()),
|
||||
};
|
||||
let id = ModelId::new("test-fixture");
|
||||
@@ -516,7 +516,7 @@ mod tests {
|
||||
let file = ModelFile {
|
||||
filename: leak(dest.file_name().unwrap().to_string_lossy().into_owned()),
|
||||
url: leak(format!("http://{addr}/fixture.bin")),
|
||||
size: magnotia_core::types::Megabytes(0),
|
||||
size: lumotia_core::types::Megabytes(0),
|
||||
sha256: leak(expected_sha),
|
||||
};
|
||||
let id = ModelId::new("test-fixture");
|
||||
@@ -571,7 +571,7 @@ mod tests {
|
||||
let file = ModelFile {
|
||||
filename: leak(dest.file_name().unwrap().to_string_lossy().into_owned()),
|
||||
url: leak(format!("http://{addr}/fixture.bin")),
|
||||
size: magnotia_core::types::Megabytes(0),
|
||||
size: lumotia_core::types::Megabytes(0),
|
||||
sha256: leak("0".repeat(64)),
|
||||
};
|
||||
let id = ModelId::new("test-fixture");
|
||||
@@ -599,7 +599,7 @@ mod tests {
|
||||
let file = ModelFile {
|
||||
filename: leak(dest.file_name().unwrap().to_string_lossy().into_owned()),
|
||||
url: leak(format!("http://{addr}/fixture.bin")),
|
||||
size: magnotia_core::types::Megabytes(0),
|
||||
size: lumotia_core::types::Megabytes(0),
|
||||
sha256: leak("deadbeef".repeat(8)),
|
||||
};
|
||||
let id = ModelId::new("test-fixture");
|
||||
|
||||
@@ -18,12 +18,12 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use async_trait::async_trait;
|
||||
use magnotia_cloud_providers::{
|
||||
use lumotia_cloud_providers::{
|
||||
CostClass, EngineProfile, ProviderCapabilities, ProviderId, ProviderKind, ProviderTranscript,
|
||||
TranscriptionProvider,
|
||||
};
|
||||
use magnotia_core::error::{MagnotiaError, Result};
|
||||
use magnotia_core::types::{AudioSamples, TranscriptionOptions};
|
||||
use lumotia_core::error::{MagnotiaError, Result};
|
||||
use lumotia_core::types::{AudioSamples, TranscriptionOptions};
|
||||
|
||||
use crate::local_engine::LocalEngine;
|
||||
use crate::registry::EngineRegistry;
|
||||
@@ -68,7 +68,7 @@ impl TranscriptionProvider for LocalProviderAdapter {
|
||||
ProviderCapabilities {
|
||||
sample_rate: local
|
||||
.map(|c| c.sample_rate)
|
||||
.unwrap_or(magnotia_core::constants::WHISPER_SAMPLE_RATE),
|
||||
.unwrap_or(lumotia_core::constants::WHISPER_SAMPLE_RATE),
|
||||
channels: local.map(|c| c.channels).unwrap_or(1),
|
||||
initial_prompt_supported: local.map(|c| c.supports_initial_prompt).unwrap_or(false),
|
||||
language_hint_supported: true,
|
||||
@@ -153,7 +153,7 @@ mod tests {
|
||||
|
||||
use std::sync::atomic::{AtomicUsize, Ordering};
|
||||
|
||||
use magnotia_core::types::{Segment, Transcript};
|
||||
use lumotia_core::types::{Segment, Transcript};
|
||||
|
||||
/// Mock provider that returns a canned transcript and counts
|
||||
/// invocations. Used to validate the orchestrator's dispatch logic
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
use std::collections::HashMap;
|
||||
use std::sync::Arc;
|
||||
|
||||
use magnotia_cloud_providers::{ProviderId, TranscriptionProvider};
|
||||
use lumotia_cloud_providers::{ProviderId, TranscriptionProvider};
|
||||
|
||||
/// Catalogue of providers known to the orchestrator.
|
||||
pub struct EngineRegistry {
|
||||
@@ -82,11 +82,11 @@ mod tests {
|
||||
use super::*;
|
||||
|
||||
use async_trait::async_trait;
|
||||
use magnotia_cloud_providers::{
|
||||
use lumotia_cloud_providers::{
|
||||
CostClass, EngineProfile, ProviderCapabilities, ProviderKind, ProviderTranscript,
|
||||
};
|
||||
use magnotia_core::error::Result;
|
||||
use magnotia_core::types::{AudioSamples, Transcript, TranscriptionOptions};
|
||||
use lumotia_core::error::Result;
|
||||
use lumotia_core::types::{AudioSamples, Transcript, TranscriptionOptions};
|
||||
|
||||
struct DummyProvider {
|
||||
id: ProviderId,
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
//! `whisper` feature — `WhisperRsBackend` (direct whisper-rs, the only
|
||||
//! path that pipes `initial_prompt`).
|
||||
|
||||
use magnotia_core::error::Result;
|
||||
use magnotia_core::types::{Segment, TranscriptionOptions};
|
||||
use lumotia_core::error::Result;
|
||||
use lumotia_core::types::{Segment, TranscriptionOptions};
|
||||
|
||||
/// Static capabilities a `Transcriber` advertises to callers.
|
||||
///
|
||||
|
||||
@@ -10,10 +10,10 @@ use std::path::Path;
|
||||
|
||||
use whisper_rs::{FullParams, SamplingStrategy, WhisperContext, WhisperContextParameters};
|
||||
|
||||
use magnotia_core::error::{MagnotiaError, Result};
|
||||
use magnotia_core::hardware::vulkan_loader_available;
|
||||
use magnotia_core::tuning::{inference_thread_count, Workload};
|
||||
use magnotia_core::types::{Segment, TranscriptionOptions};
|
||||
use lumotia_core::error::{MagnotiaError, Result};
|
||||
use lumotia_core::hardware::vulkan_loader_available;
|
||||
use lumotia_core::tuning::{inference_thread_count, Workload};
|
||||
use lumotia_core::types::{Segment, TranscriptionOptions};
|
||||
|
||||
use crate::transcriber::{Transcriber, TranscriberCapabilities};
|
||||
|
||||
@@ -42,7 +42,7 @@ impl WhisperRsBackend {
|
||||
impl Transcriber for WhisperRsBackend {
|
||||
fn capabilities(&self) -> TranscriberCapabilities {
|
||||
TranscriberCapabilities {
|
||||
sample_rate: magnotia_core::constants::WHISPER_SAMPLE_RATE,
|
||||
sample_rate: lumotia_core::constants::WHISPER_SAMPLE_RATE,
|
||||
channels: 1,
|
||||
supports_initial_prompt: true,
|
||||
}
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
use std::env;
|
||||
use std::time::Instant;
|
||||
|
||||
use magnotia_core::hardware::vulkan_loader_available;
|
||||
use magnotia_core::tuning::{inference_thread_count, Workload};
|
||||
use lumotia_core::hardware::vulkan_loader_available;
|
||||
use lumotia_core::tuning::{inference_thread_count, Workload};
|
||||
use whisper_rs::{FullParams, SamplingStrategy, WhisperContext, WhisperContextParameters};
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user