Adds transcribeAudio() and fetchSpeechHealth() to the API client,
and the useSpeech React hook for managing mic recording lifecycle.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Define the abstract interface for the speech subsystem: SpeechBackend ABC
with transcribe/health/supported_formats methods, TranscriptionResult and
Segment dataclasses for structured transcription output.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add SpeechConfig dataclass with backend, model, language, device, and
compute_type fields. Wire it into JarvisConfig and load_config() so
[speech] TOML sections are loaded automatically.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New Speech subsystem with SpeechBackend ABC, registry-based backends
(Faster-Whisper, OpenAI, Deepgram), API endpoints, and frontend mic
button for desktop app and browser voice input.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The codebase simplification PR consolidated per-engine files into
openai_compat_engines.py but docs still referenced the old module paths,
breaking the mkdocs build. Also adds pymessenger to channel-messenger
optional dependency.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace vllm.py, sglang.py, llamacpp.py, mlx.py, lmstudio.py with
openai_compat_engines.py using dynamic class creation and registration.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Delete the entire src/openjarvis/memory/ directory (11 files) which
was a pure re-export shim pointing to openjarvis.tools.storage.*.
Update all imports across src/ and tests/ to use the canonical
openjarvis.tools.storage imports directly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix mock.patch() target in test_config.py (evals.cli -> openjarvis.evals.cli)
- Remove stale sys.path manipulation in evals/tests/conftest.py
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move the standalone evals framework from the project root into the
openjarvis package. Rewrite all ~50+ import statements from 'from evals.'
to 'from openjarvis.evals.' across the package, CLI, and tests. Remove
the evals-specific pyproject.toml (no longer a standalone package).
Update ruff per-file-ignores paths and fix line-length violations
introduced by the longer import paths.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-locate recipe TOML files with the loader code that reads them,
eliminating the fragile parents[3] path traversal. Updates
_PROJECT_RECIPES_DIR to use a relative package data path instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move all 6 Docker files (Dockerfile, Dockerfile.gpu, Dockerfile.gpu.rocm,
Dockerfile.sandbox, docker-compose.yml, docker-compose.gpu.rocm.yml) from
the project root into deploy/docker/ to reduce root-level clutter. Update
build context paths in both docker-compose files to point back to the
project root (../..) so Docker builds continue to work correctly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
13 incremental tasks covering structure cleanup, data migration,
shim removal, engine consolidation, and init.py refactoring.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Outlines incremental restructuring to reduce root sprawl from 32 to 21
items, consolidate data dirs into src/ package, remove backward-compat
shims, and clean up repetitive code patterns.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- .github/workflows/frontend.yml: type-check + build on push/PR
- ErrorBoundary component wraps App with catch + retry UI
- API client reads VITE_API_URL env var for non-same-origin deploys
- vite-env.d.ts declares ImportMetaEnv type
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Build tray programmatically via TrayIconBuilder with menu items.
Show/Hide toggles main window visibility. Remove declarative
trayIcon config to avoid conflict with programmatic setup.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Previous .ico only had 16x16. Windows needs multiple sizes for
taskbar, title bar, and explorer icon display.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New SettingsPanel component with API URL, refresh interval, and
theme toggle. Wired into App.tsx as sixth tab.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add std_latency to LatencyBenchmark metrics. New _render_stats_table
in bench_cmd.py detects stats-pattern keys (mean_X, p50_X, min_X,
max_X, std_X, p95_X) and renders Avg/Median/Min/Max/Std/P95 columns.
Falls back to simple key-value for non-stats metrics.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wrap engine.generate() in ask.py with console.status() spinner.
Wrap memory indexing loop in memory_cmd.py with rich.progress.track().
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New log_config.py with setup_logging() configuring the openjarvis
logger (WARNING default, DEBUG on --verbose, ERROR on --quiet).
RotatingFileHandler (5MB, 3 backups) enabled in verbose mode.
Flags added to root CLI group and forwarded via click context.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New hints.py with hint_no_config(), hint_no_engine(), hint_no_model().
Wire hint_no_engine into ask.py EngineConnectionError handlers to
show actionable suggestions when engine is unreachable.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5-step guided setup: detect hardware, write config, check engine,
verify model, run test query. Skips config step if already present
unless --force is used. Exits with helpful message on engine failure.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wire new display flags through the run command to print_full_results.
--compact renders a single dense table; --trace-detail enables full
per-step trace listing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add print_accuracy_panel, print_latency_table, print_energy_table,
print_trace_summary, print_compact_table, and print_full_results
orchestrator. Keep existing print_metrics_table for backward compat.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add total_input_tokens, total_output_tokens, avg_power_watts to
_compute_summary() and include in RunSummary constructor
- Add _output_path and _traces_dir as proper slots on RunSummary (fixes
pre-existing bug: slots=True prevented dynamic attribute setting)
- Update _summary_to_dict to serialize new fields
- Fix pre-existing test_metric_stats_to_dict to check p90/p95/p99 keys
- Add 2 new tests: total token counts and avg power in summary
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add trace_steps and trace_energy_joules to EvalResult
- Add avg_power_watts, total_input_tokens, total_output_tokens, and
trace_step_type_stats to RunSummary
- Add 3 tests covering new field defaults and setters
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add StepTypeStats dataclass with full descriptive statistics per step
type (count, avg/median/min/max/std duration, total energy, and
avg/median/min/max/std input/output tokens)
- Add total_energy_joules, total_generate_energy_joules, and
step_type_stats fields to TraceSummary
- Compute per-step-type aggregations in summary() method
- Add 3 tests covering energy totals, step-type stats, and dataclass fields
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add tokens_per_joule column to TelemetryStore schema, INSERT, and migration
- Add avg_tokens_per_joule field to ModelStats and EngineStats
- Add AVG(tokens_per_joule) to per_model_stats() and per_engine_stats() SQL
queries using _safe_col() pattern for backward compatibility
- Add 3 tests for store/retrieve, multi-record aggregation, and engine stats
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Computes completion_tokens / energy_joules in both generate() and
stream() methods. Zero when energy or tokens are zero.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>