3075e5d3da
feat(tts): add cf-tts module with ChatterboxTurbo backend and FastAPI service
...
CI / test (push) Waiting to run
Mirror / mirror (push) Waiting to run
- TTSBackend Protocol + TTSResult dataclass (audio_bytes, sample_rate, duration_s, format)
- MockTTSBackend: silent WAV clip, no GPU required, Protocol assert at import
- ChatterboxTurboBackend: ResembleAI chatterbox-turbo via chatterbox-tts package
- from_local() loads model from snapshot dir
- audio_prompt voice cloning via temp file
- _encode_audio helper: OGG (default), WAV, MP3 via torchaudio
- circuitforge_core.tts module-level synthesize() singleton (CF_TTS_MODEL / CF_TTS_MOCK)
- FastAPI app: GET /health, POST /synthesize (multipart form, returns audio bytes)
- default format: ogg (smaller than WAV, no patents)
- X-Duration-S / X-Model / X-Sample-Rate response headers
- CLI: --model --port --host --gpu-id --mock
- pyproject.toml: tts-chatterbox + tts-service extras
- Sample rate: 24000 Hz (S3GEN_SR from chatterbox internals)
2026-04-08 23:15:05 -07:00
67493048e2
feat(stt): add cf-stt module — FasterWhisperBackend + managed FastAPI app
...
CI / test (push) Waiting to run
Mirror / mirror (push) Waiting to run
- STTBackend Protocol + STTResult/STTSegment frozen dataclasses (base.py)
- MockSTTBackend for CI/tests (no GPU needed, CF_STT_MOCK=1)
- FasterWhisperBackend: loads model once, thread-safe, VRAM estimate by model size
- app.py: FastAPI service runnable as managed process by cf-orch
POST /transcribe (multipart audio) → STTTranscribeResponse-compatible JSON
GET /health → {status, model, vram_mb}
- __init__.py: process-level singleton + transcribe() convenience fn
- pyproject.toml: stt-faster-whisper + stt-service optional dep groups
2026-04-08 22:14:46 -07:00
378d125ba6
ci: add Forgejo Actions workflows — CI, PyPI release, mirrors, cliff.toml ( closes #27 )
2026-04-05 20:51:18 -07:00
0a15ad9522
feat: add circuitforge_core.api.feedback — shared feedback router factory ( closes #23 )
...
Adds make_feedback_router(repo, product, demo_mode_fn) which returns a
FastAPI APIRouter with GET /status and POST / endpoints. Handles Forgejo
label creation/reuse, issue body assembly (including repro steps for bugs),
demo mode gating, and FORGEJO_API_TOKEN presence checks. 12 tests covering
all status/submit paths, mock Forgejo interaction, and body content assertions.
Also adds fastapi>=0.110 and httpx>=0.27 to [dev] optional deps.
2026-04-05 17:31:02 -07:00
c244260d1c
feat!: strip resources/ from MIT core — moves to circuitforge-orch (v0.8.0)
...
BREAKING CHANGE: circuitforge_core.resources is no longer available.
Import CFOrchClient from circuitforge_orch.client instead.
cf-orch CLI entry point is now in the circuitforge-orch package.
2026-04-04 22:34:27 -07:00
d16bc569cf
chore: bump version to 0.7.0 — affiliates + preferences modules
2026-04-04 18:28:52 -07:00
cb51ba72bc
feat: cf-orch Docker image + Forgejo CI pipeline
...
Dockerfile.orch — multi-mode image (coordinator | agent):
- coordinator: runs cf-orch coordinator on $CF_ORCH_PORT (default 7700)
- agent: connects to $CF_COORDINATOR_URL, serves $CF_AGENT_GPU_IDS
.forgejo/workflows/docker.yml — publishes on every vN.N.N tag:
- ghcr.io/circuit-forge/cf-orch:latest
- ghcr.io/circuit-forge/cf-orch:vX.Y.Z
- Layer cache via GHA cache backend
Closes #19 . Bumps to v0.6.0.
2026-04-03 09:10:29 -07:00
8d87ed4c9f
feat: manage.py cross-platform product manager ( closes #6 )
...
- circuitforge_core.manage module — replaces bash-only manage.sh
- config.py: ManageConfig from manage.toml (TOML via tomllib/tomli)
app name, default_url, docker compose_file/project, native services
Falls back to directory name when no manage.toml present
- docker_mode.py: DockerManager wrapping 'docker compose' (v2 plugin)
or 'docker-compose' (v1 fallback); docker_available() probe
Commands: start, stop, restart, status, logs, build
- native_mode.py: NativeManager with PID file process management
platformdirs for platform-appropriate PID/log paths
Windows-compatible log tailing (polling, no tail -f)
Cross-platform kill: SIGTERM→SIGKILL on Unix, taskkill /F on Windows
- cli.py: typer CLI — start/stop/restart/status/logs/build/open/install-shims
Mode auto-detection: Docker available + compose file → docker; else native
--mode docker|native|auto override
- templates/manage.sh: bash shim (conda, venv, python3 detection)
- templates/manage.ps1: PowerShell shim (same detection, Windows)
- templates/manage.toml.example: annotated config template
- __main__.py: python -m circuitforge_core.manage entry point
- pyproject.toml: manage extras group (platformdirs, typer)
cf-manage console script; version bumped to 0.5.0
- 36 tests: config (6), docker_mode (9), native_mode (21)
2026-04-02 23:04:35 -07:00
5801928f8e
feat(tasks): add shared VRAM-aware LLM task scheduler
...
Extract generic batch scheduler into circuitforge_core.tasks.scheduler
so any CircuitForge product can use it. Includes VRAM detection via
cf-orch coordinator (cooperative free-VRAM), preflight fallback, and
unlimited fallback; singleton API; full test coverage (12 tests).
2026-03-30 23:12:23 -07:00
db4e3047fd
fix(resources): address code review findings from final review
...
- eviction_engine: replace deprecated asyncio.get_event_loop() with
get_running_loop() (Python 3.12 compatibility)
- eviction_engine: remove unused httpx import
- coordinator app: return 422 for unknown node_id instead of silently
falling back to hardcoded localhost URL
- eviction_executor: guard against pid <= 0 to prevent accidental
SIGTERM to process group
- pyproject.toml: move pytest-asyncio to [dev] extras, not [orch]
- profile_registry: document CPU profile exclusion from list_public()
2026-03-30 22:46:07 -07:00
1f296c0cdb
feat(resources): add [orch] package extras, cf-orch entry point, Docker compose
2026-03-30 22:34:40 -07:00
d60503f059
feat(resources): add LeaseManager with VRAM tracking and eviction candidate selection
2026-03-30 20:38:51 -07:00
c4c9b78b91
feat: scaffold circuitforge-core package
2026-03-25 11:02:26 -07:00