Copy disabled (too large)
Download .txt
Showing preview only (13,854K chars total). Download the full file to get everything.
Repository: mudler/LocalAI
Branch: master
Commit: 2b128753029a
Files: 1287
Total size: 13.0 MB
Directory structure:
gitextract_p22ybhoq/
├── .agents/
│ ├── adding-backends.md
│ ├── api-endpoints-and-auth.md
│ ├── building-and-testing.md
│ ├── coding-style.md
│ ├── llama-cpp-backend.md
│ └── testing-mcp-apps.md
├── .air.toml
├── .devcontainer/
│ ├── devcontainer.json
│ ├── docker-compose-devcontainer.yml
│ ├── grafana/
│ │ └── datasource.yml
│ └── prometheus/
│ └── prometheus.yml
├── .devcontainer-scripts/
│ ├── postcreate.sh
│ ├── poststart.sh
│ └── utils.sh
├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── config.yml
│ │ └── feature_request.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── bump_deps.sh
│ ├── bump_docs.sh
│ ├── check_and_update.py
│ ├── checksum_checker.sh
│ ├── ci/
│ │ └── modelslist.go
│ ├── dependabot.yml
│ ├── gallery-agent/
│ │ ├── agent.go
│ │ ├── gallery.go
│ │ ├── main.go
│ │ ├── testing.go
│ │ └── tools.go
│ ├── labeler.yml
│ ├── release.yml
│ ├── stale.yml
│ └── workflows/
│ ├── backend.yml
│ ├── backend_build.yml
│ ├── backend_build_darwin.yml
│ ├── backend_pr.yml
│ ├── build-test.yaml
│ ├── bump_deps.yaml
│ ├── bump_docs.yaml
│ ├── checksum_checker.yaml
│ ├── deploy-explorer.yaml
│ ├── disabled/
│ │ ├── comment-pr.yaml
│ │ ├── dependabot_auto.yml
│ │ ├── labeler.yml
│ │ ├── localaibot_automerge.yml
│ │ ├── notify-models.yaml
│ │ ├── prlint.yaml
│ │ └── test-gpu.yml
│ ├── gallery-agent.yaml
│ ├── generate_grpc_cache.yaml
│ ├── generate_intel_image.yaml
│ ├── image-pr.yml
│ ├── image.yml
│ ├── image_build.yml
│ ├── notify-releases.yaml
│ ├── release.yaml
│ ├── secscan.yaml
│ ├── stalebot.yml
│ ├── test-extra.yml
│ ├── test.yml
│ ├── tests-e2e.yml
│ ├── tests-ui-e2e.yml
│ ├── update_swagger.yaml
│ └── yaml-check.yml
├── .gitignore
├── .gitmodules
├── .goreleaser.yaml
├── .vscode/
│ ├── extensions.json
│ └── launch.json
├── .yamllint
├── AGENTS.md
├── CONTRIBUTING.md
├── Dockerfile
├── Entitlements.plist
├── LICENSE
├── Makefile
├── README.md
├── SECURITY.md
├── backend/
│ ├── Dockerfile.golang
│ ├── Dockerfile.llama-cpp
│ ├── Dockerfile.python
│ ├── README.md
│ ├── backend.proto
│ ├── cpp/
│ │ ├── grpc/
│ │ │ ├── .gitignore
│ │ │ └── Makefile
│ │ └── llama-cpp/
│ │ ├── CMakeLists.txt
│ │ ├── Makefile
│ │ ├── grpc-server.cpp
│ │ ├── package.sh
│ │ ├── prepare.sh
│ │ └── run.sh
│ ├── go/
│ │ ├── acestep-cpp/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── Makefile
│ │ │ ├── acestepcpp_test.go
│ │ │ ├── cpp/
│ │ │ │ ├── goacestepcpp.cpp
│ │ │ │ └── goacestepcpp.h
│ │ │ ├── goacestepcpp.go
│ │ │ ├── main.go
│ │ │ ├── package.sh
│ │ │ ├── run.sh
│ │ │ └── test.sh
│ │ ├── llm/
│ │ │ └── llama/
│ │ │ ├── llama.go
│ │ │ └── main.go
│ │ ├── local-store/
│ │ │ ├── Makefile
│ │ │ ├── debug.go
│ │ │ ├── main.go
│ │ │ ├── package.sh
│ │ │ ├── production.go
│ │ │ ├── run.sh
│ │ │ └── store.go
│ │ ├── opus/
│ │ │ ├── Makefile
│ │ │ ├── codec.go
│ │ │ ├── csrc/
│ │ │ │ └── opus_shim.c
│ │ │ ├── main.go
│ │ │ ├── opus.go
│ │ │ ├── opus_test.go
│ │ │ ├── package.sh
│ │ │ └── run.sh
│ │ ├── piper/
│ │ │ ├── Makefile
│ │ │ ├── main.go
│ │ │ ├── package.sh
│ │ │ ├── piper.go
│ │ │ └── run.sh
│ │ └── silero-vad/
│ │ ├── Makefile
│ │ ├── main.go
│ │ ├── package.sh
│ │ ├── run.sh
│ │ └── vad.go
│ ├── index.yaml
│ └── python/
│ ├── README.md
│ ├── ace-step/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-l4t13.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── chatterbox/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-install.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements-l4t13.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── common/
│ │ ├── libbackend.sh
│ │ └── template/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── protogen.sh
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ └── test.sh
│ ├── coqui/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── diffusers/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── backend.py
│ │ ├── diffusers_dynamic_loader.py
│ │ ├── install.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements-l4t13.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── faster-qwen3-tts/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-install.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements-l4t13.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── faster-whisper/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── protogen.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ └── test.sh
│ ├── fish-speech/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── package.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements-l4t13.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── kitten-tts/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── kokoro/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── mlx/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── mlx_cache.py
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements-l4t13.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ ├── test.sh
│ │ └── test_mlx_cache.py
│ ├── mlx-audio/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements-l4t13.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── mlx-distributed/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── coordinator.py
│ │ ├── install.sh
│ │ ├── mlx_cache.py
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements-l4t13.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── sharding.py
│ │ ├── test.py
│ │ └── test.sh
│ ├── mlx-vlm/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements-l4t13.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── moonshine/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── protogen.sh
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── nemo/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── protogen.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements-l4t13.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── neutts/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-after.txt
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── outetts/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── pocket-tts/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── protogen.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements-l4t13.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── qwen-asr/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12-after.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel-after.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements-l4t13.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── qwen-tts/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12-after.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel-after.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements-l4t13.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── rerankers/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── rfdetr/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ └── test.sh
│ ├── transformers/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── vibevoice/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements-l4t13.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── vllm/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-after.txt
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12-after.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-install.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── vllm-omni/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── requirements-after.txt
│ │ ├── requirements-cublas12-after.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ ├── voxcpm/
│ │ ├── Makefile
│ │ ├── backend.py
│ │ ├── install.sh
│ │ ├── protogen.sh
│ │ ├── requirements-cpu.txt
│ │ ├── requirements-cublas12.txt
│ │ ├── requirements-cublas13.txt
│ │ ├── requirements-hipblas.txt
│ │ ├── requirements-intel.txt
│ │ ├── requirements-l4t12.txt
│ │ ├── requirements-l4t13.txt
│ │ ├── requirements-mps.txt
│ │ ├── requirements.txt
│ │ ├── run.sh
│ │ ├── test.py
│ │ └── test.sh
│ └── whisperx/
│ ├── Makefile
│ ├── backend.py
│ ├── install.sh
│ ├── protogen.sh
│ ├── requirements-cpu.txt
│ ├── requirements-cublas12.txt
│ ├── requirements-cublas13.txt
│ ├── requirements-hipblas.txt
│ ├── requirements-mps.txt
│ ├── requirements.txt
│ ├── run.sh
│ ├── test.py
│ └── test.sh
├── cmd/
│ ├── launcher/
│ │ ├── icon.go
│ │ ├── internal/
│ │ │ ├── launcher.go
│ │ │ ├── launcher_suite_test.go
│ │ │ ├── launcher_test.go
│ │ │ ├── release_manager.go
│ │ │ ├── release_manager_test.go
│ │ │ ├── systray_manager.go
│ │ │ └── ui.go
│ │ └── main.go
│ └── local-ai/
│ └── main.go
├── configuration/
│ └── .keep
├── core/
│ ├── application/
│ │ ├── agent_jobs.go
│ │ ├── application.go
│ │ ├── config_file_watcher.go
│ │ ├── p2p.go
│ │ ├── startup.go
│ │ └── watchdog.go
│ ├── backend/
│ │ ├── backend_suite_test.go
│ │ ├── detection.go
│ │ ├── embeddings.go
│ │ ├── image.go
│ │ ├── llm.go
│ │ ├── llm_test.go
│ │ ├── options.go
│ │ ├── rerank.go
│ │ ├── soundgeneration.go
│ │ ├── stores.go
│ │ ├── token_metrics.go
│ │ ├── tokenize.go
│ │ ├── transcript.go
│ │ ├── tts.go
│ │ ├── vad.go
│ │ └── video.go
│ ├── cli/
│ │ ├── agent.go
│ │ ├── agent_test.go
│ │ ├── backends.go
│ │ ├── cli.go
│ │ ├── completion.go
│ │ ├── completion_test.go
│ │ ├── context/
│ │ │ └── context.go
│ │ ├── deprecations.go
│ │ ├── explorer.go
│ │ ├── federated.go
│ │ ├── models.go
│ │ ├── run.go
│ │ ├── soundgeneration.go
│ │ ├── transcript.go
│ │ ├── tts.go
│ │ ├── util.go
│ │ └── worker/
│ │ ├── worker.go
│ │ ├── worker_llamacpp.go
│ │ ├── worker_mlx_common.go
│ │ ├── worker_mlx_distributed.go
│ │ ├── worker_p2p.go
│ │ └── worker_p2p_mlx.go
│ ├── clients/
│ │ └── store.go
│ ├── config/
│ │ ├── application_config.go
│ │ ├── application_config_test.go
│ │ ├── config_suite_test.go
│ │ ├── gallery.go
│ │ ├── gguf.go
│ │ ├── guesser.go
│ │ ├── model_config.go
│ │ ├── model_config_filter.go
│ │ ├── model_config_loader.go
│ │ ├── model_config_test.go
│ │ ├── model_test.go
│ │ └── runtime_settings.go
│ ├── dependencies_manager/
│ │ └── manager.go
│ ├── explorer/
│ │ ├── database.go
│ │ ├── database_test.go
│ │ ├── discovery.go
│ │ └── explorer_suite_test.go
│ ├── gallery/
│ │ ├── backend_resolve.go
│ │ ├── backend_types.go
│ │ ├── backends.go
│ │ ├── backends_test.go
│ │ ├── gallery.go
│ │ ├── gallery_suite_test.go
│ │ ├── gallery_test.go
│ │ ├── importers/
│ │ │ ├── diffuser.go
│ │ │ ├── diffuser_test.go
│ │ │ ├── importers.go
│ │ │ ├── importers_suite_test.go
│ │ │ ├── importers_test.go
│ │ │ ├── llama-cpp.go
│ │ │ ├── llama-cpp_test.go
│ │ │ ├── mlx.go
│ │ │ ├── mlx_test.go
│ │ │ ├── transformers.go
│ │ │ ├── transformers_test.go
│ │ │ ├── vllm.go
│ │ │ └── vllm_test.go
│ │ ├── metadata_type.go
│ │ ├── models.go
│ │ ├── models_test.go
│ │ ├── models_types.go
│ │ └── request_test.go
│ ├── http/
│ │ ├── app.go
│ │ ├── app_test.go
│ │ ├── auth/
│ │ │ ├── apikeys.go
│ │ │ ├── apikeys_test.go
│ │ │ ├── auth_suite_test.go
│ │ │ ├── db.go
│ │ │ ├── db_nosqlite.go
│ │ │ ├── db_sqlite.go
│ │ │ ├── db_test.go
│ │ │ ├── features.go
│ │ │ ├── helpers_test.go
│ │ │ ├── middleware.go
│ │ │ ├── middleware_test.go
│ │ │ ├── models.go
│ │ │ ├── oauth.go
│ │ │ ├── password.go
│ │ │ ├── permissions.go
│ │ │ ├── roles.go
│ │ │ ├── roles_test.go
│ │ │ ├── session.go
│ │ │ ├── session_test.go
│ │ │ ├── usage.go
│ │ │ └── usage_test.go
│ │ ├── endpoints/
│ │ │ ├── anthropic/
│ │ │ │ └── messages.go
│ │ │ ├── elevenlabs/
│ │ │ │ ├── soundgeneration.go
│ │ │ │ └── tts.go
│ │ │ ├── explorer/
│ │ │ │ └── dashboard.go
│ │ │ ├── jina/
│ │ │ │ └── rerank.go
│ │ │ ├── localai/
│ │ │ │ ├── agent_collections.go
│ │ │ │ ├── agent_jobs.go
│ │ │ │ ├── agent_responses.go
│ │ │ │ ├── agent_skills.go
│ │ │ │ ├── agents.go
│ │ │ │ ├── backend.go
│ │ │ │ ├── backend_monitor.go
│ │ │ │ ├── cors_proxy.go
│ │ │ │ ├── detection.go
│ │ │ │ ├── edit_model.go
│ │ │ │ ├── edit_model_test.go
│ │ │ │ ├── gallery.go
│ │ │ │ ├── get_token_metrics.go
│ │ │ │ ├── import_model.go
│ │ │ │ ├── localai_suite_test.go
│ │ │ │ ├── mcp.go
│ │ │ │ ├── mcp_prompts.go
│ │ │ │ ├── mcp_resources.go
│ │ │ │ ├── mcp_tools.go
│ │ │ │ ├── metrics.go
│ │ │ │ ├── p2p.go
│ │ │ │ ├── settings.go
│ │ │ │ ├── stores.go
│ │ │ │ ├── system.go
│ │ │ │ ├── tokenize.go
│ │ │ │ ├── tts.go
│ │ │ │ ├── types.go
│ │ │ │ ├── vad.go
│ │ │ │ ├── video.go
│ │ │ │ └── welcome.go
│ │ │ ├── mcp/
│ │ │ │ └── tools.go
│ │ │ ├── openai/
│ │ │ │ ├── chat.go
│ │ │ │ ├── chat_test.go
│ │ │ │ ├── completion.go
│ │ │ │ ├── constants.go
│ │ │ │ ├── edit.go
│ │ │ │ ├── embeddings.go
│ │ │ │ ├── image.go
│ │ │ │ ├── image_test.go
│ │ │ │ ├── inference.go
│ │ │ │ ├── inference_test.go
│ │ │ │ ├── inpainting.go
│ │ │ │ ├── inpainting_test.go
│ │ │ │ ├── list.go
│ │ │ │ ├── openai_suite_test.go
│ │ │ │ ├── realtime.go
│ │ │ │ ├── realtime_model.go
│ │ │ │ ├── realtime_transport.go
│ │ │ │ ├── realtime_transport_webrtc.go
│ │ │ │ ├── realtime_transport_ws.go
│ │ │ │ ├── realtime_webrtc.go
│ │ │ │ ├── transcription.go
│ │ │ │ └── types/
│ │ │ │ ├── client_events.go
│ │ │ │ ├── int_or_inf.go
│ │ │ │ ├── message_item.go
│ │ │ │ ├── server_events.go
│ │ │ │ └── types.go
│ │ │ └── openresponses/
│ │ │ ├── responses.go
│ │ │ ├── store.go
│ │ │ ├── store_suite_test.go
│ │ │ ├── store_test.go
│ │ │ └── websocket.go
│ │ ├── explorer.go
│ │ ├── http_suite_test.go
│ │ ├── middleware/
│ │ │ ├── auth.go
│ │ │ ├── auth_test.go
│ │ │ ├── baseurl.go
│ │ │ ├── baseurl_test.go
│ │ │ ├── middleware_suite_test.go
│ │ │ ├── request.go
│ │ │ ├── strippathprefix.go
│ │ │ ├── strippathprefix_test.go
│ │ │ ├── trace.go
│ │ │ └── usage.go
│ │ ├── openresponses_test.go
│ │ ├── react-ui/
│ │ │ ├── e2e/
│ │ │ │ ├── backend-logs.spec.js
│ │ │ │ ├── manage-logs-link.spec.js
│ │ │ │ ├── models-gallery.spec.js
│ │ │ │ ├── navigation.spec.js
│ │ │ │ ├── settings-backend-logging.spec.js
│ │ │ │ ├── traces-errors.spec.js
│ │ │ │ └── traces.spec.js
│ │ │ ├── eslint.config.js
│ │ │ ├── index.html
│ │ │ ├── package.json
│ │ │ ├── playwright.config.js
│ │ │ ├── src/
│ │ │ │ ├── App.css
│ │ │ │ ├── App.jsx
│ │ │ │ ├── components/
│ │ │ │ │ ├── CanvasPanel.jsx
│ │ │ │ │ ├── ClientMCPDropdown.jsx
│ │ │ │ │ ├── CodeEditor.jsx
│ │ │ │ │ ├── ConfirmDialog.jsx
│ │ │ │ │ ├── LoadingSpinner.jsx
│ │ │ │ │ ├── MCPAppFrame.jsx
│ │ │ │ │ ├── Modal.jsx
│ │ │ │ │ ├── ModelSelector.jsx
│ │ │ │ │ ├── OperationsBar.jsx
│ │ │ │ │ ├── RequireAdmin.jsx
│ │ │ │ │ ├── RequireAuth.jsx
│ │ │ │ │ ├── RequireFeature.jsx
│ │ │ │ │ ├── ResourceCards.jsx
│ │ │ │ │ ├── ResourceMonitor.jsx
│ │ │ │ │ ├── SearchableModelSelect.jsx
│ │ │ │ │ ├── SearchableSelect.jsx
│ │ │ │ │ ├── SettingRow.jsx
│ │ │ │ │ ├── Sidebar.jsx
│ │ │ │ │ ├── ThemeToggle.jsx
│ │ │ │ │ ├── Toast.jsx
│ │ │ │ │ ├── Toggle.jsx
│ │ │ │ │ ├── UnifiedMCPDropdown.jsx
│ │ │ │ │ └── UserGroupSection.jsx
│ │ │ │ ├── context/
│ │ │ │ │ └── AuthContext.jsx
│ │ │ │ ├── contexts/
│ │ │ │ │ └── ThemeContext.jsx
│ │ │ │ ├── hooks/
│ │ │ │ │ ├── useAgentChat.js
│ │ │ │ │ ├── useChat.js
│ │ │ │ │ ├── useMCPClient.js
│ │ │ │ │ ├── useModels.js
│ │ │ │ │ ├── useOperations.js
│ │ │ │ │ ├── useResources.js
│ │ │ │ │ └── useUserMap.js
│ │ │ │ ├── index.css
│ │ │ │ ├── main.jsx
│ │ │ │ ├── pages/
│ │ │ │ │ ├── Account.jsx
│ │ │ │ │ ├── AgentChat.jsx
│ │ │ │ │ ├── AgentCreate.jsx
│ │ │ │ │ ├── AgentJobDetails.jsx
│ │ │ │ │ ├── AgentJobs.jsx
│ │ │ │ │ ├── AgentStatus.jsx
│ │ │ │ │ ├── AgentTaskDetails.jsx
│ │ │ │ │ ├── Agents.jsx
│ │ │ │ │ ├── BackendLogs.jsx
│ │ │ │ │ ├── Backends.jsx
│ │ │ │ │ ├── Chat.jsx
│ │ │ │ │ ├── CollectionDetails.jsx
│ │ │ │ │ ├── Collections.jsx
│ │ │ │ │ ├── Explorer.jsx
│ │ │ │ │ ├── Home.jsx
│ │ │ │ │ ├── ImageGen.jsx
│ │ │ │ │ ├── ImportModel.jsx
│ │ │ │ │ ├── Login.jsx
│ │ │ │ │ ├── Manage.jsx
│ │ │ │ │ ├── ModelEditor.jsx
│ │ │ │ │ ├── Models.jsx
│ │ │ │ │ ├── NotFound.jsx
│ │ │ │ │ ├── P2P.jsx
│ │ │ │ │ ├── Settings.jsx
│ │ │ │ │ ├── SkillEdit.jsx
│ │ │ │ │ ├── Skills.jsx
│ │ │ │ │ ├── Sound.jsx
│ │ │ │ │ ├── TTS.jsx
│ │ │ │ │ ├── Talk.jsx
│ │ │ │ │ ├── Traces.jsx
│ │ │ │ │ ├── Usage.jsx
│ │ │ │ │ ├── Users.jsx
│ │ │ │ │ ├── VideoGen.jsx
│ │ │ │ │ └── auth.css
│ │ │ │ ├── router.jsx
│ │ │ │ ├── theme.css
│ │ │ │ └── utils/
│ │ │ │ ├── api.js
│ │ │ │ ├── artifacts.js
│ │ │ │ ├── basePath.js
│ │ │ │ ├── config.js
│ │ │ │ ├── format.js
│ │ │ │ ├── markdown.js
│ │ │ │ └── mcpClientStorage.js
│ │ │ └── vite.config.js
│ │ ├── render.go
│ │ ├── routes/
│ │ │ ├── agents.go
│ │ │ ├── anthropic.go
│ │ │ ├── auth.go
│ │ │ ├── auth_test.go
│ │ │ ├── elevenlabs.go
│ │ │ ├── explorer.go
│ │ │ ├── health.go
│ │ │ ├── jina.go
│ │ │ ├── localai.go
│ │ │ ├── openai.go
│ │ │ ├── openresponses.go
│ │ │ ├── ui.go
│ │ │ ├── ui_api.go
│ │ │ ├── ui_api_backends_test.go
│ │ │ ├── ui_backend_gallery.go
│ │ │ └── ui_gallery.go
│ │ ├── static/
│ │ │ ├── animations.css
│ │ │ ├── assets/
│ │ │ │ ├── alpine.js
│ │ │ │ ├── font1.css
│ │ │ │ ├── font2.css
│ │ │ │ ├── fontawesome/
│ │ │ │ │ └── css/
│ │ │ │ │ ├── all.css
│ │ │ │ │ ├── brands.css
│ │ │ │ │ ├── fontawesome.css
│ │ │ │ │ ├── regular.css
│ │ │ │ │ ├── solid.css
│ │ │ │ │ ├── svg-with-js.css
│ │ │ │ │ ├── v4-font-face.css
│ │ │ │ │ ├── v4-shims.css
│ │ │ │ │ └── v5-font-face.css
│ │ │ │ ├── fontawesome.css
│ │ │ │ ├── highlightjs.css
│ │ │ │ ├── highlightjs.js
│ │ │ │ ├── htmx.js
│ │ │ │ ├── marked.js
│ │ │ │ ├── purify.js
│ │ │ │ ├── tailwindcss.js
│ │ │ │ ├── tw-elements.css
│ │ │ │ └── tw-elements.js
│ │ │ ├── chat.js
│ │ │ ├── components.css
│ │ │ ├── general.css
│ │ │ ├── image.js
│ │ │ ├── p2panimation.js
│ │ │ ├── sound.js
│ │ │ ├── talk.js
│ │ │ ├── theme.css
│ │ │ ├── tts.js
│ │ │ ├── typography.css
│ │ │ └── video.js
│ │ └── views/
│ │ ├── 404.html
│ │ ├── agent-job-details.html
│ │ ├── agent-jobs.html
│ │ ├── agent-task-details.html
│ │ ├── backends.html
│ │ ├── chat.html
│ │ ├── error.html
│ │ ├── explorer.html
│ │ ├── image.html
│ │ ├── index.html
│ │ ├── login.html
│ │ ├── manage.html
│ │ ├── model-editor.html
│ │ ├── models.html
│ │ ├── p2p.html
│ │ ├── partials/
│ │ │ ├── footer.html
│ │ │ ├── head.html
│ │ │ ├── inprogress.html
│ │ │ ├── navbar.html
│ │ │ └── navbar_explorer.html
│ │ ├── settings.html
│ │ ├── sound.html
│ │ ├── talk.html
│ │ ├── traces.html
│ │ ├── tts.html
│ │ └── video.html
│ ├── p2p/
│ │ ├── federated.go
│ │ ├── federated_server.go
│ │ ├── node.go
│ │ ├── p2p.go
│ │ └── p2p_common.go
│ ├── schema/
│ │ ├── agent_jobs.go
│ │ ├── anthropic.go
│ │ ├── anthropic_test.go
│ │ ├── backend.go
│ │ ├── elevenlabs.go
│ │ ├── gallery-model.schema.json
│ │ ├── jina.go
│ │ ├── localai.go
│ │ ├── message.go
│ │ ├── message_test.go
│ │ ├── openai.go
│ │ ├── openresponses.go
│ │ ├── prediction.go
│ │ ├── request.go
│ │ ├── schema_suite_test.go
│ │ ├── tokenize.go
│ │ └── transcription.go
│ ├── services/
│ │ ├── agent_jobs.go
│ │ ├── agent_jobs_test.go
│ │ ├── agent_pool.go
│ │ ├── agent_pool_sse.go
│ │ ├── backend_monitor.go
│ │ ├── backends.go
│ │ ├── backends_test.go
│ │ ├── gallery.go
│ │ ├── list_models.go
│ │ ├── metrics.go
│ │ ├── models.go
│ │ ├── operation.go
│ │ ├── services_suite_test.go
│ │ ├── user_services.go
│ │ └── user_storage.go
│ ├── startup/
│ │ ├── model_preload.go
│ │ ├── model_preload_test.go
│ │ └── startup_suite_test.go
│ ├── templates/
│ │ ├── cache.go
│ │ ├── evaluator.go
│ │ ├── evaluator_test.go
│ │ ├── multimodal.go
│ │ ├── multimodal_test.go
│ │ └── templates_suite_test.go
│ └── trace/
│ ├── audio_snippet.go
│ └── backend_trace.go
├── custom-ca-certs/
│ └── .keep
├── docker-compose.yaml
├── docs/
│ ├── Dockerfile
│ ├── README.md
│ ├── assets/
│ │ └── jsconfig.json
│ ├── content/
│ │ ├── _index.md
│ │ ├── advanced/
│ │ │ ├── _index.en.md
│ │ │ ├── _index.md
│ │ │ ├── advanced-usage.md
│ │ │ ├── fine-tuning.md
│ │ │ ├── model-configuration.md
│ │ │ ├── reverse-proxy-tls.md
│ │ │ └── vram-management.md
│ │ ├── faq.md
│ │ ├── features/
│ │ │ ├── GPU-acceleration.md
│ │ │ ├── _index.en.md
│ │ │ ├── agents.md
│ │ │ ├── audio-to-text.md
│ │ │ ├── authentication.md
│ │ │ ├── backend-monitor.md
│ │ │ ├── backends.md
│ │ │ ├── constrained_grammars.md
│ │ │ ├── distributed_inferencing.md
│ │ │ ├── embeddings.md
│ │ │ ├── gpt-vision.md
│ │ │ ├── image-generation.md
│ │ │ ├── mcp.md
│ │ │ ├── mlx-distributed.md
│ │ │ ├── model-gallery.md
│ │ │ ├── object-detection.md
│ │ │ ├── openai-functions.md
│ │ │ ├── openai-realtime.md
│ │ │ ├── p2p.md
│ │ │ ├── reranker.md
│ │ │ ├── runtime-settings.md
│ │ │ ├── sound-generation.md
│ │ │ ├── stores.md
│ │ │ ├── text-generation.md
│ │ │ ├── text-to-audio.md
│ │ │ ├── video-generation.md
│ │ │ └── voice-activity-detection.md
│ │ ├── getting-started/
│ │ │ ├── _index.en.md
│ │ │ ├── build.md
│ │ │ ├── container-images.md
│ │ │ ├── customize-model.md
│ │ │ ├── kubernetes.md
│ │ │ ├── models.md
│ │ │ ├── quickstart.md
│ │ │ ├── troubleshooting.md
│ │ │ └── try-it-out.md
│ │ ├── installation/
│ │ │ ├── _index.en.md
│ │ │ ├── build.md
│ │ │ ├── containers.md
│ │ │ ├── docker.md
│ │ │ ├── kubernetes.md
│ │ │ ├── linux.md
│ │ │ └── macos.md
│ │ ├── integrations.md
│ │ ├── overview.md
│ │ ├── reference/
│ │ │ ├── _index.en.md
│ │ │ ├── _index.md
│ │ │ ├── api-errors.md
│ │ │ ├── architecture.md
│ │ │ ├── binaries.md
│ │ │ ├── cli-reference.md
│ │ │ ├── compatibility-table.md
│ │ │ ├── nvidia-l4t.md
│ │ │ ├── shell-completion.md
│ │ │ └── system-info.md
│ │ └── whats-new.md
│ ├── data/
│ │ ├── landing.yaml
│ │ └── version.json
│ ├── docker-compose.yaml
│ ├── go.mod
│ ├── go.sum
│ ├── hugo.toml
│ ├── layouts/
│ │ ├── 404.html
│ │ ├── partials/
│ │ │ ├── docs/
│ │ │ │ ├── gitinfo.html
│ │ │ │ ├── sidebar.html
│ │ │ │ └── top-header.html
│ │ │ ├── head.html
│ │ │ ├── header.html
│ │ │ ├── logo.html
│ │ │ └── menu-footer.html
│ │ └── shortcodes/
│ │ ├── github.html
│ │ ├── pr.html
│ │ └── version.html
│ ├── netlify.toml
│ ├── package.json
│ └── static/
│ └── site.webmanifest
├── entrypoint.sh
├── examples/
│ └── README.md
├── gallery/
│ ├── alpaca.yaml
│ ├── arch-function.yaml
│ ├── cerbero.yaml
│ ├── chatml-hercules.yaml
│ ├── chatml.yaml
│ ├── codellama.yaml
│ ├── command-r.yaml
│ ├── deephermes.yaml
│ ├── deepseek-r1.yaml
│ ├── deepseek.yaml
│ ├── dreamshaper.yaml
│ ├── falcon3.yaml
│ ├── flux-ggml.yaml
│ ├── flux.yaml
│ ├── gemma.yaml
│ ├── granite.yaml
│ ├── granite3-2.yaml
│ ├── granite4.yaml
│ ├── harmony.yaml
│ ├── hermes-2-pro-mistral.yaml
│ ├── hermes-vllm.yaml
│ ├── index.yaml
│ ├── jamba.yaml
│ ├── lfm.yaml
│ ├── llama3-instruct.yaml
│ ├── llama3.1-instruct-grammar.yaml
│ ├── llama3.1-instruct.yaml
│ ├── llama3.1-reflective.yaml
│ ├── llama3.2-fcall.yaml
│ ├── llama3.2-quantized.yaml
│ ├── llava.yaml
│ ├── mathstral.yaml
│ ├── mistral-0.3.yaml
│ ├── moondream.yaml
│ ├── mudler.yaml
│ ├── nanbeige4.1.yaml
│ ├── noromaid.yaml
│ ├── openvino.yaml
│ ├── parler-tts.yaml
│ ├── phi-2-chat.yaml
│ ├── phi-2-orange.yaml
│ ├── phi-3-chat.yaml
│ ├── phi-3-vision.yaml
│ ├── phi-4-chat-fcall.yaml
│ ├── phi-4-chat.yaml
│ ├── piper.yaml
│ ├── pocket-tts.yaml
│ ├── qwen-fcall.yaml
│ ├── qwen-image.yaml
│ ├── qwen3-deepresearch.yaml
│ ├── qwen3-openbuddy.yaml
│ ├── qwen3.yaml
│ ├── rerankers.yaml
│ ├── rwkv.yaml
│ ├── sd-ggml.yaml
│ ├── sentencetransformers.yaml
│ ├── smolvlm.yaml
│ ├── stablediffusion3.yaml
│ ├── tuluv2.yaml
│ ├── vibevoice.yaml
│ ├── vicuna-chat.yaml
│ ├── virtual.yaml
│ ├── vllm.yaml
│ ├── whisper-base.yaml
│ ├── wizardlm2.yaml
│ └── z-image-ggml.yaml
├── go.mod
├── go.sum
├── internal/
│ └── version.go
├── pkg/
│ ├── audio/
│ │ ├── audio.go
│ │ ├── audio_suite_test.go
│ │ ├── audio_test.go
│ │ └── identify.go
│ ├── concurrency/
│ │ ├── concurrency_suite_test.go
│ │ ├── jobresult.go
│ │ └── jobresult_test.go
│ ├── downloader/
│ │ ├── downloader_suite_test.go
│ │ ├── huggingface.go
│ │ ├── progress.go
│ │ ├── uri.go
│ │ └── uri_test.go
│ ├── format/
│ │ └── transcription.go
│ ├── functions/
│ │ ├── chat_deltas.go
│ │ ├── function_structure.go
│ │ ├── functions.go
│ │ ├── functions_suite_test.go
│ │ ├── functions_test.go
│ │ ├── grammars/
│ │ │ ├── bnf_rules.go
│ │ │ ├── grammars_suite_test.go
│ │ │ ├── json_schema.go
│ │ │ ├── json_schema_test.go
│ │ │ ├── llama31_schema.go
│ │ │ ├── llama31_schema_test.go
│ │ │ ├── options.go
│ │ │ ├── rules.go
│ │ │ └── types.go
│ │ ├── iterative_parser.go
│ │ ├── json_mode.go
│ │ ├── json_stack_parser.go
│ │ ├── parse.go
│ │ ├── parse_test.go
│ │ ├── peg/
│ │ │ ├── arena.go
│ │ │ ├── builder.go
│ │ │ ├── chat.go
│ │ │ ├── chat_test.go
│ │ │ ├── parser.go
│ │ │ ├── parser_test.go
│ │ │ ├── peg_suite_test.go
│ │ │ ├── trie.go
│ │ │ ├── types.go
│ │ │ └── utils_test.go
│ │ ├── peg_integration.go
│ │ └── peg_integration_test.go
│ ├── grpc/
│ │ ├── backend.go
│ │ ├── base/
│ │ │ ├── base.go
│ │ │ └── singlethread.go
│ │ ├── client.go
│ │ ├── embed.go
│ │ ├── interface.go
│ │ └── server.go
│ ├── huggingface-api/
│ │ ├── client.go
│ │ ├── client_test.go
│ │ └── hfapi_suite_test.go
│ ├── langchain/
│ │ └── langchain.go
│ ├── model/
│ │ ├── backend_log_store.go
│ │ ├── filters.go
│ │ ├── initializers.go
│ │ ├── loader.go
│ │ ├── loader_options.go
│ │ ├── loader_test.go
│ │ ├── model.go
│ │ ├── model_suite_test.go
│ │ ├── process.go
│ │ ├── watchdog.go
│ │ ├── watchdog_options.go
│ │ ├── watchdog_options_test.go
│ │ └── watchdog_test.go
│ ├── oci/
│ │ ├── blob.go
│ │ ├── blob_test.go
│ │ ├── image.go
│ │ ├── image_test.go
│ │ ├── oci_suite_test.go
│ │ ├── ollama.go
│ │ ├── ollama_test.go
│ │ └── tarball.go
│ ├── reasoning/
│ │ ├── config.go
│ │ ├── extractor.go
│ │ ├── extractor_test.go
│ │ ├── reasoning.go
│ │ ├── reasoning_suite_test.go
│ │ └── reasoning_test.go
│ ├── signals/
│ │ └── handler.go
│ ├── sound/
│ │ ├── float32.go
│ │ ├── int16.go
│ │ ├── int16_test.go
│ │ ├── sound_suite_test.go
│ │ └── testutil_test.go
│ ├── store/
│ │ └── client.go
│ ├── system/
│ │ ├── capabilities.go
│ │ ├── capabilities_test.go
│ │ ├── state.go
│ │ └── system_suite_test.go
│ ├── utils/
│ │ ├── base64.go
│ │ ├── base64_test.go
│ │ ├── ffmpeg.go
│ │ ├── hash.go
│ │ ├── json.go
│ │ ├── logging.go
│ │ ├── path.go
│ │ ├── strings.go
│ │ ├── untar.go
│ │ ├── urlfetch.go
│ │ ├── urlfetch_test.go
│ │ └── utils_suite_test.go
│ ├── vram/
│ │ ├── cache.go
│ │ ├── estimate.go
│ │ ├── estimate_test.go
│ │ ├── gguf_reader.go
│ │ ├── hf_estimate.go
│ │ ├── hf_estimate_test.go
│ │ ├── types.go
│ │ └── vram_suite_test.go
│ ├── xio/
│ │ └── copy.go
│ ├── xsync/
│ │ ├── map.go
│ │ ├── map_test.go
│ │ └── sync_suite_test.go
│ └── xsysinfo/
│ ├── cpu.go
│ ├── gpu.go
│ └── memory.go
├── prompt-templates/
│ ├── alpaca.tmpl
│ ├── getting_started.tmpl
│ ├── ggml-gpt4all-j.tmpl
│ ├── koala.tmpl
│ ├── llama2-chat-message.tmpl
│ ├── vicuna.tmpl
│ └── wizardlm.tmpl
├── renovate.json
├── scripts/
│ ├── build/
│ │ ├── golang-darwin.sh
│ │ ├── llama-cpp-darwin.sh
│ │ ├── package-gpu-libs.sh
│ │ └── python-darwin.sh
│ ├── changed-backends.js
│ ├── latest_hf.py
│ ├── model_gallery_info.py
│ └── prepare-libs.sh
├── swagger/
│ ├── docs.go
│ ├── swagger.json
│ └── swagger.yaml
├── tests/
│ ├── e2e/
│ │ ├── e2e_anthropic_test.go
│ │ ├── e2e_mcp_test.go
│ │ ├── e2e_suite_test.go
│ │ ├── e2e_websocket_responses_test.go
│ │ ├── mock_backend_test.go
│ │ ├── realtime_webrtc_test.go
│ │ └── realtime_ws_test.go
│ ├── e2e-aio/
│ │ ├── e2e_suite_test.go
│ │ ├── e2e_test.go
│ │ ├── models/
│ │ │ ├── embeddings.yaml
│ │ │ ├── image-gen.yaml
│ │ │ ├── rerank.yaml
│ │ │ ├── speech-to-text.yaml
│ │ │ ├── text-to-speech.yaml
│ │ │ ├── text-to-text.yaml
│ │ │ ├── vad.yaml
│ │ │ └── vision.yaml
│ │ └── sample_data_test.go
│ ├── e2e-ui/
│ │ ├── .gitignore
│ │ ├── Dockerfile
│ │ └── main.go
│ ├── fixtures/
│ │ ├── backend-image/
│ │ │ ├── Dockerfile
│ │ │ ├── run.sh
│ │ │ └── src/
│ │ │ └── .keep
│ │ └── gallery_simple.yaml
│ ├── integration/
│ │ ├── integration_suite_test.go
│ │ └── stores_test.go
│ └── models_fixtures/
│ ├── completion.tmpl
│ ├── config.yaml
│ ├── embeddings.yaml
│ ├── ggml-gpt4all-j.tmpl
│ ├── gpt4.yaml
│ ├── gpt4_2.yaml
│ ├── grpc.yaml
│ ├── rwkv.yaml
│ └── whisper.yaml
└── webui_static.yaml
================================================
FILE CONTENTS
================================================
================================================
FILE: .agents/adding-backends.md
================================================
# Adding a New Backend
When adding a new backend to LocalAI, you need to update several files to ensure the backend is properly built, tested, and registered. Here's a step-by-step guide based on the pattern used for adding backends like `moonshine`:
## 1. Create Backend Directory Structure
Create the backend directory under the appropriate location:
- **Python backends**: `backend/python/<backend-name>/`
- **Go backends**: `backend/go/<backend-name>/`
- **C++ backends**: `backend/cpp/<backend-name>/`
For Python backends, you'll typically need:
- `backend.py` - Main gRPC server implementation
- `Makefile` - Build configuration
- `install.sh` - Installation script for dependencies
- `protogen.sh` - Protocol buffer generation script
- `requirements.txt` - Python dependencies
- `run.sh` - Runtime script
- `test.py` / `test.sh` - Test files
## 2. Add Build Configurations to `.github/workflows/backend.yml`
Add build matrix entries for each platform/GPU type you want to support. Look at similar backends (e.g., `chatterbox`, `faster-whisper`) for reference.
**Placement in file:**
- CPU builds: Add after other CPU builds (e.g., after `cpu-chatterbox`)
- CUDA 12 builds: Add after other CUDA 12 builds (e.g., after `gpu-nvidia-cuda-12-chatterbox`)
- CUDA 13 builds: Add after other CUDA 13 builds (e.g., after `gpu-nvidia-cuda-13-chatterbox`)
**Additional build types you may need:**
- ROCm/HIP: Use `build-type: 'hipblas'` with `base-image: "rocm/dev-ubuntu-24.04:6.4.4"`
- Intel/SYCL: Use `build-type: 'intel'` or `build-type: 'sycl_f16'`/`sycl_f32` with `base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"`
- L4T (ARM): Use `build-type: 'l4t'` with `platforms: 'linux/arm64'` and `runs-on: 'ubuntu-24.04-arm'`
## 3. Add Backend Metadata to `backend/index.yaml`
**Step 3a: Add Meta Definition**
Add a YAML anchor definition in the `## metas` section (around line 2-300). Look for similar backends to use as a template such as `diffusers` or `chatterbox`
**Step 3b: Add Image Entries**
Add image entries at the end of the file, following the pattern of similar backends such as `diffusers` or `chatterbox`. Include both `latest` (production) and `master` (development) tags.
## 4. Update the Makefile
The Makefile needs to be updated in several places to support building and testing the new backend:
**Step 4a: Add to `.NOTPARALLEL`**
Add `backends/<backend-name>` to the `.NOTPARALLEL` line (around line 2) to prevent parallel execution conflicts:
```makefile
.NOTPARALLEL: ... backends/<backend-name>
```
**Step 4b: Add to `prepare-test-extra`**
Add the backend to the `prepare-test-extra` target (around line 312) to prepare it for testing:
```makefile
prepare-test-extra: protogen-python
...
$(MAKE) -C backend/python/<backend-name>
```
**Step 4c: Add to `test-extra`**
Add the backend to the `test-extra` target (around line 319) to run its tests:
```makefile
test-extra: prepare-test-extra
...
$(MAKE) -C backend/python/<backend-name> test
```
**Step 4d: Add Backend Definition**
Add a backend definition variable in the backend definitions section (around line 428-457). The format depends on the backend type:
**For Python backends with root context** (like `faster-whisper`, `coqui`):
```makefile
BACKEND_<BACKEND_NAME> = <backend-name>|python|.|false|true
```
**For Python backends with `./backend` context** (like `chatterbox`, `moonshine`):
```makefile
BACKEND_<BACKEND_NAME> = <backend-name>|python|./backend|false|true
```
**For Go backends**:
```makefile
BACKEND_<BACKEND_NAME> = <backend-name>|golang|.|false|true
```
**Step 4e: Generate Docker Build Target**
Add an eval call to generate the docker-build target (around line 480-501):
```makefile
$(eval $(call generate-docker-build-target,$(BACKEND_<BACKEND_NAME>)))
```
**Step 4f: Add to `docker-build-backends`**
Add `docker-build-<backend-name>` to the `docker-build-backends` target (around line 507):
```makefile
docker-build-backends: ... docker-build-<backend-name>
```
**Determining the Context:**
- If the backend is in `backend/python/<backend-name>/` and uses `./backend` as context in the workflow file, use `./backend` context
- If the backend is in `backend/python/<backend-name>/` but uses `.` as context in the workflow file, use `.` context
- Check similar backends to determine the correct context
## 5. Verification Checklist
After adding a new backend, verify:
- [ ] Backend directory structure is complete with all necessary files
- [ ] Build configurations added to `.github/workflows/backend.yml` for all desired platforms
- [ ] Meta definition added to `backend/index.yaml` in the `## metas` section
- [ ] Image entries added to `backend/index.yaml` for all build variants (latest + development)
- [ ] Tag suffixes match between workflow file and index.yaml
- [ ] Makefile updated with all 6 required changes (`.NOTPARALLEL`, `prepare-test-extra`, `test-extra`, backend definition, docker-build target eval, `docker-build-backends`)
- [ ] No YAML syntax errors (check with linter)
- [ ] No Makefile syntax errors (check with linter)
- [ ] Follows the same pattern as similar backends (e.g., if it's a transcription backend, follow `faster-whisper` pattern)
## 6. Example: Adding a Python Backend
For reference, when `moonshine` was added:
- **Files created**: `backend/python/moonshine/{backend.py, Makefile, install.sh, protogen.sh, requirements.txt, run.sh, test.py, test.sh}`
- **Workflow entries**: 3 build configurations (CPU, CUDA 12, CUDA 13)
- **Index entries**: 1 meta definition + 6 image entries (cpu, cuda12, cuda13 x latest/development)
- **Makefile updates**:
- Added to `.NOTPARALLEL` line
- Added to `prepare-test-extra` and `test-extra` targets
- Added `BACKEND_MOONSHINE = moonshine|python|./backend|false|true`
- Added eval for docker-build target generation
- Added `docker-build-moonshine` to `docker-build-backends`
================================================
FILE: .agents/api-endpoints-and-auth.md
================================================
# API Endpoints and Authentication
This guide covers how to add new API endpoints and properly integrate them with the auth/permissions system.
## Architecture overview
Authentication and authorization flow through three layers:
1. **Global auth middleware** (`core/http/auth/middleware.go` → `auth.Middleware`) — applied to every request in `core/http/app.go`. Handles session cookies, Bearer tokens, API keys, and legacy API keys. Populates `auth_user` and `auth_role` in the Echo context.
2. **Feature middleware** (`auth.RequireFeature`) — per-feature access control applied to route groups or individual routes. Checks if the authenticated user has the specific feature enabled.
3. **Admin middleware** (`auth.RequireAdmin`) — restricts endpoints to admin users only.
When auth is disabled (no auth DB, no legacy API keys), all middleware becomes pass-through (`auth.NoopMiddleware`).
## Adding a new API endpoint
### Step 1: Create the handler
Write the endpoint handler in the appropriate package under `core/http/endpoints/`. Follow existing patterns:
```go
// core/http/endpoints/localai/my_feature.go
func MyFeatureEndpoint(app *application.Application) echo.HandlerFunc {
return func(c echo.Context) error {
// Use auth.GetUser(c) to get the authenticated user (may be nil if auth is disabled)
user := auth.GetUser(c)
// Your logic here
return c.JSON(http.StatusOK, result)
}
}
```
### Step 2: Register routes
Add routes in the appropriate file under `core/http/routes/`. The file you use depends on the endpoint category:
| File | Category |
|------|----------|
| `routes/openai.go` | OpenAI-compatible API endpoints (`/v1/...`) |
| `routes/localai.go` | LocalAI-specific endpoints (`/api/...`, `/models/...`, `/backends/...`) |
| `routes/agents.go` | Agent pool endpoints (`/api/agents/...`) |
| `routes/auth.go` | Auth endpoints (`/api/auth/...`) |
| `routes/ui_api.go` | UI backend API endpoints |
### Step 3: Apply the right middleware
Choose the appropriate protection level:
#### No auth required (public)
Exempt paths bypass auth entirely. Add to `isExemptPath()` in `middleware.go` or use the `/api/auth/` prefix (always exempt). Use sparingly — most endpoints should require auth.
#### Standard auth (any authenticated user)
The global middleware already handles this. API paths (`/api/`, `/v1/`, etc.) automatically require authentication when auth is enabled. You don't need to add any extra middleware.
```go
router.GET("/v1/my-endpoint", myHandler) // auth enforced by global middleware
```
#### Admin only
Pass `adminMiddleware` to the route. This is set up in `app.go` and passed to `Register*Routes` functions:
```go
// In the Register function signature, accept the middleware:
func RegisterMyRoutes(router *echo.Echo, app *application.Application, adminMiddleware echo.MiddlewareFunc) {
router.POST("/models/apply", myHandler, adminMiddleware)
}
```
#### Feature-gated
For endpoints that should be toggleable per-user, use feature middleware. There are two approaches:
**Approach A: Route-level middleware** (preferred for groups of related endpoints)
```go
// In app.go, create the feature middleware:
myFeatureMw := auth.RequireFeature(application.AuthDB(), auth.FeatureMyFeature)
// Pass it to the route registration function:
routes.RegisterMyRoutes(e, app, myFeatureMw)
// In the routes file, apply to a group:
g := e.Group("/api/my-feature", myFeatureMw)
g.GET("", listHandler)
g.POST("", createHandler)
```
**Approach B: RouteFeatureRegistry** (preferred for individual OpenAI-compatible endpoints)
Add an entry to `RouteFeatureRegistry` in `core/http/auth/features.go`. The `RequireRouteFeature` global middleware will automatically enforce it:
```go
var RouteFeatureRegistry = []RouteFeature{
// ... existing entries ...
{"POST", "/v1/my-endpoint", FeatureMyFeature},
}
```
## Adding a new feature
When you need a new toggleable feature (not just a new endpoint under an existing feature):
### 1. Define the feature constant
Add to `core/http/auth/permissions.go`:
```go
const (
// Add to the appropriate group:
// Agent features (default OFF for new users)
FeatureMyFeature = "my_feature"
// OR API features (default ON for new users)
FeatureMyFeature = "my_feature"
)
```
Then add it to the appropriate slice:
```go
// Default OFF — user must be explicitly granted access:
var AgentFeatures = []string{..., FeatureMyFeature}
// Default ON — user has access unless explicitly revoked:
var APIFeatures = []string{..., FeatureMyFeature}
```
### 2. Add feature metadata
In `core/http/auth/features.go`, add to the appropriate `FeatureMetas` function so the admin UI can display it:
```go
func AgentFeatureMetas() []FeatureMeta {
return []FeatureMeta{
// ... existing ...
{FeatureMyFeature, "My Feature", false}, // false = default OFF
}
}
```
### 3. Wire up the middleware
In `core/http/app.go`:
```go
myFeatureMw := auth.RequireFeature(application.AuthDB(), auth.FeatureMyFeature)
```
Then pass it to the route registration function.
### 4. Register route-feature mappings (if applicable)
If your feature gates standard API endpoints (like `/v1/...`), add entries to `RouteFeatureRegistry` in `features.go` instead of using per-route middleware.
## Accessing the authenticated user in handlers
```go
import "github.com/mudler/LocalAI/core/http/auth"
func MyHandler(c echo.Context) error {
// Get the user (nil when auth is disabled or unauthenticated)
user := auth.GetUser(c)
if user == nil {
// Handle unauthenticated — or let middleware handle it
}
// Check role
if user.Role == auth.RoleAdmin {
// admin-specific logic
}
// Check feature access programmatically (when you need conditional behavior, not full blocking)
if auth.HasFeatureAccess(db, user, auth.FeatureMyFeature) {
// feature-specific logic
}
// Check model access
if !auth.IsModelAllowed(db, user, modelName) {
return c.JSON(http.StatusForbidden, ...)
}
}
```
## Middleware composition patterns
Middleware can be composed at different levels. Here are the patterns used in the codebase:
### Group-level middleware (agents pattern)
```go
// All routes in the group share the middleware
g := e.Group("/api/agents", poolReadyMw, agentsMw)
g.GET("", listHandler)
g.POST("", createHandler)
```
### Per-route middleware (localai pattern)
```go
// Individual routes get middleware as extra arguments
router.POST("/models/apply", applyHandler, adminMiddleware)
router.GET("/metrics", metricsHandler, adminMiddleware)
```
### Middleware slice (openai pattern)
```go
// Build a middleware chain for a handler
chatMiddleware := []echo.MiddlewareFunc{
usageMiddleware,
traceMiddleware,
modelFilterMiddleware,
}
app.POST("/v1/chat/completions", chatHandler, chatMiddleware...)
```
## Error response format
Always use `schema.ErrorResponse` for auth/permission errors to stay consistent with the OpenAI-compatible API:
```go
return c.JSON(http.StatusForbidden, schema.ErrorResponse{
Error: &schema.APIError{
Message: "feature not enabled for your account",
Code: http.StatusForbidden,
Type: "authorization_error",
},
})
```
Use these HTTP status codes:
- `401 Unauthorized` — no valid credentials provided
- `403 Forbidden` — authenticated but lacking permission
- `429 Too Many Requests` — rate limited (auth endpoints)
## Usage tracking
If your endpoint should be tracked for usage (token counts, request counts), add the `usageMiddleware` to its middleware chain. See `core/http/middleware/usage.go` and how it's applied in `routes/openai.go`.
## Path protection rules
The global auth middleware classifies paths as API paths or non-API paths:
- **API paths** (always require auth when auth is enabled): `/api/`, `/v1/`, `/models/`, `/backends/`, `/backend/`, `/tts`, `/vad`, `/video`, `/stores/`, `/system`, `/ws/`, `/metrics`
- **Exempt paths** (never require auth): `/api/auth/` prefix, anything in `appConfig.PathWithoutAuth`
- **Non-API paths** (UI, static assets): pass through without auth — the React UI handles login redirects client-side
If you add endpoints under a new top-level path prefix, add it to `isAPIPath()` in `middleware.go` to ensure it requires authentication.
## Checklist
When adding a new endpoint:
- [ ] Handler in `core/http/endpoints/`
- [ ] Route registered in appropriate `core/http/routes/` file
- [ ] Auth level chosen: public / standard / admin / feature-gated
- [ ] If feature-gated: constant in `permissions.go`, metadata in `features.go`, middleware in `app.go`
- [ ] If new path prefix: added to `isAPIPath()` in `middleware.go`
- [ ] If OpenAI-compatible: entry in `RouteFeatureRegistry`
- [ ] If token-counting: `usageMiddleware` added to middleware chain
- [ ] Error responses use `schema.ErrorResponse` format
- [ ] Tests cover both authenticated and unauthenticated access
================================================
FILE: .agents/building-and-testing.md
================================================
# Build and Testing
Building and testing the project depends on the components involved and the platform where development is taking place. Due to the amount of context required it's usually best not to try building or testing the project unless the user requests it. If you must build the project then inspect the Makefile in the project root and the Makefiles of any backends that are effected by changes you are making. In addition the workflows in .github/workflows can be used as a reference when it is unclear how to build or test a component. The primary Makefile contains targets for building inside or outside Docker, if the user has not previously specified a preference then ask which they would like to use.
## Building a specified backend
Let's say the user wants to build a particular backend for a given platform. For example let's say they want to build coqui for ROCM/hipblas
- The Makefile has targets like `docker-build-coqui` created with `generate-docker-build-target` at the time of writing. Recently added backends may require a new target.
- At a minimum we need to set the BUILD_TYPE, BASE_IMAGE build-args
- Use .github/workflows/backend.yml as a reference it lists the needed args in the `include` job strategy matrix
- l4t and cublas also requires the CUDA major and minor version
- You can pretty print a command like `DOCKER_MAKEFLAGS=-j$(nproc --ignore=1) BUILD_TYPE=hipblas BASE_IMAGE=rocm/dev-ubuntu-24.04:6.4.4 make docker-build-coqui`
- Unless the user specifies that they want you to run the command, then just print it because not all agent frontends handle long running jobs well and the output may overflow your context
- The user may say they want to build AMD or ROCM instead of hipblas, or Intel instead of SYCL or NVIDIA insted of l4t or cublas. Ask for confirmation if there is ambiguity.
- Sometimes the user may need extra parameters to be added to `docker build` (e.g. `--platform` for cross-platform builds or `--progress` to view the full logs), in which case you can generate the `docker build` command directly.
================================================
FILE: .agents/coding-style.md
================================================
# Coding Style
The project has the following .editorconfig:
```
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.go]
indent_style = tab
[Makefile]
indent_style = tab
[*.proto]
indent_size = 2
[*.py]
indent_size = 4
[*.js]
indent_size = 2
[*.yaml]
indent_size = 2
[*.md]
trim_trailing_whitespace = false
```
- Use comments sparingly to explain why code does something, not what it does. Comments are there to add context that would be difficult to deduce from reading the code.
- Prefer modern Go e.g. use `any` not `interface{}`
## Logging
Use `github.com/mudler/xlog` for logging which has the same API as slog.
## Documentation
The project documentation is located in `docs/content`. When adding new features or changing existing functionality, it is crucial to update the documentation to reflect these changes. This helps users understand how to use the new capabilities and ensures the documentation stays relevant.
- **Feature Documentation**: If you add a new feature (like a new backend or API endpoint), create a new markdown file in `docs/content/features/` explaining what it is, how to configure it, and how to use it.
- **Configuration**: If you modify configuration options, update the relevant sections in `docs/content/`.
- **Examples**: providing concrete examples (like YAML configuration blocks) is highly encouraged to help users get started quickly.
================================================
FILE: .agents/llama-cpp-backend.md
================================================
# llama.cpp Backend
The llama.cpp backend (`backend/cpp/llama-cpp/grpc-server.cpp`) is a gRPC adaptation of the upstream HTTP server (`llama.cpp/tools/server/server.cpp`). It uses the same underlying server infrastructure from `llama.cpp/tools/server/server-context.cpp`.
## Building and Testing
- Test llama.cpp backend compilation: `make backends/llama-cpp`
- The backend is built as part of the main build process
- Check `backend/cpp/llama-cpp/Makefile` for build configuration
## Architecture
- **grpc-server.cpp**: gRPC server implementation, adapts HTTP server patterns to gRPC
- Uses shared server infrastructure: `server-context.cpp`, `server-task.cpp`, `server-queue.cpp`, `server-common.cpp`
- The gRPC server mirrors the HTTP server's functionality but uses gRPC instead of HTTP
## Common Issues When Updating llama.cpp
When fixing compilation errors after upstream changes:
1. Check how `server.cpp` (HTTP server) handles the same change
2. Look for new public APIs or getter methods
3. Store copies of needed data instead of accessing private members
4. Update function calls to match new signatures
5. Test with `make backends/llama-cpp`
## Key Differences from HTTP Server
- gRPC uses `BackendServiceImpl` class with gRPC service methods
- HTTP server uses `server_routes` with HTTP handlers
- Both use the same `server_context` and task queue infrastructure
- gRPC methods: `LoadModel`, `Predict`, `PredictStream`, `Embedding`, `Rerank`, `TokenizeString`, `GetMetrics`, `Health`
## Tool Call Parsing Maintenance
When working on JSON/XML tool call parsing functionality, always check llama.cpp for reference implementation and updates:
### Checking for XML Parsing Changes
1. **Review XML Format Definitions**: Check `llama.cpp/common/chat-parser-xml-toolcall.h` for `xml_tool_call_format` struct changes
2. **Review Parsing Logic**: Check `llama.cpp/common/chat-parser-xml-toolcall.cpp` for parsing algorithm updates
3. **Review Format Presets**: Check `llama.cpp/common/chat-parser.cpp` for new XML format presets (search for `xml_tool_call_format form`)
4. **Review Model Lists**: Check `llama.cpp/common/chat.h` for `COMMON_CHAT_FORMAT_*` enum values that use XML parsing:
- `COMMON_CHAT_FORMAT_GLM_4_5`
- `COMMON_CHAT_FORMAT_MINIMAX_M2`
- `COMMON_CHAT_FORMAT_KIMI_K2`
- `COMMON_CHAT_FORMAT_QWEN3_CODER_XML`
- `COMMON_CHAT_FORMAT_APRIEL_1_5`
- `COMMON_CHAT_FORMAT_XIAOMI_MIMO`
- Any new formats added
### Model Configuration Options
Always check `llama.cpp` for new model configuration options that should be supported in LocalAI:
1. **Check Server Context**: Review `llama.cpp/tools/server/server-context.cpp` for new parameters
2. **Check Chat Params**: Review `llama.cpp/common/chat.h` for `common_chat_params` struct changes
3. **Check Server Options**: Review `llama.cpp/tools/server/server.cpp` for command-line argument changes
4. **Examples of options to check**:
- `ctx_shift` - Context shifting support
- `parallel_tool_calls` - Parallel tool calling
- `reasoning_format` - Reasoning format options
- Any new flags or parameters
### Implementation Guidelines
1. **Feature Parity**: Always aim for feature parity with llama.cpp's implementation
2. **Test Coverage**: Add tests for new features matching llama.cpp's behavior
3. **Documentation**: Update relevant documentation when adding new formats or options
4. **Backward Compatibility**: Ensure changes don't break existing functionality
### Files to Monitor
- `llama.cpp/common/chat-parser-xml-toolcall.h` - Format definitions
- `llama.cpp/common/chat-parser-xml-toolcall.cpp` - Parsing logic
- `llama.cpp/common/chat-parser.cpp` - Format presets and model-specific handlers
- `llama.cpp/common/chat.h` - Format enums and parameter structures
- `llama.cpp/tools/server/server-context.cpp` - Server configuration options
================================================
FILE: .agents/testing-mcp-apps.md
================================================
# Testing MCP Apps (Interactive Tool UIs)
MCP Apps is an extension to MCP where tools declare interactive HTML UIs via `_meta.ui.resourceUri`. When the LLM calls such a tool, the UI renders the app in a sandboxed iframe inline in the chat. The app communicates bidirectionally with the host via `postMessage` (JSON-RPC) and can call server tools, send messages, and update model context.
Spec: https://modelcontextprotocol.io/extensions/apps/overview
## Quick Start: Run a Test MCP App Server
The `@modelcontextprotocol/server-basic-react` npm package is a ready-to-use test server that exposes a `get-time` tool with an interactive React clock UI. It requires Node >= 20, so run it in Docker:
```bash
docker run -d --name mcp-app-test -p 3001:3001 node:22-slim \
sh -c 'npx -y @modelcontextprotocol/server-basic-react'
```
Wait ~10 seconds for it to start, then verify:
```bash
# Check it's running
docker logs mcp-app-test
# Expected: "MCP server listening on http://localhost:3001/mcp"
# Verify MCP protocol works
curl -s -X POST http://localhost:3001/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}'
# List tools — should show get-time with _meta.ui.resourceUri
curl -s -X POST http://localhost:3001/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
```
The `tools/list` response should contain:
```json
{
"name": "get-time",
"_meta": {
"ui": { "resourceUri": "ui://get-time/mcp-app.html" }
}
}
```
## Testing in LocalAI's UI
1. Make sure LocalAI is running (e.g. `http://localhost:8080`)
2. Build the React UI: `cd core/http/react-ui && npm install && npm run build`
3. Open the Chat page in your browser
4. Click **"Client MCP"** in the chat header
5. Add a new client MCP server:
- **URL**: `http://localhost:3001/mcp`
- **Use CORS proxy**: enabled (default) — required because the browser can't hit `localhost:3001` directly due to CORS; LocalAI's proxy at `/api/cors-proxy` handles it
6. The server should connect and discover the `get-time` tool
7. Select a model and send: **"What time is it?"**
8. The LLM should call the `get-time` tool
9. The tool result should render the interactive React clock app in an iframe as a standalone chat message (not inside the collapsed activity group)
## What to Verify
- [ ] Tool appears in the connected tools list (not filtered — `get-time` is callable by the LLM)
- [ ] The iframe renders as a standalone chat message with a puzzle-piece icon
- [ ] The app loads and is interactive (clock UI, buttons work)
- [ ] No "Reconnect to MCP server" overlay (connection is live)
- [ ] Console logs show bidirectional communication:
- `tools/call` messages from app to host (app calling server tools)
- `ui/message` notifications (app sending messages)
- [ ] After the app renders, the LLM continues and produces a text response with the time
- [ ] Non-UI tools continue to work normally (text-only results)
- [ ] Page reload shows the HTML statically with a reconnect overlay until you reconnect
## Console Log Patterns
Healthy bidirectional communication looks like:
```
Parsed message { jsonrpc: "2.0", id: N, result: {...} } // Bridge init
get-time result: { content: [...] } // Tool result received
Calling get-time tool... // App calls tool
Sending message { method: "tools/call", ... } // App -> host -> server
Parsed message { jsonrpc: "2.0", id: N, result: {...} } // Server response
Sending message text to Host: ... // App sends message
Sending message { method: "ui/message", ... } // Message notification
Message accepted // Host acknowledged
```
Benign warnings to ignore:
- `Source map error: ... about:srcdoc` — browser devtools can't find source maps for srcdoc iframes
- `Ignoring message from unknown source` — duplicate postMessage from iframe navigation
- `notifications/cancelled` — app cleaning up previous requests
## Architecture Notes
- **No server-side changes needed** — the MCP App protocol runs entirely in the browser
- `PostMessageTransport` wraps `window.postMessage` between host and `srcdoc` iframe
- `AppBridge` (from `@modelcontextprotocol/ext-apps`) auto-forwards `tools/call`, `resources/read`, `resources/list` from the app to the MCP server via the host's `Client`
- The iframe uses `sandbox="allow-scripts allow-forms"` (no `allow-same-origin`) — opaque origin, no access to host cookies/DOM/localStorage
- App-only tools (`_meta.ui.visibility: "app-only"`) are filtered from the LLM's tool list but remain callable by the app iframe
## Key Files
- `core/http/react-ui/src/components/MCPAppFrame.jsx` — iframe + AppBridge component
- `core/http/react-ui/src/hooks/useMCPClient.js` — MCP client hook with app UI helpers (`hasAppUI`, `getAppResource`, `getClientForTool`, `getToolDefinition`)
- `core/http/react-ui/src/hooks/useChat.js` — agentic loop, attaches `appUI` to tool_result messages
- `core/http/react-ui/src/pages/Chat.jsx` — renders MCPAppFrame as standalone chat messages
## Other Test Servers
The `@modelcontextprotocol/ext-apps` repo has many example servers:
- `@modelcontextprotocol/server-basic-react` — simple clock (React)
- More examples at https://github.com/modelcontextprotocol/ext-apps/tree/main/examples
All examples support both stdio and HTTP transport. Run without `--stdio` for HTTP mode on port 3001.
## Cleanup
```bash
docker rm -f mcp-app-test
```
================================================
FILE: .air.toml
================================================
# .air.toml
[build]
cmd = "make build"
bin = "./local-ai"
args_bin = [ "--debug" ]
include_ext = ["go", "html", "yaml", "toml", "json", "txt", "md"]
exclude_dir = ["pkg/grpc/proto"]
delay = 1000
================================================
FILE: .devcontainer/devcontainer.json
================================================
{
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.schema.json",
"name": "LocalAI",
"workspaceFolder": "/workspace",
"dockerComposeFile": [ "./docker-compose-devcontainer.yml" ],
"service": "api",
"shutdownAction": "stopCompose",
"customizations": {
"vscode": {
"extensions": [
"golang.go",
"ms-vscode.makefile-tools",
"ms-azuretools.vscode-docker",
"ms-python.python",
"ms-python.debugpy",
"wayou.vscode-todo-highlight",
"waderyan.gitblame"
]
}
},
"forwardPorts": [8080, 3000],
"postCreateCommand": "bash /.devcontainer-scripts/postcreate.sh",
"postStartCommand": "bash /.devcontainer-scripts/poststart.sh"
}
================================================
FILE: .devcontainer/docker-compose-devcontainer.yml
================================================
services:
api:
build:
context: ..
dockerfile: Dockerfile
target: devcontainer
env_file:
- ../.env
ports:
- 8080:8080
volumes:
- localai_workspace:/workspace
- models:/host-models
- backends:/host-backends
- ./customization:/devcontainer-customization
command: /bin/sh -c "while sleep 1000; do :; done"
cap_add:
- SYS_PTRACE
security_opt:
- seccomp:unconfined
prometheus:
image: prom/prometheus
container_name: prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
ports:
- 9090:9090
restart: unless-stopped
volumes:
- ./prometheus:/etc/prometheus
- prom_data:/prometheus
grafana:
image: grafana/grafana
container_name: grafana
ports:
- 3000:3000
restart: unless-stopped
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=grafana
volumes:
- ./grafana:/etc/grafana/provisioning/datasources
volumes:
prom_data:
localai_workspace:
models:
backends:
================================================
FILE: .devcontainer/grafana/datasource.yml
================================================
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: http://prometheus:9090
isDefault: true
access: proxy
editable: true
================================================
FILE: .devcontainer/prometheus/prometheus.yml
================================================
global:
scrape_interval: 15s
scrape_timeout: 10s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets: []
scheme: http
timeout: 10s
api_version: v1
scrape_configs:
- job_name: prometheus
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
static_configs:
- targets:
- localhost:9090
================================================
FILE: .devcontainer-scripts/postcreate.sh
================================================
#!/bin/bash
cd /workspace
# Get the files into the volume without a bind mount
if [ ! -d ".git" ]; then
git clone https://github.com/mudler/LocalAI.git .
else
git fetch
fi
echo "Standard Post-Create script completed."
if [ -f "/devcontainer-customization/postcreate.sh" ]; then
echo "Launching customization postcreate.sh"
bash "/devcontainer-customization/postcreate.sh"
fi
================================================
FILE: .devcontainer-scripts/poststart.sh
================================================
#!/bin/bash
cd /workspace
# Ensures generated source files are present upon load
make prepare
echo "Standard Post-Start script completed."
if [ -f "/devcontainer-customization/poststart.sh" ]; then
echo "Launching customization poststart.sh"
bash "/devcontainer-customization/poststart.sh"
fi
================================================
FILE: .devcontainer-scripts/utils.sh
================================================
#!/bin/bash
# This file contains some really simple functions that are useful when building up customization scripts.
# Checks if the git config has a user registered - and sets it up if not.
#
# Param 1: name
# Param 2: email
#
config_user() {
echo "Configuring git for $1 <$2>"
local gcn=$(git config --global user.name)
if [ -z "${gcn}" ]; then
echo "Setting up git user / remote"
git config --global user.name "$1"
git config --global user.email "$2"
fi
}
# Checks if the git remote is configured - and sets it up if not. Fetches either way.
#
# Param 1: remote name
# Param 2: remote url
#
config_remote() {
echo "Adding git remote and fetching $2 as $1"
local gr=$(git remote -v | grep $1)
if [ -z "${gr}" ]; then
git remote add $1 $2
fi
git fetch $1
}
# Setup special .ssh files
# Prints out lines of text to make things pretty
# Param 1: bash array, filenames relative to the customization directory that should be copied to ~/.ssh
setup_ssh() {
echo "starting ~/.ssh directory setup..."
mkdir -p "${HOME}.ssh"
chmod 0700 "${HOME}/.ssh"
echo "-----"
local files=("$@")
for file in "${files[@]}" ; do
local cfile="/devcontainer-customization/${file}"
local hfile="${HOME}/.ssh/${file}"
if [ ! -f "${hfile}" ]; then
echo "copying \"${file}\""
cp "${cfile}" "${hfile}"
chmod 600 "${hfile}"
fi
done
echo "~/.ssh directory setup complete!"
}
================================================
FILE: .dockerignore
================================================
.idea
.github
.vscode
.devcontainer
models
backends
examples/chatbot-ui/models
backend/go/image/stablediffusion-ggml/build/
backend/go/*/build
backend/go/*/.cache
backend/go/*/sources
backend/go/*/package
examples/rwkv/models
examples/**/models
Dockerfile*
__pycache__
# SonarQube
.scannerwork
# backend virtual environments
**/venv
backend/python/**/source
================================================
FILE: .editorconfig
================================================
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.go]
indent_style = tab
[Makefile]
indent_style = tab
[*.proto]
indent_size = 2
[*.py]
indent_size = 4
[*.js]
indent_size = 2
[*.yaml]
indent_size = 2
[*.md]
trim_trailing_whitespace = false
================================================
FILE: .gitattributes
================================================
*.sh text eol=lf
backend/cpp/llama/*.hpp linguist-vendored
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: [mudler]
custom:
- https://www.buymeacoffee.com/mudler
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug, unconfirmed, up-for-grabs
---
<!-- Thanks for helping us to improve LocalAI! We welcome all bug reports. Please fill out each area of the template so we can better help you. Comments like this will be hidden when you post but you can delete them if you wish. -->
**LocalAI version:**
<!-- Container Image or LocalAI tag/commit -->
**Environment, CPU architecture, OS, and Version:**
<!-- Provide the output from "uname -a", HW specs, if it's a VM -->
**Describe the bug**
<!-- A clear and concise description of what the bug is. -->
**To Reproduce**
<!-- Steps to reproduce the behavior, including the LocalAI command used, if any -->
**Expected behavior**
<!-- A clear and concise description of what you expected to happen. -->
**Logs**
<!-- If applicable, add logs while running LocalAI in debug mode (`--debug` or `DEBUG=true`) to help explain your problem. -->
**Additional context**
<!-- Add any other context about the problem here. -->
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Community Support
url: https://github.com/go-skynet/LocalAI/discussions
about: Please ask and answer questions here.
- name: Discord
url: https://discord.gg/uJAeKSAGDy
about: Join our community on Discord!
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement, up-for-grabs
---
<!-- Thanks for helping us to improve LocalAI! We welcome all feature requests. Please fill out each area of the template so we can better help you. Comments like this will be hidden when you post but you can delete them if you wish. -->
**Is your feature request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->
**Describe alternatives you've considered**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
**Additional context**
<!-- Add any other context or screenshots about the feature request here. -->
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
**Description**
This PR fixes #
**Notes for Reviewers**
**[Signed commits](../CONTRIBUTING.md#signing-off-on-commits-developer-certificate-of-origin)**
- [ ] Yes, I signed my commits.
<!--
Thank you for contributing to LocalAI!
Contributing Conventions
-------------------------
The draft above helps to give a quick overview of your PR.
Remember to remove this comment and to at least:
1. Include descriptive PR titles with [<component-name>] prepended. We use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/).
2. Build and test your changes before submitting a PR (`make build`).
3. Sign your commits
4. **Tag maintainer:** for a quicker response, tag the relevant maintainer (see below).
5. **X/Twitter handle:** we announce bigger features on X/Twitter. If your PR gets announced, and you'd like a mention, we'll gladly shout you out!
By following the community's contribution conventions upfront, the review process will
be accelerated and your PR merged more quickly.
If no one reviews your PR within a few days, please @-mention @mudler.
-->
================================================
FILE: .github/bump_deps.sh
================================================
#!/bin/bash
set -xe
REPO=$1
BRANCH=$2
VAR=$3
FILE=$4
if [ -z "$FILE" ]; then
FILE="Makefile"
fi
LAST_COMMIT=$(curl -s -H "Accept: application/vnd.github.VERSION.sha" "https://api.github.com/repos/$REPO/commits/$BRANCH")
# Read $VAR from Makefile (only first match)
set +e
CURRENT_COMMIT="$(grep -m1 "^$VAR?=" $FILE | cut -d'=' -f2)"
set -e
sed -i $FILE -e "s/$VAR?=.*/$VAR?=$LAST_COMMIT/"
if [ -z "$CURRENT_COMMIT" ]; then
echo "Could not find $VAR in Makefile."
exit 0
fi
echo "Changes: https://github.com/$REPO/compare/${CURRENT_COMMIT}..${LAST_COMMIT}" >> "${VAR}_message.txt"
echo "${LAST_COMMIT}" >> "${VAR}_commit.txt"
================================================
FILE: .github/bump_docs.sh
================================================
#!/bin/bash
set -xe
REPO=$1
LATEST_TAG=$(curl -s "https://api.github.com/repos/$REPO/releases/latest" | jq -r '.tag_name')
cat <<< $(jq ".version = \"$LATEST_TAG\"" docs/data/version.json) > docs/data/version.json
================================================
FILE: .github/check_and_update.py
================================================
import hashlib
from huggingface_hub import hf_hub_download, get_paths_info
import requests
import sys
import os
uri = sys.argv[1]
file_name = uri.split('/')[-1]
# Function to parse the URI and determine download method
def parse_uri(uri):
if uri.startswith('huggingface://'):
repo_id = uri.split('://')[1]
return 'huggingface', repo_id.rsplit('/', 1)[0]
elif 'huggingface.co' in uri:
parts = uri.split('/resolve/')
if len(parts) > 1:
repo_path = parts[0].split('https://huggingface.co/')[-1]
return 'huggingface', repo_path
return 'direct', uri
def calculate_sha256(file_path):
sha256_hash = hashlib.sha256()
with open(file_path, 'rb') as f:
for byte_block in iter(lambda: f.read(4096), b''):
sha256_hash.update(byte_block)
return sha256_hash.hexdigest()
def manual_safety_check_hf(repo_id):
scanResponse = requests.get('https://huggingface.co/api/models/' + repo_id + "/scan")
scan = scanResponse.json()
# Check if 'hasUnsafeFile' exists in the response
if 'hasUnsafeFile' in scan:
if scan['hasUnsafeFile']:
return scan
else:
return None
else:
return None
download_type, repo_id_or_url = parse_uri(uri)
new_checksum = None
file_path = None
# Decide download method based on URI type
if download_type == 'huggingface':
# Check if the repo is flagged as dangerous by HF
hazard = manual_safety_check_hf(repo_id_or_url)
if hazard != None:
print(f'Error: HuggingFace has detected security problems for {repo_id_or_url}: {str(hazard)}', filename=file_name)
sys.exit(5)
# Use HF API to pull sha
for file in get_paths_info(repo_id_or_url, [file_name], repo_type='model'):
try:
new_checksum = file.lfs.sha256
break
except Exception as e:
print(f'Error from Hugging Face Hub: {str(e)}', file=sys.stderr)
sys.exit(2)
if new_checksum is None:
try:
file_path = hf_hub_download(repo_id=repo_id_or_url, filename=file_name)
except Exception as e:
print(f'Error from Hugging Face Hub: {str(e)}', file=sys.stderr)
sys.exit(2)
else:
response = requests.get(repo_id_or_url)
if response.status_code == 200:
with open(file_name, 'wb') as f:
f.write(response.content)
file_path = file_name
elif response.status_code == 404:
print(f'File not found: {response.status_code}', file=sys.stderr)
sys.exit(2)
else:
print(f'Error downloading file: {response.status_code}', file=sys.stderr)
sys.exit(1)
if new_checksum is None:
new_checksum = calculate_sha256(file_path)
print(new_checksum)
os.remove(file_path)
else:
print(new_checksum)
================================================
FILE: .github/checksum_checker.sh
================================================
#!/bin/bash
# This scripts needs yq and huggingface_hub to be installed
# to install hugingface_hub run pip install huggingface_hub
# Path to the input YAML file
input_yaml=$1
# Function to download file and check checksum using Python
function check_and_update_checksum() {
model_name="$1"
file_name="$2"
uri="$3"
old_checksum="$4"
idx="$5"
# Download the file and calculate new checksum using Python
new_checksum=$(python3 ./.github/check_and_update.py $uri)
result=$?
if [[ $result -eq 5 ]]; then
echo "Contaminated entry detected, deleting entry for $model_name..."
yq eval -i "del([$idx])" "$input_yaml"
return
fi
if [[ "$new_checksum" == "" ]]; then
echo "Error calculating checksum for $file_name. Skipping..."
return
fi
echo "Checksum for $file_name: $new_checksum"
# Compare and update the YAML file if checksums do not match
if [[ $result -eq 2 ]]; then
echo "File not found, deleting entry for $file_name..."
# yq eval -i "del(.[$idx].files[] | select(.filename == \"$file_name\"))" "$input_yaml"
elif [[ "$old_checksum" != "$new_checksum" ]]; then
echo "Checksum mismatch for $file_name. Updating..."
yq eval -i "del(.[$idx].files[] | select(.filename == \"$file_name\").sha256)" "$input_yaml"
yq eval -i "(.[$idx].files[] | select(.filename == \"$file_name\")).sha256 = \"$new_checksum\"" "$input_yaml"
elif [[ $result -ne 0 ]]; then
echo "Error downloading file $file_name. Skipping..."
else
echo "Checksum match for $file_name. No update needed."
fi
}
# Read the YAML and process each file
len=$(yq eval '. | length' "$input_yaml")
for ((i=0; i<$len; i++))
do
name=$(yq eval ".[$i].name" "$input_yaml")
files_len=$(yq eval ".[$i].files | length" "$input_yaml")
for ((j=0; j<$files_len; j++))
do
filename=$(yq eval ".[$i].files[$j].filename" "$input_yaml")
uri=$(yq eval ".[$i].files[$j].uri" "$input_yaml")
checksum=$(yq eval ".[$i].files[$j].sha256" "$input_yaml")
echo "Checking model $name, file $filename. URI = $uri, Checksum = $checksum"
check_and_update_checksum "$name" "$filename" "$uri" "$checksum" "$i"
done
done
================================================
FILE: .github/ci/modelslist.go
================================================
package main
import (
"fmt"
"html/template"
"io/ioutil"
"os"
"github.com/microcosm-cc/bluemonday"
"gopkg.in/yaml.v3"
)
var modelPageTemplate string = `
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>LocalAI models</title>
<link href="https://cdnjs.cloudflare.com/ajax/libs/flowbite/2.3.0/flowbite.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload@19.1.3/dist/lazyload.min.js"></script>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.8.0/build/styles/default.min.css"
/>
<script
defer
src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.8.0/build/highlight.min.js"
></script>
<script
defer
src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"
></script>
<script
defer
src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"
></script>
<script
defer
src="https://cdn.jsdelivr.net/npm/dompurify@3.0.6/dist/purify.min.js"
></script>
<link href="/static/general.css" rel="stylesheet" />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Roboto:wght@400;500&display=swap" rel="stylesheet">
<link
href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,900&display=swap"
rel="stylesheet" />
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/tw-elements/css/tw-elements.min.css" />
<script src="https://cdn.tailwindcss.com/3.3.0"></script>
<script>
tailwind.config = {
darkMode: "class",
theme: {
fontFamily: {
sans: ["Roboto", "sans-serif"],
body: ["Roboto", "sans-serif"],
mono: ["ui-monospace", "monospace"],
},
},
corePlugins: {
preflight: false,
},
};
</script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css">
<script src="https://unpkg.com/htmx.org@1.9.12" integrity="sha384-ujb1lZYygJmzgSwoxRggbCHcjc0rB2XoQrxeTUQyRjrOnlCoYta87iKBWq3EsdM2" crossorigin="anonymous"></script>
</head>
<body class="bg-gray-900 text-gray-200">
<div class="flex flex-col min-h-screen">
<nav class="bg-gray-800 shadow-lg">
<div class="container mx-auto px-4 py-4">
<div class="flex items-center justify-between">
<div class="flex items-center">
<a href="/" class="text-white text-xl font-bold"><img src="https://github.com/mudler/LocalAI/assets/2420543/0966aa2a-166e-4f99-a3e5-6c915fc997dd" alt="LocalAI Logo" class="h-10 mr-3 border-2 border-gray-300 shadow rounded"></a>
<a href="/" class="text-white text-xl font-bold">LocalAI</a>
</div>
<!-- Menu button for small screens -->
<div class="lg:hidden">
<button id="menu-toggle" class="text-gray-400 hover:text-white focus:outline-none">
<i class="fas fa-bars fa-lg"></i>
</button>
</div>
<!-- Navigation links -->
<div class="hidden lg:flex lg:items-center lg:justify-end lg:flex-1 lg:w-0">
<a href="https://localai.io" class="text-gray-400 hover:text-white px-3 py-2 rounded" target="_blank" ><i class="fas fa-book-reader pr-2"></i> Documentation</a>
</div>
</div>
<!-- Collapsible menu for small screens -->
<div class="hidden lg:hidden" id="mobile-menu">
<div class="pt-4 pb-3 border-t border-gray-700">
<a href="https://localai.io" class="block text-gray-400 hover:text-white px-3 py-2 rounded mt-1" target="_blank" ><i class="fas fa-book-reader pr-2"></i> Documentation</a>
</div>
</div>
</div>
</nav>
<style>
.is-hidden {
display: none;
}
</style>
<div class="container mx-auto px-4 flex-grow">
<div class="models mt-12">
<h2 class="text-center text-3xl font-semibold text-gray-100">
LocalAI model gallery list </h2><br>
<h2 class="text-center text-3xl font-semibold text-gray-100">
🖼️ Available {{.AvailableModels}} models</i> <a href="https://localai.io/models/" target="_blank" >
<i class="fas fa-circle-info pr-2"></i>
</a></h2>
<h3>
Refer to the Model gallery <a href="https://localai.io/models/" target="_blank" ><i class="fas fa-circle-info pr-2"></i></a> for more information on how to use the models with LocalAI.<br>
You can install models with the CLI command <code>local-ai models install <model-name></code>. or by using the WebUI.
</h3>
<input class="form-control appearance-none block w-full mt-5 px-3 py-2 text-base font-normal text-gray-300 pb-2 mb-5 bg-gray-800 bg-clip-padding border border-solid border-gray-600 rounded transition ease-in-out m-0 focus:text-gray-300 focus:bg-gray-900 focus:border-blue-500 focus:outline-none" type="search"
id="searchbox" placeholder="Live search keyword..">
<div class="dark grid grid-cols-1 grid-rows-1 md:grid-cols-3 block rounded-lg shadow-secondary-1 dark:bg-surface-dark">
{{ range $_, $model := .Models }}
<div class="box me-4 mb-2 block rounded-lg bg-white shadow-secondary-1 dark:bg-gray-800 dark:bg-surface-dark dark:text-white text-surface pb-2">
<div>
{{ $icon := "https://upload.wikimedia.org/wikipedia/commons/6/65/No-Image-Placeholder.svg" }}
{{ if $model.Icon }}
{{ $icon = $model.Icon }}
{{ end }}
<div class="flex justify-center items-center">
<img data-src="{{ $icon }}" alt="{{$model.Name}}" class="rounded-t-lg max-h-48 max-w-96 object-cover mt-3 lazy">
</div>
<div class="p-6 text-surface dark:text-white">
<h5 class="mb-2 text-xl font-medium leading-tight">{{$model.Name}}</h5>
<p class="mb-4 text-base truncate">{{ $model.Description }}</p>
</div>
<div class="px-6 pt-4 pb-2">
<!-- Modal toggle -->
<button data-modal-target="{{ $model.Name}}-modal" data-modal-toggle="{{ $model.Name }}-modal" class="block text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800" type="button">
More info
</button>
<!-- Main modal -->
<div id="{{ $model.Name}}-modal" tabindex="-1" aria-hidden="true" class="hidden overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50 justify-center items-center w-full md:inset-0 h-[calc(100%-1rem)] max-h-full">
<div class="relative p-4 w-full max-w-2xl max-h-full">
<!-- Modal content -->
<div class="relative bg-white rounded-lg shadow dark:bg-gray-700">
<!-- Modal header -->
<div class="flex items-center justify-between p-4 md:p-5 border-b rounded-t dark:border-gray-600">
<h3 class="text-xl font-semibold text-gray-900 dark:text-white">
{{ $model.Name}}
</h3>
<button type="button" class="text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm w-8 h-8 ms-auto inline-flex justify-center items-center dark:hover:bg-gray-600 dark:hover:text-white" data-modal-hide="{{$model.Name}}-modal">
<svg class="w-3 h-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 14">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6"/>
</svg>
<span class="sr-only">Close modal</span>
</button>
</div>
<!-- Modal body -->
<div class="p-4 md:p-5 space-y-4">
<div class="flex justify-center items-center">
<img data-src="{{ $icon }}" alt="{{$model.Name}}" class="lazy rounded-t-lg max-h-48 max-w-96 object-cover mt-3">
</div>
<p class="text-base leading-relaxed text-gray-500 dark:text-gray-400">
{{ $model.Description }}
</p>
<p class="text-base leading-relaxed text-gray-500 dark:text-gray-400">
To install the model with the CLI, run: <br>
<code> local-ai models install {{$model.Name}} </code> <br>
<hr>
See also <a href="https://localai.io/models/" target="_blank" >
Installation <i class="fas fa-circle-info pr-2"></i>
</a> to see how to install models with the REST API.
</p>
<p class="text-base leading-relaxed text-gray-500 dark:text-gray-400">
<ul>
{{ range $_, $u := $model.URLs }}
<li><a href="{{ $u }}" target=_blank><i class="fa-solid fa-link"></i> {{ $u }}</a></li>
{{ end }}
</ul>
</p>
</div>
<!-- Modal footer -->
<div class="flex items-center p-4 md:p-5 border-t border-gray-200 rounded-b dark:border-gray-600">
<button data-modal-hide="{{ $model.Name}}-modal" type="button" class="py-2.5 px-5 ms-3 text-sm font-medium text-gray-900 focus:outline-none bg-white rounded-lg border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700">Close</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{{ end }}
</div>
</div>
</div>
<script>
var lazyLoadInstance = new LazyLoad({
// Your custom settings go here
});
let cards = document.querySelectorAll('.box')
function liveSearch() {
let search_query = document.getElementById("searchbox").value;
//Use innerText if all contents are visible
//Use textContent for including hidden elements
for (var i = 0; i < cards.length; i++) {
if(cards[i].textContent.toLowerCase()
.includes(search_query.toLowerCase())) {
cards[i].classList.remove("is-hidden");
} else {
cards[i].classList.add("is-hidden");
}
}
}
//A little delay
let typingTimer;
let typeInterval = 500;
let searchInput = document.getElementById('searchbox');
searchInput.addEventListener('keyup', () => {
clearTimeout(typingTimer);
typingTimer = setTimeout(liveSearch, typeInterval);
});
</script>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/flowbite/2.3.0/flowbite.min.js"></script>
</body>
</html>
`
type GalleryModel struct {
Name string `json:"name" yaml:"name"`
URLs []string `json:"urls" yaml:"urls"`
Icon string `json:"icon" yaml:"icon"`
Description string `json:"description" yaml:"description"`
}
func main() {
// read the YAML file which contains the models
f, err := ioutil.ReadFile(os.Args[1])
if err != nil {
fmt.Println("Error reading file:", err)
return
}
models := []*GalleryModel{}
err = yaml.Unmarshal(f, &models)
if err != nil {
// write to stderr
os.Stderr.WriteString("Error unmarshaling YAML: " + err.Error() + "\n")
return
}
// Ensure that all arbitrary text content is sanitized before display
for i, m := range models {
models[i].Name = bluemonday.StrictPolicy().Sanitize(m.Name)
models[i].Description = bluemonday.StrictPolicy().Sanitize(m.Description)
}
// render the template
data := struct {
Models []*GalleryModel
AvailableModels int
}{
Models: models,
AvailableModels: len(models),
}
tmpl := template.Must(template.New("modelPage").Parse(modelPageTemplate))
err = tmpl.Execute(os.Stdout, data)
if err != nil {
fmt.Println("Error executing template:", err)
return
}
}
================================================
FILE: .github/dependabot.yml
================================================
# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2
updates:
- package-ecosystem: "gitsubmodule"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "gomod"
directory: "/"
schedule:
interval: "weekly"
ignore:
- dependency-name: "github.com/mudler/LocalAI/pkg/grpc/proto"
- package-ecosystem: "github-actions"
# Workflow files stored in the default location of `.github/workflows`. (You don't need to specify `/.github/workflows` for `directory`. You can use `directory: "/"`.)
directory: "/"
schedule:
# Check for updates to GitHub Actions every weekday
interval: "weekly"
- package-ecosystem: "pip"
# Workflow files stored in the default location of `.github/workflows`. (You don't need to specify `/.github/workflows` for `directory`. You can use `directory: "/"`.)
directory: "/"
schedule:
# Check for updates to GitHub Actions every weekday
interval: "weekly"
- package-ecosystem: "docker"
# Workflow files stored in the default location of `.github/workflows`. (You don't need to specify `/.github/workflows` for `directory`. You can use `directory: "/"`.)
directory: "/"
schedule:
# Check for updates to GitHub Actions every weekday
interval: "weekly"
- package-ecosystem: "pip"
directory: "/backend/python/bark"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/backend/python/common/template"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/backend/python/coqui"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/backend/python/diffusers"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/backend/python/exllama"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/backend/python/exllama2"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/backend/python/mamba"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/backend/python/openvoice"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/backend/python/rerankers"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/backend/python/sentencetransformers"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/backend/python/transformers"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/backend/python/vllm"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/examples/chainlit"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/examples/functions"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/examples/langchain/langchainpy-localai-example"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/examples/langchain-chroma"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/examples/streamlit-bot"
schedule:
interval: "weekly"
- package-ecosystem: "docker"
directory: "/examples/k8sgpt"
schedule:
interval: "weekly"
- package-ecosystem: "docker"
directory: "/examples/kubernetes"
schedule:
interval: "weekly"
- package-ecosystem: "docker"
directory: "/examples/langchain"
schedule:
interval: "weekly"
- package-ecosystem: "gomod"
directory: "/examples/semantic-todo"
schedule:
interval: "weekly"
- package-ecosystem: "docker"
directory: "/examples/telegram-bot"
schedule:
interval: "weekly"
================================================
FILE: .github/gallery-agent/agent.go
================================================
package main
import (
"context"
"encoding/json"
"fmt"
"io"
"net/http"
"os"
"regexp"
"slices"
"strings"
"github.com/ghodss/yaml"
hfapi "github.com/mudler/LocalAI/pkg/huggingface-api"
"github.com/mudler/cogito"
"github.com/mudler/cogito/clients"
"github.com/mudler/cogito/structures"
"github.com/sashabaranov/go-openai/jsonschema"
)
var (
openAIModel = os.Getenv("OPENAI_MODEL")
openAIKey = os.Getenv("OPENAI_KEY")
openAIBaseURL = os.Getenv("OPENAI_BASE_URL")
galleryIndexPath = os.Getenv("GALLERY_INDEX_PATH")
//defaultclient
llm = clients.NewOpenAILLM(openAIModel, openAIKey, openAIBaseURL)
)
// cleanTextContent removes trailing spaces, tabs, and normalizes line endings
// to prevent YAML linting issues like trailing spaces and multiple empty lines
func cleanTextContent(text string) string {
lines := strings.Split(text, "\n")
var cleanedLines []string
var prevEmpty bool
for _, line := range lines {
// Remove all trailing whitespace (spaces, tabs, etc.)
trimmed := strings.TrimRight(line, " \t\r")
// Avoid multiple consecutive empty lines
if trimmed == "" {
if !prevEmpty {
cleanedLines = append(cleanedLines, "")
}
prevEmpty = true
} else {
cleanedLines = append(cleanedLines, trimmed)
prevEmpty = false
}
}
// Remove trailing empty lines from the result
result := strings.Join(cleanedLines, "\n")
return stripThinkingTags(strings.TrimRight(result, "\n"))
}
type galleryModel struct {
Name string `yaml:"name"`
Urls []string `yaml:"urls"`
}
// isModelExisting checks if a specific model ID exists in the gallery using text search
func isModelExisting(modelID string) (bool, error) {
indexPath := getGalleryIndexPath()
content, err := os.ReadFile(indexPath)
if err != nil {
return false, fmt.Errorf("failed to read %s: %w", indexPath, err)
}
var galleryModels []galleryModel
err = yaml.Unmarshal(content, &galleryModels)
if err != nil {
return false, fmt.Errorf("failed to unmarshal %s: %w", indexPath, err)
}
for _, galleryModel := range galleryModels {
if slices.Contains(galleryModel.Urls, modelID) {
return true, nil
}
}
return false, nil
}
// filterExistingModels removes models that already exist in the gallery
func filterExistingModels(models []ProcessedModel) ([]ProcessedModel, error) {
var filteredModels []ProcessedModel
for _, model := range models {
exists, err := isModelExisting(model.ModelID)
if err != nil {
fmt.Printf("Error checking if model %s exists: %v, skipping\n", model.ModelID, err)
continue
}
if !exists {
filteredModels = append(filteredModels, model)
} else {
fmt.Printf("Skipping existing model: %s\n", model.ModelID)
}
}
fmt.Printf("Filtered out %d existing models, %d new models remaining\n",
len(models)-len(filteredModels), len(filteredModels))
return filteredModels, nil
}
// getGalleryIndexPath returns the gallery index file path, with a default fallback
func getGalleryIndexPath() string {
if galleryIndexPath != "" {
return galleryIndexPath
}
return "gallery/index.yaml"
}
func stripThinkingTags(content string) string {
// Remove content between <thinking> and </thinking> (including multi-line)
content = regexp.MustCompile(`(?s)<thinking>.*?</thinking>`).ReplaceAllString(content, "")
// Remove content between <think> and </think> (including multi-line)
content = regexp.MustCompile(`(?s)<think>.*?</think>`).ReplaceAllString(content, "")
// Clean up any extra whitespace
content = strings.TrimSpace(content)
return content
}
func getRealReadme(ctx context.Context, repository string) (string, error) {
// Create a conversation fragment
fragment := cogito.NewEmptyFragment().
AddMessage("user",
`Your task is to get a clear description of a large language model from huggingface by using the provided tool. I will share with you a repository that might be quantized, and as such probably not by the original model author. We need to get the real description of the model, and not the one that might be quantized. You will have to call the tool to get the readme more than once by figuring out from the quantized readme which is the base model readme. This is the repository: `+repository)
// Execute with tools
result, err := cogito.ExecuteTools(llm, fragment,
cogito.WithIterations(3),
cogito.WithMaxAttempts(3),
cogito.WithTools(&HFReadmeTool{client: hfapi.NewClient()}))
if err != nil {
return "", err
}
result = result.AddMessage("user", "Describe the model in a clear and concise way that can be shared in a model gallery.")
// Get a response
_, err = llm.Ask(ctx, result)
if err != nil {
return "", err
}
content := result.LastMessage().Content
return cleanTextContent(content), nil
}
func selectMostInterestingModels(ctx context.Context, searchResult *SearchResult) ([]ProcessedModel, error) {
if len(searchResult.Models) == 1 {
return searchResult.Models, nil
}
// Create a conversation fragment
fragment := cogito.NewEmptyFragment().
AddMessage("user",
`Your task is to analyze a list of AI models and select the most interesting ones for a model gallery. You will be given detailed information about multiple models including their metadata, file information, and README content.
Consider the following criteria when selecting models:
1. Model popularity (download count)
2. Model recency (last modified date)
3. Model completeness (has preferred model file, README, etc.)
4. Model uniqueness (not duplicates or very similar models)
5. Model quality (based on README content and description)
6. Model utility (practical applications)
You should select models that would be most valuable for users browsing a model gallery. Prioritize models that are:
- Well-documented with clear READMEs
- Recently updated
- Popular (high download count)
- Have the preferred quantization format available
- Offer unique capabilities or are from reputable authors
Return your analysis and selection reasoning.`)
// Add the search results as context
modelsInfo := fmt.Sprintf("Found %d models matching '%s' with quantization preference '%s':\n\n",
searchResult.TotalModelsFound, searchResult.SearchTerm, searchResult.Quantization)
for i, model := range searchResult.Models {
modelsInfo += fmt.Sprintf("Model %d:\n", i+1)
modelsInfo += fmt.Sprintf(" ID: %s\n", model.ModelID)
modelsInfo += fmt.Sprintf(" Author: %s\n", model.Author)
modelsInfo += fmt.Sprintf(" Downloads: %d\n", model.Downloads)
modelsInfo += fmt.Sprintf(" Last Modified: %s\n", model.LastModified)
modelsInfo += fmt.Sprintf(" Files: %d files\n", len(model.Files))
if model.PreferredModelFile != nil {
modelsInfo += fmt.Sprintf(" Preferred Model File: %s (%d bytes)\n",
model.PreferredModelFile.Path, model.PreferredModelFile.Size)
} else {
modelsInfo += " No preferred model file found\n"
}
if model.ReadmeContent != "" {
modelsInfo += fmt.Sprintf(" README: %s\n", model.ReadmeContent)
}
if model.ProcessingError != "" {
modelsInfo += fmt.Sprintf(" Processing Error: %s\n", model.ProcessingError)
}
modelsInfo += "\n"
}
fragment = fragment.AddMessage("user", modelsInfo)
fragment = fragment.AddMessage("user", "Based on your analysis, select the top 5 most interesting models and provide a brief explanation for each selection. Also, create a filtered SearchResult with only the selected models. Return just a list of repositories IDs, you will later be asked to output it as a JSON array with the json tool.")
// Get a response
newFragment, err := llm.Ask(ctx, fragment)
if err != nil {
return nil, err
}
fmt.Println(newFragment.LastMessage().Content)
repositories := struct {
Repositories []string `json:"repositories"`
}{}
s := structures.Structure{
Schema: jsonschema.Definition{
Type: jsonschema.Object,
AdditionalProperties: false,
Properties: map[string]jsonschema.Definition{
"repositories": {
Type: jsonschema.Array,
Items: &jsonschema.Definition{Type: jsonschema.String},
Description: "The trending repositories IDs",
},
},
Required: []string{"repositories"},
},
Object: &repositories,
}
err = newFragment.ExtractStructure(ctx, llm, s)
if err != nil {
return nil, err
}
filteredModels := []ProcessedModel{}
for _, m := range searchResult.Models {
if slices.Contains(repositories.Repositories, m.ModelID) {
filteredModels = append(filteredModels, m)
}
}
return filteredModels, nil
}
// ModelMetadata represents extracted metadata from a model
type ModelMetadata struct {
Tags []string `json:"tags"`
License string `json:"license"`
}
// extractModelMetadata extracts tags and license from model README and documentation
func extractModelMetadata(ctx context.Context, model ProcessedModel) ([]string, string, error) {
// Create a conversation fragment
fragment := cogito.NewEmptyFragment().
AddMessage("user",
`Your task is to extract metadata from an AI model's README and documentation. You will be provided with:
1. Model information (ID, author, description)
2. README content
You need to extract:
1. **Tags**: An array of relevant tags that describe the model. Use common tags from the gallery such as:
- llm, gguf, gpu, cpu, multimodal, image-to-text, text-to-text, text-to-speech, tts
- thinking, reasoning, chat, instruction-tuned, code, vision
- Model family names (e.g., llama, qwen, mistral, gemma) if applicable
- Any other relevant descriptive tags
Select 3-8 most relevant tags.
2. **License**: The license identifier (e.g., "apache-2.0", "mit", "llama2", "gpl-3.0", "bsd", "cc-by-4.0").
If no license is found, return an empty string.
Return the extracted metadata in a structured format.`)
// Add model information
modelInfo := "Model Information:\n"
modelInfo += fmt.Sprintf(" ID: %s\n", model.ModelID)
modelInfo += fmt.Sprintf(" Author: %s\n", model.Author)
modelInfo += fmt.Sprintf(" Downloads: %d\n", model.Downloads)
if model.ReadmeContent != "" {
modelInfo += fmt.Sprintf(" README Content:\n%s\n", model.ReadmeContent)
} else if model.ReadmeContentPreview != "" {
modelInfo += fmt.Sprintf(" README Preview: %s\n", model.ReadmeContentPreview)
}
fragment = fragment.AddMessage("user", modelInfo)
fragment = fragment.AddMessage("user", "Extract the tags and license from the model information. Return the metadata as a JSON object with 'tags' (array of strings) and 'license' (string).")
// Get a response
newFragment, err := llm.Ask(ctx, fragment)
if err != nil {
return nil, "", err
}
// Extract structured metadata
metadata := ModelMetadata{}
s := structures.Structure{
Schema: jsonschema.Definition{
Type: jsonschema.Object,
AdditionalProperties: false,
Properties: map[string]jsonschema.Definition{
"tags": {
Type: jsonschema.Array,
Items: &jsonschema.Definition{Type: jsonschema.String},
Description: "Array of relevant tags describing the model",
},
"license": {
Type: jsonschema.String,
Description: "License identifier (e.g., apache-2.0, mit, llama2). Empty string if not found.",
},
},
Required: []string{"tags", "license"},
},
Object: &metadata,
}
err = newFragment.ExtractStructure(ctx, llm, s)
if err != nil {
return nil, "", err
}
return metadata.Tags, metadata.License, nil
}
// extractIconFromReadme scans the README content for image URLs and returns the first suitable icon URL found
func extractIconFromReadme(readmeContent string) string {
if readmeContent == "" {
return ""
}
// Regular expressions to match image URLs in various formats (case-insensitive)
// Match markdown image syntax:  - case insensitive extensions
markdownImageRegex := regexp.MustCompile(`(?i)!\[[^\]]*\]\(([^)]+\.(png|jpg|jpeg|svg|webp|gif))\)`)
// Match HTML img tags: <img src="url">
htmlImageRegex := regexp.MustCompile(`(?i)<img[^>]+src=["']([^"']+\.(png|jpg|jpeg|svg|webp|gif))["']`)
// Match plain URLs ending with image extensions
plainImageRegex := regexp.MustCompile(`(?i)https?://[^\s<>"']+\.(png|jpg|jpeg|svg|webp|gif)`)
// Try markdown format first
matches := markdownImageRegex.FindStringSubmatch(readmeContent)
if len(matches) > 1 && matches[1] != "" {
url := strings.TrimSpace(matches[1])
// Prefer HuggingFace CDN URLs or absolute URLs
if strings.HasPrefix(strings.ToLower(url), "http") {
return url
}
}
// Try HTML img tags
matches = htmlImageRegex.FindStringSubmatch(readmeContent)
if len(matches) > 1 && matches[1] != "" {
url := strings.TrimSpace(matches[1])
if strings.HasPrefix(strings.ToLower(url), "http") {
return url
}
}
// Try plain URLs
matches = plainImageRegex.FindStringSubmatch(readmeContent)
if len(matches) > 0 {
url := strings.TrimSpace(matches[0])
if strings.HasPrefix(strings.ToLower(url), "http") {
return url
}
}
return ""
}
// getHuggingFaceAvatarURL attempts to get the HuggingFace avatar URL for a user
func getHuggingFaceAvatarURL(author string) string {
if author == "" {
return ""
}
// Try to fetch user info from HuggingFace API
// HuggingFace API endpoint: https://huggingface.co/api/users/{username}
baseURL := "https://huggingface.co"
userURL := fmt.Sprintf("%s/api/users/%s", baseURL, author)
req, err := http.NewRequest("GET", userURL, nil)
if err != nil {
return ""
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return ""
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return ""
}
// Parse the response to get avatar URL
var userInfo map[string]interface{}
body, err := io.ReadAll(resp.Body)
if err != nil {
return ""
}
if err := json.Unmarshal(body, &userInfo); err != nil {
return ""
}
// Try to extract avatar URL from response
if avatar, ok := userInfo["avatarUrl"].(string); ok && avatar != "" {
return avatar
}
if avatar, ok := userInfo["avatar"].(string); ok && avatar != "" {
return avatar
}
return ""
}
// extractModelIcon extracts icon URL from README or falls back to HuggingFace avatar
func extractModelIcon(model ProcessedModel) string {
// First, try to extract icon from README
if icon := extractIconFromReadme(model.ReadmeContent); icon != "" {
return icon
}
// Fallback: Try to get HuggingFace user avatar
if model.Author != "" {
if avatar := getHuggingFaceAvatarURL(model.Author); avatar != "" {
return avatar
}
}
return ""
}
================================================
FILE: .github/gallery-agent/gallery.go
================================================
package main
import (
"context"
"encoding/json"
"fmt"
"os"
"strings"
"github.com/ghodss/yaml"
"github.com/mudler/LocalAI/core/gallery/importers"
)
func formatTextContent(text string) string {
return formatTextContentWithIndent(text, 4, 6)
}
// formatTextContentWithIndent formats text content with specified base and list item indentation
func formatTextContentWithIndent(text string, baseIndent int, listItemIndent int) string {
var formattedLines []string
lines := strings.Split(text, "\n")
for _, line := range lines {
trimmed := strings.TrimRight(line, " \t\r")
if trimmed == "" {
// Keep empty lines as empty (no indentation)
formattedLines = append(formattedLines, "")
} else {
// Preserve relative indentation from yaml.Marshal output
// Count existing leading spaces to preserve relative structure
leadingSpaces := len(trimmed) - len(strings.TrimLeft(trimmed, " \t"))
trimmedStripped := strings.TrimLeft(trimmed, " \t")
var totalIndent int
if strings.HasPrefix(trimmedStripped, "-") {
// List items: use listItemIndent (ignore existing leading spaces)
totalIndent = listItemIndent
} else {
// Regular lines: use baseIndent + preserve relative indentation
// This handles both top-level keys (leadingSpaces=0) and nested properties (leadingSpaces>0)
totalIndent = baseIndent + leadingSpaces
}
indentStr := strings.Repeat(" ", totalIndent)
formattedLines = append(formattedLines, indentStr+trimmedStripped)
}
}
formattedText := strings.Join(formattedLines, "\n")
// Remove any trailing spaces from the formatted description
formattedText = strings.TrimRight(formattedText, " \t")
return formattedText
}
// generateYAMLEntry generates a YAML entry for a model using the specified anchor
func generateYAMLEntry(model ProcessedModel, quantization string) string {
modelConfig, err := importers.DiscoverModelConfig("https://huggingface.co/"+model.ModelID, json.RawMessage(`{ "quantization": "`+quantization+`"}`))
if err != nil {
panic(err)
}
// Extract model name from ModelID
parts := strings.Split(model.ModelID, "/")
modelName := model.ModelID
if len(parts) > 0 {
modelName = strings.ToLower(parts[len(parts)-1])
}
// Remove common suffixes
modelName = strings.ReplaceAll(modelName, "-gguf", "")
modelName = strings.ReplaceAll(modelName, "-q4_k_m", "")
modelName = strings.ReplaceAll(modelName, "-q4_k_s", "")
modelName = strings.ReplaceAll(modelName, "-q3_k_m", "")
modelName = strings.ReplaceAll(modelName, "-q2_k", "")
description := model.ReadmeContent
if description == "" {
description = fmt.Sprintf("AI model: %s", modelName)
}
// Clean up description to prevent YAML linting issues
description = cleanTextContent(description)
formattedDescription := formatTextContent(description)
configFile := formatTextContent(modelConfig.ConfigFile)
filesYAML, _ := yaml.Marshal(modelConfig.Files)
// Files section: list items need 4 spaces (not 6), since files: is at 2 spaces
files := formatTextContentWithIndent(string(filesYAML), 4, 4)
// Build metadata sections
var metadataSections []string
// Add license if present
if model.License != "" {
metadataSections = append(metadataSections, fmt.Sprintf(` license: "%s"`, model.License))
}
// Add tags if present
if len(model.Tags) > 0 {
tagsYAML, _ := yaml.Marshal(model.Tags)
tagsFormatted := formatTextContentWithIndent(string(tagsYAML), 4, 4)
tagsFormatted = strings.TrimRight(tagsFormatted, "\n")
metadataSections = append(metadataSections, fmt.Sprintf(" tags:\n%s", tagsFormatted))
}
// Add icon if present
if model.Icon != "" {
metadataSections = append(metadataSections, fmt.Sprintf(` icon: %s`, model.Icon))
}
// Build the metadata block
metadataBlock := ""
if len(metadataSections) > 0 {
metadataBlock = strings.Join(metadataSections, "\n") + "\n"
}
yamlTemplate := ""
yamlTemplate = `- name: "%s"
url: "github:mudler/LocalAI/gallery/virtual.yaml@master"
urls:
- https://huggingface.co/%s
description: |
%s%s
overrides:
%s
files:
%s`
// Trim trailing newlines from formatted sections to prevent extra blank lines
formattedDescription = strings.TrimRight(formattedDescription, "\n")
configFile = strings.TrimRight(configFile, "\n")
files = strings.TrimRight(files, "\n")
// Add newline before metadata block if present
if metadataBlock != "" {
metadataBlock = "\n" + strings.TrimRight(metadataBlock, "\n")
}
return fmt.Sprintf(yamlTemplate,
modelName,
model.ModelID,
formattedDescription,
metadataBlock,
configFile,
files,
)
}
// generateYAMLForModels generates YAML entries for selected models and appends to index.yaml
func generateYAMLForModels(ctx context.Context, models []ProcessedModel, quantization string) error {
// Generate YAML entries for each model
var yamlEntries []string
for _, model := range models {
fmt.Printf("Generating YAML entry for model: %s\n", model.ModelID)
// Generate YAML entry
yamlEntry := generateYAMLEntry(model, quantization)
yamlEntries = append(yamlEntries, yamlEntry)
}
// Prepend to index.yaml (write at the top)
if len(yamlEntries) > 0 {
indexPath := getGalleryIndexPath()
fmt.Printf("Prepending YAML entries to %s...\n", indexPath)
// Read current content
content, err := os.ReadFile(indexPath)
if err != nil {
return fmt.Errorf("failed to read %s: %w", indexPath, err)
}
existingContent := string(content)
yamlBlock := strings.Join(yamlEntries, "\n")
// Check if file starts with "---"
var newContent string
if strings.HasPrefix(existingContent, "---\n") {
// File starts with "---", prepend new entries after it
restOfContent := strings.TrimPrefix(existingContent, "---\n")
// Ensure proper spacing: "---\n" + new entries + "\n" + rest of content
newContent = "---\n" + yamlBlock + "\n" + restOfContent
} else if strings.HasPrefix(existingContent, "---") {
// File starts with "---" but no newline after
restOfContent := strings.TrimPrefix(existingContent, "---")
newContent = "---\n" + yamlBlock + "\n" + strings.TrimPrefix(restOfContent, "\n")
} else {
// No "---" at start, prepend new entries at the very beginning
// Trim leading whitespace from existing content
existingContent = strings.TrimLeft(existingContent, " \t\n\r")
newContent = yamlBlock + "\n" + existingContent
}
// Write back to file
err = os.WriteFile(indexPath, []byte(newContent), 0644)
if err != nil {
return fmt.Errorf("failed to write %s: %w", indexPath, err)
}
fmt.Printf("Successfully prepended %d models to %s\n", len(yamlEntries), indexPath)
}
return nil
}
================================================
FILE: .github/gallery-agent/main.go
================================================
package main
import (
"context"
"encoding/json"
"fmt"
"os"
"strconv"
"strings"
"time"
hfapi "github.com/mudler/LocalAI/pkg/huggingface-api"
)
// ProcessedModelFile represents a processed model file with additional metadata
type ProcessedModelFile struct {
Path string `json:"path"`
Size int64 `json:"size"`
SHA256 string `json:"sha256"`
IsReadme bool `json:"is_readme"`
FileType string `json:"file_type"` // "model", "readme", "other"
}
// ProcessedModel represents a processed model with all gathered metadata
type ProcessedModel struct {
ModelID string `json:"model_id"`
Author string `json:"author"`
Downloads int `json:"downloads"`
LastModified string `json:"last_modified"`
Files []ProcessedModelFile `json:"files"`
PreferredModelFile *ProcessedModelFile `json:"preferred_model_file,omitempty"`
ReadmeFile *ProcessedModelFile `json:"readme_file,omitempty"`
ReadmeContent string `json:"readme_content,omitempty"`
ReadmeContentPreview string `json:"readme_content_preview,omitempty"`
QuantizationPreferences []string `json:"quantization_preferences"`
ProcessingError string `json:"processing_error,omitempty"`
Tags []string `json:"tags,omitempty"`
License string `json:"license,omitempty"`
Icon string `json:"icon,omitempty"`
}
// SearchResult represents the complete result of searching and processing models
type SearchResult struct {
SearchTerm string `json:"search_term"`
Limit int `json:"limit"`
Quantization string `json:"quantization"`
TotalModelsFound int `json:"total_models_found"`
Models []ProcessedModel `json:"models"`
FormattedOutput string `json:"formatted_output"`
}
// AddedModelSummary represents a summary of models added to the gallery
type AddedModelSummary struct {
SearchTerm string `json:"search_term"`
TotalFound int `json:"total_found"`
ModelsAdded int `json:"models_added"`
AddedModelIDs []string `json:"added_model_ids"`
AddedModelURLs []string `json:"added_model_urls"`
Quantization string `json:"quantization"`
ProcessingTime string `json:"processing_time"`
}
func main() {
startTime := time.Now()
// Check for synthetic mode
syntheticMode := os.Getenv("SYNTHETIC_MODE")
if syntheticMode == "true" || syntheticMode == "1" {
fmt.Println("Running in SYNTHETIC MODE - generating random test data")
err := runSyntheticMode()
if err != nil {
fmt.Fprintf(os.Stderr, "Error in synthetic mode: %v\n", err)
os.Exit(1)
}
return
}
// Get configuration from environment variables
searchTerm := os.Getenv("SEARCH_TERM")
if searchTerm == "" {
searchTerm = "GGUF"
}
limitStr := os.Getenv("LIMIT")
if limitStr == "" {
limitStr = "5"
}
limit, err := strconv.Atoi(limitStr)
if err != nil {
fmt.Fprintf(os.Stderr, "Error parsing LIMIT: %v\n", err)
os.Exit(1)
}
quantization := os.Getenv("QUANTIZATION")
maxModels := os.Getenv("MAX_MODELS")
if maxModels == "" {
maxModels = "1"
}
maxModelsInt, err := strconv.Atoi(maxModels)
if err != nil {
fmt.Fprintf(os.Stderr, "Error parsing MAX_MODELS: %v\n", err)
os.Exit(1)
}
// Print configuration
fmt.Printf("Gallery Agent Configuration:\n")
fmt.Printf(" Search Term: %s\n", searchTerm)
fmt.Printf(" Limit: %d\n", limit)
fmt.Printf(" Quantization: %s\n", quantization)
fmt.Printf(" Max Models to Add: %d\n", maxModelsInt)
fmt.Printf(" Gallery Index Path: %s\n", os.Getenv("GALLERY_INDEX_PATH"))
fmt.Println()
result, err := searchAndProcessModels(searchTerm, limit, quantization)
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %v\n", err)
os.Exit(1)
}
fmt.Println(result.FormattedOutput)
var models []ProcessedModel
if len(result.Models) > 1 {
fmt.Println("More than one model found (", len(result.Models), "), using AI agent to select the most interesting models")
for _, model := range result.Models {
fmt.Println("Model: ", model.ModelID)
}
// Use AI agent to select the most interesting models
fmt.Println("Using AI agent to select the most interesting models...")
models, err = selectMostInterestingModels(context.Background(), result)
if err != nil {
fmt.Fprintf(os.Stderr, "Error in model selection: %v\n", err)
// Continue with original result if selection fails
models = result.Models
}
} else if len(result.Models) == 1 {
models = result.Models
fmt.Println("Only one model found, using it directly")
}
fmt.Print(models)
// Filter out models that already exist in the gallery
fmt.Println("Filtering out existing models...")
models, err = filterExistingModels(models)
if err != nil {
fmt.Fprintf(os.Stderr, "Error filtering existing models: %v\n", err)
os.Exit(1)
}
// Limit to maxModelsInt after filtering
if len(models) > maxModelsInt {
models = models[:maxModelsInt]
}
// Track added models for summary
var addedModelIDs []string
var addedModelURLs []string
// Generate YAML entries and append to gallery/index.yaml
if len(models) > 0 {
for _, model := range models {
addedModelIDs = append(addedModelIDs, model.ModelID)
// Generate Hugging Face URL for the model
modelURL := fmt.Sprintf("https://huggingface.co/%s", model.ModelID)
addedModelURLs = append(addedModelURLs, modelURL)
}
fmt.Println("Generating YAML entries for selected models...")
err = generateYAMLForModels(context.Background(), models, quantization)
if err != nil {
fmt.Fprintf(os.Stderr, "Error generating YAML entries: %v\n", err)
os.Exit(1)
}
} else {
fmt.Println("No new models to add to the gallery.")
}
// Create and write summary
processingTime := time.Since(startTime).String()
summary := AddedModelSummary{
SearchTerm: searchTerm,
TotalFound: result.TotalModelsFound,
ModelsAdded: len(addedModelIDs),
AddedModelIDs: addedModelIDs,
AddedModelURLs: addedModelURLs,
Quantization: quantization,
ProcessingTime: processingTime,
}
// Write summary to file
summaryData, err := json.MarshalIndent(summary, "", " ")
if err != nil {
fmt.Fprintf(os.Stderr, "Error marshaling summary: %v\n", err)
} else {
err = os.WriteFile("gallery-agent-summary.json", summaryData, 0644)
if err != nil {
fmt.Fprintf(os.Stderr, "Error writing summary file: %v\n", err)
} else {
fmt.Printf("Summary written to gallery-agent-summary.json\n")
}
}
}
func searchAndProcessModels(searchTerm string, limit int, quantization string) (*SearchResult, error) {
client := hfapi.NewClient()
var outputBuilder strings.Builder
fmt.Println("Searching for models...")
// Initialize the result struct
result := &SearchResult{
SearchTerm: searchTerm,
Limit: limit,
Quantization: quantization,
Models: []ProcessedModel{},
}
models, err := client.GetLatest(searchTerm, limit)
if err != nil {
return nil, fmt.Errorf("failed to fetch models: %w", err)
}
fmt.Println("Models found:", len(models))
result.TotalModelsFound = len(models)
if len(models) == 0 {
outputBuilder.WriteString("No models found.\n")
result.FormattedOutput = outputBuilder.String()
return result, nil
}
outputBuilder.WriteString(fmt.Sprintf("Found %d models matching '%s':\n\n", len(models), searchTerm))
// Process each model
for i, model := range models {
outputBuilder.WriteString(fmt.Sprintf("%d. Processing Model: %s\n", i+1, model.ModelID))
outputBuilder.WriteString(fmt.Sprintf(" Author: %s\n", model.Author))
outputBuilder.WriteString(fmt.Sprintf(" Downloads: %d\n", model.Downloads))
outputBuilder.WriteString(fmt.Sprintf(" Last Modified: %s\n", model.LastModified))
// Initialize processed model struct
processedModel := ProcessedModel{
ModelID: model.ModelID,
Author: model.Author,
Downloads: model.Downloads,
LastModified: model.LastModified,
QuantizationPreferences: []string{quantization, "Q4_K_M", "Q4_K_S", "Q3_K_M", "Q2_K"},
}
// Get detailed model information
details, err := client.GetModelDetails(model.ModelID)
if err != nil {
errorMsg := fmt.Sprintf(" Error getting model details: %v\n", err)
outputBuilder.WriteString(errorMsg)
processedModel.ProcessingError = err.Error()
result.Models = append(result.Models, processedModel)
continue
}
// Define quantization preferences (in order of preference)
quantizationPreferences := []string{quantization, "Q4_K_M", "Q4_K_S", "Q3_K_M", "Q2_K"}
// Find preferred model file
preferredModelFile := hfapi.FindPreferredModelFile(details.Files, quantizationPreferences)
// Process files
processedFiles := make([]ProcessedModelFile, len(details.Files))
for j, file := range details.Files {
fileType := "other"
if file.IsReadme {
fileType = "readme"
} else if preferredModelFile != nil && file.Path == preferredModelFile.Path {
fileType = "model"
}
processedFiles[j] = ProcessedModelFile{
Path: file.Path,
Size: file.Size,
SHA256: file.SHA256,
IsReadme: file.IsReadme,
FileType: fileType,
}
}
processedModel.Files = processedFiles
// Set preferred model file
if preferredModelFile != nil {
for _, file := range processedFiles {
if file.Path == preferredModelFile.Path {
processedModel.PreferredModelFile = &file
break
}
}
}
// Print file information
outputBuilder.WriteString(fmt.Sprintf(" Files found: %d\n", len(details.Files)))
if preferredModelFile != nil {
outputBuilder.WriteString(fmt.Sprintf(" Preferred Model File: %s (SHA256: %s)\n",
preferredModelFile.Path,
preferredModelFile.SHA256))
} else {
outputBuilder.WriteString(fmt.Sprintf(" No model file found with quantization preferences: %v\n", quantizationPreferences))
}
if details.ReadmeFile != nil {
outputBuilder.WriteString(fmt.Sprintf(" README File: %s\n", details.ReadmeFile.Path))
// Find and set readme file
for _, file := range processedFiles {
if file.IsReadme {
processedModel.ReadmeFile = &file
break
}
}
fmt.Println("Getting real readme for", model.ModelID, "waiting...")
// Use agent to get the real readme and prepare the model description
readmeContent, err := getRealReadme(context.Background(), model.ModelID)
if err == nil {
processedModel.ReadmeContent = readmeContent
processedModel.ReadmeContentPreview = truncateString(readmeContent, 200)
outputBuilder.WriteString(fmt.Sprintf(" README Content Preview: %s\n",
processedModel.ReadmeContentPreview))
} else {
fmt.Printf(" Warning: Failed to get real readme: %v\n", err)
}
fmt.Println("Real readme got", readmeContent)
// Extract metadata (tags, license) from README using LLM
fmt.Println("Extracting metadata for", model.ModelID, "waiting...")
tags, license, err := extractModelMetadata(context.Background(), processedModel)
if err == nil {
processedModel.Tags = tags
processedModel.License = license
outputBuilder.WriteString(fmt.Sprintf(" Tags: %v\n", tags))
outputBuilder.WriteString(fmt.Sprintf(" License: %s\n", license))
} else {
fmt.Printf(" Warning: Failed to extract metadata: %v\n", err)
}
// Extract icon from README or use HuggingFace avatar
icon := extractModelIcon(processedModel)
if icon != "" {
processedModel.Icon = icon
outputBuilder.WriteString(fmt.Sprintf(" Icon: %s\n", icon))
}
// Get README content
// readmeContent, err := client.GetReadmeContent(model.ModelID, details.ReadmeFile.Path)
// if err == nil {
// processedModel.ReadmeContent = readmeContent
// processedModel.ReadmeContentPreview = truncateString(readmeContent, 200)
// outputBuilder.WriteString(fmt.Sprintf(" README Content Preview: %s\n",
// processedModel.ReadmeContentPreview))
// }
}
// Print all files with their checksums
outputBuilder.WriteString(" All Files:\n")
for _, file := range processedFiles {
outputBuilder.WriteString(fmt.Sprintf(" - %s (%s, %d bytes", file.Path, file.FileType, file.Size))
if file.SHA256 != "" {
outputBuilder.WriteString(fmt.Sprintf(", SHA256: %s", file.SHA256))
}
outputBuilder.WriteString(")\n")
}
outputBuilder.WriteString("\n")
result.Models = append(result.Models, processedModel)
}
result.FormattedOutput = outputBuilder.String()
return result, nil
}
func truncateString(s string, maxLen int) string {
if len(s) <= maxLen {
return s
}
return s[:maxLen] + "..."
}
================================================
FILE: .github/gallery-agent/testing.go
================================================
package main
import (
"context"
"fmt"
"math/rand"
"strings"
"time"
)
// runSyntheticMode generates synthetic test data and appends it to the gallery
func runSyntheticMode() error {
generator := NewSyntheticDataGenerator()
// Generate a random number of synthetic models (1-3)
numModels := generator.rand.Intn(3) + 1
fmt.Printf("Generating %d synthetic models for testing...\n", numModels)
var models []ProcessedModel
for i := 0; i < numModels; i++ {
model := generator.GenerateProcessedModel()
models = append(models, model)
fmt.Printf("Generated synthetic model: %s\n", model.ModelID)
}
// Generate YAML entries and append to gallery/index.yaml
fmt.Println("Generating YAML entries for synthetic models...")
err := generateYAMLForModels(context.Background(), models, "Q4_K_M")
if err != nil {
return fmt.Errorf("error generating YAML entries: %w", err)
}
fmt.Printf("Successfully added %d synthetic models to the gallery for testing!\n", len(models))
return nil
}
// SyntheticDataGenerator provides methods to generate synthetic test data
type SyntheticDataGenerator struct {
rand *rand.Rand
}
// NewSyntheticDataGenerator creates a new synthetic data generator
func NewSyntheticDataGenerator() *SyntheticDataGenerator {
return &SyntheticDataGenerator{
rand: rand.New(rand.NewSource(time.Now().UnixNano())),
}
}
// GenerateProcessedModelFile creates a synthetic ProcessedModelFile
func (g *SyntheticDataGenerator) GenerateProcessedModelFile() ProcessedModelFile {
fileTypes := []string{"model", "readme", "other"}
fileType := fileTypes[g.rand.Intn(len(fileTypes))]
var path string
var isReadme bool
switch fileType {
case "model":
path = fmt.Sprintf("model-%s.gguf", g.randomString(8))
isReadme = false
case "readme":
path = "README.md"
isReadme = true
default:
path = fmt.Sprintf("file-%s.txt", g.randomString(6))
isReadme = false
}
return ProcessedModelFile{
Path: path,
Size: int64(g.rand.Intn(1000000000) + 1000000), // 1MB to 1GB
SHA256: g.randomSHA256(),
IsReadme: isReadme,
FileType: fileType,
}
}
// GenerateProcessedModel creates a synthetic ProcessedModel
func (g *SyntheticDataGenerator) GenerateProcessedModel() ProcessedModel {
authors := []string{"microsoft", "meta", "google", "openai", "anthropic", "mistralai", "huggingface"}
modelNames := []string{"llama", "gpt", "claude", "mistral", "gemma", "phi", "qwen", "codellama"}
author := authors[g.rand.Intn(len(authors))]
modelName := modelNames[g.rand.Intn(len(modelNames))]
modelID := fmt.Sprintf("%s/%s-%s", author, modelName, g.randomString(6))
// Generate files
numFiles := g.rand.Intn(5) + 2 // 2-6 files
files := make([]ProcessedModelFile, numFiles)
// Ensure at least one model file and one readme
hasModelFile := false
hasReadme := false
for i := 0; i < numFiles; i++ {
files[i] = g.GenerateProcessedModelFile()
if files[i].FileType == "model" {
hasModelFile = true
}
if files[i].FileType == "readme" {
hasReadme = true
}
}
// Add required files if missing
if !hasModelFile {
modelFile := g.GenerateProcessedModelFile()
modelFile.FileType = "model"
modelFile.Path = fmt.Sprintf("%s-Q4_K_M.gguf", modelName)
files = append(files, modelFile)
}
if !hasReadme {
readmeFile := g.GenerateProcessedModelFile()
readmeFile.FileType = "readme"
readmeFile.Path = "README.md"
readmeFile.IsReadme = true
files = append(files, readmeFile)
}
// Find preferred model file
var preferredModelFile *ProcessedModelFile
for i := range files {
if files[i].FileType == "model" {
preferredModelFile = &files[i]
break
}
}
// Find readme file
var readmeFile *ProcessedModelFile
for i := range files {
if files[i].FileType == "readme" {
readmeFile = &files[i]
break
}
}
readmeContent := g.generateReadmeContent(modelName, author)
// Generate sample metadata
licenses := []string{"apache-2.0", "mit", "llama2", "gpl-3.0", "bsd", ""}
license := licenses[g.rand.Intn(len(licenses))]
sampleTags := []string{"llm", "gguf", "gpu", "cpu", "text-to-text", "chat", "instruction-tuned"}
numTags := g.rand.Intn(4) + 3 // 3-6 tags
tags := make([]string, numTags)
for i := 0; i < numTags; i++ {
tags[i] = sampleTags[g.rand.Intn(len(sampleTags))]
}
// Remove duplicates
tags = g.removeDuplicates(tags)
// Optionally include icon (50% chance)
icon := ""
if g.rand.Intn(2) == 0 {
icon = fmt.Sprintf("https://cdn-avatars.huggingface.co/v1/production/uploads/%s.png", g.randomString(24))
}
return ProcessedModel{
ModelID: modelID,
Author: author,
Downloads: g.rand.Intn(1000000) + 1000,
LastModified: g.randomDate(),
Files: files,
PreferredModelFile: preferredModelFile,
ReadmeFile: readmeFile,
ReadmeContent: readmeContent,
ReadmeContentPreview: truncateString(readmeContent, 200),
QuantizationPreferences: []string{"Q4_K_M", "Q4_K_S", "Q3_K_M", "Q2_K"},
ProcessingError: "",
Tags: tags,
License: license,
Icon: icon,
}
}
// Helper methods for synthetic data generation
func (g *SyntheticDataGenerator) randomString(length int) string {
const charset = "abcdefghijklmnopqrstuvwxyz0123456789"
b := make([]byte, length)
for i := range b {
b[i] = charset[g.rand.Intn(len(charset))]
}
return string(b)
}
func (g *SyntheticDataGenerator) randomSHA256() string {
const charset = "0123456789abcdef"
b := make([]byte, 64)
for i := range b {
b[i] = charset[g.rand.Intn(len(charset))]
}
return string(b)
}
func (g *SyntheticDataGenerator) randomDate() string {
now := time.Now()
daysAgo := g.rand.Intn(365) // Random date within last year
pastDate := now.AddDate(0, 0, -daysAgo)
return pastDate.Format("2006-01-02T15:04:05.000Z")
}
func (g *SyntheticDataGenerator) removeDuplicates(slice []string) []string {
keys := make(map[string]bool)
result := []string{}
for _, item := range slice {
if !keys[item] {
keys[item] = true
result = append(result, item)
}
}
return result
}
func (g *SyntheticDataGenerator) generateReadmeContent(modelName, author string) string {
templates := []string{
fmt.Sprintf("# %s Model\n\nThis is a %s model developed by %s. It's designed for various natural language processing tasks including text generation, question answering, and conversation.\n\n## Features\n\n- High-quality text generation\n- Efficient inference\n- Multiple quantization options\n- Easy to use with LocalAI\n\n## Usage\n\nUse this model with LocalAI for various AI tasks.", strings.Title(modelName), modelName, author),
fmt.Sprintf("# %s\n\nA powerful language model from %s. This model excels at understanding and generating human-like text across multiple domains.\n\n## Capabilities\n\n- Text completion\n- Code generation\n- Creative writing\n- Technical documentation\n\n## Model Details\n\n- Architecture: Transformer-based\n- Training: Large-scale supervised learning\n- Quantization: Available in multiple formats", strings.Title(modelName), author),
fmt.Sprintf("# %s Language Model\n\nDeveloped by %s, this model represents state-of-the-art performance in natural language understanding and generation.\n\n## Key Features\n\n- Multilingual support\n- Context-aware responses\n- Efficient memory usage\n- Fast inference speed\n\n## Applications\n\n- Chatbots and virtual assistants\n- Content generation\n- Code completion\n- Educational tools", strings.Title(modelName), author),
}
return templates[g.rand.Intn(len(templates))]
}
================================================
FILE: .github/gallery-agent/tools.go
================================================
package main
import (
"fmt"
hfapi "github.com/mudler/LocalAI/pkg/huggingface-api"
openai "github.com/sashabaranov/go-openai"
jsonschema "github.com/sashabaranov/go-openai/jsonschema"
)
// Get repository README from HF
type HFReadmeTool struct {
client *hfapi.Client
}
func (s *HFReadmeTool) Execute(args map[string]any) (string, any, error) {
q, ok := args["repository"].(string)
if !ok {
return "", nil, fmt.Errorf("no query")
}
readme, err := s.client.GetReadmeContent(q, "README.md")
if err != nil {
return "", nil, err
}
return readme, nil, nil
}
func (s *HFReadmeTool) Tool() openai.Tool {
return openai.Tool{
Type: openai.ToolTypeFunction,
Function: &openai.FunctionDefinition{
Name: "hf_readme",
Description: "A tool to get the README content of a huggingface repository",
Parameters: jsonschema.Definition{
Type: jsonschema.Object,
Properties: map[string]jsonschema.Definition{
"repository": {
Type: jsonschema.String,
Description: "The huggingface repository to get the README content of",
},
},
Required: []string{"repository"},
},
},
}
}
================================================
FILE: .github/labeler.yml
================================================
enhancement:
- head-branch: ['^feature', 'feature']
dependencies:
- any:
- changed-files:
- any-glob-to-any-file: 'Makefile'
- changed-files:
- any-glob-to-any-file: '*.mod'
- changed-files:
- any-glob-to-any-file: '*.sum'
kind/documentation:
- any:
- changed-files:
- any-glob-to-any-file: 'docs/*'
- changed-files:
- any-glob-to-any-file: '*.md'
area/ai-model:
- any:
- changed-files:
- any-glob-to-any-file: 'gallery/*'
examples:
- any:
- changed-files:
- any-glob-to-any-file: 'examples/*'
ci:
- any:
- changed-files:
- any-glob-to-any-file: '.github/*'
================================================
FILE: .github/release.yml
================================================
# .github/release.yml
changelog:
exclude:
labels:
- ignore-for-release
categories:
- title: Breaking Changes 🛠
labels:
- Semver-Major
- breaking-change
- title: "Bug fixes :bug:"
labels:
- bug
- regression
- title: "🖧 P2P area"
labels:
- area/p2p
- title: Exciting New Features 🎉
labels:
- Semver-Minor
- enhancement
- ux
- roadmap
- title: 🧠 Models
labels:
- area/ai-model
- title: 📖 Documentation and examples
labels:
- kind/documentation
- examples
- title: 👒 Dependencies
labels:
- dependencies
- title: Other Changes
labels:
- "*"
================================================
FILE: .github/stale.yml
================================================
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 45
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 10
# Issues with these labels will never be considered stale
exemptLabels:
- issue/willfix
# Label to use when marking an issue as stale
staleLabel: issue/stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: >
This issue is being automatically closed due to inactivity.
However, you may choose to reopen this issue.
================================================
FILE: .github/workflows/backend.yml
================================================
---
name: 'build backend container images'
on:
push:
branches:
- master
tags:
- '*'
concurrency:
group: ci-backends-${{ github.head_ref || github.ref }}-${{ github.repository }}
cancel-in-progress: true
jobs:
backend-jobs:
if: github.repository == 'mudler/LocalAI'
uses: ./.github/workflows/backend_build.yml
with:
tag-latest: ${{ matrix.tag-latest }}
tag-suffix: ${{ matrix.tag-suffix }}
build-type: ${{ matrix.build-type }}
cuda-major-version: ${{ matrix.cuda-major-version }}
cuda-minor-version: ${{ matrix.cuda-minor-version }}
platforms: ${{ matrix.platforms }}
runs-on: ${{ matrix.runs-on }}
base-image: ${{ matrix.base-image }}
backend: ${{ matrix.backend }}
dockerfile: ${{ matrix.dockerfile }}
skip-drivers: ${{ matrix.skip-drivers }}
context: ${{ matrix.context }}
ubuntu-version: ${{ matrix.ubuntu-version }}
secrets:
dockerUsername: ${{ secrets.DOCKERHUB_USERNAME }}
dockerPassword: ${{ secrets.DOCKERHUB_PASSWORD }}
quayUsername: ${{ secrets.LOCALAI_REGISTRY_USERNAME }}
quayPassword: ${{ secrets.LOCALAI_REGISTRY_PASSWORD }}
strategy:
fail-fast: false
#max-parallel: ${{ github.event_name != 'pull_request' && 6 || 4 }}
matrix:
include:
- build-type: 'l4t'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-diffusers'
runs-on: 'ubuntu-24.04-arm'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
skip-drivers: 'true'
backend: "diffusers"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2204'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-cpu-diffusers'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'true'
backend: "diffusers"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-cpu-chatterbox'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'true'
backend: "chatterbox"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-cpu-moonshine'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'true'
backend: "moonshine"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-cpu-whisperx'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'true'
backend: "whisperx"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-cpu-ace-step'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'true'
backend: "ace-step"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-cpu-mlx'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'true'
backend: "mlx"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-cpu-mlx-vlm'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'true'
backend: "mlx-vlm"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-cpu-mlx-audio'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'true'
backend: "mlx-audio"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-cpu-mlx-distributed'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'true'
backend: "mlx-distributed"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
# CUDA 12 builds
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-vibevoice'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "vibevoice"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-qwen-asr'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "qwen-asr"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-nemo'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "nemo"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-qwen-tts'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "qwen-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-fish-speech'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "fish-speech"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-faster-qwen3-tts'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "faster-qwen3-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-voxcpm'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "voxcpm"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-pocket-tts'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "pocket-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-rerankers'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "rerankers"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-llama-cpp'
runs-on: 'bigger-runner'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "llama-cpp"
dockerfile: "./backend/Dockerfile.llama-cpp"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-vllm'
runs-on: 'arc-runner-set'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "vllm"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-vllm-omni'
runs-on: 'arc-runner-set'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "vllm-omni"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-transformers'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "transformers"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-diffusers'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "diffusers"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-ace-step'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "ace-step"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-kokoro'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "kokoro"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-faster-whisper'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "faster-whisper"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-whisperx'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "whisperx"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "9"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-coqui'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "coqui"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-outetts'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "outetts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-chatterbox'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "chatterbox"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-moonshine'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "moonshine"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-mlx'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "mlx"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-mlx-vlm'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "mlx-vlm"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-mlx-audio'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "mlx-audio"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-mlx-distributed'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "mlx-distributed"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-stablediffusion-ggml'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "stablediffusion-ggml"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-whisper'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "whisper"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-acestep-cpp'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "acestep-cpp"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-rfdetr'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "rfdetr"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "8"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-12-neutts'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "neutts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
# cuda 13
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-rerankers'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "rerankers"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-vibevoice'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "vibevoice"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-qwen-asr'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "qwen-asr"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-nemo'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "nemo"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-qwen-tts'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "qwen-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-fish-speech'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "fish-speech"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-faster-qwen3-tts'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "faster-qwen3-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-voxcpm'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "voxcpm"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-pocket-tts'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "pocket-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-llama-cpp'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "llama-cpp"
dockerfile: "./backend/Dockerfile.llama-cpp"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
skip-drivers: 'false'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-llama-cpp'
base-image: "ubuntu:24.04"
runs-on: 'ubuntu-24.04-arm'
ubuntu-version: '2404'
backend: "llama-cpp"
dockerfile: "./backend/Dockerfile.llama-cpp"
context: "./"
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-transformers'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "transformers"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-diffusers'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "diffusers"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-ace-step'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "ace-step"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'l4t'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-vibevoice'
runs-on: 'ubuntu-24.04-arm'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
ubuntu-version: '2404'
backend: "vibevoice"
dockerfile: "./backend/Dockerfile.python"
context: "./"
- build-type: 'l4t'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-qwen-asr'
runs-on: 'ubuntu-24.04-arm'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
ubuntu-version: '2404'
backend: "qwen-asr"
dockerfile: "./backend/Dockerfile.python"
context: "./"
- build-type: 'l4t'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-qwen-tts'
runs-on: 'ubuntu-24.04-arm'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
ubuntu-version: '2404'
backend: "qwen-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
- build-type: 'l4t'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-fish-speech'
runs-on: 'ubuntu-24.04-arm'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
ubuntu-version: '2404'
backend: "fish-speech"
dockerfile: "./backend/Dockerfile.python"
context: "./"
- build-type: 'l4t'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-faster-qwen3-tts'
runs-on: 'ubuntu-24.04-arm'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
ubuntu-version: '2404'
backend: "faster-qwen3-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
- build-type: 'l4t'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-pocket-tts'
runs-on: 'ubuntu-24.04-arm'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
ubuntu-version: '2404'
backend: "pocket-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
- build-type: 'l4t'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-chatterbox'
runs-on: 'ubuntu-24.04-arm'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
ubuntu-version: '2404'
backend: "chatterbox"
dockerfile: "./backend/Dockerfile.python"
context: "./"
- build-type: 'l4t'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-diffusers'
runs-on: 'ubuntu-24.04-arm'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
ubuntu-version: '2404'
backend: "diffusers"
dockerfile: "./backend/Dockerfile.python"
context: "./"
- build-type: 'l4t'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-mlx'
runs-on: 'ubuntu-24.04-arm'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
ubuntu-version: '2404'
backend: "mlx"
dockerfile: "./backend/Dockerfile.python"
context: "./"
- build-type: 'l4t'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-mlx-vlm'
runs-on: 'ubuntu-24.04-arm'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
ubuntu-version: '2404'
backend: "mlx-vlm"
dockerfile: "./backend/Dockerfile.python"
context: "./"
- build-type: 'l4t'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-mlx-audio'
runs-on: 'ubuntu-24.04-arm'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
ubuntu-version: '2404'
backend: "mlx-audio"
dockerfile: "./backend/Dockerfile.python"
context: "./"
- build-type: 'l4t'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-mlx-distributed'
runs-on: 'ubuntu-24.04-arm'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
ubuntu-version: '2404'
backend: "mlx-distributed"
dockerfile: "./backend/Dockerfile.python"
context: "./"
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-kokoro'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "kokoro"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-faster-whisper'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "faster-whisper"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-whisperx'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "whisperx"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-chatterbox'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "chatterbox"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-moonshine'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "moonshine"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-mlx'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "mlx"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-mlx-vlm'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "mlx-vlm"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-mlx-audio'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "mlx-audio"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-mlx-distributed'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "mlx-distributed"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-stablediffusion-ggml'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "stablediffusion-ggml"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
skip-drivers: 'false'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-stablediffusion-ggml'
base-image: "ubuntu:24.04"
ubuntu-version: '2404'
runs-on: 'ubuntu-24.04-arm'
backend: "stablediffusion-ggml"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-whisper'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "whisper"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
skip-drivers: 'false'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-whisper'
base-image: "ubuntu:24.04"
ubuntu-version: '2404'
runs-on: 'ubuntu-24.04-arm'
backend: "whisper"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-acestep-cpp'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "acestep-cpp"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/arm64'
skip-drivers: 'false'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-cuda-13-arm64-acestep-cpp'
base-image: "ubuntu:24.04"
ubuntu-version: '2404'
runs-on: 'ubuntu-24.04-arm'
backend: "acestep-cpp"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
- build-type: 'cublas'
cuda-major-version: "13"
cuda-minor-version: "0"
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-nvidia-cuda-13-rfdetr'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "rfdetr"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
# hipblas builds
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-rerankers'
runs-on: 'ubuntu-latest'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "rerankers"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-llama-cpp'
runs-on: 'ubuntu-latest'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "llama-cpp"
dockerfile: "./backend/Dockerfile.llama-cpp"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-vllm'
runs-on: 'arc-runner-set'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "vllm"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-vllm-omni'
runs-on: 'arc-runner-set'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "vllm-omni"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-transformers'
runs-on: 'arc-runner-set'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "transformers"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-diffusers'
runs-on: 'arc-runner-set'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "diffusers"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-ace-step'
runs-on: 'arc-runner-set'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "ace-step"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
# ROCm additional backends
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-kokoro'
runs-on: 'arc-runner-set'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "kokoro"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-vibevoice'
runs-on: 'arc-runner-set'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "vibevoice"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-qwen-asr'
runs-on: 'arc-runner-set'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "qwen-asr"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-nemo'
runs-on: 'arc-runner-set'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "nemo"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-qwen-tts'
runs-on: 'arc-runner-set'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "qwen-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-fish-speech'
runs-on: 'arc-runner-set'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "fish-speech"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-voxcpm'
runs-on: 'arc-runner-set'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "voxcpm"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-pocket-tts'
runs-on: 'arc-runner-set'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "pocket-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-faster-whisper'
runs-on: 'bigger-runner'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "faster-whisper"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-whisperx'
runs-on: 'bigger-runner'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "whisperx"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-coqui'
runs-on: 'bigger-runner'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "coqui"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
# sycl builds
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-rerankers'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "rerankers"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'sycl_f32'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-sycl-f32-llama-cpp'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "llama-cpp"
dockerfile: "./backend/Dockerfile.llama-cpp"
context: "./"
ubuntu-version: '2404'
- build-type: 'sycl_f16'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-sycl-f16-llama-cpp'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "llama-cpp"
dockerfile: "./backend/Dockerfile.llama-cpp"
context: "./"
ubuntu-version: '2404'
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-vllm'
runs-on: 'arc-runner-set'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "vllm"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-transformers'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "transformers"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-diffusers'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "diffusers"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-ace-step'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "ace-step"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'l4t'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-vibevoice'
runs-on: 'ubuntu-24.04-arm'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
skip-drivers: 'true'
backend: "vibevoice"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2204'
- build-type: 'l4t'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-qwen-asr'
runs-on: 'ubuntu-24.04-arm'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
skip-drivers: 'true'
backend: "qwen-asr"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2204'
- build-type: 'l4t'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-qwen-tts'
runs-on: 'ubuntu-24.04-arm'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
skip-drivers: 'true'
backend: "qwen-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2204'
- build-type: 'l4t'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-fish-speech'
runs-on: 'ubuntu-24.04-arm'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
skip-drivers: 'true'
backend: "fish-speech"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2204'
- build-type: 'l4t'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-faster-qwen3-tts'
runs-on: 'ubuntu-24.04-arm'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
skip-drivers: 'true'
backend: "faster-qwen3-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2204'
- build-type: 'l4t'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-pocket-tts'
runs-on: 'ubuntu-24.04-arm'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
skip-drivers: 'true'
backend: "pocket-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2204'
- build-type: 'l4t'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-kokoro'
runs-on: 'ubuntu-24.04-arm'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
skip-drivers: 'true'
backend: "kokoro"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2204'
- build-type: 'l4t'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-mlx'
runs-on: 'ubuntu-24.04-arm'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
skip-drivers: 'true'
backend: "mlx"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2204'
- build-type: 'l4t'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-mlx-vlm'
runs-on: 'ubuntu-24.04-arm'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
skip-drivers: 'true'
backend: "mlx-vlm"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2204'
- build-type: 'l4t'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-mlx-audio'
runs-on: 'ubuntu-24.04-arm'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
skip-drivers: 'true'
backend: "mlx-audio"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2204'
- build-type: 'l4t'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-mlx-distributed'
runs-on: 'ubuntu-24.04-arm'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
skip-drivers: 'true'
backend: "mlx-distributed"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2204'
# SYCL additional backends
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-kokoro'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "kokoro"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-faster-whisper'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "faster-whisper"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-vibevoice'
runs-on: 'arc-runner-set'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "vibevoice"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-qwen-asr'
runs-on: 'arc-runner-set'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "qwen-asr"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-nemo'
runs-on: 'arc-runner-set'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "nemo"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-qwen-tts'
runs-on: 'arc-runner-set'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "qwen-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-fish-speech'
runs-on: 'arc-runner-set'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "fish-speech"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-voxcpm'
runs-on: 'arc-runner-set'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "voxcpm"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-pocket-tts'
runs-on: 'arc-runner-set'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "pocket-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-coqui'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "coqui"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
# piper
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-piper'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "piper"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-cpu-llama-cpp'
runs-on: 'bigger-runner'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "llama-cpp"
dockerfile: "./backend/Dockerfile.llama-cpp"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
skip-drivers: 'false'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-arm64-llama-cpp'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
runs-on: 'ubuntu-24.04-arm'
backend: "llama-cpp"
dockerfile: "./backend/Dockerfile.llama-cpp"
context: "./"
ubuntu-version: '2204'
- build-type: 'vulkan'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-gpu-vulkan-llama-cpp'
runs-on: 'bigger-runner'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "llama-cpp"
dockerfile: "./backend/Dockerfile.llama-cpp"
context: "./"
ubuntu-version: '2404'
# Stablediffusion-ggml
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-cpu-stablediffusion-ggml'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "stablediffusion-ggml"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'sycl_f32'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-sycl-f32-stablediffusion-ggml'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "stablediffusion-ggml"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'sycl_f16'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-sycl-f16-stablediffusion-ggml'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "stablediffusion-ggml"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'vulkan'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-gpu-vulkan-stablediffusion-ggml'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "stablediffusion-ggml"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
skip-drivers: 'false'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-arm64-stablediffusion-ggml'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
runs-on: 'ubuntu-24.04-arm'
backend: "stablediffusion-ggml"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2204'
# whisper
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-cpu-whisper'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "whisper"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'sycl_f32'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-sycl-f32-whisper'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "whisper"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'sycl_f16'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-sycl-f16-whisper'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "whisper"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'vulkan'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-gpu-vulkan-whisper'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "whisper"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
skip-drivers: 'false'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-arm64-whisper'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
runs-on: 'ubuntu-24.04-arm'
backend: "whisper"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2204'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-whisper'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
runs-on: 'ubuntu-latest'
skip-drivers: 'false'
backend: "whisper"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
# acestep-cpp
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-cpu-acestep-cpp'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "acestep-cpp"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'sycl_f32'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-sycl-f32-acestep-cpp'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "acestep-cpp"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'sycl_f16'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-sycl-f16-acestep-cpp'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "acestep-cpp"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'vulkan'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-gpu-vulkan-acestep-cpp'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "acestep-cpp"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
- build-type: 'cublas'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
skip-drivers: 'false'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-arm64-acestep-cpp'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
runs-on: 'ubuntu-24.04-arm'
backend: "acestep-cpp"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2204'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-acestep-cpp'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
runs-on: 'ubuntu-latest'
skip-drivers: 'false'
backend: "acestep-cpp"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
# voxtral
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-cpu-voxtral'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "voxtral"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
#opus
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-cpu-opus'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "opus"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
#silero-vad
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-cpu-silero-vad'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "silero-vad"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
# local-store
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-cpu-local-store'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "local-store"
dockerfile: "./backend/Dockerfile.golang"
context: "./"
ubuntu-version: '2404'
# rfdetr
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-cpu-rfdetr'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "rfdetr"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'intel'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-intel-rfdetr'
runs-on: 'ubuntu-latest'
base-image: "intel/oneapi-basekit:2025.3.0-0-devel-ubuntu24.04"
skip-drivers: 'false'
backend: "rfdetr"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'l4t'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
skip-drivers: 'true'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-arm64-rfdetr'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
runs-on: 'ubuntu-24.04-arm'
backend: "rfdetr"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2204'
- build-type: 'l4t'
cuda-major-version: "12"
cuda-minor-version: "0"
platforms: 'linux/arm64'
skip-drivers: 'true'
tag-latest: 'auto'
tag-suffix: '-nvidia-l4t-arm64-chatterbox'
base-image: "nvcr.io/nvidia/l4t-jetpack:r36.4.0"
runs-on: 'ubuntu-24.04-arm'
backend: "chatterbox"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2204'
# runs out of space on the runner
# - build-type: 'hipblas'
# cuda-major-version: ""
# cuda-minor-version: ""
# platforms: 'linux/amd64'
# tag-latest: 'auto'
# tag-suffix: '-gpu-hipblas-rfdetr'
# base-image: "rocm/dev-ubuntu-24.04:6.4.4"
# runs-on: 'ubuntu-latest'
# skip-drivers: 'false'
# backend: "rfdetr"
# dockerfile: "./backend/Dockerfile.python"
# context: "./"
# kitten-tts
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-kitten-tts'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "kitten-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
# neutts
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-cpu-neutts'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "neutts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: 'hipblas'
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-gpu-rocm-hipblas-neutts'
runs-on: 'arc-runner-set'
base-image: "rocm/dev-ubuntu-24.04:6.4.4"
skip-drivers: 'false'
backend: "neutts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-cpu-vibevoice'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "vibevoice"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-cpu-qwen-asr'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "qwen-asr"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-cpu-nemo'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "nemo"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-cpu-qwen-tts'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "qwen-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-cpu-fish-speech'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "fish-speech"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-cpu-voxcpm'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "voxcpm"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64,linux/arm64'
tag-latest: 'auto'
tag-suffix: '-cpu-pocket-tts'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'false'
backend: "pocket-tts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
- build-type: ''
cuda-major-version: ""
cuda-minor-version: ""
platforms: 'linux/amd64'
tag-latest: 'auto'
tag-suffix: '-cpu-outetts'
runs-on: 'ubuntu-latest'
base-image: "ubuntu:24.04"
skip-drivers: 'true'
backend: "outetts"
dockerfile: "./backend/Dockerfile.python"
context: "./"
ubuntu-version: '2404'
backend-jobs-darwin:
uses: ./.github/workflows/backend_build_darwin.yml
strategy:
matrix:
include:
- backend: "diffusers"
tag-suffix: "-metal-darwin-arm64-diffusers"
build-type: "mps"
- backend: "ace-step"
tag-suffix: "-metal-darwin-arm64-ace-step"
build-type: "mps"
- backend: "mlx"
tag-suffix: "-metal-darwin-arm64-mlx"
build-type: "mps"
- backend: "chatterbox"
tag-suffix: "-metal-darwin-arm64-chatterbox"
build-type: "mps"
- backend: "mlx-vlm"
tag-suffix: "-metal-darwin-arm64-mlx-vlm"
build-type: "mps"
- backend: "mlx-audio"
tag-suffix: "-metal-darwin-arm64-mlx-audio"
build-type: "mps"
- backend: "mlx-distributed"
tag-suffix: "-metal-darwin-arm64-mlx-distributed"
build-type: "mps"
- backend: "stablediffusion-ggml"
tag-suffix: "-metal-darwin-arm64-stablediffusion-ggml"
build-type: "metal"
lang: "go"
- backend: "whisper"
tag-suffix: "-metal-darwin-arm64-whisper"
build-type: "metal"
lang: "go"
- backend: "acestep-cpp"
tag-suffix: "-metal-darwin-arm64-acestep-cpp"
build-type: "metal"
lang: "go"
- backend: "voxtral"
tag-suffix: "-metal-darwin-arm64-voxtral"
build-type: "metal"
lang: "go"
- backend: "vibevoice"
tag-suffix: "-metal-darwin-arm64-vibevoice"
build-type: "mps"
- backend: "qwen-asr"
tag-suffix: "-metal-darwin-arm64-qwen-asr"
build-type: "mps"
- backend: "nemo"
tag-suffix: "-metal-darwin-arm64-nemo"
build-type: "mps"
- backend: "qwen-tts"
tag-suffix: "-metal-darwin-arm64-qwen-tts"
build-type: "mps"
- backend: "fish-speech"
tag-suffix: "-metal-darwin-arm64-fish-speech"
build-type: "mps"
- backend: "voxcpm"
tag-suffix: "-metal-darwin-arm64-voxcpm"
build-type: "mps"
- backend: "pocket-tts"
tag-suffix: "-metal-darwin-arm64-pocket-tts"
build-type: "mps"
- backend: "moonshine"
tag-suffix: "-metal-darwin-arm64-moonshine"
build-type: "mps"
- backend: "whisperx"
tag-suffix: "-metal-darwin-arm64-whisperx"
build-type: "mps"
- backend: "rerankers"
tag-suffix: "-metal-darwin-arm64-rerankers"
build-type: "mps"
- backend: "transformers"
tag-suffix: "-metal-darwin-arm64-transformers"
build-type: "mps"
- backend: "kokoro"
tag-suffix: "-metal-darwin-arm64-kokoro"
build-type: "mps"
- backend: "faster-whisper"
tag-suffix: "-metal-darwin-arm64-faster-whisper"
build-type: "mps"
- backend: "coqui"
tag-suffix: "-metal-darwin-arm64-coqui"
build-type: "mps"
- backend: "rfdetr"
tag-suffix: "-metal-darwin-arm64-rfdetr"
build-type: "mps"
- backend: "kitten-tts"
tag-suffix: "-metal-darwin-arm64-kitten-tts"
build-type: "mps"
- backend: "piper"
tag-suffix: "-metal-darwin-arm64-piper"
build-type: "metal"
lang: "go"
- backend: "opus"
tag-suffix: "-metal-darwin-arm64-opus"
build-type: "metal"
lang: "go"
- backend: "silero-vad"
tag-suffix: "-metal-darwin-arm64-silero-vad"
build-type: "metal"
lang: "go"
- backend: "local-store"
tag-suffix: "-metal-darwin-arm64-local-store"
build-type: "metal"
lang: "go"
with:
backend: ${{ matrix.backend }}
build-type: ${{ matrix.build-type }}
go-version: "1.24.x"
tag-suffix: ${{ matrix.tag-suffix }}
lang: ${{ matrix.lang || 'python' }}
use-pip: ${{ matrix.backend == 'diffusers' }}
runs-on: "macos-latest"
secrets:
dockerUsername: ${{ secrets.DOCKERHUB_USERNAME }}
dockerPassword: ${{ secrets.DOCKERHUB_PASSWORD }}
quayUsername: ${{ secrets.LOCALAI_REGISTRY_USERNAME }}
quayPassword: ${{ secrets.LOCALAI_REGISTRY_PASSWORD }}
llama-cpp-darwin:
runs-on: macos-latest
strategy:
matrix:
go-version: ['1.25.x']
steps:
- name: Clone
uses: actions/checkout@v6
with:
submodules: true
- name: Setup Go ${{ matrix.go-version }}
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
cache: false
# You can test your matrix by printing the current Go version
- name: Display Go version
run: go version
- name: Dependencies
run: |
brew install protobuf grpc make protoc-gen-go protoc-gen-go-grpc libomp llvm
- name: Build llama-cpp-darwin
run: |
make protogen-go
make backends/llama-cpp-darwin
- name: Upload llama-cpp.tar
uses: actions/upload-artifact@v7
with:
name: llama-cpp-tar
path: backend-images/ll
gitextract_p22ybhoq/ ├── .agents/ │ ├── adding-backends.md │ ├── api-endpoints-and-auth.md │ ├── building-and-testing.md │ ├── coding-style.md │ ├── llama-cpp-backend.md │ └── testing-mcp-apps.md ├── .air.toml ├── .devcontainer/ │ ├── devcontainer.json │ ├── docker-compose-devcontainer.yml │ ├── grafana/ │ │ └── datasource.yml │ └── prometheus/ │ └── prometheus.yml ├── .devcontainer-scripts/ │ ├── postcreate.sh │ ├── poststart.sh │ └── utils.sh ├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── config.yml │ │ └── feature_request.md │ ├── PULL_REQUEST_TEMPLATE.md │ ├── bump_deps.sh │ ├── bump_docs.sh │ ├── check_and_update.py │ ├── checksum_checker.sh │ ├── ci/ │ │ └── modelslist.go │ ├── dependabot.yml │ ├── gallery-agent/ │ │ ├── agent.go │ │ ├── gallery.go │ │ ├── main.go │ │ ├── testing.go │ │ └── tools.go │ ├── labeler.yml │ ├── release.yml │ ├── stale.yml │ └── workflows/ │ ├── backend.yml │ ├── backend_build.yml │ ├── backend_build_darwin.yml │ ├── backend_pr.yml │ ├── build-test.yaml │ ├── bump_deps.yaml │ ├── bump_docs.yaml │ ├── checksum_checker.yaml │ ├── deploy-explorer.yaml │ ├── disabled/ │ │ ├── comment-pr.yaml │ │ ├── dependabot_auto.yml │ │ ├── labeler.yml │ │ ├── localaibot_automerge.yml │ │ ├── notify-models.yaml │ │ ├── prlint.yaml │ │ └── test-gpu.yml │ ├── gallery-agent.yaml │ ├── generate_grpc_cache.yaml │ ├── generate_intel_image.yaml │ ├── image-pr.yml │ ├── image.yml │ ├── image_build.yml │ ├── notify-releases.yaml │ ├── release.yaml │ ├── secscan.yaml │ ├── stalebot.yml │ ├── test-extra.yml │ ├── test.yml │ ├── tests-e2e.yml │ ├── tests-ui-e2e.yml │ ├── update_swagger.yaml │ └── yaml-check.yml ├── .gitignore ├── .gitmodules ├── .goreleaser.yaml ├── .vscode/ │ ├── extensions.json │ └── launch.json ├── .yamllint ├── AGENTS.md ├── CONTRIBUTING.md ├── Dockerfile ├── Entitlements.plist ├── LICENSE ├── Makefile ├── README.md ├── SECURITY.md ├── backend/ │ ├── Dockerfile.golang │ ├── Dockerfile.llama-cpp │ ├── Dockerfile.python │ ├── README.md │ ├── backend.proto │ ├── cpp/ │ │ ├── grpc/ │ │ │ ├── .gitignore │ │ │ └── Makefile │ │ └── llama-cpp/ │ │ ├── CMakeLists.txt │ │ ├── Makefile │ │ ├── grpc-server.cpp │ │ ├── package.sh │ │ ├── prepare.sh │ │ └── run.sh │ ├── go/ │ │ ├── acestep-cpp/ │ │ │ ├── CMakeLists.txt │ │ │ ├── Makefile │ │ │ ├── acestepcpp_test.go │ │ │ ├── cpp/ │ │ │ │ ├── goacestepcpp.cpp │ │ │ │ └── goacestepcpp.h │ │ │ ├── goacestepcpp.go │ │ │ ├── main.go │ │ │ ├── package.sh │ │ │ ├── run.sh │ │ │ └── test.sh │ │ ├── llm/ │ │ │ └── llama/ │ │ │ ├── llama.go │ │ │ └── main.go │ │ ├── local-store/ │ │ │ ├── Makefile │ │ │ ├── debug.go │ │ │ ├── main.go │ │ │ ├── package.sh │ │ │ ├── production.go │ │ │ ├── run.sh │ │ │ └── store.go │ │ ├── opus/ │ │ │ ├── Makefile │ │ │ ├── codec.go │ │ │ ├── csrc/ │ │ │ │ └── opus_shim.c │ │ │ ├── main.go │ │ │ ├── opus.go │ │ │ ├── opus_test.go │ │ │ ├── package.sh │ │ │ └── run.sh │ │ ├── piper/ │ │ │ ├── Makefile │ │ │ ├── main.go │ │ │ ├── package.sh │ │ │ ├── piper.go │ │ │ └── run.sh │ │ └── silero-vad/ │ │ ├── Makefile │ │ ├── main.go │ │ ├── package.sh │ │ ├── run.sh │ │ └── vad.go │ ├── index.yaml │ └── python/ │ ├── README.md │ ├── ace-step/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-l4t13.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── chatterbox/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-install.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements-l4t13.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── common/ │ │ ├── libbackend.sh │ │ └── template/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── protogen.sh │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ └── test.sh │ ├── coqui/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── diffusers/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── backend.py │ │ ├── diffusers_dynamic_loader.py │ │ ├── install.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements-l4t13.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── faster-qwen3-tts/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-install.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements-l4t13.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── faster-whisper/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── protogen.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ └── test.sh │ ├── fish-speech/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── package.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements-l4t13.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── kitten-tts/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── kokoro/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── mlx/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── mlx_cache.py │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements-l4t13.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ ├── test.sh │ │ └── test_mlx_cache.py │ ├── mlx-audio/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements-l4t13.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── mlx-distributed/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── coordinator.py │ │ ├── install.sh │ │ ├── mlx_cache.py │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements-l4t13.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── sharding.py │ │ ├── test.py │ │ └── test.sh │ ├── mlx-vlm/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements-l4t13.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── moonshine/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── protogen.sh │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── nemo/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── protogen.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements-l4t13.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── neutts/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-after.txt │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── outetts/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── pocket-tts/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── protogen.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements-l4t13.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── qwen-asr/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12-after.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel-after.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements-l4t13.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── qwen-tts/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12-after.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel-after.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements-l4t13.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── rerankers/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── rfdetr/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ └── test.sh │ ├── transformers/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── vibevoice/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements-l4t13.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── vllm/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-after.txt │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12-after.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-install.txt │ │ ├── requirements-intel.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── vllm-omni/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── requirements-after.txt │ │ ├── requirements-cublas12-after.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ ├── voxcpm/ │ │ ├── Makefile │ │ ├── backend.py │ │ ├── install.sh │ │ ├── protogen.sh │ │ ├── requirements-cpu.txt │ │ ├── requirements-cublas12.txt │ │ ├── requirements-cublas13.txt │ │ ├── requirements-hipblas.txt │ │ ├── requirements-intel.txt │ │ ├── requirements-l4t12.txt │ │ ├── requirements-l4t13.txt │ │ ├── requirements-mps.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ ├── test.py │ │ └── test.sh │ └── whisperx/ │ ├── Makefile │ ├── backend.py │ ├── install.sh │ ├── protogen.sh │ ├── requirements-cpu.txt │ ├── requirements-cublas12.txt │ ├── requirements-cublas13.txt │ ├── requirements-hipblas.txt │ ├── requirements-mps.txt │ ├── requirements.txt │ ├── run.sh │ ├── test.py │ └── test.sh ├── cmd/ │ ├── launcher/ │ │ ├── icon.go │ │ ├── internal/ │ │ │ ├── launcher.go │ │ │ ├── launcher_suite_test.go │ │ │ ├── launcher_test.go │ │ │ ├── release_manager.go │ │ │ ├── release_manager_test.go │ │ │ ├── systray_manager.go │ │ │ └── ui.go │ │ └── main.go │ └── local-ai/ │ └── main.go ├── configuration/ │ └── .keep ├── core/ │ ├── application/ │ │ ├── agent_jobs.go │ │ ├── application.go │ │ ├── config_file_watcher.go │ │ ├── p2p.go │ │ ├── startup.go │ │ └── watchdog.go │ ├── backend/ │ │ ├── backend_suite_test.go │ │ ├── detection.go │ │ ├── embeddings.go │ │ ├── image.go │ │ ├── llm.go │ │ ├── llm_test.go │ │ ├── options.go │ │ ├── rerank.go │ │ ├── soundgeneration.go │ │ ├── stores.go │ │ ├── token_metrics.go │ │ ├── tokenize.go │ │ ├── transcript.go │ │ ├── tts.go │ │ ├── vad.go │ │ └── video.go │ ├── cli/ │ │ ├── agent.go │ │ ├── agent_test.go │ │ ├── backends.go │ │ ├── cli.go │ │ ├── completion.go │ │ ├── completion_test.go │ │ ├── context/ │ │ │ └── context.go │ │ ├── deprecations.go │ │ ├── explorer.go │ │ ├── federated.go │ │ ├── models.go │ │ ├── run.go │ │ ├── soundgeneration.go │ │ ├── transcript.go │ │ ├── tts.go │ │ ├── util.go │ │ └── worker/ │ │ ├── worker.go │ │ ├── worker_llamacpp.go │ │ ├── worker_mlx_common.go │ │ ├── worker_mlx_distributed.go │ │ ├── worker_p2p.go │ │ └── worker_p2p_mlx.go │ ├── clients/ │ │ └── store.go │ ├── config/ │ │ ├── application_config.go │ │ ├── application_config_test.go │ │ ├── config_suite_test.go │ │ ├── gallery.go │ │ ├── gguf.go │ │ ├── guesser.go │ │ ├── model_config.go │ │ ├── model_config_filter.go │ │ ├── model_config_loader.go │ │ ├── model_config_test.go │ │ ├── model_test.go │ │ └── runtime_settings.go │ ├── dependencies_manager/ │ │ └── manager.go │ ├── explorer/ │ │ ├── database.go │ │ ├── database_test.go │ │ ├── discovery.go │ │ └── explorer_suite_test.go │ ├── gallery/ │ │ ├── backend_resolve.go │ │ ├── backend_types.go │ │ ├── backends.go │ │ ├── backends_test.go │ │ ├── gallery.go │ │ ├── gallery_suite_test.go │ │ ├── gallery_test.go │ │ ├── importers/ │ │ │ ├── diffuser.go │ │ │ ├── diffuser_test.go │ │ │ ├── importers.go │ │ │ ├── importers_suite_test.go │ │ │ ├── importers_test.go │ │ │ ├── llama-cpp.go │ │ │ ├── llama-cpp_test.go │ │ │ ├── mlx.go │ │ │ ├── mlx_test.go │ │ │ ├── transformers.go │ │ │ ├── transformers_test.go │ │ │ ├── vllm.go │ │ │ └── vllm_test.go │ │ ├── metadata_type.go │ │ ├── models.go │ │ ├── models_test.go │ │ ├── models_types.go │ │ └── request_test.go │ ├── http/ │ │ ├── app.go │ │ ├── app_test.go │ │ ├── auth/ │ │ │ ├── apikeys.go │ │ │ ├── apikeys_test.go │ │ │ ├── auth_suite_test.go │ │ │ ├── db.go │ │ │ ├── db_nosqlite.go │ │ │ ├── db_sqlite.go │ │ │ ├── db_test.go │ │ │ ├── features.go │ │ │ ├── helpers_test.go │ │ │ ├── middleware.go │ │ │ ├── middleware_test.go │ │ │ ├── models.go │ │ │ ├── oauth.go │ │ │ ├── password.go │ │ │ ├── permissions.go │ │ │ ├── roles.go │ │ │ ├── roles_test.go │ │ │ ├── session.go │ │ │ ├── session_test.go │ │ │ ├── usage.go │ │ │ └── usage_test.go │ │ ├── endpoints/ │ │ │ ├── anthropic/ │ │ │ │ └── messages.go │ │ │ ├── elevenlabs/ │ │ │ │ ├── soundgeneration.go │ │ │ │ └── tts.go │ │ │ ├── explorer/ │ │ │ │ └── dashboard.go │ │ │ ├── jina/ │ │ │ │ └── rerank.go │ │ │ ├── localai/ │ │ │ │ ├── agent_collections.go │ │ │ │ ├── agent_jobs.go │ │ │ │ ├── agent_responses.go │ │ │ │ ├── agent_skills.go │ │ │ │ ├── agents.go │ │ │ │ ├── backend.go │ │ │ │ ├── backend_monitor.go │ │ │ │ ├── cors_proxy.go │ │ │ │ ├── detection.go │ │ │ │ ├── edit_model.go │ │ │ │ ├── edit_model_test.go │ │ │ │ ├── gallery.go │ │ │ │ ├── get_token_metrics.go │ │ │ │ ├── import_model.go │ │ │ │ ├── localai_suite_test.go │ │ │ │ ├── mcp.go │ │ │ │ ├── mcp_prompts.go │ │ │ │ ├── mcp_resources.go │ │ │ │ ├── mcp_tools.go │ │ │ │ ├── metrics.go │ │ │ │ ├── p2p.go │ │ │ │ ├── settings.go │ │ │ │ ├── stores.go │ │ │ │ ├── system.go │ │ │ │ ├── tokenize.go │ │ │ │ ├── tts.go │ │ │ │ ├── types.go │ │ │ │ ├── vad.go │ │ │ │ ├── video.go │ │ │ │ └── welcome.go │ │ │ ├── mcp/ │ │ │ │ └── tools.go │ │ │ ├── openai/ │ │ │ │ ├── chat.go │ │ │ │ ├── chat_test.go │ │ │ │ ├── completion.go │ │ │ │ ├── constants.go │ │ │ │ ├── edit.go │ │ │ │ ├── embeddings.go │ │ │ │ ├── image.go │ │ │ │ ├── image_test.go │ │ │ │ ├── inference.go │ │ │ │ ├── inference_test.go │ │ │ │ ├── inpainting.go │ │ │ │ ├── inpainting_test.go │ │ │ │ ├── list.go │ │ │ │ ├── openai_suite_test.go │ │ │ │ ├── realtime.go │ │ │ │ ├── realtime_model.go │ │ │ │ ├── realtime_transport.go │ │ │ │ ├── realtime_transport_webrtc.go │ │ │ │ ├── realtime_transport_ws.go │ │ │ │ ├── realtime_webrtc.go │ │ │ │ ├── transcription.go │ │ │ │ └── types/ │ │ │ │ ├── client_events.go │ │ │ │ ├── int_or_inf.go │ │ │ │ ├── message_item.go │ │ │ │ ├── server_events.go │ │ │ │ └── types.go │ │ │ └── openresponses/ │ │ │ ├── responses.go │ │ │ ├── store.go │ │ │ ├── store_suite_test.go │ │ │ ├── store_test.go │ │ │ └── websocket.go │ │ ├── explorer.go │ │ ├── http_suite_test.go │ │ ├── middleware/ │ │ │ ├── auth.go │ │ │ ├── auth_test.go │ │ │ ├── baseurl.go │ │ │ ├── baseurl_test.go │ │ │ ├── middleware_suite_test.go │ │ │ ├── request.go │ │ │ ├── strippathprefix.go │ │ │ ├── strippathprefix_test.go │ │ │ ├── trace.go │ │ │ └── usage.go │ │ ├── openresponses_test.go │ │ ├── react-ui/ │ │ │ ├── e2e/ │ │ │ │ ├── backend-logs.spec.js │ │ │ │ ├── manage-logs-link.spec.js │ │ │ │ ├── models-gallery.spec.js │ │ │ │ ├── navigation.spec.js │ │ │ │ ├── settings-backend-logging.spec.js │ │ │ │ ├── traces-errors.spec.js │ │ │ │ └── traces.spec.js │ │ │ ├── eslint.config.js │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── playwright.config.js │ │ │ ├── src/ │ │ │ │ ├── App.css │ │ │ │ ├── App.jsx │ │ │ │ ├── components/ │ │ │ │ │ ├── CanvasPanel.jsx │ │ │ │ │ ├── ClientMCPDropdown.jsx │ │ │ │ │ ├── CodeEditor.jsx │ │ │ │ │ ├── ConfirmDialog.jsx │ │ │ │ │ ├── LoadingSpinner.jsx │ │ │ │ │ ├── MCPAppFrame.jsx │ │ │ │ │ ├── Modal.jsx │ │ │ │ │ ├── ModelSelector.jsx │ │ │ │ │ ├── OperationsBar.jsx │ │ │ │ │ ├── RequireAdmin.jsx │ │ │ │ │ ├── RequireAuth.jsx │ │ │ │ │ ├── RequireFeature.jsx │ │ │ │ │ ├── ResourceCards.jsx │ │ │ │ │ ├── ResourceMonitor.jsx │ │ │ │ │ ├── SearchableModelSelect.jsx │ │ │ │ │ ├── SearchableSelect.jsx │ │ │ │ │ ├── SettingRow.jsx │ │ │ │ │ ├── Sidebar.jsx │ │ │ │ │ ├── ThemeToggle.jsx │ │ │ │ │ ├── Toast.jsx │ │ │ │ │ ├── Toggle.jsx │ │ │ │ │ ├── UnifiedMCPDropdown.jsx │ │ │ │ │ └── UserGroupSection.jsx │ │ │ │ ├── context/ │ │ │ │ │ └── AuthContext.jsx │ │ │ │ ├── contexts/ │ │ │ │ │ └── ThemeContext.jsx │ │ │ │ ├── hooks/ │ │ │ │ │ ├── useAgentChat.js │ │ │ │ │ ├── useChat.js │ │ │ │ │ ├── useMCPClient.js │ │ │ │ │ ├── useModels.js │ │ │ │ │ ├── useOperations.js │ │ │ │ │ ├── useResources.js │ │ │ │ │ └── useUserMap.js │ │ │ │ ├── index.css │ │ │ │ ├── main.jsx │ │ │ │ ├── pages/ │ │ │ │ │ ├── Account.jsx │ │ │ │ │ ├── AgentChat.jsx │ │ │ │ │ ├── AgentCreate.jsx │ │ │ │ │ ├── AgentJobDetails.jsx │ │ │ │ │ ├── AgentJobs.jsx │ │ │ │ │ ├── AgentStatus.jsx │ │ │ │ │ ├── AgentTaskDetails.jsx │ │ │ │ │ ├── Agents.jsx │ │ │ │ │ ├── BackendLogs.jsx │ │ │ │ │ ├── Backends.jsx │ │ │ │ │ ├── Chat.jsx │ │ │ │ │ ├── CollectionDetails.jsx │ │ │ │ │ ├── Collections.jsx │ │ │ │ │ ├── Explorer.jsx │ │ │ │ │ ├── Home.jsx │ │ │ │ │ ├── ImageGen.jsx │ │ │ │ │ ├── ImportModel.jsx │ │ │ │ │ ├── Login.jsx │ │ │ │ │ ├── Manage.jsx │ │ │ │ │ ├── ModelEditor.jsx │ │ │ │ │ ├── Models.jsx │ │ │ │ │ ├── NotFound.jsx │ │ │ │ │ ├── P2P.jsx │ │ │ │ │ ├── Settings.jsx │ │ │ │ │ ├── SkillEdit.jsx │ │ │ │ │ ├── Skills.jsx │ │ │ │ │ ├── Sound.jsx │ │ │ │ │ ├── TTS.jsx │ │ │ │ │ ├── Talk.jsx │ │ │ │ │ ├── Traces.jsx │ │ │ │ │ ├── Usage.jsx │ │ │ │ │ ├── Users.jsx │ │ │ │ │ ├── VideoGen.jsx │ │ │ │ │ └── auth.css │ │ │ │ ├── router.jsx │ │ │ │ ├── theme.css │ │ │ │ └── utils/ │ │ │ │ ├── api.js │ │ │ │ ├── artifacts.js │ │ │ │ ├── basePath.js │ │ │ │ ├── config.js │ │ │ │ ├── format.js │ │ │ │ ├── markdown.js │ │ │ │ └── mcpClientStorage.js │ │ │ └── vite.config.js │ │ ├── render.go │ │ ├── routes/ │ │ │ ├── agents.go │ │ │ ├── anthropic.go │ │ │ ├── auth.go │ │ │ ├── auth_test.go │ │ │ ├── elevenlabs.go │ │ │ ├── explorer.go │ │ │ ├── health.go │ │ │ ├── jina.go │ │ │ ├── localai.go │ │ │ ├── openai.go │ │ │ ├── openresponses.go │ │ │ ├── ui.go │ │ │ ├── ui_api.go │ │ │ ├── ui_api_backends_test.go │ │ │ ├── ui_backend_gallery.go │ │ │ └── ui_gallery.go │ │ ├── static/ │ │ │ ├── animations.css │ │ │ ├── assets/ │ │ │ │ ├── alpine.js │ │ │ │ ├── font1.css │ │ │ │ ├── font2.css │ │ │ │ ├── fontawesome/ │ │ │ │ │ └── css/ │ │ │ │ │ ├── all.css │ │ │ │ │ ├── brands.css │ │ │ │ │ ├── fontawesome.css │ │ │ │ │ ├── regular.css │ │ │ │ │ ├── solid.css │ │ │ │ │ ├── svg-with-js.css │ │ │ │ │ ├── v4-font-face.css │ │ │ │ │ ├── v4-shims.css │ │ │ │ │ └── v5-font-face.css │ │ │ │ ├── fontawesome.css │ │ │ │ ├── highlightjs.css │ │ │ │ ├── highlightjs.js │ │ │ │ ├── htmx.js │ │ │ │ ├── marked.js │ │ │ │ ├── purify.js │ │ │ │ ├── tailwindcss.js │ │ │ │ ├── tw-elements.css │ │ │ │ └── tw-elements.js │ │ │ ├── chat.js │ │ │ ├── components.css │ │ │ ├── general.css │ │ │ ├── image.js │ │ │ ├── p2panimation.js │ │ │ ├── sound.js │ │ │ ├── talk.js │ │ │ ├── theme.css │ │ │ ├── tts.js │ │ │ ├── typography.css │ │ │ └── video.js │ │ └── views/ │ │ ├── 404.html │ │ ├── agent-job-details.html │ │ ├── agent-jobs.html │ │ ├── agent-task-details.html │ │ ├── backends.html │ │ ├── chat.html │ │ ├── error.html │ │ ├── explorer.html │ │ ├── image.html │ │ ├── index.html │ │ ├── login.html │ │ ├── manage.html │ │ ├── model-editor.html │ │ ├── models.html │ │ ├── p2p.html │ │ ├── partials/ │ │ │ ├── footer.html │ │ │ ├── head.html │ │ │ ├── inprogress.html │ │ │ ├── navbar.html │ │ │ └── navbar_explorer.html │ │ ├── settings.html │ │ ├── sound.html │ │ ├── talk.html │ │ ├── traces.html │ │ ├── tts.html │ │ └── video.html │ ├── p2p/ │ │ ├── federated.go │ │ ├── federated_server.go │ │ ├── node.go │ │ ├── p2p.go │ │ └── p2p_common.go │ ├── schema/ │ │ ├── agent_jobs.go │ │ ├── anthropic.go │ │ ├── anthropic_test.go │ │ ├── backend.go │ │ ├── elevenlabs.go │ │ ├── gallery-model.schema.json │ │ ├── jina.go │ │ ├── localai.go │ │ ├── message.go │ │ ├── message_test.go │ │ ├── openai.go │ │ ├── openresponses.go │ │ ├── prediction.go │ │ ├── request.go │ │ ├── schema_suite_test.go │ │ ├── tokenize.go │ │ └── transcription.go │ ├── services/ │ │ ├── agent_jobs.go │ │ ├── agent_jobs_test.go │ │ ├── agent_pool.go │ │ ├── agent_pool_sse.go │ │ ├── backend_monitor.go │ │ ├── backends.go │ │ ├── backends_test.go │ │ ├── gallery.go │ │ ├── list_models.go │ │ ├── metrics.go │ │ ├── models.go │ │ ├── operation.go │ │ ├── services_suite_test.go │ │ ├── user_services.go │ │ └── user_storage.go │ ├── startup/ │ │ ├── model_preload.go │ │ ├── model_preload_test.go │ │ └── startup_suite_test.go │ ├── templates/ │ │ ├── cache.go │ │ ├── evaluator.go │ │ ├── evaluator_test.go │ │ ├── multimodal.go │ │ ├── multimodal_test.go │ │ └── templates_suite_test.go │ └── trace/ │ ├── audio_snippet.go │ └── backend_trace.go ├── custom-ca-certs/ │ └── .keep ├── docker-compose.yaml ├── docs/ │ ├── Dockerfile │ ├── README.md │ ├── assets/ │ │ └── jsconfig.json │ ├── content/ │ │ ├── _index.md │ │ ├── advanced/ │ │ │ ├── _index.en.md │ │ │ ├── _index.md │ │ │ ├── advanced-usage.md │ │ │ ├── fine-tuning.md │ │ │ ├── model-configuration.md │ │ │ ├── reverse-proxy-tls.md │ │ │ └── vram-management.md │ │ ├── faq.md │ │ ├── features/ │ │ │ ├── GPU-acceleration.md │ │ │ ├── _index.en.md │ │ │ ├── agents.md │ │ │ ├── audio-to-text.md │ │ │ ├── authentication.md │ │ │ ├── backend-monitor.md │ │ │ ├── backends.md │ │ │ ├── constrained_grammars.md │ │ │ ├── distributed_inferencing.md │ │ │ ├── embeddings.md │ │ │ ├── gpt-vision.md │ │ │ ├── image-generation.md │ │ │ ├── mcp.md │ │ │ ├── mlx-distributed.md │ │ │ ├── model-gallery.md │ │ │ ├── object-detection.md │ │ │ ├── openai-functions.md │ │ │ ├── openai-realtime.md │ │ │ ├── p2p.md │ │ │ ├── reranker.md │ │ │ ├── runtime-settings.md │ │ │ ├── sound-generation.md │ │ │ ├── stores.md │ │ │ ├── text-generation.md │ │ │ ├── text-to-audio.md │ │ │ ├── video-generation.md │ │ │ └── voice-activity-detection.md │ │ ├── getting-started/ │ │ │ ├── _index.en.md │ │ │ ├── build.md │ │ │ ├── container-images.md │ │ │ ├── customize-model.md │ │ │ ├── kubernetes.md │ │ │ ├── models.md │ │ │ ├── quickstart.md │ │ │ ├── troubleshooting.md │ │ │ └── try-it-out.md │ │ ├── installation/ │ │ │ ├── _index.en.md │ │ │ ├── build.md │ │ │ ├── containers.md │ │ │ ├── docker.md │ │ │ ├── kubernetes.md │ │ │ ├── linux.md │ │ │ └── macos.md │ │ ├── integrations.md │ │ ├── overview.md │ │ ├── reference/ │ │ │ ├── _index.en.md │ │ │ ├── _index.md │ │ │ ├── api-errors.md │ │ │ ├── architecture.md │ │ │ ├── binaries.md │ │ │ ├── cli-reference.md │ │ │ ├── compatibility-table.md │ │ │ ├── nvidia-l4t.md │ │ │ ├── shell-completion.md │ │ │ └── system-info.md │ │ └── whats-new.md │ ├── data/ │ │ ├── landing.yaml │ │ └── version.json │ ├── docker-compose.yaml │ ├── go.mod │ ├── go.sum │ ├── hugo.toml │ ├── layouts/ │ │ ├── 404.html │ │ ├── partials/ │ │ │ ├── docs/ │ │ │ │ ├── gitinfo.html │ │ │ │ ├── sidebar.html │ │ │ │ └── top-header.html │ │ │ ├── head.html │ │ │ ├── header.html │ │ │ ├── logo.html │ │ │ └── menu-footer.html │ │ └── shortcodes/ │ │ ├── github.html │ │ ├── pr.html │ │ └── version.html │ ├── netlify.toml │ ├── package.json │ └── static/ │ └── site.webmanifest ├── entrypoint.sh ├── examples/ │ └── README.md ├── gallery/ │ ├── alpaca.yaml │ ├── arch-function.yaml │ ├── cerbero.yaml │ ├── chatml-hercules.yaml │ ├── chatml.yaml │ ├── codellama.yaml │ ├── command-r.yaml │ ├── deephermes.yaml │ ├── deepseek-r1.yaml │ ├── deepseek.yaml │ ├── dreamshaper.yaml │ ├── falcon3.yaml │ ├── flux-ggml.yaml │ ├── flux.yaml │ ├── gemma.yaml │ ├── granite.yaml │ ├── granite3-2.yaml │ ├── granite4.yaml │ ├── harmony.yaml │ ├── hermes-2-pro-mistral.yaml │ ├── hermes-vllm.yaml │ ├── index.yaml │ ├── jamba.yaml │ ├── lfm.yaml │ ├── llama3-instruct.yaml │ ├── llama3.1-instruct-grammar.yaml │ ├── llama3.1-instruct.yaml │ ├── llama3.1-reflective.yaml │ ├── llama3.2-fcall.yaml │ ├── llama3.2-quantized.yaml │ ├── llava.yaml │ ├── mathstral.yaml │ ├── mistral-0.3.yaml │ ├── moondream.yaml │ ├── mudler.yaml │ ├── nanbeige4.1.yaml │ ├── noromaid.yaml │ ├── openvino.yaml │ ├── parler-tts.yaml │ ├── phi-2-chat.yaml │ ├── phi-2-orange.yaml │ ├── phi-3-chat.yaml │ ├── phi-3-vision.yaml │ ├── phi-4-chat-fcall.yaml │ ├── phi-4-chat.yaml │ ├── piper.yaml │ ├── pocket-tts.yaml │ ├── qwen-fcall.yaml │ ├── qwen-image.yaml │ ├── qwen3-deepresearch.yaml │ ├── qwen3-openbuddy.yaml │ ├── qwen3.yaml │ ├── rerankers.yaml │ ├── rwkv.yaml │ ├── sd-ggml.yaml │ ├── sentencetransformers.yaml │ ├── smolvlm.yaml │ ├── stablediffusion3.yaml │ ├── tuluv2.yaml │ ├── vibevoice.yaml │ ├── vicuna-chat.yaml │ ├── virtual.yaml │ ├── vllm.yaml │ ├── whisper-base.yaml │ ├── wizardlm2.yaml │ └── z-image-ggml.yaml ├── go.mod ├── go.sum ├── internal/ │ └── version.go ├── pkg/ │ ├── audio/ │ │ ├── audio.go │ │ ├── audio_suite_test.go │ │ ├── audio_test.go │ │ └── identify.go │ ├── concurrency/ │ │ ├── concurrency_suite_test.go │ │ ├── jobresult.go │ │ └── jobresult_test.go │ ├── downloader/ │ │ ├── downloader_suite_test.go │ │ ├── huggingface.go │ │ ├── progress.go │ │ ├── uri.go │ │ └── uri_test.go │ ├── format/ │ │ └── transcription.go │ ├── functions/ │ │ ├── chat_deltas.go │ │ ├── function_structure.go │ │ ├── functions.go │ │ ├── functions_suite_test.go │ │ ├── functions_test.go │ │ ├── grammars/ │ │ │ ├── bnf_rules.go │ │ │ ├── grammars_suite_test.go │ │ │ ├── json_schema.go │ │ │ ├── json_schema_test.go │ │ │ ├── llama31_schema.go │ │ │ ├── llama31_schema_test.go │ │ │ ├── options.go │ │ │ ├── rules.go │ │ │ └── types.go │ │ ├── iterative_parser.go │ │ ├── json_mode.go │ │ ├── json_stack_parser.go │ │ ├── parse.go │ │ ├── parse_test.go │ │ ├── peg/ │ │ │ ├── arena.go │ │ │ ├── builder.go │ │ │ ├── chat.go │ │ │ ├── chat_test.go │ │ │ ├── parser.go │ │ │ ├── parser_test.go │ │ │ ├── peg_suite_test.go │ │ │ ├── trie.go │ │ │ ├── types.go │ │ │ └── utils_test.go │ │ ├── peg_integration.go │ │ └── peg_integration_test.go │ ├── grpc/ │ │ ├── backend.go │ │ ├── base/ │ │ │ ├── base.go │ │ │ └── singlethread.go │ │ ├── client.go │ │ ├── embed.go │ │ ├── interface.go │ │ └── server.go │ ├── huggingface-api/ │ │ ├── client.go │ │ ├── client_test.go │ │ └── hfapi_suite_test.go │ ├── langchain/ │ │ └── langchain.go │ ├── model/ │ │ ├── backend_log_store.go │ │ ├── filters.go │ │ ├── initializers.go │ │ ├── loader.go │ │ ├── loader_options.go │ │ ├── loader_test.go │ │ ├── model.go │ │ ├── model_suite_test.go │ │ ├── process.go │ │ ├── watchdog.go │ │ ├── watchdog_options.go │ │ ├── watchdog_options_test.go │ │ └── watchdog_test.go │ ├── oci/ │ │ ├── blob.go │ │ ├── blob_test.go │ │ ├── image.go │ │ ├── image_test.go │ │ ├── oci_suite_test.go │ │ ├── ollama.go │ │ ├── ollama_test.go │ │ └── tarball.go │ ├── reasoning/ │ │ ├── config.go │ │ ├── extractor.go │ │ ├── extractor_test.go │ │ ├── reasoning.go │ │ ├── reasoning_suite_test.go │ │ └── reasoning_test.go │ ├── signals/ │ │ └── handler.go │ ├── sound/ │ │ ├── float32.go │ │ ├── int16.go │ │ ├── int16_test.go │ │ ├── sound_suite_test.go │ │ └── testutil_test.go │ ├── store/ │ │ └── client.go │ ├── system/ │ │ ├── capabilities.go │ │ ├── capabilities_test.go │ │ ├── state.go │ │ └── system_suite_test.go │ ├── utils/ │ │ ├── base64.go │ │ ├── base64_test.go │ │ ├── ffmpeg.go │ │ ├── hash.go │ │ ├── json.go │ │ ├── logging.go │ │ ├── path.go │ │ ├── strings.go │ │ ├── untar.go │ │ ├── urlfetch.go │ │ ├── urlfetch_test.go │ │ └── utils_suite_test.go │ ├── vram/ │ │ ├── cache.go │ │ ├── estimate.go │ │ ├── estimate_test.go │ │ ├── gguf_reader.go │ │ ├── hf_estimate.go │ │ ├── hf_estimate_test.go │ │ ├── types.go │ │ └── vram_suite_test.go │ ├── xio/ │ │ └── copy.go │ ├── xsync/ │ │ ├── map.go │ │ ├── map_test.go │ │ └── sync_suite_test.go │ └── xsysinfo/ │ ├── cpu.go │ ├── gpu.go │ └── memory.go ├── prompt-templates/ │ ├── alpaca.tmpl │ ├── getting_started.tmpl │ ├── ggml-gpt4all-j.tmpl │ ├── koala.tmpl │ ├── llama2-chat-message.tmpl │ ├── vicuna.tmpl │ └── wizardlm.tmpl ├── renovate.json ├── scripts/ │ ├── build/ │ │ ├── golang-darwin.sh │ │ ├── llama-cpp-darwin.sh │ │ ├── package-gpu-libs.sh │ │ └── python-darwin.sh │ ├── changed-backends.js │ ├── latest_hf.py │ ├── model_gallery_info.py │ └── prepare-libs.sh ├── swagger/ │ ├── docs.go │ ├── swagger.json │ └── swagger.yaml ├── tests/ │ ├── e2e/ │ │ ├── e2e_anthropic_test.go │ │ ├── e2e_mcp_test.go │ │ ├── e2e_suite_test.go │ │ ├── e2e_websocket_responses_test.go │ │ ├── mock_backend_test.go │ │ ├── realtime_webrtc_test.go │ │ └── realtime_ws_test.go │ ├── e2e-aio/ │ │ ├── e2e_suite_test.go │ │ ├── e2e_test.go │ │ ├── models/ │ │ │ ├── embeddings.yaml │ │ │ ├── image-gen.yaml │ │ │ ├── rerank.yaml │ │ │ ├── speech-to-text.yaml │ │ │ ├── text-to-speech.yaml │ │ │ ├── text-to-text.yaml │ │ │ ├── vad.yaml │ │ │ └── vision.yaml │ │ └── sample_data_test.go │ ├── e2e-ui/ │ │ ├── .gitignore │ │ ├── Dockerfile │ │ └── main.go │ ├── fixtures/ │ │ ├── backend-image/ │ │ │ ├── Dockerfile │ │ │ ├── run.sh │ │ │ └── src/ │ │ │ └── .keep │ │ └── gallery_simple.yaml │ ├── integration/ │ │ ├── integration_suite_test.go │ │ └── stores_test.go │ └── models_fixtures/ │ ├── completion.tmpl │ ├── config.yaml │ ├── embeddings.yaml │ ├── ggml-gpt4all-j.tmpl │ ├── gpt4.yaml │ ├── gpt4_2.yaml │ ├── grpc.yaml │ ├── rwkv.yaml │ └── whisper.yaml └── webui_static.yaml
Showing preview only (562K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6071 symbols across 522 files)
FILE: .github/check_and_update.py
function parse_uri (line 11) | def parse_uri(uri):
function calculate_sha256 (line 22) | def calculate_sha256(file_path):
function manual_safety_check_hf (line 29) | def manual_safety_check_hf(repo_id):
FILE: .github/ci/modelslist.go
type GalleryModel (line 259) | type GalleryModel struct
function main (line 266) | func main() {
FILE: .github/gallery-agent/agent.go
function cleanTextContent (line 33) | func cleanTextContent(text string) string {
type galleryModel (line 56) | type galleryModel struct
function isModelExisting (line 62) | func isModelExisting(modelID string) (bool, error) {
function filterExistingModels (line 86) | func filterExistingModels(models []ProcessedModel) ([]ProcessedModel, er...
function getGalleryIndexPath (line 109) | func getGalleryIndexPath() string {
function stripThinkingTags (line 116) | func stripThinkingTags(content string) string {
function getRealReadme (line 126) | func getRealReadme(ctx context.Context, repository string) (string, erro...
function selectMostInterestingModels (line 153) | func selectMostInterestingModels(ctx context.Context, searchResult *Sear...
type ModelMetadata (line 258) | type ModelMetadata struct
function extractModelMetadata (line 264) | func extractModelMetadata(ctx context.Context, model ProcessedModel) ([]...
function extractIconFromReadme (line 337) | func extractIconFromReadme(readmeContent string) string {
function getHuggingFaceAvatarURL (line 382) | func getHuggingFaceAvatarURL(author string) string {
function extractModelIcon (line 431) | func extractModelIcon(model ProcessedModel) string {
FILE: .github/gallery-agent/gallery.go
function formatTextContent (line 14) | func formatTextContent(text string) string {
function formatTextContentWithIndent (line 19) | func formatTextContentWithIndent(text string, baseIndent int, listItemIn...
function generateYAMLEntry (line 54) | func generateYAMLEntry(model ProcessedModel, quantization string) string {
function generateYAMLForModels (line 146) | func generateYAMLForModels(ctx context.Context, models []ProcessedModel,...
FILE: .github/gallery-agent/main.go
type ProcessedModelFile (line 16) | type ProcessedModelFile struct
type ProcessedModel (line 25) | type ProcessedModel struct
type SearchResult (line 43) | type SearchResult struct
type AddedModelSummary (line 53) | type AddedModelSummary struct
function main (line 63) | func main() {
function searchAndProcessModels (line 205) | func searchAndProcessModels(searchTerm string, limit int, quantization s...
function truncateString (line 378) | func truncateString(s string, maxLen int) string {
FILE: .github/gallery-agent/testing.go
function runSyntheticMode (line 12) | func runSyntheticMode() error {
type SyntheticDataGenerator (line 38) | type SyntheticDataGenerator struct
method GenerateProcessedModelFile (line 50) | func (g *SyntheticDataGenerator) GenerateProcessedModelFile() Processe...
method GenerateProcessedModel (line 79) | func (g *SyntheticDataGenerator) GenerateProcessedModel() ProcessedMod...
method randomString (line 179) | func (g *SyntheticDataGenerator) randomString(length int) string {
method randomSHA256 (line 188) | func (g *SyntheticDataGenerator) randomSHA256() string {
method randomDate (line 197) | func (g *SyntheticDataGenerator) randomDate() string {
method removeDuplicates (line 204) | func (g *SyntheticDataGenerator) removeDuplicates(slice []string) []st...
method generateReadmeContent (line 216) | func (g *SyntheticDataGenerator) generateReadmeContent(modelName, auth...
function NewSyntheticDataGenerator (line 43) | func NewSyntheticDataGenerator() *SyntheticDataGenerator {
FILE: .github/gallery-agent/tools.go
type HFReadmeTool (line 12) | type HFReadmeTool struct
method Execute (line 16) | func (s *HFReadmeTool) Execute(args map[string]any) (string, any, erro...
method Tool (line 28) | func (s *HFReadmeTool) Tool() openai.Tool {
FILE: backend/cpp/llama-cpp/grpc-server.cpp
function signal_handler (line 54) | static inline void signal_handler(int signal) {
function start_llama_server (line 73) | static void start_llama_server(server_context& ctx_server) {
function json (line 117) | json parse_options(bool streaming, const backend::PredictOptions* predic...
function ggml_type (line 311) | static ggml_type kv_cache_type_from_str(const std::string & s) {
function get_all_kv_cache_types (line 320) | static std::string get_all_kv_cache_types() {
function add_rpc_devices (line 330) | static void add_rpc_devices(std::string servers) {
function params_parse (line 356) | static void params_parse(server_context& /*ctx_server*/, const backend::...
class BackendServiceImpl (line 708) | class BackendServiceImpl final : public backend::Backend::Service {
method BackendServiceImpl (line 714) | BackendServiceImpl(server_context& ctx) : ctx_server(ctx) {}
method Health (line 716) | grpc::Status Health(ServerContext* /*context*/, const backend::HealthM...
method LoadModel (line 722) | grpc::Status LoadModel(ServerContext* /*context*/, const backend::Mode...
method json (line 849) | static json extract_logprobs_from_json(const json& res_json) {
method populate_chat_deltas_from_diffs (line 871) | static void populate_chat_deltas_from_diffs(backend::Reply & reply,
method populate_chat_deltas_from_final (line 898) | static void populate_chat_deltas_from_final(backend::Reply & reply,
method PredictStream (line 920) | grpc::Status PredictStream(grpc::ServerContext* context, const backend...
method Predict (line 1623) | grpc::Status Predict(ServerContext* context, const backend::PredictOpt...
method Embedding (line 2341) | grpc::Status Embedding(ServerContext* context, const backend::PredictO...
method Rerank (line 2436) | grpc::Status Rerank(ServerContext* context, const backend::RerankReque...
method TokenizeString (line 2522) | grpc::Status TokenizeString(ServerContext* /*context*/, const backend:...
method GetMetrics (line 2545) | grpc::Status GetMetrics(ServerContext* /*context*/, const backend::Met...
method ModelMetadata (line 2586) | grpc::Status ModelMetadata(ServerContext* /*context*/, const backend::...
function main (line 2736) | int main(int argc, char** argv) {
FILE: backend/go/acestep-cpp/acestepcpp_test.go
constant testAddr (line 17) | testAddr = "localhost:50051"
constant startupWait (line 18) | startupWait = 5 * time.Second
function skipIfNoModel (line 21) | func skipIfNoModel(t *testing.T) string {
function startServer (line 42) | func startServer(t *testing.T) *exec.Cmd {
function stopServer (line 61) | func stopServer(cmd *exec.Cmd) {
function dialGRPC (line 68) | func dialGRPC(t *testing.T) *grpc.ClientConn {
function TestServerHealth (line 83) | func TestServerHealth(t *testing.T) {
function TestLoadModel (line 100) | func TestLoadModel(t *testing.T) {
function TestSoundGeneration (line 130) | func TestSoundGeneration(t *testing.T) {
FILE: backend/go/acestep-cpp/cpp/goacestepcpp.cpp
function ggml_log_cb (line 40) | static void ggml_log_cb(enum ggml_log_level level, const char * log, voi...
function load_model (line 66) | int load_model(const char * lm_model_path, const char * text_encoder_path,
function generate_music (line 115) | int generate_music(const char * caption, const char * lyrics, int bpm,
FILE: backend/go/acestep-cpp/goacestepcpp.go
type AceStepCpp (line 18) | type AceStepCpp struct
method Load (line 22) | func (a *AceStepCpp) Load(opts *pb.ModelOptions) error {
method SoundGeneration (line 89) | func (a *AceStepCpp) SoundGeneration(req *pb.SoundGenerationRequest) e...
FILE: backend/go/acestep-cpp/main.go
type LibFuncs (line 16) | type LibFuncs struct
function main (line 21) | func main() {
FILE: backend/go/llm/llama/llama.go
type LLM (line 14) | type LLM struct
method Free (line 24) | func (llm *LLM) Free() error {
method Load (line 35) | func (llm *LLM) Load(opts *pb.ModelOptions) error {
method Predict (line 218) | func (llm *LLM) Predict(opts *pb.PredictOptions) (string, error) {
method PredictStream (line 225) | func (llm *LLM) PredictStream(opts *pb.PredictOptions, results chan st...
method Embeddings (line 250) | func (llm *LLM) Embeddings(opts *pb.PredictOptions) ([]float32, error) {
method TokenizeString (line 264) | func (llm *LLM) TokenizeString(opts *pb.PredictOptions) (pb.Tokenizati...
function buildPredictOptions (line 125) | func buildPredictOptions(opts *pb.PredictOptions) []llama.PredictOption {
FILE: backend/go/llm/llama/main.go
function main (line 17) | func main() {
FILE: backend/go/local-store/debug.go
function assert (line 10) | func assert(cond bool, msg string) {
FILE: backend/go/local-store/main.go
function main (line 17) | func main() {
FILE: backend/go/local-store/production.go
function assert (line 6) | func assert(cond bool, msg string) {
FILE: backend/go/local-store/store.go
type Store (line 18) | type Store struct
method Load (line 102) | func (s *Store) Load(opts *pb.ModelOptions) error {
method StoresSet (line 110) | func (s *Store) StoresSet(opts *pb.StoresSetOptions) error {
method StoresDelete (line 204) | func (s *Store) StoresDelete(opts *pb.StoresDeleteOptions) error {
method StoresGet (line 270) | func (s *Store) StoresGet(opts *pb.StoresGetOptions) (pb.StoresGetResu...
method StoresFindNormalized (line 377) | func (s *Store) StoresFindNormalized(opts *pb.StoresFindOptions) (pb.S...
method StoresFindFallback (line 434) | func (s *Store) StoresFindFallback(opts *pb.StoresFindOptions) (pb.Sto...
method StoresFind (line 481) | func (s *Store) StoresFind(opts *pb.StoresFindOptions) (pb.StoresFindR...
type Pair (line 35) | type Pair struct
function NewStore (line 40) | func NewStore() *Store {
function compareSlices (line 49) | func compareSlices(k1, k2 []float32) int {
function hasKey (line 55) | func hasKey(unsortedSlice [][]float32, target []float32) bool {
function findInSortedSlice (line 61) | func findInSortedSlice(sortedSlice [][]float32, target []float32) (int, ...
function isSortedPairs (line 67) | func isSortedPairs(kvs []Pair) bool {
function isSortedKeys (line 77) | func isSortedKeys(keys [][]float32) bool {
function sortIntoKeySlicese (line 87) | func sortIntoKeySlicese(keys []*pb.StoresKey) [][]float32 {
function isNormalized (line 317) | func isNormalized(k []float32) bool {
function normalizedCosineSimilarity (line 331) | func normalizedCosineSimilarity(k1, k2 []float32) float32 {
type PriorityItem (line 345) | type PriorityItem struct
type PriorityQueue (line 351) | type PriorityQueue
method Len (line 353) | func (pq PriorityQueue) Len() int { return len(pq) }
method Less (line 355) | func (pq PriorityQueue) Less(i, j int) bool {
method Swap (line 360) | func (pq PriorityQueue) Swap(i, j int) {
method Push (line 364) | func (pq *PriorityQueue) Push(x any) {
method Pop (line 369) | func (pq *PriorityQueue) Pop() any {
function cosineSimilarity (line 418) | func cosineSimilarity(k1, k2 []float32, mag1 float64) float32 {
FILE: backend/go/opus/codec.go
constant ApplicationVoIP (line 15) | ApplicationVoIP = 2048
constant ApplicationAudio (line 16) | ApplicationAudio = 2049
constant ApplicationRestrictedLowDelay (line 17) | ApplicationRestrictedLowDelay = 2051
function loadLib (line 41) | func loadLib(names []string) (uintptr, error) {
function ensureInit (line 55) | func ensureInit() error {
constant shimHint (line 62) | shimHint = "ensure libopus-dev is installed and rebuild, or set OPUS_LIB...
function doInit (line 64) | func doInit() error {
function opusSearchPaths (line 91) | func opusSearchPaths() []string {
function shimSearchPaths (line 118) | func shimSearchPaths() []string {
type Encoder (line 141) | type Encoder struct
method Encode (line 160) | func (e *Encoder) Encode(pcm []int16, frameSize int, out []byte) (int,...
method SetBitrate (line 171) | func (e *Encoder) SetBitrate(bitrate int) error {
method SetComplexity (line 178) | func (e *Encoder) SetComplexity(complexity int) error {
method Close (line 185) | func (e *Encoder) Close() {
function NewEncoder (line 145) | func NewEncoder(sampleRate, channels, application int) (*Encoder, error) {
type Decoder (line 193) | type Decoder struct
method Decode (line 213) | func (d *Decoder) Decode(data []byte, pcm []int16, frameSize int, fec ...
method Close (line 237) | func (d *Decoder) Close() {
function NewDecoder (line 197) | func NewDecoder(sampleRate, channels int) (*Decoder, error) {
function Init (line 246) | func Init() error {
function Reset (line 251) | func Reset() {
FILE: backend/go/opus/csrc/opus_shim.c
function opus_shim_encoder_set_bitrate (line 3) | int opus_shim_encoder_set_bitrate(OpusEncoder *st, opus_int32 bitrate) {
function opus_shim_encoder_set_complexity (line 7) | int opus_shim_encoder_set_complexity(OpusEncoder *st, opus_int32 complex...
FILE: backend/go/opus/main.go
function main (line 11) | func main() {
FILE: backend/go/opus/opus.go
constant opusSampleRate (line 14) | opusSampleRate = 48000
constant opusChannels (line 15) | opusChannels = 1
constant opusFrameSize (line 16) | opusFrameSize = 960
constant opusMaxPacketSize (line 17) | opusMaxPacketSize = 4000
constant opusMaxFrameSize (line 18) | opusMaxFrameSize = 5760
constant decoderIdleTTL (line 20) | decoderIdleTTL = 60 * time.Second
constant decoderEvictTick (line 21) | decoderEvictTick = 30 * time.Second
type cachedDecoder (line 24) | type cachedDecoder struct
type Opus (line 30) | type Opus struct
method Load (line 37) | func (o *Opus) Load(opts *pb.ModelOptions) error {
method evictLoop (line 43) | func (o *Opus) evictLoop() {
method getOrCreateDecoder (line 61) | func (o *Opus) getOrCreateDecoder(sessionID string) (*cachedDecoder, e...
method AudioEncode (line 79) | func (o *Opus) AudioEncode(req *pb.AudioEncodeRequest) (*pb.AudioEncod...
method AudioDecode (line 126) | func (o *Opus) AudioDecode(req *pb.AudioDecodeRequest) (*pb.AudioDecod...
FILE: backend/go/opus/opus_test.go
function TestOpusBackend (line 24) | func TestOpusBackend(t *testing.T) {
function generateSineWave (line 31) | func generateSineWave(freq float64, sampleRate, numSamples int) []int16 {
function computeRMS (line 40) | func computeRMS(samples []int16) float64 {
function estimateFrequency (line 52) | func estimateFrequency(samples []int16, sampleRate int) float64 {
function encodeDecodeRoundtrip (line 68) | func encodeDecodeRoundtrip(o *Opus, pcmBytes []byte, sampleRate int) []i...
function extractOpusFramesFromOgg (line 88) | func extractOpusFramesFromOgg(data []byte) [][]byte {
function parseTestWAV (line 143) | func parseTestWAV(data []byte) (pcm []byte, sampleRate int) {
function writeOggOpus (line 167) | func writeOggOpus(path string, frames [][]byte, sampleRate, channels int...
function writeOggPage (line 216) | func writeOggPage(w io.Writer, serial, pageSeq uint32, granulePos uint64...
function oggCRC32 (line 249) | func oggCRC32(header, data []byte) uint32 {
function goertzel (line 276) | func goertzel(samples []int16, targetFreq float64, sampleRate int) float...
function computeTHD (line 293) | func computeTHD(samples []int16, fundamentalHz float64, sampleRate, numH...
FILE: backend/go/piper/main.go
function main (line 15) | func main() {
FILE: backend/go/piper/piper.go
type Piper (line 15) | type Piper struct
method Load (line 20) | func (sd *Piper) Load(opts *pb.ModelOptions) error {
method TTS (line 30) | func (sd *Piper) TTS(opts *pb.TTSRequest) error {
type PiperB (line 34) | type PiperB struct
method TTS (line 47) | func (s *PiperB) TTS(text, model, dst string) error {
function New (line 38) | func New(assetDir string) (*PiperB, error) {
FILE: backend/go/silero-vad/main.go
function main (line 15) | func main() {
FILE: backend/go/silero-vad/vad.go
type VAD (line 13) | type VAD struct
method Load (line 18) | func (vad *VAD) Load(opts *pb.ModelOptions) error {
method VAD (line 35) | func (vad *VAD) VAD(req *pb.VADRequest) (pb.VADResponse, error) {
FILE: backend/python/ace-step/backend.py
function _is_float (line 51) | def _is_float(s):
function _is_int (line 59) | def _is_int(s):
function _parse_timesteps (line 67) | def _parse_timesteps(s):
function _parse_options (line 78) | def _parse_options(opts_list):
function _generate_audio_sync (line 98) | def _generate_audio_sync(servicer, payload, dst_path):
class BackendServicer (line 291) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method __init__ (line 292) | def __init__(self):
method Health (line 301) | def Health(self, request, context):
method LoadModel (line 304) | def LoadModel(self, request, context):
method SoundGeneration (line 390) | def SoundGeneration(self, request, context):
method TTS (line 425) | def TTS(self, request, context):
function serve (line 439) | def serve(address):
FILE: backend/python/ace-step/test.py
class TestACEStepBackend (line 13) | class TestACEStepBackend(unittest.TestCase):
method setUpClass (line 17) | def setUpClass(cls):
method tearDownClass (line 23) | def tearDownClass(cls):
method test_health (line 26) | def test_health(self):
method test_load_model (line 30) | def test_load_model(self):
method test_sound_generation_minimal (line 34) | def test_sound_generation_minimal(self):
FILE: backend/python/chatterbox/backend.py
function is_float (line 21) | def is_float(s):
function is_int (line 28) | def is_int(s):
function split_text_at_word_boundary (line 36) | def split_text_at_word_boundary(text, max_length=250):
function merge_audio_files (line 71) | def merge_audio_files(audio_files, output_path, sample_rate):
class BackendServicer (line 111) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 115) | def Health(self, request, context):
method LoadModel (line 117) | def LoadModel(self, request, context):
method TTS (line 178) | def TTS(self, request, context):
function serve (line 222) | def serve(address):
FILE: backend/python/chatterbox/test.py
class TestBackendServicer (line 13) | class TestBackendServicer(unittest.TestCase):
method setUp (line 17) | def setUp(self):
method tearDown (line 24) | def tearDown(self) -> None:
method test_server_startup (line 31) | def test_server_startup(self):
method test_load_model (line 47) | def test_load_model(self):
method test_tts (line 65) | def test_tts(self):
FILE: backend/python/coqui/backend.py
class BackendServicer (line 27) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 31) | def Health(self, request, context):
method LoadModel (line 33) | def LoadModel(self, request, context):
method TTS (line 69) | def TTS(self, request, context):
function serve (line 90) | def serve(address):
FILE: backend/python/coqui/test.py
class TestBackendServicer (line 13) | class TestBackendServicer(unittest.TestCase):
method setUp (line 17) | def setUp(self):
method tearDown (line 24) | def tearDown(self) -> None:
method test_server_startup (line 31) | def test_server_startup(self):
method test_load_model (line 47) | def test_load_model(self):
method test_tts (line 65) | def test_tts(self):
FILE: backend/python/diffusers/backend.py
function sc (line 85) | def sc(self, clip_input, images): return images, [False for i in images]
function is_float (line 105) | def is_float(s):
function is_int (line 112) | def is_int(s):
class DiffusionScheduler (line 124) | class DiffusionScheduler(str, Enum):
function get_scheduler (line 151) | def get_scheduler(name: str, config: dict = {}):
class BackendServicer (line 197) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method _load_pipeline (line 199) | def _load_pipeline(self, request, modelFile, fromSingleFile, torchType...
method Health (line 475) | def Health(self, request, context):
method LoadModel (line 478) | def LoadModel(self, request, context):
method load_lora_weights (line 645) | def load_lora_weights(self, checkpoint_path, multiplier, device, dtype):
method GenerateImage (line 699) | def GenerateImage(self, request, context):
method GenerateVideo (line 853) | def GenerateVideo(self, request, context):
function serve (line 1039) | def serve(address):
FILE: backend/python/diffusers/diffusers_dynamic_loader.py
function _camel_to_kebab (line 45) | def _camel_to_kebab(name: str) -> str:
function _extract_task_keywords (line 60) | def _extract_task_keywords(class_name: str) -> List[str]:
function discover_diffusers_classes (line 124) | def discover_diffusers_classes(
function get_available_classes (line 204) | def get_available_classes(base_class_name: str) -> List[str]:
function _discover_pipelines (line 217) | def _discover_pipelines() -> Tuple[Dict[str, Type], Dict[str, List[str]]]:
function get_pipeline_registry (line 267) | def get_pipeline_registry() -> Dict[str, Type]:
function get_task_aliases (line 280) | def get_task_aliases() -> Dict[str, List[str]]:
function get_available_pipelines (line 293) | def get_available_pipelines() -> List[str]:
function get_available_tasks (line 303) | def get_available_tasks() -> List[str]:
function resolve_pipeline_class (line 313) | def resolve_pipeline_class(
function load_diffusers_pipeline (line 421) | def load_diffusers_pipeline(
function get_pipeline_info (line 505) | def get_pipeline_info(class_name: str) -> Dict[str, Any]:
FILE: backend/python/diffusers/test.py
class TestBackendServicer (line 24) | class TestBackendServicer(unittest.TestCase):
method setUp (line 28) | def setUp(self):
method tearDown (line 34) | def tearDown(self) -> None:
method test_server_startup (line 41) | def test_server_startup(self):
method test_load_model (line 58) | def test_load_model(self):
method test (line 76) | def test(self):
class TestDiffusersDynamicLoader (line 98) | class TestDiffusersDynamicLoader(unittest.TestCase):
method setUpClass (line 102) | def setUpClass(cls):
method test_camel_to_kebab_conversion (line 108) | def test_camel_to_kebab_conversion(self):
method test_extract_task_keywords (line 121) | def test_extract_task_keywords(self):
method test_discover_pipelines_finds_known_classes (line 141) | def test_discover_pipelines_finds_known_classes(self):
method test_discover_pipelines_caches_results (line 162) | def test_discover_pipelines_caches_results(self):
method test_get_available_pipelines (line 171) | def test_get_available_pipelines(self):
method test_get_available_tasks (line 185) | def test_get_available_tasks(self):
method test_resolve_pipeline_class_by_name (line 195) | def test_resolve_pipeline_class_by_name(self):
method test_resolve_pipeline_class_by_name_case_insensitive (line 200) | def test_resolve_pipeline_class_by_name_case_insensitive(self):
method test_resolve_pipeline_class_by_task (line 206) | def test_resolve_pipeline_class_by_task(self):
method test_resolve_pipeline_class_unknown_name_raises (line 216) | def test_resolve_pipeline_class_unknown_name_raises(self):
method test_resolve_pipeline_class_unknown_task_raises (line 226) | def test_resolve_pipeline_class_unknown_task_raises(self):
method test_resolve_pipeline_class_no_params_raises (line 236) | def test_resolve_pipeline_class_no_params_raises(self):
method test_get_pipeline_info (line 244) | def test_get_pipeline_info(self):
method test_get_pipeline_info_unknown_raises (line 252) | def test_get_pipeline_info_unknown_raises(self):
method test_discover_diffusers_classes_pipelines (line 259) | def test_discover_diffusers_classes_pipelines(self):
method test_discover_diffusers_classes_caches_results (line 270) | def test_discover_diffusers_classes_caches_results(self):
method test_discover_diffusers_classes_exclude_base (line 278) | def test_discover_diffusers_classes_exclude_base(self):
method test_get_available_classes (line 285) | def test_get_available_classes(self):
class TestDiffusersDynamicLoaderWithMocks (line 297) | class TestDiffusersDynamicLoaderWithMocks(unittest.TestCase):
method test_load_pipeline_requires_model_id (line 300) | def test_load_pipeline_requires_model_id(self):
method test_resolve_with_model_id_uses_diffusion_pipeline_fallback (line 307) | def test_resolve_with_model_id_uses_diffusion_pipeline_fallback(self):
class TestGenerateImageOptionsKwargsMerge (line 318) | class TestGenerateImageOptionsKwargsMerge(unittest.TestCase):
method test_options_merged_into_pipeline_kwargs (line 326) | def test_options_merged_into_pipeline_kwargs(self):
FILE: backend/python/faster-qwen3-tts/backend.py
function is_float (line 20) | def is_float(s):
function is_int (line 28) | def is_int(s):
class BackendServicer (line 40) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 41) | def Health(self, request, context):
method LoadModel (line 44) | def LoadModel(self, request, context):
method _get_ref_audio_path (line 81) | def _get_ref_audio_path(self, request):
method TTS (line 97) | def TTS(self, request, context):
function serve (line 160) | def serve(address):
FILE: backend/python/faster-qwen3-tts/test.py
class TestBackendServicer (line 15) | class TestBackendServicer(unittest.TestCase):
method setUp (line 16) | def setUp(self):
method tearDown (line 26) | def tearDown(self):
method test_health (line 34) | def test_health(self):
method test_load_model_requires_cuda (line 40) | def test_load_model_requires_cuda(self):
method test_tts (line 56) | def test_tts(self):
FILE: backend/python/faster-whisper/backend.py
class BackendServicer (line 26) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 30) | def Health(self, request, context):
method LoadModel (line 32) | def LoadModel(self, request, context):
method AudioTranscription (line 50) | def AudioTranscription(self, request, context):
function serve (line 67) | def serve(address):
FILE: backend/python/fish-speech/backend.py
function is_float (line 24) | def is_float(s):
function is_int (line 33) | def is_int(s):
class BackendServicer (line 49) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 54) | def Health(self, request, context):
method LoadModel (line 57) | def LoadModel(self, request, context):
method _get_ref_audio_path (line 264) | def _get_ref_audio_path(self, voice_name=None):
method TTS (line 307) | def TTS(self, request, context):
function serve (line 419) | def serve(address):
FILE: backend/python/fish-speech/test.py
function _dump_backend_log (line 20) | def _dump_backend_log():
function _sigterm_handler (line 30) | def _sigterm_handler(signum, frame):
function _tail_log (line 41) | def _tail_log(path, stop_event, interval=10):
class TestBackendServicer (line 57) | class TestBackendServicer(unittest.TestCase):
method setUp (line 61) | def setUp(self):
method tearDown (line 105) | def tearDown(self) -> None:
method test_tts (line 120) | def test_tts(self):
FILE: backend/python/kitten-tts/backend.py
class BackendServicer (line 28) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 32) | def Health(self, request, context):
method LoadModel (line 34) | def LoadModel(self, request, context):
method TTS (line 58) | def TTS(self, request, context):
function serve (line 74) | def serve(address):
FILE: backend/python/kitten-tts/test.py
class TestBackendServicer (line 13) | class TestBackendServicer(unittest.TestCase):
method setUp (line 17) | def setUp(self):
method tearDown (line 24) | def tearDown(self) -> None:
method test_server_startup (line 31) | def test_server_startup(self):
method test_load_model (line 47) | def test_load_model(self):
method test_tts (line 65) | def test_tts(self):
FILE: backend/python/kokoro/backend.py
class BackendServicer (line 28) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 32) | def Health(self, request, context):
method LoadModel (line 35) | def LoadModel(self, request, context):
method TTS (line 59) | def TTS(self, request, context):
function serve (line 81) | def serve(address):
FILE: backend/python/kokoro/test.py
class TestBackendServicer (line 13) | class TestBackendServicer(unittest.TestCase):
method setUp (line 17) | def setUp(self):
method tearDown (line 24) | def tearDown(self) -> None:
method test_server_startup (line 31) | def test_server_startup(self):
method test_load_model (line 47) | def test_load_model(self):
method test_tts (line 65) | def test_tts(self):
FILE: backend/python/mlx-audio/backend.py
function is_float (line 23) | def is_float(s):
function is_int (line 30) | def is_int(s):
class BackendServicer (line 44) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 50) | def Health(self, request, context):
method LoadModel (line 63) | async def LoadModel(self, request, context):
method TTS (line 117) | def TTS(self, request, context):
method Predict (line 218) | async def Predict(self, request, context):
method _handle_speed_parameter (line 299) | def _handle_speed_parameter(self, request, model_path):
method _map_language_code (line 346) | def _map_language_code(self, language, voice):
method _build_generation_params (line 378) | def _build_generation_params(self, request, default_speed=1.0):
function serve (line 432) | async def serve(address):
FILE: backend/python/mlx-audio/test.py
class TestBackendServicer (line 16) | class TestBackendServicer(unittest.TestCase):
method setUp (line 22) | def setUp(self):
method tearDown (line 26) | def tearDown(self) -> None:
method test_server_startup (line 30) | def test_server_startup(self):
method test_load_model (line 42) | def test_load_model(self):
method test_tts_generation (line 59) | def test_tts_generation(self):
method test_tts_with_options (line 86) | def test_tts_with_options(self):
method test_tts_multilingual (line 117) | def test_tts_multilingual(self):
FILE: backend/python/mlx-distributed/backend.py
function mlx_distributed_init (line 33) | def mlx_distributed_init(rank, hostfile, backend="ring", coordinator=None):
function is_float (line 61) | def is_float(s):
function is_int (line 69) | def is_int(s):
function parse_options (line 77) | def parse_options(options):
class BackendServicer (line 94) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method __init__ (line 101) | def __init__(self):
method Health (line 112) | def Health(self, request, context):
method LoadModel (line 115) | async def LoadModel(self, request, context):
method Predict (line 193) | async def Predict(self, request, context):
method PredictStream (line 260) | async def PredictStream(self, request, context):
method Embedding (line 328) | def Embedding(self, request, context):
method _prepare_prompt (line 334) | def _prepare_prompt(self, request):
method _get_tokens_from_prompt (line 342) | def _get_tokens_from_prompt(self, prompt_text: str) -> List[int]:
method _build_generation_params (line 348) | def _build_generation_params(self, request, default_max_tokens=200):
function run_worker (line 410) | def run_worker(group):
function serve (line 463) | async def serve(address):
FILE: backend/python/mlx-distributed/coordinator.py
class DistributedCoordinator (line 19) | class DistributedCoordinator:
method __init__ (line 20) | def __init__(self, group):
method broadcast_command (line 25) | def broadcast_command(self, cmd, payload_size=0):
method broadcast_tokens (line 39) | def broadcast_tokens(self, tokens):
method broadcast_token_count (line 53) | def broadcast_token_count(self, count):
method broadcast_generation_params (line 63) | def broadcast_generation_params(self, max_tokens=200, temperature=0.6,...
method wait_for_command (line 77) | def wait_for_command(self):
method broadcast_model_name (line 81) | def broadcast_model_name(self, model_name=""):
FILE: backend/python/mlx-distributed/mlx_cache.py
class CacheEntry (line 26) | class CacheEntry:
class SearchResult (line 33) | class SearchResult:
class ThreadSafeLRUPromptCache (line 42) | class ThreadSafeLRUPromptCache:
method __init__ (line 61) | def __init__(
method _search (line 76) | def _search(self, model, tokens: List[int]) -> SearchResult:
method _get (line 129) | def _get(self, model, tokens: Tuple[int, ...]) -> CacheEntry:
method _delete (line 136) | def _delete(self, model, tokens: Tuple[int, ...]) -> None:
method _extract (line 150) | def _extract(self, model, tokens: Tuple[int, ...]) -> CacheEntry:
method fetch_nearest_cache (line 169) | def fetch_nearest_cache(
method insert_cache (line 216) | def insert_cache(
method clear (line 257) | def clear(self) -> None:
method __len__ (line 263) | def __len__(self) -> int:
FILE: backend/python/mlx-distributed/sharding.py
class PipelineFirstLayer (line 12) | class PipelineFirstLayer(nn.Module):
method __init__ (line 15) | def __init__(self, original_layer, rank, group):
method original_layer (line 22) | def original_layer(self):
method __getattr__ (line 25) | def __getattr__(self, name):
method __call__ (line 31) | def __call__(self, x, *args, **kwargs):
class PipelineLastLayer (line 39) | class PipelineLastLayer(nn.Module):
method __init__ (line 42) | def __init__(self, original_layer, rank, world_size, group):
method original_layer (line 50) | def original_layer(self):
method __getattr__ (line 53) | def __getattr__(self, name):
method __call__ (line 59) | def __call__(self, x, *args, **kwargs):
function get_inner_model (line 75) | def get_inner_model(model):
function get_layers (line 88) | def get_layers(inner_model):
function pipeline_auto_parallel (line 97) | def pipeline_auto_parallel(model, group, start_layer=None, end_layer=None):
FILE: backend/python/mlx-distributed/test.py
class TestBackendServicer (line 10) | class TestBackendServicer(unittest.TestCase):
method setUp (line 11) | def setUp(self):
method tearDown (line 17) | def tearDown(self) -> None:
method test_server_startup (line 21) | def test_server_startup(self):
method test_load_model (line 34) | def test_load_model(self):
method test_text (line 48) | def test_text(self):
method test_sampling_params (line 64) | def test_sampling_params(self):
FILE: backend/python/mlx-vlm/backend.py
function is_float (line 24) | def is_float(s):
function is_int (line 31) | def is_int(s):
class BackendServicer (line 45) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 50) | def Health(self, request, context):
method LoadModel (line 63) | async def LoadModel(self, request, context):
method Predict (line 114) | async def Predict(self, request, context):
method Embedding (line 180) | def Embedding(self, request, context):
method PredictStream (line 198) | async def PredictStream(self, request, context):
method _prepare_prompt (line 262) | def _prepare_prompt(self, request, num_images=0, num_audios=0):
method _build_generation_params (line 324) | def _build_generation_params(self, request, default_max_tokens=200):
method load_image_from_base64 (line 383) | def load_image_from_base64(self, image_data: str):
method load_audio_from_base64 (line 406) | def load_audio_from_base64(self, audio_data: str):
method cleanup_temp_files (line 428) | def cleanup_temp_files(self, file_paths: List[str]):
function serve (line 442) | async def serve(address):
FILE: backend/python/mlx-vlm/test.py
class TestBackendServicer (line 16) | class TestBackendServicer(unittest.TestCase):
method setUp (line 22) | def setUp(self):
method tearDown (line 26) | def tearDown(self) -> None:
method test_server_startup (line 30) | def test_server_startup(self):
method test_load_model (line 42) | def test_load_model(self):
method test_text (line 59) | def test_text(self):
method test_sampling_params (line 78) | def test_sampling_params(self):
method test_embedding (line 125) | def test_embedding(self):
FILE: backend/python/mlx/backend.py
function is_float (line 29) | def is_float(s):
function is_int (line 36) | def is_int(s):
class BackendServicer (line 45) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 50) | def Health(self, request, context):
method LoadModel (line 63) | async def LoadModel(self, request, context):
method Predict (line 141) | async def Predict(self, request, context):
method Embedding (line 202) | def Embedding(self, request, context):
method PredictStream (line 220) | async def PredictStream(self, request, context):
method _prepare_prompt (line 283) | def _prepare_prompt(self, request):
method _get_tokens_from_prompt (line 309) | def _get_tokens_from_prompt(self, prompt_text: str) -> List[int]:
method _build_generation_params (line 328) | def _build_generation_params(self, request, default_max_tokens=200):
function serve (line 417) | async def serve(address):
FILE: backend/python/mlx/mlx_cache.py
class CacheEntry (line 26) | class CacheEntry:
class SearchResult (line 33) | class SearchResult:
class ThreadSafeLRUPromptCache (line 42) | class ThreadSafeLRUPromptCache:
method __init__ (line 61) | def __init__(
method _search (line 76) | def _search(self, model, tokens: List[int]) -> SearchResult:
method _get (line 129) | def _get(self, model, tokens: Tuple[int, ...]) -> CacheEntry:
method _delete (line 136) | def _delete(self, model, tokens: Tuple[int, ...]) -> None:
method _extract (line 150) | def _extract(self, model, tokens: Tuple[int, ...]) -> CacheEntry:
method fetch_nearest_cache (line 169) | def fetch_nearest_cache(
method insert_cache (line 216) | def insert_cache(
method clear (line 257) | def clear(self) -> None:
method __len__ (line 263) | def __len__(self) -> int:
FILE: backend/python/mlx/test.py
class TestBackendServicer (line 9) | class TestBackendServicer(unittest.TestCase):
method setUp (line 15) | def setUp(self):
method tearDown (line 19) | def tearDown(self) -> None:
method test_server_startup (line 23) | def test_server_startup(self):
method test_load_model (line 35) | def test_load_model(self):
method test_text (line 52) | def test_text(self):
method test_sampling_params (line 71) | def test_sampling_params(self):
method test_embedding (line 105) | def test_embedding(self):
method test_concurrent_requests (line 128) | def test_concurrent_requests(self):
method test_cache_reuse (line 170) | def test_cache_reuse(self):
method test_prefix_cache_reuse (line 202) | def test_prefix_cache_reuse(self):
FILE: backend/python/mlx/test_mlx_cache.py
class TestCacheExactMatch (line 21) | class TestCacheExactMatch(unittest.TestCase):
method setUp (line 24) | def setUp(self):
method test_exact_match_returns_cache_and_empty_remaining (line 27) | def test_exact_match_returns_cache_and_empty_remaining(self):
method test_exact_match_extracts_and_removes_from_cache (line 38) | def test_exact_match_extracts_and_removes_from_cache(self):
class TestCacheShorterPrefix (line 57) | class TestCacheShorterPrefix(unittest.TestCase):
method setUp (line 60) | def setUp(self):
method test_shorter_prefix_returns_cache_with_remaining_tokens (line 63) | def test_shorter_prefix_returns_cache_with_remaining_tokens(self):
method test_shorter_prefix_correct_remaining_calculation (line 75) | def test_shorter_prefix_correct_remaining_calculation(self):
method test_single_token_prefix_not_matched (line 95) | def test_single_token_prefix_not_matched(self):
class TestCacheLongerPrefix (line 112) | class TestCacheLongerPrefix(unittest.TestCase):
method setUp (line 115) | def setUp(self):
method test_longer_prefix_triggers_trim (line 133) | def test_longer_prefix_triggers_trim(self):
method test_longer_prefix_without_trim_fn_returns_no_match (line 146) | def test_longer_prefix_without_trim_fn_returns_no_match(self):
method test_longer_prefix_can_trim_false_returns_no_match (line 160) | def test_longer_prefix_can_trim_false_returns_no_match(self):
class TestCacheNoMatch (line 175) | class TestCacheNoMatch(unittest.TestCase):
method setUp (line 178) | def setUp(self):
method test_empty_cache_returns_none (line 181) | def test_empty_cache_returns_none(self):
method test_different_prefix_returns_none (line 189) | def test_different_prefix_returns_none(self):
method test_partial_prefix_mismatch_returns_none (line 199) | def test_partial_prefix_mismatch_returns_none(self):
method test_wrong_model_returns_none (line 209) | def test_wrong_model_returns_none(self):
class TestCacheLRUEviction (line 219) | class TestCacheLRUEviction(unittest.TestCase):
method setUp (line 222) | def setUp(self):
method test_evicts_oldest_when_full (line 225) | def test_evicts_oldest_when_full(self):
method test_access_updates_lru_order (line 250) | def test_access_updates_lru_order(self):
class TestCacheReferenceCount (line 274) | class TestCacheReferenceCount(unittest.TestCase):
method setUp (line 277) | def setUp(self):
method test_multiple_inserts_increment_count (line 280) | def test_multiple_inserts_increment_count(self):
method test_extract_with_high_count_returns_deep_copy (line 306) | def test_extract_with_high_count_returns_deep_copy(self):
class TestCacheMultiModel (line 324) | class TestCacheMultiModel(unittest.TestCase):
method setUp (line 327) | def setUp(self):
method test_same_tokens_different_models_are_separate (line 330) | def test_same_tokens_different_models_are_separate(self):
method test_eviction_across_models (line 345) | def test_eviction_across_models(self):
class TestCacheThreadSafety (line 362) | class TestCacheThreadSafety(unittest.TestCase):
method test_concurrent_inserts_no_data_loss (line 365) | def test_concurrent_inserts_no_data_loss(self):
method test_concurrent_fetch_and_insert_no_corruption (line 384) | def test_concurrent_fetch_and_insert_no_corruption(self):
method test_concurrent_operations_maintain_cache_bounds (line 420) | def test_concurrent_operations_maintain_cache_bounds(self):
class TestCacheClear (line 449) | class TestCacheClear(unittest.TestCase):
method setUp (line 452) | def setUp(self):
method test_clear_removes_all_entries (line 455) | def test_clear_removes_all_entries(self):
method test_clear_allows_new_inserts (line 467) | def test_clear_allows_new_inserts(self):
FILE: backend/python/moonshine/backend.py
class BackendServicer (line 28) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method __init__ (line 32) | def __init__(self):
method Health (line 36) | def Health(self, request, context):
method LoadModel (line 39) | def LoadModel(self, request, context):
method AudioTranscription (line 79) | def AudioTranscription(self, request, context):
function serve (line 125) | def serve(address):
FILE: backend/python/moonshine/test.py
class TestBackendServicer (line 16) | class TestBackendServicer(unittest.TestCase):
method setUp (line 20) | def setUp(self):
method tearDown (line 27) | def tearDown(self) -> None:
method test_server_startup (line 34) | def test_server_startup(self):
method test_load_model (line 50) | def test_load_model(self):
method test_audio_transcription (line 67) | def test_audio_transcription(self):
FILE: backend/python/nemo/backend.py
function is_float (line 19) | def is_float(s):
function is_int (line 27) | def is_int(s):
class BackendServicer (line 39) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 40) | def Health(self, request, context):
method LoadModel (line 43) | def LoadModel(self, request, context):
method AudioTranscription (line 83) | def AudioTranscription(self, request, context):
function serve (line 115) | def serve(address):
FILE: backend/python/nemo/test.py
class TestBackendServicer (line 19) | class TestBackendServicer(unittest.TestCase):
method setUp (line 20) | def setUp(self):
method tearDown (line 24) | def tearDown(self):
method test_server_startup (line 28) | def test_server_startup(self):
method test_load_model (line 41) | def test_load_model(self):
method test_audio_transcription (line 56) | def test_audio_transcription(self):
FILE: backend/python/neutts/backend.py
function is_float (line 19) | def is_float(s):
function is_int (line 26) | def is_int(s):
class BackendServicer (line 40) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 44) | def Health(self, request, context):
method LoadModel (line 46) | def LoadModel(self, request, context):
method TTS (line 111) | def TTS(self, request, context):
function serve (line 127) | def serve(address):
FILE: backend/python/neutts/test.py
class TestBackendServicer (line 13) | class TestBackendServicer(unittest.TestCase):
method setUp (line 17) | def setUp(self):
method tearDown (line 24) | def tearDown(self) -> None:
method test_server_startup (line 31) | def test_server_startup(self):
method test_load_model (line 47) | def test_load_model(self):
method test_tts (line 65) | def test_tts(self):
FILE: backend/python/outetts/backend.py
class BackendServicer (line 24) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 25) | def Health(self, request, context):
method LoadModel (line 28) | def LoadModel(self, request, context):
method TTS (line 92) | def TTS(self, request, context):
function serve (line 112) | async def serve(address):
FILE: backend/python/outetts/test.py
class TestBackendServicer (line 13) | class TestBackendServicer(unittest.TestCase):
method setUp (line 14) | def setUp(self):
method tearDown (line 18) | def tearDown(self):
method test_health (line 22) | def test_health(self):
FILE: backend/python/pocket-tts/backend.py
function is_float (line 20) | def is_float(s):
function is_int (line 28) | def is_int(s):
class BackendServicer (line 42) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 46) | def Health(self, request, context):
method LoadModel (line 49) | def LoadModel(self, request, context):
method _get_voice_state (line 120) | def _get_voice_state(self, voice_input):
method TTS (line 149) | def TTS(self, request, context):
function serve (line 222) | def serve(address):
FILE: backend/python/pocket-tts/test.py
class TestBackendServicer (line 15) | class TestBackendServicer(unittest.TestCase):
method setUp (line 19) | def setUp(self):
method tearDown (line 26) | def tearDown(self) -> None:
method test_server_startup (line 33) | def test_server_startup(self):
method test_load_model (line 49) | def test_load_model(self):
method test_tts_with_hf_voice (line 67) | def test_tts_with_hf_voice(self):
method test_tts_with_default_voice (line 104) | def test_tts_with_default_voice(self):
FILE: backend/python/qwen-asr/backend.py
function is_float (line 19) | def is_float(s):
function is_int (line 27) | def is_int(s):
class BackendServicer (line 39) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 40) | def Health(self, request, context):
method LoadModel (line 43) | def LoadModel(self, request, context):
method AudioTranscription (line 133) | def AudioTranscription(self, request, context):
function serve (line 180) | def serve(address):
FILE: backend/python/qwen-asr/test.py
class TestBackendServicer (line 19) | class TestBackendServicer(unittest.TestCase):
method setUp (line 20) | def setUp(self):
method tearDown (line 24) | def tearDown(self):
method test_server_startup (line 28) | def test_server_startup(self):
method test_load_model (line 41) | def test_load_model(self):
method test_audio_transcription (line 56) | def test_audio_transcription(self):
FILE: backend/python/qwen-tts/backend.py
function is_float (line 28) | def is_float(s):
function is_int (line 37) | def is_int(s):
class BackendServicer (line 53) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 58) | def Health(self, request, context):
method LoadModel (line 61) | def LoadModel(self, request, context):
method _detect_mode (line 321) | def _detect_mode(self, request):
method _get_ref_audio_path (line 344) | def _get_ref_audio_path(self, request, voice_name=None):
method _get_voice_clone_prompt (line 394) | def _get_voice_clone_prompt(self, request, ref_audio, ref_text):
method _is_text_file_path (line 428) | def _is_text_file_path(self, text):
method _read_text_file (line 438) | def _read_text_file(self, file_path):
method _compute_file_hash (line 494) | def _compute_file_hash(self, file_path):
method _compute_string_hash (line 508) | def _compute_string_hash(self, text):
method _get_cached_voice_clone_prompt_from_disk (line 512) | def _get_cached_voice_clone_prompt_from_disk(self, ref_audio, ref_text...
method _save_voice_clone_prompt_to_disk (line 556) | def _save_voice_clone_prompt_to_disk(
method _get_voice_cache_key (line 585) | def _get_voice_cache_key(self, ref_audio, ref_text):
method _preload_cached_voices (line 589) | def _preload_cached_voices(self):
method TTS (line 646) | def TTS(self, request, context):
function serve (line 895) | def serve(address):
FILE: backend/python/qwen-tts/test.py
class TestBackendServicer (line 17) | class TestBackendServicer(unittest.TestCase):
method setUp (line 21) | def setUp(self):
method tearDown (line 33) | def tearDown(self) -> None:
method test_tts (line 57) | def test_tts(self):
FILE: backend/python/rerankers/backend.py
class BackendServicer (line 26) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 32) | def Health(self, request, context):
method LoadModel (line 45) | def LoadModel(self, request, context):
method Rerank (line 72) | def Rerank(self, request, context):
function serve (line 94) | def serve(address):
FILE: backend/python/rerankers/test.py
class TestBackendServicer (line 13) | class TestBackendServicer(unittest.TestCase):
method setUp (line 17) | def setUp(self):
method tearDown (line 24) | def tearDown(self) -> None:
method test_server_startup (line 31) | def test_server_startup(self):
method test_load_model (line 47) | def test_load_model(self):
method test_rerank (line 64) | def test_rerank(self):
method test_rerank_omit_top_n (line 92) | def test_rerank_omit_top_n(self):
method test_rerank_crop (line 120) | def test_rerank_crop(self):
FILE: backend/python/rfdetr/backend.py
class BackendServicer (line 30) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method __init__ (line 37) | def __init__(self):
method Health (line 41) | def Health(self, request, context):
method LoadModel (line 54) | def LoadModel(self, request, context):
method Detect (line 76) | def Detect(self, request, context):
method Status (line 122) | def Status(self, request, context):
function serve (line 136) | def serve(address):
FILE: backend/python/transformers/backend.py
function mean_pooling (line 36) | def mean_pooling(model_output, attention_mask):
class BackendServicer (line 48) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 54) | def Health(self, request, context):
method LoadModel (line 67) | def LoadModel(self, request, context):
method Embedding (line 282) | def Embedding(self, request, context):
method _predict (line 320) | async def _predict(self, request, context, streaming=False):
method Predict (line 415) | async def Predict(self, request, context):
method PredictStream (line 430) | async def PredictStream(self, request, context):
method SoundGeneration (line 448) | def SoundGeneration(self, request, context):
method CallDiaTTS (line 505) | def CallDiaTTS(self, request, context):
method TTS (line 551) | def TTS(self, request, context):
function serve (line 583) | async def serve(address):
FILE: backend/python/transformers/test.py
class TestBackendServicer (line 13) | class TestBackendServicer(unittest.TestCase):
method setUp (line 17) | def setUp(self):
method tearDown (line 24) | def tearDown(self) -> None:
method test_server_startup (line 31) | def test_server_startup(self):
method test_load_model (line 47) | def test_load_model(self):
method test_embedding (line 64) | def test_embedding(self):
method test_audio_load_model (line 84) | def test_audio_load_model(self):
method test_tts (line 101) | def test_tts(self):
method test_sound_generation (line 120) | def test_sound_generation(self):
method test_embed_load_model (line 139) | def test_embed_load_model(self):
method test_sentencetransformers_embedding (line 156) | def test_sentencetransformers_embedding(self):
FILE: backend/python/vibevoice/backend.py
function is_float (line 24) | def is_float(s):
function is_int (line 31) | def is_int(s):
class BackendServicer (line 45) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 49) | def Health(self, request, context):
method LoadModel (line 52) | def LoadModel(self, request, context):
method _load_voice_presets (line 367) | def _load_voice_presets(self):
method _determine_voice_key (line 394) | def _determine_voice_key(self, name):
method _get_voice_path (line 412) | def _get_voice_path(self, speaker_name):
method _ensure_voice_cached (line 438) | def _ensure_voice_cached(self, voice_path):
method TTS (line 471) | def TTS(self, request, context):
method AudioTranscription (line 580) | def AudioTranscription(self, request, context):
function serve (line 721) | def serve(address):
FILE: backend/python/vibevoice/test.py
class TestBackendServicer (line 20) | class TestBackendServicer(unittest.TestCase):
method setUp (line 24) | def setUp(self):
method tearDown (line 31) | def tearDown(self) -> None:
method test_server_startup (line 38) | def test_server_startup(self):
method test_load_tts_model (line 54) | def test_load_tts_model(self):
method test_load_asr_model (line 73) | def test_load_asr_model(self):
method test_tts (line 98) | def test_tts(self):
method test_audio_transcription (line 138) | def test_audio_transcription(self):
FILE: backend/python/vllm-omni/backend.py
function is_float (line 44) | def is_float(s):
function is_int (line 53) | def is_int(s):
class BackendServicer (line 63) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method _detect_model_type (line 65) | def _detect_model_type(self, model_name):
method _detect_tts_task_type (line 80) | def _detect_tts_task_type(self):
method _load_image (line 93) | def _load_image(self, image_path):
method _load_video (line 105) | def _load_video(self, video_path):
method _load_audio (line 122) | def _load_audio(self, audio_path):
method Health (line 142) | def Health(self, request, context):
method LoadModel (line 145) | def LoadModel(self, request, context):
method GenerateImage (line 251) | def GenerateImage(self, request, context):
method GenerateVideo (line 327) | def GenerateVideo(self, request, context):
method Predict (line 438) | def Predict(self, request, context):
method PredictStream (line 447) | def PredictStream(self, request, context):
method _predict (line 451) | def _predict(self, request, context, streaming=False):
method TTS (line 558) | def TTS(self, request, context):
function serve (line 647) | def serve(address):
FILE: backend/python/vllm-omni/test.py
class TestBackendServicer (line 9) | class TestBackendServicer(unittest.TestCase):
method setUp (line 15) | def setUp(self):
method tearDown (line 19) | def tearDown(self) -> None:
method test_server_startup (line 23) | def test_server_startup(self):
method test_load_model (line 36) | def test_load_model(self):
method test_generate_image (line 54) | def test_generate_image(self):
FILE: backend/python/vllm/backend.py
class BackendServicer (line 31) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method generate (line 35) | def generate(self,prompt, max_new_tokens):
method Health (line 68) | def Health(self, request, context):
method LoadModel (line 81) | async def LoadModel(self, request, context):
method Predict (line 143) | async def Predict(self, request, context):
method Embedding (line 158) | def Embedding(self, request, context):
method PredictStream (line 178) | async def PredictStream(self, request, context):
method _predict (line 196) | async def _predict(self, request, context, streaming=False):
method load_image (line 293) | def load_image(self, image_path: str):
method load_video (line 312) | def load_video(self, video_path: str):
function serve (line 334) | async def serve(address):
FILE: backend/python/vllm/test.py
class TestBackendServicer (line 16) | class TestBackendServicer(unittest.TestCase):
method setUp (line 22) | def setUp(self):
method tearDown (line 26) | def tearDown(self) -> None:
method test_server_startup (line 30) | def test_server_startup(self):
method test_load_model (line 42) | def test_load_model(self):
method test_text (line 59) | def test_text(self):
method test_sampling_params (line 78) | def test_sampling_params(self):
method test_embedding (line 125) | def test_embedding(self):
FILE: backend/python/voxcpm/backend.py
function is_float (line 22) | def is_float(s):
function is_int (line 30) | def is_int(s):
class BackendServicer (line 44) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 48) | def Health(self, request, context):
method LoadModel (line 51) | def LoadModel(self, request, context):
method TTS (line 112) | def TTS(self, request, context):
method TTSStream (line 210) | def TTSStream(self, request, context):
function serve (line 294) | def serve(address):
FILE: backend/python/voxcpm/test.py
class TestBackendServicer (line 13) | class TestBackendServicer(unittest.TestCase):
method setUp (line 17) | def setUp(self):
method tearDown (line 24) | def tearDown(self) -> None:
method test_load_model (line 31) | def test_load_model(self):
method test_tts_stream (line 53) | def test_tts_stream(self):
FILE: backend/python/whisperx/backend.py
class BackendServicer (line 24) | class BackendServicer(backend_pb2_grpc.BackendServicer):
method Health (line 28) | def Health(self, request, context):
method LoadModel (line 31) | def LoadModel(self, request, context):
method _get_align_model (line 65) | def _get_align_model(self, language_code):
method AudioTranscription (line 76) | def AudioTranscription(self, request, context):
function serve (line 134) | def serve(address):
FILE: backend/python/whisperx/test.py
class TestBackendServicer (line 16) | class TestBackendServicer(unittest.TestCase):
method setUp (line 20) | def setUp(self):
method tearDown (line 27) | def tearDown(self) -> None:
method test_server_startup (line 34) | def test_server_startup(self):
method test_load_model (line 50) | def test_load_model(self):
method test_audio_transcription (line 67) | def test_audio_transcription(self):
FILE: cmd/launcher/internal/launcher.go
type Config (line 26) | type Config struct
type Launcher (line 38) | type Launcher struct
method setupLogging (line 78) | func (l *Launcher) setupLogging() error {
method Initialize (line 100) | func (l *Launcher) Initialize() error {
method StartLocalAI (line 189) | func (l *Launcher) StartLocalAI() error {
method StopLocalAI (line 293) | func (l *Launcher) StopLocalAI() error {
method IsRunning (line 315) | func (l *Launcher) IsRunning() bool {
method Shutdown (line 320) | func (l *Launcher) Shutdown() error {
method GetLogs (line 343) | func (l *Launcher) GetLogs() string {
method GetRecentLogs (line 350) | func (l *Launcher) GetRecentLogs() string {
method GetConfig (line 366) | func (l *Launcher) GetConfig() *Config {
method SetConfig (line 371) | func (l *Launcher) SetConfig(config *Config) error {
method GetUI (line 376) | func (l *Launcher) GetUI() *LauncherUI {
method SetSystray (line 380) | func (l *Launcher) SetSystray(systray *SystrayManager) {
method GetReleaseManager (line 385) | func (l *Launcher) GetReleaseManager() *ReleaseManager {
method GetWebUIURL (line 390) | func (l *Launcher) GetWebUIURL() string {
method GetDataPath (line 402) | func (l *Launcher) GetDataPath() string {
method CheckForUpdates (line 419) | func (l *Launcher) CheckForUpdates() (bool, string, error) {
method DownloadUpdate (line 432) | func (l *Launcher) DownloadUpdate(version string, progressCallback fun...
method GetCurrentVersion (line 437) | func (l *Launcher) GetCurrentVersion() string {
method GetCurrentStatus (line 442) | func (l *Launcher) GetCurrentStatus() string {
method GetLastStatus (line 455) | func (l *Launcher) GetLastStatus() string {
method githubReleaseNotesURL (line 468) | func (l *Launcher) githubReleaseNotesURL(version string) (*url.URL, er...
method showDownloadLocalAIDialog (line 480) | func (l *Launcher) showDownloadLocalAIDialog() {
method downloadAndInstallLocalAI (line 556) | func (l *Launcher) downloadAndInstallLocalAI() {
method showDownloadError (line 585) | func (l *Launcher) showDownloadError(title, message string) {
method showDownloadProgress (line 624) | func (l *Launcher) showDownloadProgress(version, title string) {
method monitorLogs (line 704) | func (l *Launcher) monitorLogs(reader io.Reader, prefix string) {
method updateStatus (line 746) | func (l *Launcher) updateStatus(status string) {
method updateRunningState (line 763) | func (l *Launcher) updateRunningState(isRunning bool) {
method periodicUpdateCheck (line 774) | func (l *Launcher) periodicUpdateCheck() {
method loadConfig (line 800) | func (l *Launcher) loadConfig() error {
method saveConfig (line 837) | func (l *Launcher) saveConfig() error {
function NewLauncher (line 64) | func NewLauncher(ui *LauncherUI, window fyne.Window, app fyne.App) *Laun...
FILE: cmd/launcher/internal/launcher_suite_test.go
function TestLauncher (line 10) | func TestLauncher(t *testing.T) {
FILE: cmd/launcher/internal/release_manager.go
type Release (line 23) | type Release struct
type Asset (line 32) | type Asset struct
type ReleaseManager (line 39) | type ReleaseManager struct
method GetLatestRelease (line 77) | func (rm *ReleaseManager) GetLatestRelease() (*Release, error) {
method DownloadRelease (line 110) | func (rm *ReleaseManager) DownloadRelease(version string, progressCall...
method GetBinaryName (line 181) | func (rm *ReleaseManager) GetBinaryName(version string) string {
method downloadFile (line 200) | func (rm *ReleaseManager) downloadFile(url, filepath string, progressC...
method downloadFileWithRetry (line 205) | func (rm *ReleaseManager) downloadFileWithRetry(url, filepath string, ...
method saveChecksums (line 259) | func (rm *ReleaseManager) saveChecksums(version, checksumPath, binaryN...
method saveVersionMetadata (line 293) | func (rm *ReleaseManager) saveVersionMetadata(version string) error {
method VerifyChecksum (line 345) | func (rm *ReleaseManager) VerifyChecksum(filePath, checksumPath, binar...
method GetInstalledVersion (line 386) | func (rm *ReleaseManager) GetInstalledVersion() string {
method loadVersionMetadata (line 414) | func (rm *ReleaseManager) loadVersionMetadata() string {
method GetBinaryPath (line 452) | func (rm *ReleaseManager) GetBinaryPath() string {
method IsUpdateAvailable (line 457) | func (rm *ReleaseManager) IsUpdateAvailable() (bool, string, error) {
method IsLocalAIInstalled (line 482) | func (rm *ReleaseManager) IsLocalAIInstalled() bool {
method VerifyInstalledBinary (line 502) | func (rm *ReleaseManager) VerifyInstalledBinary() error {
method CleanupPartialDownloads (line 524) | func (rm *ReleaseManager) CleanupPartialDownloads() error {
method clearVersionMetadata (line 552) | func (rm *ReleaseManager) clearVersionMetadata() {
function NewReleaseManager (line 57) | func NewReleaseManager() *ReleaseManager {
type progressReader (line 327) | type progressReader struct
method Read (line 334) | func (pr *progressReader) Read(p []byte) (int, error) {
FILE: cmd/launcher/internal/systray_manager.go
type SystrayManager (line 16) | type SystrayManager struct
method setupMenu (line 43) | func (sm *SystrayManager) setupMenu(desk desktop.App) {
method toggleLocalAI (line 58) | func (sm *SystrayManager) toggleLocalAI() {
method openWebUI (line 77) | func (sm *SystrayManager) openWebUI() {
method openDocumentation (line 89) | func (sm *SystrayManager) openDocumentation() {
method updateStartStopItem (line 96) | func (sm *SystrayManager) updateStartStopItem() {
method recreateMenu (line 102) | func (sm *SystrayManager) recreateMenu() {
method UpdateRunningState (line 205) | func (sm *SystrayManager) UpdateRunningState(isRunning bool) {
method UpdateStatus (line 210) | func (sm *SystrayManager) UpdateStatus(status string) {
method checkForUpdates (line 215) | func (sm *SystrayManager) checkForUpdates() {
method downloadUpdate (line 234) | func (sm *SystrayManager) downloadUpdate() {
method showSettings (line 244) | func (sm *SystrayManager) showSettings() {
method showWelcomeWindow (line 250) | func (sm *SystrayManager) showWelcomeWindow() {
method openDataFolder (line 257) | func (sm *SystrayManager) openDataFolder() {
method NotifyUpdateAvailable (line 265) | func (sm *SystrayManager) NotifyUpdateAvailable(version string) {
method truncateText (line 272) | func (sm *SystrayManager) truncateText(text string, maxLength int) str...
method showStatusDetails (line 280) | func (sm *SystrayManager) showStatusDetails(status, version string) {
method showErrorDialog (line 383) | func (sm *SystrayManager) showErrorDialog(title, message string) {
method showStartupErrorDialog (line 390) | func (sm *SystrayManager) showStartupErrorDialog(err error) {
method showDownloadProgress (line 447) | func (sm *SystrayManager) showDownloadProgress(version string) {
function NewSystrayManager (line 30) | func NewSystrayManager(launcher *Launcher, window fyne.Window, desktop d...
FILE: cmd/launcher/internal/ui.go
type EnvVar (line 15) | type EnvVar struct
type LauncherUI (line 21) | type LauncherUI struct
method CreateMainUI (line 78) | func (ui *LauncherUI) CreateMainUI(launcher *Launcher) *fyne.Container {
method createConfigTab (line 95) | func (ui *LauncherUI) createConfigTab() *fyne.Container {
method createEnvironmentSection (line 132) | func (ui *LauncherUI) createEnvironmentSection() *fyne.Container {
method addEnvironmentVariable (line 194) | func (ui *LauncherUI) addEnvironmentVariable() {
method removeEnvironmentVariable (line 235) | func (ui *LauncherUI) removeEnvironmentVariable(index int) {
method saveEnvironmentVariables (line 248) | func (ui *LauncherUI) saveEnvironmentVariables() {
method confirmDeleteEnvironmentVariable (line 275) | func (ui *LauncherUI) confirmDeleteEnvironmentVariable(index int) {
method setupBindings (line 289) | func (ui *LauncherUI) setupBindings() {
method startLocalAI (line 321) | func (ui *LauncherUI) startLocalAI() {
method stopLocalAI (line 347) | func (ui *LauncherUI) stopLocalAI() {
method openWebUI (line 372) | func (ui *LauncherUI) openWebUI() {
method saveConfiguration (line 385) | func (ui *LauncherUI) saveConfiguration() {
method checkForUpdates (line 418) | func (ui *LauncherUI) checkForUpdates() {
method downloadUpdate (line 453) | func (ui *LauncherUI) downloadUpdate() {
method UpdateStatus (line 521) | func (ui *LauncherUI) UpdateStatus(status string) {
method OnLogUpdate (line 530) | func (ui *LauncherUI) OnLogUpdate(logLine string) {
method NotifyUpdateAvailable (line 543) | func (ui *LauncherUI) NotifyUpdateAvailable(version string) {
method LoadConfiguration (line 558) | func (ui *LauncherUI) LoadConfiguration() {
method showDownloadProgress (line 594) | func (ui *LauncherUI) showDownloadProgress(version, title string) {
method UpdateRunningState (line 667) | func (ui *LauncherUI) UpdateRunningState(isRunning bool) {
method ShowWelcomeWindow (line 680) | func (ui *LauncherUI) ShowWelcomeWindow() {
method openURL (line 788) | func (ui *LauncherUI) openURL(urlString string) {
function NewLauncherUI (line 59) | func NewLauncherUI() *LauncherUI {
FILE: cmd/launcher/main.go
function main (line 13) | func main() {
FILE: cmd/local-ai/main.go
function main (line 16) | func main() {
FILE: core/application/agent_jobs.go
method RestartAgentJobService (line 11) | func (a *Application) RestartAgentJobService() error {
FILE: core/application/application.go
type Application (line 17) | type Application struct
method ModelConfigLoader (line 51) | func (a *Application) ModelConfigLoader() *config.ModelConfigLoader {
method ModelLoader (line 55) | func (a *Application) ModelLoader() *model.ModelLoader {
method ApplicationConfig (line 59) | func (a *Application) ApplicationConfig() *config.ApplicationConfig {
method TemplatesEvaluator (line 63) | func (a *Application) TemplatesEvaluator() *templates.Evaluator {
method GalleryService (line 67) | func (a *Application) GalleryService() *services.GalleryService {
method AgentJobService (line 71) | func (a *Application) AgentJobService() *services.AgentJobService {
method AgentPoolService (line 75) | func (a *Application) AgentPoolService() *services.AgentPoolService {
method AuthDB (line 80) | func (a *Application) AuthDB() *gorm.DB {
method StartupConfig (line 85) | func (a *Application) StartupConfig() *config.ApplicationConfig {
method start (line 89) | func (a *Application) start() error {
method StartAgentPool (line 119) | func (a *Application) StartAgentPool() {
function newApplication (line 35) | func newApplication(appConfig *config.ApplicationConfig) *Application {
FILE: core/application/config_file_watcher.go
type fileHandler (line 18) | type fileHandler
type configFileHandler (line 20) | type configFileHandler struct
method Register (line 52) | func (c *configFileHandler) Register(filename string, handler fileHand...
method callHandler (line 64) | func (c *configFileHandler) callHandler(filename string, handler fileH...
method Watch (line 77) | func (c *configFileHandler) Watch() error {
method Stop (line 133) | func (c *configFileHandler) Stop() error {
function newConfigFileHandler (line 30) | func newConfigFileHandler(appConfig *config.ApplicationConfig) configFil...
function readApiKeysJson (line 137) | func readApiKeysJson(startupAppConfig config.ApplicationConfig) fileHand...
function readExternalBackendsJson (line 163) | func readExternalBackendsJson(startupAppConfig config.ApplicationConfig)...
function readRuntimeSettingsJson (line 188) | func readRuntimeSettingsJson(startupAppConfig config.ApplicationConfig) ...
FILE: core/application/p2p.go
method StopP2P (line 20) | func (a *Application) StopP2P() error {
method StartP2P (line 31) | func (a *Application) StartP2P() error {
method RestartP2P (line 129) | func (a *Application) RestartP2P() error {
function syncState (line 172) | func syncState(ctx context.Context, n *node.Node, app *Application) error {
method p2pSync (line 242) | func (a *Application) p2pSync(ctx context.Context, n *node.Node) error {
FILE: core/application/startup.go
function New (line 25) | func New(opts ...config.AppOption) (*Application, error) {
function startWatcher (line 222) | func startWatcher(options *config.ApplicationConfig) {
function loadRuntimeSettingsFromFile (line 264) | func loadRuntimeSettingsFromFile(options *config.ApplicationConfig) {
function initializeWatchdog (line 451) | func initializeWatchdog(application *Application, options *config.Applic...
function loadOrGenerateHMACSecret (line 493) | func loadOrGenerateHMACSecret(path string) (string, error) {
function migrateDataFiles (line 518) | func migrateDataFiles(srcDir, dstDir string) {
FILE: core/application/watchdog.go
method StopWatchdog (line 8) | func (a *Application) StopWatchdog() error {
method startWatchdog (line 18) | func (a *Application) startWatchdog() error {
method StartWatchdog (line 79) | func (a *Application) StartWatchdog() error {
method RestartWatchdog (line 87) | func (a *Application) RestartWatchdog() error {
FILE: core/backend/backend_suite_test.go
function TestBackend (line 10) | func TestBackend(t *testing.T) {
FILE: core/backend/detection.go
function Detection (line 14) | func Detection(
FILE: core/backend/embeddings.go
function ModelEmbedding (line 14) | func ModelEmbedding(s string, tokens []int, loader *model.ModelLoader, m...
FILE: core/backend/image.go
function ImageGeneration (line 13) | func ImageGeneration(height, width, step, seed int, positive_prompt, neg...
FILE: core/backend/llm.go
type LLMResponse (line 26) | type LLMResponse struct
type TokenUsage (line 34) | type TokenUsage struct
function ModelInference (line 45) | func ModelInference(ctx context.Context, s string, messages schema.Messa...
function Finetune (line 352) | func Finetune(config config.ModelConfig, input, prediction string) string {
FILE: core/backend/options.go
function recordModelLoadFailure (line 18) | func recordModelLoadFailure(appConfig *config.ApplicationConfig, modelNa...
function ModelOptions (line 34) | func ModelOptions(c config.ModelConfig, so *config.ApplicationConfig, op...
function getSeed (line 81) | func getSeed(c config.ModelConfig) int32 {
function grpcModelOpts (line 95) | func grpcModelOpts(c config.ModelConfig, modelPath string) *pb.ModelOpti...
function gRPCPredictOpts (line 238) | func gRPCPredictOpts(c config.ModelConfig, modelPath string) *pb.Predict...
FILE: core/backend/rerank.go
function Rerank (line 14) | func Rerank(request *proto.RerankRequest, loader *model.ModelLoader, app...
FILE: core/backend/soundgeneration.go
function SoundGeneration (line 17) | func SoundGeneration(
FILE: core/backend/stores.go
function StoreBackend (line 10) | func StoreBackend(sl *model.ModelLoader, appConfig *config.ApplicationCo...
FILE: core/backend/token_metrics.go
function TokenMetrics (line 12) | func TokenMetrics(
FILE: core/backend/tokenize.go
function ModelTokenize (line 13) | func ModelTokenize(s string, loader *model.ModelLoader, modelConfig conf...
FILE: core/backend/transcript.go
function ModelTranscription (line 17) | func ModelTranscription(audio, language string, translate, diarize bool,...
FILE: core/backend/tts.go
function ModelTTS (line 23) | func ModelTTS(
function ModelTTSStream (line 123) | func ModelTTSStream(
FILE: core/backend/vad.go
function VAD (line 12) | func VAD(request *schema.VADRequest,
FILE: core/backend/video.go
function VideoGeneration (line 13) | func VideoGeneration(height, width int32, prompt, negativePrompt, startI...
FILE: core/cli/agent.go
type AgentCMD (line 19) | type AgentCMD struct
type AgentRunCMD (line 24) | type AgentRunCMD struct
method Run (line 45) | func (r *AgentRunCMD) Run(ctx *cliContext.Context) error {
method loadAgentConfig (line 109) | func (r *AgentRunCMD) loadAgentConfig() (*state.AgentConfig, error) {
method applyOverrides (line 151) | func (r *AgentRunCMD) applyOverrides(cfg *state.AgentConfig) {
method buildAppConfig (line 175) | func (r *AgentRunCMD) buildAppConfig() *config.ApplicationConfig {
type AgentListCMD (line 197) | type AgentListCMD struct
method Run (line 201) | func (r *AgentListCMD) Run(ctx *cliContext.Context) error {
FILE: core/cli/agent_test.go
function TestAgentRunCMD_LoadAgentConfigFromFile (line 12) | func TestAgentRunCMD_LoadAgentConfigFromFile(t *testing.T) {
function TestAgentRunCMD_LoadAgentConfigFromPool (line 47) | func TestAgentRunCMD_LoadAgentConfigFromPool(t *testing.T) {
function TestAgentRunCMD_LoadAgentConfigFromPool_NotFound (line 85) | func TestAgentRunCMD_LoadAgentConfigFromPool_NotFound(t *testing.T) {
function TestAgentRunCMD_LoadAgentConfigNoNameOrConfig (line 110) | func TestAgentRunCMD_LoadAgentConfigNoNameOrConfig(t *testing.T) {
function TestAgentRunCMD_ApplyOverrides (line 121) | func TestAgentRunCMD_ApplyOverrides(t *testing.T) {
function TestAgentRunCMD_ApplyOverridesDoesNotOverwriteExisting (line 145) | func TestAgentRunCMD_ApplyOverridesDoesNotOverwriteExisting(t *testing.T) {
function TestAgentRunCMD_LoadConfigMissingName (line 162) | func TestAgentRunCMD_LoadConfigMissingName(t *testing.T) {
function TestAgentListCMD_NoPoolFile (line 184) | func TestAgentListCMD_NoPoolFile(t *testing.T) {
function TestAgentListCMD_WithAgents (line 196) | func TestAgentListCMD_WithAgents(t *testing.T) {
FILE: core/cli/backends.go
type BackendsCMDFlags (line 19) | type BackendsCMDFlags struct
type BackendsList (line 25) | type BackendsList struct
method Run (line 49) | func (bl *BackendsList) Run(ctx *cliContext.Context) error {
type BackendsInstall (line 29) | type BackendsInstall struct
method Run (line 77) | func (bi *BackendsInstall) Run(ctx *cliContext.Context) error {
type BackendsUninstall (line 37) | type BackendsUninstall struct
method Run (line 114) | func (bu *BackendsUninstall) Run(ctx *cliContext.Context) error {
type BackendsCMD (line 43) | type BackendsCMD struct
FILE: core/cli/completion.go
type CompletionCMD (line 11) | type CompletionCMD struct
method SetApplication (line 17) | func (c *CompletionCMD) SetApplication(app *kong.Application) {
method Run (line 21) | func (c *CompletionCMD) Run(_ *cliContext.Context) error {
function collectCommands (line 42) | func collectCommands(node *kong.Node, prefix string) []commandInfo {
type commandInfo (line 65) | type commandInfo struct
function collectFlags (line 72) | func collectFlags(node *kong.Node) []flagInfo {
type flagInfo (line 93) | type flagInfo struct
function generateBashCompletion (line 99) | func generateBashCompletion(app *kong.Application) string {
function generateZshCompletion (line 215) | func generateZshCompletion(app *kong.Application) string {
function generateFishCompletion (line 331) | func generateFishCompletion(app *kong.Application) string {
FILE: core/cli/completion_test.go
function getTestApp (line 10) | func getTestApp() *kong.Application {
function TestGenerateBashCompletion (line 24) | func TestGenerateBashCompletion(t *testing.T) {
function TestGenerateZshCompletion (line 42) | func TestGenerateZshCompletion(t *testing.T) {
function TestGenerateFishCompletion (line 57) | func TestGenerateFishCompletion(t *testing.T) {
function TestCollectCommands (line 75) | func TestCollectCommands(t *testing.T) {
FILE: core/cli/context/context.go
type Context (line 3) | type Context struct
FILE: core/cli/deprecations.go
function warnDeprecatedFlags (line 18) | func warnDeprecatedFlags() {
FILE: core/cli/explorer.go
type ExplorerCMD (line 14) | type ExplorerCMD struct
method Run (line 24) | func (e *ExplorerCMD) Run(ctx *cliContext.Context) error {
FILE: core/cli/federated.go
type FederatedCLI (line 11) | type FederatedCLI struct
method Run (line 19) | func (f *FederatedCLI) Run(ctx *cliContext.Context) error {
FILE: core/cli/models.go
type ModelsCMDFlags (line 22) | type ModelsCMDFlags struct
type ModelsList (line 29) | type ModelsList struct
method Run (line 46) | func (ml *ModelsList) Run(ctx *cliContext.Context) error {
type ModelsInstall (line 33) | type ModelsInstall struct
method Run (line 73) | func (mi *ModelsInstall) Run(ctx *cliContext.Context) error {
type ModelsCMD (line 41) | type ModelsCMD struct
FILE: core/cli/run.go
type RunCMD (line 29) | type RunCMD struct
method Run (line 142) | func (r *RunCMD) Run(ctx *cliContext.Context) error {
function waitForServerReady (line 497) | func waitForServerReady(address string, ctx context.Context) {
FILE: core/cli/soundgeneration.go
type SoundGenerationCMD (line 19) | type SoundGenerationCMD struct
method Run (line 52) | func (t *SoundGenerationCMD) Run(ctx *cliContext.Context) error {
function parseToFloat32Ptr (line 34) | func parseToFloat32Ptr(input string) *float32 {
function parseToInt32Ptr (line 43) | func parseToInt32Ptr(input string) *int32 {
FILE: core/cli/transcript.go
type TranscriptCMD (line 21) | type TranscriptCMD struct
method Run (line 38) | func (t *TranscriptCMD) Run(ctx *cliContext.Context) error {
FILE: core/cli/tts.go
type TTSCMD (line 18) | type TTSCMD struct
method Run (line 29) | func (t *TTSCMD) Run(ctx *cliContext.Context) error {
FILE: core/cli/util.go
type UtilCMD (line 23) | type UtilCMD struct
type GGUFInfoCMD (line 30) | type GGUFInfoCMD struct
method Run (line 75) | func (u *GGUFInfoCMD) Run(ctx *cliContext.Context) error {
type HFScanCMD (line 35) | type HFScanCMD struct
method Run (line 107) | func (hfscmd *HFScanCMD) Run(ctx *cliContext.Context) error {
type UsecaseHeuristicCMD (line 41) | type UsecaseHeuristicCMD struct
method Run (line 149) | func (uhcmd *UsecaseHeuristicCMD) Run(ctx *cliContext.Context) error {
type CreateOCIImageCMD (line 46) | type CreateOCIImageCMD struct
method Run (line 53) | func (u *CreateOCIImageCMD) Run(ctx *cliContext.Context) error {
FILE: core/cli/worker/worker.go
type WorkerFlags (line 3) | type WorkerFlags struct
type Worker (line 10) | type Worker struct
FILE: core/cli/worker/worker_llamacpp.go
type LLamaCPP (line 21) | type LLamaCPP struct
method Run (line 66) | func (r *LLamaCPP) Run(ctx *cliContext.Context) error {
constant llamaCPPRPCBinaryName (line 26) | llamaCPPRPCBinaryName = "llama-cpp-rpc-server"
constant llamaCPPGalleryName (line 27) | llamaCPPGalleryName = "llama-cpp"
function findLLamaCPPBackend (line 30) | func findLLamaCPPBackend(galleries string, systemState *system.SystemSta...
FILE: core/cli/worker/worker_mlx_common.go
constant mlxDistributedGalleryName (line 17) | mlxDistributedGalleryName = "mlx-distributed"
function findMLXDistributedBackendPath (line 21) | func findMLXDistributedBackendPath(galleries string, systemState *system...
function buildMLXCommand (line 60) | func buildMLXCommand(backendPath string, args ...string) *exec.Cmd {
FILE: core/cli/worker/worker_mlx_distributed.go
type MLXDistributed (line 13) | type MLXDistributed struct
method Run (line 22) | func (r *MLXDistributed) Run(ctx *cliContext.Context) error {
FILE: core/cli/worker/worker_p2p.go
type P2P (line 19) | type P2P struct
method Run (line 28) | func (r *P2P) Run(ctx *cliContext.Context) error {
FILE: core/cli/worker/worker_p2p_mlx.go
type P2PMLX (line 17) | type P2PMLX struct
method Run (line 25) | func (r *P2PMLX) Run(ctx *cliContext.Context) error {
FILE: core/clients/store.go
type StoreClient (line 12) | type StoreClient struct
method Set (line 55) | func (c *StoreClient) Set(req SetRequest) error {
method Get (line 60) | func (c *StoreClient) Get(req GetRequest) (*GetResponse, error) {
method Delete (line 76) | func (c *StoreClient) Delete(req DeleteRequest) error {
method Find (line 81) | func (c *StoreClient) Find(req FindRequest) (*FindResponse, error) {
method doRequest (line 97) | func (c *StoreClient) doRequest(path string, data interface{}) error {
method doRequestWithResponse (line 123) | func (c *StoreClient) doRequestWithResponse(path string, data interfac...
type SetRequest (line 17) | type SetRequest struct
type GetRequest (line 22) | type GetRequest struct
type GetResponse (line 26) | type GetResponse struct
type DeleteRequest (line 31) | type DeleteRequest struct
type FindRequest (line 35) | type FindRequest struct
type FindResponse (line 40) | type FindResponse struct
function NewStoreClient (line 47) | func NewStoreClient(baseUrl string) *StoreClient {
FILE: core/config/application_config.go
type ApplicationConfig (line 14) | type ApplicationConfig struct
method GetEffectiveMaxActiveBackends (line 344) | func (o *ApplicationConfig) GetEffectiveMaxActiveBackends() int {
method ToConfigLoaderOptions (line 822) | func (o *ApplicationConfig) ToConfigLoaderOptions() []ConfigLoaderOpti...
method ToRuntimeSettings (line 835) | func (o *ApplicationConfig) ToRuntimeSettings() RuntimeSettings {
method ApplyRuntimeSettings (line 954) | func (o *ApplicationConfig) ApplyRuntimeSettings(settings *RuntimeSett...
type AuthConfig (line 105) | type AuthConfig struct
type AgentPoolConfig (line 122) | type AgentPoolConfig struct
type AppOption (line 145) | type AppOption
function NewApplicationConfig (line 147) | func NewApplicationConfig(o ...AppOption) *ApplicationConfig {
function WithModelsURL (line 183) | func WithModelsURL(urls ...string) AppOption {
function WithSystemState (line 189) | func WithSystemState(state *system.SystemState) AppOption {
function WithExternalBackends (line 195) | func WithExternalBackends(backends ...string) AppOption {
function WithMachineTag (line 201) | func WithMachineTag(tag string) AppOption {
function WithCors (line 207) | func WithCors(b bool) AppOption {
function WithP2PNetworkID (line 213) | func WithP2PNetworkID(s string) AppOption {
function WithDisableCSRF (line 219) | func WithDisableCSRF(b bool) AppOption {
function WithP2PToken (line 225) | func WithP2PToken(s string) AppOption {
function SetWatchDogBusyTimeout (line 269) | func SetWatchDogBusyTimeout(t time.Duration) AppOption {
function SetWatchDogIdleTimeout (line 275) | func SetWatchDogIdleTimeout(t time.Duration) AppOption {
function SetWatchDogInterval (line 281) | func SetWatchDogInterval(t time.Duration) AppOption {
function SetMemoryReclaimerThreshold (line 297) | func SetMemoryReclaimerThreshold(threshold float64) AppOption {
function WithMemoryReclaimer (line 308) | func WithMemoryReclaimer(enabled bool, threshold float64) AppOption {
function SetMaxActiveBackends (line 329) | func SetMaxActiveBackends(n int) AppOption {
function WithForceEvictionWhenBusy (line 355) | func WithForceEvictionWhenBusy(enabled bool) AppOption {
function WithLRUEvictionMaxRetries (line 362) | func WithLRUEvictionMaxRetries(maxRetries int) AppOption {
function WithLRUEvictionRetryInterval (line 371) | func WithLRUEvictionRetryInterval(interval time.Duration) AppOption {
function WithExternalBackend (line 395) | func WithExternalBackend(name string, uri string) AppOption {
function WithCorsAllowOrigins (line 404) | func WithCorsAllowOrigins(b string) AppOption {
function WithStringGalleries (line 410) | func WithStringGalleries(galls string) AppOption {
function WithBackendGalleries (line 424) | func WithBackendGalleries(galls string) AppOption {
function WithGalleries (line 438) | func WithGalleries(galleries []Gallery) AppOption {
function WithContext (line 444) | func WithContext(ctx context.Context) AppOption {
function WithYAMLConfigPreload (line 450) | func WithYAMLConfigPreload(configFile string) AppOption {
function WithJSONStringPreload (line 456) | func WithJSONStringPreload(configFile string) AppOption {
function WithConfigFile (line 461) | func WithConfigFile(configFile string) AppOption {
function WithUploadLimitMB (line 467) | func WithUploadLimitMB(limit int) AppOption {
function WithThreads (line 473) | func WithThreads(threads int) AppOption {
function WithContextSize (line 482) | func WithContextSize(ctxSize int) AppOption {
function WithLlamaCPPTunnelCallback (line 488) | func WithLlamaCPPTunnelCallback(callback func(tunnels []string)) AppOpti...
function WithMLXTunnelCallback (line 494) | func WithMLXTunnelCallback(callback func(tunnels []string)) AppOption {
function WithF16 (line 500) | func WithF16(f16 bool) AppOption {
function WithDebug (line 506) | func WithDebug(debug bool) AppOption {
function WithTracingMaxItems (line 512) | func WithTracingMaxItems(items int) AppOption {
function WithGeneratedContentDir (line 518) | func WithGeneratedContentDir(generatedContentDir string) AppOption {
function WithUploadDir (line 524) | func WithUploadDir(uploadDir string) AppOption {
function WithDataPath (line 530) | func WithDataPath(dataPath string) AppOption {
function WithDynamicConfigDir (line 536) | func WithDynamicConfigDir(dynamicConfigsDir string) AppOption {
function WithDynamicConfigDirPollInterval (line 542) | func WithDynamicConfigDirPollInterval(interval time.Duration) AppOption {
function WithApiKeys (line 548) | func WithApiKeys(apiKeys []string) AppOption {
function WithAgentJobRetentionDays (line 554) | func WithAgentJobRetentionDays(days int) AppOption {
function WithOpenResponsesStoreTTL (line 560) | func WithOpenResponsesStoreTTL(ttl time.Duration) AppOption {
function WithEnforcedPredownloadScans (line 566) | func WithEnforcedPredownloadScans(enforced bool) AppOption {
function WithOpaqueErrors (line 572) | func WithOpaqueErrors(opaque bool) AppOption {
function WithLoadToMemory (line 578) | func WithLoadToMemory(models []string) AppOption {
function WithSubtleKeyComparison (line 584) | func WithSubtleKeyComparison(subtle bool) AppOption {
function WithDisableApiKeyRequirementForHttpGet (line 590) | func WithDisableApiKeyRequirementForHttpGet(required bool) AppOption {
function WithAPIAddress (line 596) | func WithAPIAddress(address string) AppOption {
function WithHttpGetExemptedEndpoints (line 606) | func WithHttpGetExemptedEndpoints(endpoints []string) AppOption {
function WithAgentPoolAPIURL (line 626) | func WithAgentPoolAPIURL(url string) AppOption {
function WithAgentPoolAPIKey (line 632) | func WithAgentPoolAPIKey(key string) AppOption {
function WithAgentPoolDefaultModel (line 638) | func WithAgentPoolDefaultModel(model string) AppOption {
function WithAgentPoolMultimodalModel (line 644) | func WithAgentPoolMultimodalModel(model string) AppOption {
function WithAgentPoolTranscriptionModel (line 650) | func WithAgentPoolTranscriptionModel(model string) AppOption {
function WithAgentPoolTranscriptionLanguage (line 656) | func WithAgentPoolTranscriptionLanguage(lang string) AppOption {
function WithAgentPoolTTSModel (line 662) | func WithAgentPoolTTSModel(model string) AppOption {
function WithAgentPoolStateDir (line 668) | func WithAgentPoolStateDir(dir string) AppOption {
function WithAgentPoolTimeout (line 674) | func WithAgentPoolTimeout(timeout string) AppOption {
function WithAgentPoolVectorEngine (line 684) | func WithAgentPoolVectorEngine(engine string) AppOption {
function WithAgentPoolEmbeddingModel (line 690) | func WithAgentPoolEmbeddingModel(model string) AppOption {
function WithAgentPoolCustomActionsDir (line 696) | func WithAgentPoolCustomActionsDir(dir string) AppOption {
function WithAgentPoolDatabaseURL (line 702) | func WithAgentPoolDatabaseURL(url string) AppOption {
function WithAgentPoolMaxChunkingSize (line 708) | func WithAgentPoolMaxChunkingSize(size int) AppOption {
function WithAgentPoolChunkOverlap (line 714) | func WithAgentPoolChunkOverlap(overlap int) AppOption {
function WithAgentPoolCollectionDBPath (line 724) | func WithAgentPoolCollectionDBPath(path string) AppOption {
function WithAgentHubURL (line 730) | func WithAgentHubURL(url string) AppOption {
function WithAuthEnabled (line 738) | func WithAuthEnabled(enabled bool) AppOption {
function WithAuthDatabaseURL (line 744) | func WithAuthDatabaseURL(url string) AppOption {
function WithAuthGitHubClientID (line 750) | func WithAuthGitHubClientID(clientID string) AppOption {
function WithAuthGitHubClientSecret (line 756) | func WithAuthGitHubClientSecret(clientSecret string) AppOption {
function WithAuthBaseURL (line 762) | func WithAuthBaseURL(baseURL string) AppOption {
function WithAuthAdminEmail (line 768) | func WithAuthAdminEmail(email string) AppOption {
function WithAuthRegistrationMode (line 774) | func WithAuthRegistrationMode(mode string) AppOption {
function WithAuthDisableLocalAuth (line 780) | func WithAuthDisableLocalAuth(disable bool) AppOption {
function WithAuthOIDCIssuer (line 786) | func WithAuthOIDCIssuer(issuer string) AppOption {
function WithAuthOIDCClientID (line 792) | func WithAuthOIDCClientID(clientID string) AppOption {
function WithAuthOIDCClientSecret (line 798) | func WithAuthOIDCClientSecret(clientSecret string) AppOption {
function WithAuthAPIKeyHMACSecret (line 804) | func WithAuthAPIKeyHMACSecret(secret string) AppOption {
function WithAuthDefaultAPIKeyExpiry (line 810) | func WithAuthDefaultAPIKeyExpiry(expiry string) AppOption {
FILE: core/config/config_suite_test.go
function TestConfig (line 10) | func TestConfig(t *testing.T) {
FILE: core/config/gallery.go
type Gallery (line 3) | type Gallery struct
FILE: core/config/gguf.go
constant defaultContextSize (line 18) | defaultContextSize = 1024
constant defaultNGPULayers (line 19) | defaultNGPULayers = 99999999
function guessGGUFFromFile (line 22) | func guessGGUFFromFile(cfg *ModelConfig, f *gguf.GGUFFile, defaultCtx in...
function DetectThinkingSupportFromBackend (line 85) | func DetectThinkingSupportFromBackend(ctx context.Context, cfg *ModelCon...
FILE: core/config/guesser.go
function guessDefaultsFromFile (line 11) | func guessDefaultsFromFile(cfg *ModelConfig, modelPath string, defaultCt...
FILE: core/config/model_config.go
constant RAND_SEED (line 19) | RAND_SEED = -1
type TTSConfig (line 23) | type TTSConfig struct
type ModelConfig (line 32) | type ModelConfig struct
method syncKnownUsecasesFromString (line 287) | func (c *ModelConfig) syncKnownUsecasesFromString() {
method UnmarshalYAML (line 298) | func (c *ModelConfig) UnmarshalYAML(value *yaml.Node) error {
method SetFunctionCallString (line 311) | func (c *ModelConfig) SetFunctionCallString(s string) {
method SetFunctionCallNameString (line 315) | func (c *ModelConfig) SetFunctionCallNameString(s string) {
method ShouldUseFunctions (line 319) | func (c *ModelConfig) ShouldUseFunctions() bool {
method ShouldCallSpecificFunction (line 323) | func (c *ModelConfig) ShouldCallSpecificFunction() bool {
method MMProjFileName (line 329) | func (c *ModelConfig) MMProjFileName() string {
method IsMMProjURL (line 339) | func (c *ModelConfig) IsMMProjURL() bool {
method IsModelURL (line 344) | func (c *ModelConfig) IsModelURL() bool {
method ModelFileName (line 351) | func (c *ModelConfig) ModelFileName() string {
method FunctionToCall (line 361) | func (c *ModelConfig) FunctionToCall() string {
method SetDefaults (line 370) | func (cfg *ModelConfig) SetDefaults(opts ...ConfigLoaderOption) {
method Validate (line 487) | func (c *ModelConfig) Validate() (bool, error) {
method HasTemplate (line 523) | func (c *ModelConfig) HasTemplate() bool {
method GetModelConfigFile (line 527) | func (c *ModelConfig) GetModelConfigFile() string {
method GetModelTemplate (line 532) | func (c *ModelConfig) GetModelTemplate() string {
method HasUsecases (line 601) | func (c *ModelConfig) HasUsecases(u ModelConfigUsecase) bool {
method GuessUsecases (line 611) | func (c *ModelConfig) GuessUsecases(u ModelConfigUsecase) bool {
method BuildCogitoOptions (line 702) | func (c *ModelConfig) BuildCogitoOptions() []cogito.Option {
type MCPConfig (line 89) | type MCPConfig struct
method MCPConfigFromYAML (line 108) | func (c *MCPConfig) MCPConfigFromYAML() (MCPGenericConfig[MCPRemoteSer...
type AgentConfig (line 95) | type AgentConfig struct
type MCPGenericConfig (line 123) | type MCPGenericConfig struct
type MCPRemoteServers (line 126) | type MCPRemoteServers
type MCPSTDIOServers (line 127) | type MCPSTDIOServers
type MCPRemoteServer (line 130) | type MCPRemoteServer struct
type MCPSTDIOServer (line 136) | type MCPSTDIOServer struct
type Pipeline (line 143) | type Pipeline struct
type File (line 151) | type File struct
type FeatureFlag (line 157) | type FeatureFlag
method Enabled (line 159) | func (ff FeatureFlag) Enabled(s string) bool {
type GRPC (line 167) | type GRPC struct
type Diffusers (line 173) | type Diffusers struct
type LLMConfig (line 186) | type LLMConfig struct
type LimitMMPerPrompt (line 250) | type LimitMMPerPrompt struct
type TemplateConfig (line 257) | type TemplateConfig struct
type ModelConfigUsecase (line 536) | type ModelConfigUsecase
constant FLAG_ANY (line 539) | FLAG_ANY ModelConfigUsecase = 0b000000000000
constant FLAG_CHAT (line 540) | FLAG_CHAT ModelConfigUsecase = 0b000000000001
constant FLAG_COMPLETION (line 541) | FLAG_COMPLETION ModelConfigUsecase = 0b000000000010
constant FLAG_EDIT (line 542) | FLAG_EDIT ModelConfigUsecase = 0b000000000100
constant FLAG_EMBEDDINGS (line 543) | FLAG_EMBEDDINGS ModelConfigUsecase = 0b000000001000
constant FLAG_RERANK (line 544) | FLAG_RERANK ModelConfigUsecase = 0b000000010000
constant FLAG_IMAGE (line 545) | FLAG_IMAGE ModelConfigUsecase = 0b000000100000
constant FLAG_TRANSCRIPT (line 546) | FLAG_TRANSCRIPT ModelConfigUsecase = 0b000001000000
constant FLAG_TTS (line 547) | FLAG_TTS ModelConfigUsecase = 0b000010000000
constant FLAG_SOUND_GENERATION (line 548) | FLAG_SOUND_GENERATION ModelConfigUsecase = 0b000100000000
constant FLAG_TOKENIZE (line 549) | FLAG_TOKENIZE ModelConfigUsecase = 0b001000000000
constant FLAG_VAD (line 550) | FLAG_VAD ModelConfigUsecase = 0b010000000000
constant FLAG_VIDEO (line 551) | FLAG_VIDEO ModelConfigUsecase = 0b100000000000
constant FLAG_DETECTION (line 552) | FLAG_DETECTION ModelConfigUsecase = 0b1000000000000
constant FLAG_LLM (line 555) | FLAG_LLM ModelConfigUsecase = FLAG_CHAT | FLAG_COMPLETION | FLAG_EDIT
function GetAllModelConfigUsecases (line 558) | func GetAllModelConfigUsecases() map[string]ModelConfigUsecase {
function stringToFlag (line 579) | func stringToFlag(s string) string {
function GetUsecasesFromYAML (line 583) | func GetUsecasesFromYAML(input []string) *ModelConfigUsecase {
FILE: core/config/model_config_filter.go
type ModelConfigFilterFn (line 5) | type ModelConfigFilterFn
function NoFilterFn (line 7) | func NoFilterFn(_ string, _ *ModelConfig) bool { return true }
function BuildNameFilterFn (line 9) | func BuildNameFilterFn(filter string) (ModelConfigFilterFn, error) {
function BuildUsecaseFilterFn (line 25) | func BuildUsecaseFilterFn(usecases ModelConfigUsecase) ModelConfigFilter...
FILE: core/config/model_config_loader.go
type ModelConfigLoader (line 21) | type ModelConfigLoader struct
method LoadModelConfigFileByName (line 113) | func (bcl *ModelConfigLoader) LoadModelConfigFileByName(modelName, mod...
method LoadModelConfigFileByNameDefaultOptions (line 148) | func (bcl *ModelConfigLoader) LoadModelConfigFileByNameDefaultOptions(...
method LoadMultipleModelConfigsSingleFile (line 158) | func (bcl *ModelConfigLoader) LoadMultipleModelConfigsSingleFile(file ...
method ReadModelConfig (line 176) | func (bcl *ModelConfigLoader) ReadModelConfig(file string, opts ...Con...
method GetModelConfig (line 203) | func (bcl *ModelConfigLoader) GetModelConfig(m string) (ModelConfig, b...
method GetAllModelsConfigs (line 210) | func (bcl *ModelConfigLoader) GetAllModelsConfigs() []ModelConfig {
method GetModelConfigsByFilter (line 225) | func (bcl *ModelConfigLoader) GetModelConfigsByFilter(filter ModelConf...
method RemoveModelConfig (line 245) | func (bcl *ModelConfigLoader) RemoveModelConfig(m string) {
method UpdateModelConfig (line 253) | func (bcl *ModelConfigLoader) UpdateModelConfig(m string, updater func...
method Preload (line 263) | func (bcl *ModelConfigLoader) Preload(modelPath string) error {
method LoadModelConfigsFromPath (line 358) | func (bcl *ModelConfigLoader) LoadModelConfigsFromPath(path string, op...
function NewModelConfigLoader (line 27) | func NewModelConfigLoader(modelPath string) *ModelConfigLoader {
type LoadOptions (line 34) | type LoadOptions struct
method Apply (line 73) | func (lo *LoadOptions) Apply(options ...ConfigLoaderOption) {
function LoadOptionDebug (line 41) | func LoadOptionDebug(debug bool) ConfigLoaderOption {
function LoadOptionThreads (line 47) | func LoadOptionThreads(threads int) ConfigLoaderOption {
function LoadOptionContextSize (line 53) | func LoadOptionContextSize(ctxSize int) ConfigLoaderOption {
function ModelPath (line 59) | func ModelPath(modelPath string) ConfigLoaderOption {
function LoadOptionF16 (line 65) | func LoadOptionF16(f16 bool) ConfigLoaderOption {
type ConfigLoaderOption (line 71) | type ConfigLoaderOption
function readModelConfigsFromFile (line 82) | func readModelConfigsFromFile(file string, opts ...ConfigLoaderOption) (...
FILE: core/config/runtime_settings.go
type RuntimeSettings (line 11) | type RuntimeSettings struct
FILE: core/dependencies_manager/manager.go
type Asset (line 16) | type Asset struct
function main (line 22) | func main() {
FILE: core/explorer/database.go
type Database (line 15) | type Database struct
method Get (line 48) | func (db *Database) Get(token string) (TokenData, bool) {
method Set (line 59) | func (db *Database) Set(token string, t TokenData) error {
method Delete (line 71) | func (db *Database) Delete(token string) error {
method TokenList (line 81) | func (db *Database) TokenList() []string {
method load (line 101) | func (db *Database) load() error {
method save (line 116) | func (db *Database) save() error {
type TokenData (line 23) | type TokenData struct
type ClusterData (line 30) | type ClusterData struct
function NewDatabase (line 37) | func NewDatabase(path string) (*Database, error) {
FILE: core/explorer/discovery.go
type DiscoveryServer (line 17) | type DiscoveryServer struct
method runBackground (line 44) | func (s *DiscoveryServer) runBackground() {
method failedToken (line 117) | func (s *DiscoveryServer) failedToken(token string) {
method deleteFailedConnections (line 125) | func (s *DiscoveryServer) deleteFailedConnections() {
method retrieveNetworkData (line 137) | func (s *DiscoveryServer) retrieveNetworkData(c context.Context, ledge...
method Start (line 201) | func (s *DiscoveryServer) Start(ctx context.Context, keepRunning bool)...
function NewDiscoveryServer (line 26) | func NewDiscoveryServer(db *Database, dur time.Duration, failureThreshol...
type Network (line 40) | type Network struct
FILE: core/explorer/explorer_suite_test.go
function TestExplorer (line 10) | func TestExplorer(t *testing.T) {
FILE: core/gallery/backend_resolve.go
type modelConfigCacheEntry (line 17) | type modelConfigCacheEntry struct
method hasExpired (line 22) | func (e modelConfigCacheEntry) hasExpired() bool {
function resolveBackend (line 35) | func resolveBackend(m *GalleryModel, basePath string) string {
function fetchModelConfigMap (line 60) | func fetchModelConfigMap(modelURL, basePath string) map[string]interface...
function prefetchModelConfigs (line 106) | func prefetchModelConfigs(urls []string, basePath string) {
function resolveModelURLLocally (line 132) | func resolveModelURLLocally(modelURL, galleryURL string) string {
function localGalleryDir (line 162) | func localGalleryDir(galleryURL string) string {
FILE: core/gallery/backend_types.go
type BackendMetadata (line 12) | type BackendMetadata struct
type GalleryBackend (line 25) | type GalleryBackend struct
method FindBestBackendFromMeta (line 33) | func (backend *GalleryBackend) FindBestBackendFromMeta(systemState *sy...
method GetInstalled (line 48) | func (m *GalleryBackend) GetInstalled() bool {
method GetLicense (line 52) | func (m *GalleryBackend) GetLicense() string {
method SetGallery (line 58) | func (m *GalleryBackend) SetGallery(gallery config.Gallery) {
method IsMeta (line 62) | func (m *GalleryBackend) IsMeta() bool {
method IsCompatibleWith (line 69) | func (m *GalleryBackend) IsCompatibleWith(systemState *system.SystemSt...
method SetInstalled (line 85) | func (m *GalleryBackend) SetInstalled(installed bool) {
method GetName (line 89) | func (m *GalleryBackend) GetName() string {
method GetGallery (line 93) | func (m *GalleryBackend) GetGallery() config.Gallery {
method GetDescription (line 97) | func (m *GalleryBackend) GetDescription() string {
method GetTags (line 101) | func (m *GalleryBackend) GetTags() []string {
method ID (line 105) | func (m GalleryBackend) ID() string {
type GalleryBackends (line 56) | type GalleryBackends
FILE: core/gallery/backends.go
constant metadataFile (line 24) | metadataFile = "metadata.json"
constant runFile (line 25) | runFile = "run.sh"
constant defaultLatestTag (line 30) | defaultLatestTag = "latest"
constant defaultMasterTag (line 31) | defaultMasterTag = "master"
constant defaultDevSuffix (line 32) | defaultDevSuffix = "development"
function getFallbackTagValues (line 36) | func getFallbackTagValues(systemState *system.SystemState) (latestTag, m...
type backendCandidate (line 58) | type backendCandidate struct
function readBackendMetadata (line 64) | func readBackendMetadata(backendPath string) (*BackendMetadata, error) {
function writeBackendMetadata (line 86) | func writeBackendMetadata(backendPath string, metadata *BackendMetadata)...
function InstallBackendFromGallery (line 102) | func InstallBackendFromGallery(ctx context.Context, galleries []config.G...
function InstallBackend (line 170) | func InstallBackend(ctx context.Context, systemState *system.SystemState...
function DeleteBackendFromSystem (line 287) | func DeleteBackendFromSystem(systemState *system.SystemState, name strin...
type SystemBackend (line 352) | type SystemBackend struct
type SystemBackends (line 360) | type SystemBackends
method Exists (line 362) | func (b SystemBackends) Exists(name string) bool {
method Get (line 367) | func (b SystemBackends) Get(name string) (SystemBackend, bool) {
method GetAll (line 372) | func (b SystemBackends) GetAll() []SystemBackend {
function ListSystemBackends (line 380) | func ListSystemBackends(systemState *system.SystemState) (SystemBackends...
function RegisterBackends (line 506) | func RegisterBackends(systemState *system.SystemState, modelLoader *mode...
FILE: core/gallery/backends_test.go
constant testImage (line 19) | testImage = "quay.io/mudler/tests:localai-backend-test"
FILE: core/gallery/gallery.go
function GetGalleryConfigFromURL (line 22) | func GetGalleryConfigFromURL[T any](url string, basePath string) (T, err...
function GetGalleryConfigFromURLWithContext (line 35) | func GetGalleryConfigFromURLWithContext[T any](ctx context.Context, url ...
function ReadConfigFile (line 48) | func ReadConfigFile[T any](filePath string) (*T, error) {
type GalleryElement (line 65) | type GalleryElement interface
type GalleryElements (line 76) | type GalleryElements
method Search (line 78) | func (gm GalleryElements[T]) Search(term string) GalleryElements[T] {
method SortByName (line 95) | func (gm GalleryElements[T]) SortByName(sortOrder string) GalleryElement...
method SortByRepository (line 106) | func (gm GalleryElements[T]) SortByRepository(sortOrder string) GalleryE...
method SortByLicense (line 117) | func (gm GalleryElements[T]) SortByLicense(sortOrder string) GalleryElem...
method SortByInstalled (line 140) | func (gm GalleryElements[T]) SortByInstalled(sortOrder string) GalleryEl...
method FindByName (line 158) | func (gm GalleryElements[T]) FindByName(name string) T {
method Paginate (line 168) | func (gm GalleryElements[T]) Paginate(pageNum int, itemsNum int) Gallery...
function FindGalleryElement (line 180) | func FindGalleryElement[T GalleryElement](models []T, name string) T {
function AvailableGalleryModels (line 207) | func AvailableGalleryModels(galleries []config.Gallery, systemState *sys...
function AvailableBackends (line 258) | func AvailableBackends(galleries []config.Gallery, systemState *system.S...
function AvailableBackendsUnfiltered (line 263) | func AvailableBackendsUnfiltered(galleries []config.Gallery, systemState...
function availableBackendsWithFilter (line 268) | func availableBackendsWithFilter(galleries []config.Gallery, systemState...
function findGalleryURLFromReferenceURL (line 300) | func findGalleryURLFromReferenceURL(url string, basePath string) (string...
type galleryCacheEntry (line 315) | type galleryCacheEntry struct
method hasExpired (line 320) | func (entry galleryCacheEntry) hasExpired() bool {
function getGalleryElements (line 326) | func getGalleryElements[T GalleryElement](gallery config.Gallery, basePa...
FILE: core/gallery/gallery_suite_test.go
function TestGallery (line 10) | func TestGallery(t *testing.T) {
FILE: core/gallery/importers/diffuser.go
type DiffuserImporter (line 16) | type DiffuserImporter struct
method Match (line 18) | func (i *DiffuserImporter) Match(details Details) bool {
method Import (line 46) | func (i *DiffuserImporter) Import(details Details) (gallery.ModelConfi...
FILE: core/gallery/importers/importers.go
type Details (line 26) | type Details struct
type Importer (line 32) | type Importer interface
function hasYAMLExtension (line 37) | func hasYAMLExtension(uri string) bool {
function DiscoverModelConfig (line 41) | func DiscoverModelConfig(uri string, preferences json.RawMessage) (galle...
FILE: core/gallery/importers/importers_suite_test.go
function TestImporters (line 10) | func TestImporters(t *testing.T) {
FILE: core/gallery/importers/llama-cpp.go
type LlamaCPPImporter (line 20) | type LlamaCPPImporter struct
method Match (line 22) | func (i *LlamaCPPImporter) Match(details Details) bool {
method Import (line 64) | func (i *LlamaCPPImporter) Import(details Details) (gallery.ModelConfi...
FILE: core/gallery/importers/mlx.go
type MLXImporter (line 16) | type MLXImporter struct
method Match (line 18) | func (i *MLXImporter) Match(details Details) bool {
method Import (line 42) | func (i *MLXImporter) Import(details Details) (gallery.ModelConfig, er...
FILE: core/gallery/importers/transformers.go
type TransformersImporter (line 16) | type TransformersImporter struct
method Match (line 18) | func (i *TransformersImporter) Match(details Details) bool {
method Import (line 46) | func (i *TransformersImporter) Import(details Details) (gallery.ModelC...
FILE: core/gallery/importers/vllm.go
type VLLMImporter (line 16) | type VLLMImporter struct
method Match (line 18) | func (i *VLLMImporter) Match(details Details) bool {
method Import (line 46) | func (i *VLLMImporter) Import(details Details) (gallery.ModelConfig, e...
FILE: core/gallery/metadata_type.go
type Metadata (line 5) | type Metadata struct
FILE: core/gallery/models.go
type ModelConfig (line 52) | type ModelConfig struct
type File (line 63) | type File struct
type PromptTemplate (line 69) | type PromptTemplate struct
function InstallModelFromGallery (line 75) | func InstallModelFromGallery(
function InstallModel (line 161) | func InstallModel(ctx context.Context, systemState *system.SystemState, ...
function galleryFileName (line 291) | func galleryFileName(name string) string {
function GetLocalModelConfiguration (line 295) | func GetLocalModelConfiguration(basePath string, name string) (*ModelCon...
function listModelFiles (line 301) | func listModelFiles(systemState *system.SystemState, name string) ([]str...
function DeleteModelFromSystem (line 367) | func DeleteModelFromSystem(systemState *system.SystemState, name string)...
function SafetyScanGalleryModels (line 426) | func SafetyScanGalleryModels(galleries []lconfig.Gallery, systemState *s...
function SafetyScanGalleryModel (line 439) | func SafetyScanGalleryModel(galleryModel *GalleryModel) error {
FILE: core/gallery/models_test.go
constant bertEmbeddingsURL (line 17) | bertEmbeddingsURL = `https://gist.githubusercontent.com/mudler/0a080b166...
FILE: core/gallery/models_types.go
type GalleryModel (line 12) | type GalleryModel struct
method GetInstalled (line 20) | func (m *GalleryModel) GetInstalled() bool {
method GetLicense (line 24) | func (m *GalleryModel) GetLicense() string {
method SetGallery (line 28) | func (m *GalleryModel) SetGallery(gallery config.Gallery) {
method SetInstalled (line 32) | func (m *GalleryModel) SetInstalled(installed bool) {
method GetName (line 36) | func (m *GalleryModel) GetName() string {
method GetGallery (line 40) | func (m *GalleryModel) GetGallery() config.Gallery {
method ID (line 44) | func (m GalleryModel) ID() string {
method GetTags (line 48) | func (m *GalleryModel) GetTags() []string {
method GetDescription (line 52) | func (m *GalleryModel) GetDescription() string {
FILE: core/http/app.go
function API (line 54) | func API(application *application.Application) (*echo.Echo, error) {
FILE: core/http/app_test.go
constant apiKey (line 34) | apiKey = "joshua"
constant bearerKey (line 35) | bearerKey = "Bearer " + apiKey
constant testPrompt (line 37) | testPrompt = `### System:
type modelApplyRequest (line 46) | type modelApplyRequest struct
function getModelStatus (line 54) | func getModelStatus(url string) (response map[string]interface{}) {
function getModels (line 86) | func getModels(url string) ([]gallery.GalleryModel, error) {
function postModelApplyRequest (line 97) | func postModelApplyRequest(url string, request modelApplyRequest) (respo...
function postRequestJSON (line 142) | func postRequestJSON[B any](url string, bodyJson *B) error {
function postRequestResponseJSON (line 178) | func postRequestResponseJSON[B1 any, B2 any](url string, reqJson *B1, re...
function putRequestJSON (line 213) | func putRequestJSON[B any](url string, bodyJson *B) error {
function postInvalidRequest (line 248) | func postInvalidRequest(url string) (error, int) {
function getRequest (line 277) | func getRequest(url string, header http.Header) (error, int, []byte) {
constant bertEmbeddingsURL (line 302) | bertEmbeddingsURL = `https://gist.githubusercontent.com/mudler/0a080b166...
FILE: core/http/auth/apikeys.go
constant apiKeyPrefix (line 16) | apiKeyPrefix = "lai-"
constant apiKeyRandBytes (line 17) | apiKeyRandBytes = 32
constant keyPrefixLen (line 18) | keyPrefixLen = 8
function GenerateAPIKey (line 23) | func GenerateAPIKey(hmacSecret string) (plaintext, hash, prefix string, ...
function HashAPIKey (line 39) | func HashAPIKey(plaintext, hmacSecret string) string {
function CreateAPIKey (line 51) | func CreateAPIKey(db *gorm.DB, userID, name, role, hmacSecret string, ex...
function ValidateAPIKey (line 77) | func ValidateAPIKey(db *gorm.DB, plaintext, hmacSecret string) (*UserAPI...
function ListAPIKeys (line 101) | func ListAPIKeys(db *gorm.DB, userID string) ([]UserAPIKey, error) {
function RevokeAPIKey (line 110) | func RevokeAPIKey(db *gorm.DB, keyID, userID string) error {
function CleanExpiredAPIKeys (line 119) | func CleanExpiredAPIKeys(db *gorm.DB) error {
FILE: core/http/auth/auth_suite_test.go
function TestAuth (line 12) | func TestAuth(t *testing.T) {
FILE: core/http/auth/db.go
function InitDB (line 16) | func InitDB(databaseURL string) (*gorm.DB, error) {
FILE: core/http/auth/db_nosqlite.go
function openSQLiteDialector (line 11) | func openSQLiteDialector(path string) (gorm.Dialector, error) {
FILE: core/http/auth/db_sqlite.go
function openSQLiteDialector (line 10) | func openSQLiteDialector(path string) (gorm.Dialector, error) {
FILE: core/http/auth/features.go
type RouteFeature (line 4) | type RouteFeature struct
type FeatureMeta (line 91) | type FeatureMeta struct
function AgentFeatureMetas (line 98) | func AgentFeatureMetas() []FeatureMeta {
function APIFeatureMetas (line 108) | func APIFeatureMetas() []FeatureMeta {
FILE: core/http/auth/helpers_test.go
function testDB (line 17) | func testDB() *gorm.DB {
function createTestUser (line 24) | func createTestUser(db *gorm.DB, email, role, provider string) *auth.User {
function createTestSession (line 40) | func createTestSession(db *gorm.DB, userID string) string {
function generateTestID (line 48) | func generateTestID() string {
function ok (line 54) | func ok(c echo.Context) error {
function newAuthTestApp (line 59) | func newAuthTestApp(db *gorm.DB, appConfig *config.ApplicationConfig) *e...
function newAdminTestApp (line 81) | func newAdminTestApp(db *gorm.DB, appConfig *config.ApplicationConfig) *...
function doRequest (line 122) | func doRequest(e *echo.Echo, method, path string, opts ...func(*http.Req...
function withBearerToken (line 133) | func withBearerToken(token string) func(*http.Request) {
function withXApiKey (line 139) | func withXApiKey(key string) func(*http.Request) {
function withSessionCookie (line 145) | func withSessionCookie(sessionID string) func(*http.Request) {
function withTokenCookie (line 151) | func withTokenCookie(token string) func(*http.Request) {
FILE: core/http/auth/middleware.go
constant contextKeyUser (line 18) | contextKeyUser = "auth_user"
constant contextKeyRole (line 19) | contextKeyRole = "auth_role"
function Middleware (line 36) | func Middleware(db *gorm.DB, appConfig *config.ApplicationConfig) echo.M...
function RequireAdmin (line 107) | func RequireAdmin() echo.MiddlewareFunc {
function NoopMiddleware (line 137) | func NoopMiddleware() echo.MiddlewareFunc {
function RequireFeature (line 146) | func RequireFeature(db *gorm.DB, feature string) echo.MiddlewareFunc {
function GetUser (line 201) | func GetUser(c echo.Context) *User {
function GetUserRole (line 210) | func GetUserRole(c echo.Context) string {
function RequireRouteFeature (line 219) | func RequireRouteFeature(db *gorm.DB) echo.MiddlewareFunc {
function RequireModelAccess (line 285) | func RequireModelAccess(db *gorm.DB) echo.MiddlewareFunc {
function extractModelFromRequest (line 344) | func extractModelFromRequest(c echo.Context) string {
function tryAuthenticate (line 374) | func tryAuthenticate(c echo.Context, db *gorm.DB, appConfig *config.Appl...
function extractKey (line 423) | func extractKey(c echo.Context) string {
function isValidLegacyKey (line 453) | func isValidLegacyKey(key string, appConfig *config.ApplicationConfig) b...
function isExemptPath (line 463) | func isExemptPath(path string, appConfig *config.ApplicationConfig) bool {
function isAPIPath (line 480) | func isAPIPath(path string) bool {
function authError (line 497) | func authError(c echo.Context, appConfig *config.ApplicationConfig) error {
FILE: core/http/auth/models.go
constant ProviderLocal (line 12) | ProviderLocal = "local"
constant ProviderGitHub (line 13) | ProviderGitHub = "github"
constant ProviderOIDC (line 14) | ProviderOIDC = "oidc"
type User (line 18) | type User struct
type Session (line 33) | type Session struct
type UserAPIKey (line 43) | type UserAPIKey struct
type PermissionMap (line 59) | type PermissionMap
method Value (line 62) | func (p PermissionMap) Value() (driver.Value, error) {
method Scan (line 74) | func (p *PermissionMap) Scan(value any) error {
type InviteCode (line 92) | type InviteCode struct
type ModelAllowlist (line 107) | type ModelAllowlist struct
method Value (line 113) | func (m ModelAllowlist) Value() (driver.Value, error) {
method Scan (line 122) | func (m *ModelAllowlist) Scan(value any) error {
type UserPermission (line 140) | type UserPermission struct
FILE: core/http/auth/oauth.go
type providerEntry (line 25) | type providerEntry struct
type oauthUserInfo (line 33) | type oauthUserInfo struct
type OAuthManager (line 41) | type OAuthManager struct
method Providers (line 100) | func (m *OAuthManager) Providers() []string {
method LoginHandler (line 109) | func (m *OAuthManager) LoginHandler(providerName string) echo.HandlerF...
method CallbackHandler (line 152) | func (m *OAuthManager) CallbackHandler(providerName string, db *gorm.D...
type OAuthParams (line 46) | type OAuthParams struct
function NewOAuthManager (line 55) | func NewOAuthManager(baseURL string, params OAuthParams) (*OAuthManager,...
function extractOIDCUserInfo (line 253) | func extractOIDCUserInfo(ctx context.Context, verifier *oidc.IDTokenVeri...
type githubUserInfo (line 282) | type githubUserInfo struct
type githubEmail (line 290) | type githubEmail struct
function fetchGitHubUserInfoAsOAuth (line 297) | func fetchGitHubUserInfoAsOAuth(ctx context.Context, accessToken string)...
function fetchGitHubUserInfo (line 310) | func fetchGitHubUserInfo(ctx context.Context, accessToken string) (*gith...
function fetchGitHubPrimaryEmail (line 341) | func fetchGitHubPrimaryEmail(ctx context.Context, accessToken string) (s...
function upsertOAuthUser (line 380) | func upsertOAuthUser(db *gorm.DB, provider string, info *oauthUserInfo, ...
function generateState (line 433) | func generateState() (string, error) {
FILE: core/http/auth/password.go
function HashPassword (line 6) | func HashPassword(password string) (string, error) {
function CheckPassword (line 12) | func CheckPassword(hash, password string) bool {
FILE: core/http/auth/permissions.go
constant contextKeyPermissions (line 9) | contextKeyPermissions = "auth_permissions"
function GetCachedUserPermissions (line 15) | func GetCachedUserPermissions(c echo.Context, db *gorm.DB, userID string...
constant FeatureAgents (line 30) | FeatureAgents = "agents"
constant FeatureSkills (line 31) | FeatureSkills = "skills"
constant FeatureCollections (line 32) | FeatureCollections = "collections"
constant FeatureMCPJobs (line 33) | FeatureMCPJobs = "mcp_jobs"
constant FeatureChat (line 36) | FeatureChat = "chat"
constant FeatureImages (line 37) | FeatureImages = "images"
constant FeatureAudioSpeech (line 38) | FeatureAudioSpeech = "audio_speech"
constant FeatureAudioTranscription (line 39) | FeatureAudioTranscription = "audio_transcription"
constant FeatureVAD (line 40) | FeatureVAD = "vad"
constant FeatureDetection (line 41) | FeatureDetection = "detection"
constant FeatureVideo (line 42) | FeatureVideo = "video"
constant FeatureEmbeddings (line 43) | FeatureEmbeddings = "embeddings"
constant FeatureSound (line 44) | FeatureSound = "sound"
constant FeatureRealtime (line 45) | FeatureRealtime = "realtime"
constant FeatureRerank (line 46) | FeatureRerank = "rerank"
constant FeatureTokenize (line 47) | FeatureTokenize = "tokenize"
constant FeatureMCP (line 48) | FeatureMCP = "mcp"
constant FeatureStores (line 49) | FeatureStores = "stores"
function isDefaultOnFeature (line 75) | func isDefaultOnFeature(feature string) bool {
function GetUserPermissions (line 81) | func GetUserPermissions(db *gorm.DB, userID string) (*UserPermission, er...
function UpdateUserPermissions (line 102) | func UpdateUserPermissions(db *gorm.DB, userID string, perms PermissionM...
function HasFeatureAccess (line 123) | func HasFeatureAccess(db *gorm.DB, user *User, feature string) bool {
function GetPermissionMapForUser (line 145) | func GetPermissionMapForUser(db *gorm.DB, user *User) PermissionMap {
function GetModelAllowlist (line 174) | func GetModelAllowlist(db *gorm.DB, userID string) ModelAllowlist {
function UpdateModelAllowlist (line 183) | func UpdateModelAllowlist(db *gorm.DB, userID string, allowlist ModelAll...
function IsModelAllowed (line 194) | func IsModelAllowed(db *gorm.DB, user *User, modelName string) bool {
FILE: core/http/auth/roles.go
constant RoleAdmin (line 12) | RoleAdmin = "admin"
constant RoleUser (line 13) | RoleUser = "user"
constant StatusActive (line 15) | StatusActive = "active"
constant StatusPending (line 16) | StatusPending = "pending"
constant StatusDisabled (line 17) | StatusDisabled = "disabled"
function AssignRole (line 25) | func AssignRole(tx *gorm.DB, email, adminEmail string) string {
function MaybePromote (line 42) | func MaybePromote(db *gorm.DB, user *User, adminEmail string) bool {
function ValidateInvite (line 58) | func ValidateInvite(db *gorm.DB, code, hmacSecret string) (*InviteCode, ...
function ConsumeInvite (line 74) | func ConsumeInvite(db *gorm.DB, invite *InviteCode, userID string) {
function NeedsInviteOrApproval (line 84) | func NeedsInviteOrApproval(tx *gorm.DB, email, adminEmail, registrationM...
FILE: core/http/auth/session.go
constant sessionDuration (line 15) | sessionDuration = 30 * 24 * time.Hour
constant sessionIDBytes (line 16) | sessionIDBytes = 32
constant sessionCookie (line 17) | sessionCookie = "session"
constant sessionRotationInterval (line 18) | sessionRotationInterval = 1 * time.Hour
function CreateSession (line 24) | func CreateSession(db *gorm.DB, userID, hmacSecret string) (string, erro...
function ValidateSession (line 50) | func ValidateSession(db *gorm.DB, token, hmacSecret string) (*User, *Ses...
function DeleteSession (line 64) | func DeleteSession(db *gorm.DB, token, hmacSecret string) error {
function CleanExpiredSessions (line 70) | func CleanExpiredSessions(db *gorm.DB) error {
function DeleteUserSessions (line 75) | func DeleteUserSessions(db *gorm.DB, userID string) error {
function RotateSession (line 81) | func RotateSession(db *gorm.DB, oldSession *Session, hmacSecret string) ...
function MaybeRotateSession (line 113) | func MaybeRotateSession(c echo.Context, db *gorm.DB, session *Session, h...
function isSecure (line 138) | func isSecure(c echo.Context) bool {
function SetSessionCookie (line 143) | func SetSessionCookie(c echo.Context, sessionID string) {
function SetTokenCookie (line 157) | func SetTokenCookie(c echo.Context, token string) {
function ClearSessionCookie (line 171) | func ClearSessionCookie(c echo.Context) {
FILE: core/http/auth/usage.go
type UsageRecord (line 12) | type UsageRecord struct
function RecordUsage (line 26) | func RecordUsage(db *gorm.DB, record *UsageRecord) error {
type UsageBucket (line 31) | type UsageBucket struct
type UsageTotals (line 43) | type UsageTotals struct
function periodToWindow (line 51) | func periodToWindow(period string, isSQLite bool) (time.Time, string) {
function isSQLiteDB (line 90) | func isSQLiteDB(db *gorm.DB) bool {
function GetUserUsage (line 95) | func GetUserUsage(db *gorm.DB, userID, period string) ([]UsageBucket, er...
function GetAllUsage (line 123) | func GetAllUsage(db *gorm.DB, period, userID string) ([]UsageBucket, err...
FILE: core/http/endpoints/anthropic/messages.go
function MessagesEndpoint (line 28) | func MessagesEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoade...
function handleAnthropicNonStream (line 187) | func handleAnthropicNonStream(c echo.Context, id string, input *schema.A...
function handleAnthropicStream (line 339) | func handleAnthropicStream(c echo.Context, id string, input *schema.Anth...
function convertFuncsToOpenAITools (line 562) | func convertFuncsToOpenAITools(funcs functions.Functions) []functions.To...
function sendAnthropicSSE (line 570) | func sendAnthropicSSE(c echo.Context, event schema.AnthropicStreamEvent) {
function sendAnthropicError (line 580) | func sendAnthropicError(c echo.Context, statusCode int, errorType, messa...
function convertAnthropicToOpenAIMessages (line 591) | func convertAnthropicToOpenAIMessages(input *schema.AnthropicRequest) []...
function convertAnthropicTools (line 724) | func convertAnthropicTools(input *schema.AnthropicRequest, cfg *config.M...
FILE: core/http/endpoints/elevenlabs/soundgeneration.go
function SoundGenerationEndpoint (line 21) | func SoundGenerationEndpoint(cl *config.ModelConfigLoader, ml *model.Mod...
FILE: core/http/endpoints/elevenlabs/tts.go
function TTSEndpoint (line 22) | func TTSEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoader, ap...
FILE: core/http/endpoints/explorer/dashboard.go
function Dashboard (line 15) | func Dashboard() echo.HandlerFunc {
type AddNetworkRequest (line 35) | type AddNetworkRequest struct
type Network (line 41) | type Network struct
function ShowNetworks (line 46) | func ShowNetworks(db *explorer.Database) echo.HandlerFunc {
function AddNetwork (line 72) | func AddNetwork(db *explorer.Database) echo.HandlerFunc {
FILE: core/http/endpoints/jina/rerank.go
function JINARerankEndpoint (line 21) | func JINARerankEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoa...
FILE: core/http/endpoints/localai/agent_collections.go
function ListCollectionsEndpoint (line 12) | func ListCollectionsEndpoint(app *application.Application) echo.HandlerF...
function CreateCollectionEndpoint (line 52) | func CreateCollectionEndpoint(app *application.Application) echo.Handler...
function UploadToCollectionEndpoint (line 69) | func UploadToCollectionEndpoint(app *application.Application) echo.Handl...
function ListCollectionEntriesEndpoint (line 93) | func ListCollectionEntriesEndpoint(app *application.Application) echo.Ha...
function GetCollectionEntryContentEndpoint (line 111) | func GetCollectionEntryContentEndpoint(app *application.Application) ech...
function SearchCollectionEndpoint (line 134) | func SearchCollectionEndpoint(app *application.Application) echo.Handler...
function ResetCollectionEndpoint (line 159) | func ResetCollectionEndpoint(app *application.Application) echo.HandlerF...
function DeleteCollectionEntryEndpoint (line 173) | func DeleteCollectionEntryEndpoint(app *application.Application) echo.Ha...
function AddCollectionSourceEndpoint (line 197) | func AddCollectionSourceEndpoint(app *application.Application) echo.Hand...
function RemoveCollectionSourceEndpoint (line 221) | func RemoveCollectionSourceEndpoint(app *application.Application) echo.H...
function GetCollectionEntryRawFileEndpoint (line 239) | func GetCollectionEntryRawFileEndpoint(app *application.Application) ech...
function ListCollectionSourcesEndpoint (line 259) | func ListCollectionSourcesEndpoint(app *application.Application) echo.Ha...
FILE: core/http/endpoints/localai/agent_jobs.go
function getJobService (line 16) | func getJobService(app *application.Application, c echo.Context) *servic...
function CreateTaskEndpoint (line 32) | func CreateTaskEndpoint(app *application.Application) echo.HandlerFunc {
function UpdateTaskEndpoint (line 48) | func UpdateTaskEndpoint(app *application.Application) echo.HandlerFunc {
function DeleteTaskEndpoint (line 67) | func DeleteTaskEndpoint(app *application.Application) echo.HandlerFunc {
function ListTasksEndpoint (line 81) | func ListTasksEndpoint(app *application.Application) echo.HandlerFunc {
function GetTaskEndpoint (line 123) | func GetTaskEndpoint(app *application.Application) echo.HandlerFunc {
function ExecuteJobEndpoint (line 135) | func ExecuteJobEndpoint(app *application.Application) echo.HandlerFunc {
function GetJobEndpoint (line 170) | func GetJobEndpoint(app *application.Application) echo.HandlerFunc {
function ListJobsEndpoint (line 182) | func ListJobsEndpoint(app *application.Application) echo.HandlerFunc {
function CancelJobEndpoint (line 243) | func CancelJobEndpoint(app *application.Application) echo.HandlerFunc {
function DeleteJobEndpoint (line 257) | func DeleteJobEndpoint(app *application.Application) echo.HandlerFunc {
function ExecuteTaskByNameEndpoint (line 271) | func ExecuteTaskByNameEndpoint(app *application.Application) echo.Handle...
FILE: core/http/endpoints/localai/agent_responses.go
type agentResponsesRequest (line 21) | type agentResponsesRequest struct
function AgentResponsesInterceptor (line 32) | func AgentResponsesInterceptor(app *application.Application) echo.Middle...
function parseInputToMessages (line 124) | func parseInputToMessages(raw json.RawMessage) []openai.ChatCompletionMe...
function parseMessageContent (line 193) | func parseMessageContent(raw json.RawMessage) string {
FILE: core/http/endpoints/localai/agent_skills.go
type skillResponse (line 13) | type skillResponse struct
function skillToResponse (line 24) | func skillToResponse(s skilldomain.Skill) skillResponse {
function skillsToResponses (line 36) | func skillsToResponses(skills []skilldomain.Skill) []skillResponse {
function ListSkillsEndpoint (line 44) | func ListSkillsEndpoint(app *application.Application) echo.HandlerFunc {
function GetSkillsConfigEndpoint (line 83) | func GetSkillsConfigEndpoint(app *application.Application) echo.HandlerF...
function SearchSkillsEndpoint (line 92) | func SearchSkillsEndpoint(app *application.Application) echo.HandlerFunc {
function CreateSkillEndpoint (line 105) | func CreateSkillEndpoint(app *application.Application) echo.HandlerFunc {
function GetSkillEndpoint (line 132) | func GetSkillEndpoint(app *application.Application) echo.HandlerFunc {
function UpdateSkillEndpoint (line 144) | func UpdateSkillEndpoint(app *application.Application) echo.HandlerFunc {
function DeleteSkillEndpoint (line 170) | func DeleteSkillEndpoint(app *application.Application) echo.HandlerFunc {
function ExportSkillEndpoint (line 181) | func ExportSkillEndpoint(app *application.Application) echo.HandlerFunc {
function ImportSkillEndpoint (line 196) | func ImportSkillEndpoint(app *application.Application) echo.HandlerFunc {
function ListSkillResourcesEndpoint (line 223) | func ListSkillResourcesEndpoint(app *application.Application) echo.Handl...
function GetSkillResourceEndpoint (line 261) | func GetSkillResourceEndpoint(app *application.Application) echo.Handler...
function CreateSkillResourceEndpoint (line 282) | func CreateSkillResourceEndpoint(app *application.Application) echo.Hand...
function UpdateSkillResourceEndpoint (line 310) | func UpdateSkillResourceEndpoint(app *application.Application) echo.Hand...
function DeleteSkillResourceEndpoint (line 327) | func DeleteSkillResourceEndpoint(app *application.Application) echo.Hand...
function ListGitReposEndpoint (line 340) | func ListGitReposEndpoint(app *application.Application) echo.HandlerFunc {
function AddGitRepoEndpoint (line 352) | func AddGitRepoEndpoint(app *application.Application) echo.HandlerFunc {
function UpdateGitRepoEndpoint (line 370) | func UpdateGitRepoEndpoint(app *application.Application) echo.HandlerFunc {
function DeleteGitRepoEndpoint (line 392) | func DeleteGitRepoEndpoint(app *application.Application) echo.HandlerFunc {
function SyncGitRepoEndpoint (line 406) | func SyncGitRepoEndpoint(app *application.Application) echo.HandlerFunc {
function ToggleGitRepoEndpoint (line 417) | func ToggleGitRepoEndpoint(app *application.Application) echo.HandlerFunc {
FILE: core/http/endpoints/localai/agents.go
function getUserID (line 25) | func getUserID(c echo.Context) string {
function isAdminUser (line 34) | func isAdminUser(c echo.Context) bool {
function wantsAllUsers (line 40) | func wantsAllUsers(c echo.Context) bool {
function effectiveUserID (line 47) | func effectiveUserID(c echo.Context) string {
function ListAgentsEndpoint (line 54) | func ListAgentsEndpoint(app *application.Application) echo.HandlerFunc {
function CreateAgentEndpoint (line 94) | func CreateAgentEndpoint(app *application.Application) echo.HandlerFunc {
function GetAgentEndpoint (line 109) | func GetAgentEndpoint(app *application.Application) echo.HandlerFunc {
function UpdateAgentEndpoint (line 124) | func UpdateAgentEndpoint(app *application.Application) echo.HandlerFunc {
function DeleteAgentEndpoint (line 143) | func DeleteAgentEndpoint(app *application.Application) echo.HandlerFunc {
function GetAgentConfigEndpoint (line 155) | func GetAgentConfigEndpoint(app *application.Application) echo.HandlerFu...
function PauseAgentEndpoint (line 168) | func PauseAgentEndpoint(app *application.Application) echo.HandlerFunc {
function ResumeAgentEndpoint (line 179) | func ResumeAgentEndpoint(app *application.Application) echo.HandlerFunc {
function GetAgentStatusEndpoint (line 190) | func GetAgentStatusEndpoint(app *application.Application) echo.HandlerFu...
function GetAgentObservablesEndpoint (line 219) | func GetAgentObservablesEndpoint(app *application.Application) echo.Hand...
function ClearAgentObservablesEndpoint (line 235) | func ClearAgentObservablesEndpoint(app *application.Application) echo.Ha...
function ChatWithAgentEndpoint (line 247) | func ChatWithAgentEndpoint(app *application.Application) echo.HandlerFunc {
function AgentSSEEndpoint (line 276) | func AgentSSEEndpoint(app *application.Application) echo.HandlerFunc {
type agentConfigMetaResponse (line 289) | type agentConfigMetaResponse struct
function GetAgentConfigMetaEndpoint (line 294) | func GetAgentConfigMetaEndpoint(app *application.Application) echo.Handl...
function ExportAgentEndpoint (line 304) | func ExportAgentEndpoint(app *application.Application) echo.HandlerFunc {
function ImportAgentEndpoint (line 318) | func ImportAgentEndpoint(app *application.Application) echo.HandlerFunc {
function ListActionsEndpoint (line 359) | func ListActionsEndpoint(app *application.Application) echo.HandlerFunc {
function GetActionDefinitionEndpoint (line 368) | func GetActionDefinitionEndpoint(app *application.Application) echo.Hand...
function ExecuteActionEndpoint (line 388) | func ExecuteActionEndpoint(app *application.Application) echo.HandlerFunc {
function AgentFileEndpoint (line 409) | func AgentFileEndpoint(app *application.Application) echo.HandlerFunc {
FILE: core/http/endpoints/localai/backend.go
type BackendEndpointService (line 18) | type BackendEndpointService struct
method GetOpStatusEndpoint (line 42) | func (mgs *BackendEndpointService) GetOpStatusEndpoint() echo.HandlerF...
method GetAllStatusEndpoint (line 56) | func (mgs *BackendEndpointService) GetAllStatusEndpoint() echo.Handler...
method ApplyBackendEndpoint (line 67) | func (mgs *BackendEndpointService) ApplyBackendEndpoint() echo.Handler...
method DeleteBackendEndpoint (line 94) | func (mgs *BackendEndpointService) DeleteBackendEndpoint() echo.Handle...
method ListBackendsEndpoint (line 117) | func (mgs *BackendEndpointService) ListBackendsEndpoint(systemState *s...
method ListBackendGalleriesEndpoint (line 132) | func (mgs *BackendEndpointService) ListBackendGalleriesEndpoint() echo...
method ListAvailableBackendsEndpoint (line 147) | func (mgs *BackendEndpointService) ListAvailableBackendsEndpoint(syste...
type GalleryBackend (line 25) | type GalleryBackend struct
function CreateBackendEndpointService (line 29) | func CreateBackendEndpointService(galleries []config.Gallery, systemStat...
FILE: core/http/endpoints/localai/backend_monitor.go
function BackendMonitorEndpoint (line 14) | func BackendMonitorEndpoint(bm *services.BackendMonitorService) echo.Han...
function BackendShutdownEndpoint (line 35) | func BackendShutdownEndpoint(bm *services.BackendMonitorService) echo.Ha...
FILE: core/http/endpoints/localai/cors_proxy.go
function CORSProxyEndpoint (line 23) | func CORSProxyEndpoint(appConfig *config.ApplicationConfig) echo.Handler...
function CORSProxyOptionsEndpoint (line 100) | func CORSProxyOptionsEndpoint() echo.HandlerFunc {
FILE: core/http/endpoints/localai/detection.go
function DetectionEndpoint (line 19) | func DetectionEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoad...
FILE: core/http/endpoints/localai/edit_model.go
function GetEditModelPage (line 21) | func GetEditModelPage(cl *config.ModelConfigLoader, appConfig *config.Ap...
function EditModelEndpoint (line 86) | func EditModelEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoad...
function ReloadModelsEndpoint (line 214) | func ReloadModelsEndpoint(cl *config.ModelConfigLoader, appConfig *confi...
FILE: core/http/endpoints/localai/edit_model_test.go
type testRenderer (line 21) | type testRenderer struct
method Render (line 23) | func (t *testRenderer) Render(w io.Writer, name string, data interface...
FILE: core/http/endpoints/localai/gallery.go
type ModelGalleryEndpointService (line 18) | type ModelGalleryEndpointService struct
method GetOpStatusEndpoint (line 45) | func (mgs *ModelGalleryEndpointService) GetOpStatusEndpoint() echo.Han...
method GetAllStatusEndpoint (line 59) | func (mgs *ModelGalleryEndpointService) GetAllStatusEndpoint() echo.Ha...
method ApplyModelGalleryEndpoint (line 70) | func (mgs *ModelGalleryEndpointService) ApplyModelGalleryEndpoint() ec...
method DeleteModelGalleryEndpoint (line 99) | func (mgs *ModelGalleryEndpointService) DeleteModelGalleryEndpoint() e...
method ListModelFromGalleryEndpoint (line 123) | func (mgs *ModelGalleryEndpointService) ListModelFromGalleryEndpoint(s...
method ListModelGalleriesEndpoint (line 155) | func (mgs *ModelGalleryEndpointService) ListModelGalleriesEndpoint() e...
type GalleryModel (line 26) | type GalleryModel struct
function CreateModelGalleryEndpointService (line 31) | func CreateModelGalleryEndpointService(galleries []config.Gallery, backe...
FILE: core/http/endpoints/localai/get_token_metrics.go
function TokenMetricsEndpoint (line 24) | func TokenMetricsEndpoint(cl *config.ModelConfigLoader, ml *model.ModelL...
FILE: core/http/endpoints/localai/import_model.go
function ImportModelURIEndpoint (line 29) | func ImportModelURIEndpoint(cl *config.ModelConfigLoader, appConfig *con...
function ImportModelEndpoint (line 101) | func ImportModelEndpoint(cl *config.ModelConfigLoader, appConfig *config...
FILE: core/http/endpoints/localai/localai_suite_test.go
function TestLocalAIEndpoints (line 10) | func TestLocalAIEndpoints(t *testing.T) {
FILE: core/http/endpoints/localai/mcp.go
type MCPReasoningEvent (line 17) | type MCPReasoningEvent struct
type MCPToolCallEvent (line 22) | type MCPToolCallEvent struct
type MCPToolResultEvent (line 29) | type MCPToolResultEvent struct
type MCPStatusEvent (line 35) | type MCPStatusEvent struct
type MCPAssistantEvent (line 40) | type MCPAssistantEvent struct
type MCPErrorEvent (line 45) | type MCPErrorEvent struct
function MCPEndpoint (line 58) | func MCPEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoader, ev...
FILE: core/http/endpoints/localai/mcp_prompts.go
function MCPPromptsEndpoint (line 13) | func MCPPromptsEndpoint(cl *config.ModelConfigLoader, appConfig *config....
function MCPGetPromptEndpoint (line 81) | func MCPGetPromptEndpoint(cl *config.ModelConfigLoader, appConfig *confi...
FILE: core/http/endpoints/localai/mcp_resources.go
function MCPResourcesEndpoint (line 13) | func MCPResourcesEndpoint(cl *config.ModelConfigLoader, appConfig *confi...
function MCPReadResourceEndpoint (line 69) | func MCPReadResourceEndpoint(cl *config.ModelConfigLoader, appConfig *co...
FILE: core/http/endpoints/localai/mcp_tools.go
function MCPServersEndpoint (line 14) | func MCPServersEndpoint(cl *config.ModelConfigLoader, appConfig *config....
function MCPServersEndpointFromMiddleware (line 57) | func MCPServersEndpointFromMiddleware() echo.HandlerFunc {
FILE: core/http/endpoints/localai/metrics.go
function LocalAIMetricsEndpoint (line 15) | func LocalAIMetricsEndpoint() echo.HandlerFunc {
type apiMiddlewareConfig (line 19) | type apiMiddlewareConfig struct
function LocalAIMetricsAPIMiddleware (line 24) | func LocalAIMetricsAPIMiddleware(metrics *services.LocalAIMetricsService...
FILE: core/http/endpoints/localai/p2p.go
function ShowP2PNodes (line 14) | func ShowP2PNodes(appConfig *config.ApplicationConfig) echo.HandlerFunc {
function ShowP2PToken (line 29) | func ShowP2PToken(appConfig *config.ApplicationConfig) echo.HandlerFunc {
FILE: core/http/endpoints/localai/settings.go
function GetSettingsEndpoint (line 21) | func GetSettingsEndpoint(app *application.Application) echo.HandlerFunc {
function UpdateSettingsEndpoint (line 30) | func UpdateSettingsEndpoint(app *application.Application) echo.HandlerFu...
FILE: core/http/endpoints/localai/stores.go
function StoresSetEndpoint (line 12) | func StoresSetEndpoint(sl *model.ModelLoader, appConfig *config.Applicat...
function StoresDeleteEndpoint (line 39) | func StoresDeleteEndpoint(sl *model.ModelLoader, appConfig *config.Appli...
function StoresGetEndpoint (line 60) | func StoresGetEndpoint(sl *model.ModelLoader, appConfig *config.Applicat...
function StoresFindEndpoint (line 91) | func StoresFindEndpoint(sl *model.ModelLoader, appConfig *config.Applica...
FILE: core/http/endpoints/localai/system.go
function SystemInformations (line 14) | func SystemInformations(ml *model.ModelLoader, appConfig *config.Applica...
FILE: core/http/endpoints/localai/tokenize.go
function TokenizeEndpoint (line 17) | func TokenizeEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoade...
FILE: core/http/endpoints/localai/tts.go
function TTSEndpoint (line 26) | func TTSEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoader, ap...
FILE: core/http/endpoints/localai/types.go
type ModelResponse (line 4) | type ModelResponse struct
FILE: core/http/endpoints/localai/vad.go
function VADEndpoint (line 19) | func VADEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoader, ap...
FILE: core/http/endpoints/localai/video.go
function downloadFile (line 28) | func downloadFile(url string) (string, error) {
function VideoEndpoint (line 68) | func VideoEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoader, ...
FILE: core/http/endpoints/localai/welcome.go
function WelcomeEndpoint (line 15) | func WelcomeEndpoint(appConfig *config.ApplicationConfig,
FILE: core/http/endpoints/mcp/tools.go
type NamedSession (line 23) | type NamedSession struct
type MCPToolInfo (line 30) | type MCPToolInfo struct
type MCPServerInfo (line 38) | type MCPServerInfo struct
type MCPPromptInfo (line 47) | type MCPPromptInfo struct
type MCPResourceInfo (line 57) | type MCPResourceInfo struct
type sessionCache (line 66) | type sessionCache struct
type namedSessionCache (line 72) | type namedSessionCache struct
function MCPServersFromMetadata (line 95) | func MCPServersFromMetadata(metadata map[string]string) []string {
function SessionsFromMCPConfig (line 108) | func SessionsFromMCPConfig(
function NamedSessionsFromMCPConfig (line 170) | func NamedSessionsFromMCPConfig(
function DiscoverMCPTools (line 248) | func DiscoverMCPTools(ctx context.Context, sessions []NamedSession) ([]M...
function ExecuteMCPToolCall (line 298) | func ExecuteMCPToolCall(ctx context.Context, tools []MCPToolInfo, toolNa...
function ListMCPServers (line 345) | func ListMCPServers(ctx context.Context, sessions []NamedSession) ([]MCP...
function IsMCPTool (line 385) | func IsMCPTool(tools []MCPToolInfo, name string) bool {
function DiscoverMCPPrompts (line 396) | func DiscoverMCPPrompts(ctx context.Context, sessions []NamedSession) ([...
function GetMCPPrompt (line 425) | func GetMCPPrompt(ctx context.Context, prompts []MCPPromptInfo, name str...
function DiscoverMCPResources (line 449) | func DiscoverMCPResources(ctx context.Context, sessions []NamedSession) ...
function ReadMCPResource (line 478) | func ReadMCPResource(ctx context.Context, resources []MCPResourceInfo, u...
function MCPPromptFromMetadata (line 506) | func MCPPromptFromMetadata(metadata map[string]string) (string, map[stri...
function MCPResourcesFromMetadata (line 523) | func MCPResourcesFromMetadata(metadata map[string]string) []string {
function PromptMessageToText (line 537) | func PromptMessageToText(msg *mcp.PromptMessage) string {
function CloseMCPSessions (line 548) | func CloseMCPSessions(modelName string) {
function CloseAllMCPSessions (line 582) | func CloseAllMCPSessions() {
function init (line 612) | func init() {
type bearerTokenRoundTripper (line 620) | type bearerTokenRoundTripper struct
method RoundTrip (line 626) | func (rt *bearerTokenRoundTripper) RoundTrip(req *http.Request) (*http...
function newBearerTokenRoundTripper (line 634) | func newBearerTokenRoundTripper(token string, base http.RoundTripper) ht...
FILE: core/http/endpoints/openai/chat.go
function mergeToolCallDeltas (line 29) | func mergeToolCallDeltas(existing []schema.ToolCall, deltas []schema.Too...
function ChatEndpoint (line 62) | func ChatEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoader, e...
function handleQuestion (line 1181) | func handleQuestion(config *config.ModelConfig, funcResults []functions....
FILE: core/http/endpoints/openai/completion.go
function CompletionEndpoint (line 27) | func CompletionEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoa...
FILE: core/http/endpoints/openai/constants.go
constant FinishReasonStop (line 5) | FinishReasonStop = "stop"
constant FinishReasonToolCalls (line 6) | FinishReasonToolCalls = "tool_calls"
constant FinishReasonFunctionCall (line 7) | FinishReasonFunctionCall = "function_call"
FILE: core/http/endpoints/openai/edit.go
function EditEndpoint (line 26) | func EditEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoader, e...
FILE: core/http/endpoints/openai/embeddings.go
function EmbeddingsEndpoint (line 24) | func EmbeddingsEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoa...
FILE: core/http/endpoints/openai/image.go
function downloadFile (line 30) | func downloadFile(url string) (string, error) {
function ImageEndpoint (line 74) | func ImageEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoader, ...
function processImageFile (line 257) | func processImageFile(file string, generatedContentDir string) string {
FILE: core/http/endpoints/openai/inference.go
function ComputeChoices (line 16) | func ComputeChoices(
FILE: core/http/endpoints/openai/inpainting.go
function InpaintingEndpoint (line 43) | func InpaintingEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoa...
FILE: core/http/endpoints/openai/inpainting_test.go
function makeMultipartRequest (line 20) | func makeMultipartRequest(fields map[string]string, files map[string][]b...
FILE: core/http/endpoints/openai/list.go
function ListModelsEndpoint (line 17) | func ListModelsEndpoint(bcl *config.ModelConfigLoader, ml *model.ModelLo...
FILE: core/http/endpoints/openai/openai_suite_test.go
function TestOpenAI (line 10) | func TestOpenAI(t *testing.T) {
FILE: core/http/endpoints/openai/realtime.go
constant localSampleRate (line 40) | localSampleRate = 16000
constant defaultRemoteSampleRate (line 41) | defaultRemoteSampleRate = 24000
constant maxAudioBufferSize (line 43) | maxAudioBufferSize = 100 * 1024 * 1024
constant maxWebSocketMessageSize (line 45) | maxWebSocketMessageSize = 10 * 1024 * 1024
constant defaultInstructions (line 47) | defaultInstructions = "You are a helpful voice assistant. " +
type Session (line 58) | type Session struct
method cancelActiveResponse (line 92) | func (s *Session) cancelActiveResponse() {
method startResponse (line 109) | func (s *Session) startResponse(parent context.Context) (context.Conte...
method FromClient (line 123) | func (s *Session) FromClient(session *types.SessionUnion) {
method ToServer (line 126) | func (s *Session) ToServer() types.SessionUnion {
type Conversation (line 164) | type Conversation struct
method ToServer (line 170) | func (c *Conversation) ToServer() types.Conversation {
type Model (line 181) | type Model interface
function RealtimeSessions (line 196) | func RealtimeSessions(application *application.Application) echo.Handler...
function RealtimeTranscriptionSession (line 202) | func RealtimeTranscriptionSession(application *application.Application) ...
function Realtime (line 208) | func Realtime(application *application.Application) echo.HandlerFunc {
function registerRealtime (line 227) | func registerRealtime(application *application.Application, model string...
function runRealtimeSession (line 238) | func runRealtimeSession(application *application.Application, t Transpor...
function sendEvent (line 646) | func sendEvent(t Transport, event types.ServerEvent) {
function sendError (line 653) | func sendError(t Transport, code, message, param, eventID string) {
function sendNotImplemented (line 670) | func sendNotImplemented(t Transport, message string) {
function sendTestTone (line 677) | func sendTestTone(t Transport) {
function updateTransSession (line 698) | func updateTransSession(session *Session, update *types.SessionUnion, cl...
function updateSession (line 748) | func updateSession(session *Session, update *types.SessionUnion, cl *con...
function decodeOpusLoop (line 832) | func decodeOpusLoop(session *Session, opusBackend grpc.Backend, done cha...
function handleVAD (line 885) | func handleVAD(session *Session, conv *Conversation, t Transport, done c...
function commitUtterance (line 999) | func commitUtterance(ctx context.Context, utt []byte, session *Session, ...
function runVAD (line 1060) | func runVAD(ctx context.Context, session *Session, adata []int16) ([]sch...
function generateResponse (line 1081) | func generateResponse(ctx context.Context, session *Session, utt []byte,...
function triggerResponse (line 1109) | func triggerResponse(ctx context.Context, session *Session, conv *Conver...
function generateSessionID (line 1629) | func generateSessionID() string {
function generateConversationID (line 1635) | func generateConversationID() string {
function generateItemID (line 1641) | func generateItemID() string {
function generateUniqueID (line 1647) | func generateUniqueID() string {
FILE: core/http/endpoints/openai/realtime_model.go
type wrappedModel (line 27) | type wrappedModel struct
method VAD (line 80) | func (m *wrappedModel) VAD(ctx context.Context, request *schema.VADReq...
method Transcribe (line 84) | func (m *wrappedModel) Transcribe(ctx context.Context, audio, language...
method Predict (line 88) | func (m *wrappedModel) Predict(ctx context.Context, messages schema.Me...
method TTS (line 243) | func (m *wrappedModel) TTS(ctx context.Context, text, voice, language ...
method PredictConfig (line 247) | func (m *wrappedModel) PredictConfig() *config.ModelConfig {
type anyToAnyModel (line 42) | type anyToAnyModel struct
type transcriptOnlyModel (line 51) | type transcriptOnlyModel struct
method VAD (line 60) | func (m *transcriptOnlyModel) VAD(ctx context.Context, request *schema...
method Transcribe (line 64) | func (m *transcriptOnlyModel) Transcribe(ctx context.Context, audio, l...
method Predict (line 68) | func (m *transcriptOnlyModel) Predict(ctx context.Context, messages sc...
method TTS (line 72) | func (m *transcriptOnlyModel) TTS(ctx context.Context, text, voice, la...
method PredictConfig (line 76) | func (m *transcriptOnlyModel) PredictConfig() *config.ModelConfig {
function newTranscriptionOnlyModel (line 251) | func newTranscriptionOnlyModel(pipeline *config.Pipeline, cl *config.Mod...
function newModel (line 283) | func newModel(pipeline *config.Pipeline, cl *config.ModelConfigLoader, m...
FILE: core/http/endpoints/openai/realtime_transport.go
type Transport (line 11) | type Transport interface
FILE: core/http/endpoints/openai/realtime_transport_webrtc.go
type WebRTCTransport (line 21) | type WebRTCTransport struct
method sendLoop (line 97) | func (t *WebRTCTransport) sendLoop() {
method SendEvent (line 133) | func (t *WebRTCTransport) SendEvent(event types.ServerEvent) error {
method ReadEvent (line 147) | func (t *WebRTCTransport) ReadEvent() ([]byte, error) {
method SendAudio (line 169) | func (t *WebRTCTransport) SendAudio(ctx context.Context, pcmData []byt...
method SetSession (line 228) | func (t *WebRTCTransport) SetSession(s *Session) {
method WaitForSession (line 236) | func (t *WebRTCTransport) WaitForSession() *Session {
method Close (line 245) | func (t *WebRTCTransport) Close() error {
function NewWebRTCTransport (line 42) | func NewWebRTCTransport(pc *webrtc.PeerConnection, audioTrack *webrtc.Tr...
FILE: core/http/endpoints/openai/realtime_transport_ws.go
type WebSocketTransport (line 14) | type WebSocketTransport struct
method SendEvent (line 23) | func (t *WebSocketTransport) SendEvent(event types.ServerEvent) error {
method ReadEvent (line 34) | func (t *WebSocketTransport) ReadEvent() ([]byte, error) {
method SendAudio (line 41) | func (t *WebSocketTransport) SendAudio(_ context.Context, _ []byte, _ ...
method Close (line 45) | func (t *WebSocketTransport) Close() error {
function NewWebSocketTransport (line 19) | func NewWebSocketTransport(conn *websocket.Conn) *WebSocketTransport {
FILE: core/http/endpoints/openai/realtime_webrtc.go
type RealtimeCallRequest (line 15) | type RealtimeCallRequest struct
type RealtimeCallResponse (line 21) | type RealtimeCallResponse struct
function RealtimeCalls (line 27) | func RealtimeCalls(application *application.Application) echo.HandlerFunc {
function handleIncomingAudioTrack (line 183) | func handleIncomingAudioTrack(track *webrtc.TrackRemote, transport *WebR...
FILE: core/http/endpoints/openai/transcription.go
function TranscriptEndpoint (line 29) | func TranscriptEndpoint(cl *config.ModelConfigLoader, ml *model.ModelLoa...
FILE: core/http/endpoints/openai/types/client_events.go
type ClientEventType (line 6) | type ClientEventType
constant ClientEventTypeSessionUpdate (line 9) | ClientEventTypeSessionUpdate ClientEventType = "session.update"
constant ClientEventTypeInputAudioBufferAppend (line 10) | ClientEventTypeInputAudioBufferAppend ClientEventType = "input_audio_b...
constant ClientEventTypeInputAudioBufferCommit (line 11) | ClientEventTypeInputAudioBufferCommit ClientEventType = "input_audio_b...
constant ClientEventTypeInputAudioBufferClear (line 12) | ClientEventTypeInputAudioBufferClear ClientEventType = "input_audio_b...
constant ClientEventTypeConversationItemCreate (line 13) | ClientEventTypeConversationItemCreate ClientEventType = "conversation....
constant ClientEventTypeConversationItemRetrieve (line 14) | ClientEventTypeConversationItemRetrieve ClientEventType = "conversation....
constant ClientEventTypeConversationItemTruncate (line 15) | ClientEventTypeConversationItemTruncate ClientEventType = "conversation....
constant ClientEventTypeConversationItemDelete (line 16) | ClientEventTypeConversationItemDelete ClientEventType = "conversation....
constant ClientEventTypeResponseCreate (line 17) | ClientEventTypeResponseCreate ClientEventType = "response.create"
constant ClientEventTypeResponseCancel (line 18) | ClientEventTypeResponseCancel ClientEventType = "response.cancel"
constant ClientEventTypeOutputAudioBufferClear (line 19) | ClientEventTypeOutputAudioBufferClear ClientEventType = "output_audio_...
type ClientEvent (line 23) | type ClientEvent interface
type EventBase (line 28) | type EventBase struct
type SessionUpdateEvent (line 39) | type SessionUpdateEvent struct
method ClientEventType (line 45) | func (m SessionUpdateEvent) ClientEventType() ClientEventType {
method MarshalJSON (line 49) | func (m SessionUpdateEvent) MarshalJSON() ([]byte, error) {
type NoiseReductionType (line 62) | type NoiseReductionType
constant NoiseReductionNearField (line 65) | NoiseReductionNearField NoiseReductionType = "near_field"
constant NoiseReductionFarField (line 66) | NoiseReductionFarField NoiseReductionType = "far_field"
type InputAudioBufferAppendEvent (line 76) | type InputAudioBufferAppendEvent struct
method ClientEventType (line 81) | func (m InputAudioBufferAppendEvent) ClientEventType() ClientEventType {
method MarshalJSON (line 85) | func (m InputAudioBufferAppendEvent) MarshalJSON() ([]byte, error) {
type InputAudioBufferCommitEvent (line 103) | type InputAudioBufferCommitEvent struct
method ClientEventType (line 107) | func (m InputAudioBufferCommitEvent) ClientEventType() ClientEventType {
method MarshalJSON (line 111) | func (m InputAudioBufferCommitEvent) MarshalJSON() ([]byte, error) {
type InputAudioBufferClearEvent (line 127) | type InputAudioBufferClearEvent struct
method ClientEventType (line 131) | func (m InputAudioBufferClearEvent) ClientEventType() ClientEventType {
method MarshalJSON (line 135) | func (m InputAudioBufferClearEvent) MarshalJSON() ([]byte, error) {
type OutputAudioBufferClearEvent (line 152) | type OutputAudioBufferClearEvent struct
method ClientEventType (line 156) | func (m OutputAudioBufferClearEvent) ClientEventType() ClientEventType {
method MarshalJSON (line 160) | func (m OutputAudioBufferClearEvent) MarshalJSON() ([]byte, error) {
type ConversationItemCreateEvent (line 178) | type ConversationItemCreateEvent struct
method ClientEventType (line 186) | func (m ConversationItemCreateEvent) ClientEventType() ClientEventType {
method MarshalJSON (line 190) | func (m ConversationItemCreateEvent) MarshalJSON() ([]byte, error) {
type ConversationItemRetrieveEvent (line 206) | type ConversationItemRetrieveEvent struct
method ClientEventType (line 212) | func (m ConversationItemRetrieveEvent) ClientEventType() ClientEventTy...
method MarshalJSON (line 216) | func (m ConversationItemRetrieveEvent) MarshalJSON() ([]byte, error) {
type ConversationItemTruncateEvent (line 236) | type ConversationItemTruncateEvent struct
method ClientEventType (line 246) | func (m ConversationItemTruncateEvent) ClientEventType() ClientEventTy...
method MarshalJSON (line 250) | func (m ConversationItemTruncateEvent) MarshalJSON() ([]byte, error) {
type ConversationItemDeleteEvent (line 266) | type ConversationItemDeleteEvent struct
method ClientEventType (line 272) | func (m ConversationItemDeleteEvent) ClientEventType() ClientEventType {
method MarshalJSON (line 276) | func (m ConversationItemDeleteEvent) MarshalJSON() ([]byte, error) {
type ResponseCreateEvent (line 302) | type ResponseCreateEvent struct
method ClientEventType (line 308) | func (m ResponseCreateEvent) ClientEventType() ClientEventType {
method MarshalJSON (line 312) | func (m ResponseCreateEvent) MarshalJSON() ([]byte, error) {
type ResponseCancelEvent (line 328) | type ResponseCancelEvent struct
method ClientEventType (line 334) | func (m ResponseCancelEvent) ClientEventType() ClientEventType {
method MarshalJSON (line 338) | func (m ResponseCancelEvent) MarshalJSON() ([]byte, error) {
type ClientEventInterface (line 351) | type ClientEventInterface interface
function unmarshalClientEvent (line 365) | func unmarshalClientEvent[T ClientEventInterface](data []byte) (T, error) {
function UnmarshalClientEvent (line 375) | func UnmarshalClientEvent(data []byte) (ClientEvent, error) {
FILE: core/http/endpoints/openai/types/int_or_inf.go
constant Inf (line 10) | Inf IntOrInf = math.MaxInt
type IntOrInf (line 14) | type IntOrInf
method IsInf (line 17) | func (m IntOrInf) IsInf() bool {
method MarshalJSON (line 22) | func (m IntOrInf) MarshalJSON() ([]byte, error) {
method UnmarshalJSON (line 30) | func (m *IntOrInf) UnmarshalJSON(data []byte) error {
FILE: core/http/endpoints/openai/types/message_item.go
type MessageItemType (line 9) | type MessageItemType
constant MessageItemTypeMessage (line 12) | MessageItemTypeMessage MessageItemType = "message"
constant MessageItemTypeFunctionCall (line 13) | MessageItemTypeFunctionCall MessageItemType = "function_call"
constant MessageItemTypeFunctionCallOutput (line 14) | MessageItemTypeFunctionCallOutput MessageItemType = "function_call_output"
constant MessageItemTypeMCPApprovalResponse (line 15) | MessageItemTypeMCPApprovalResponse MessageItemType = "mcp_approval_respo...
constant MessageItemTypeMCPListTools (line 16) | MessageItemTypeMCPListTools MessageItemType = "mcp_list_tools"
constant MessageItemTypeMCPCall (line 17) | MessageItemTypeMCPCall MessageItemType = "mcp_call"
constant MessageItemTypeMCPApprovalRequest (line 18) | MessageItemTypeMCPApprovalRequest MessageItemType = "mcp_approval_request"
type MessageContentType (line 21) | type MessageContentType
constant MessageContentTypeText (line 24) | MessageContentTypeText MessageContentType = "text"
constant MessageContentTypeAudio (line 25) | MessageContentTypeAudio MessageContentType = "audio"
constant MessageContentTypeTranscript (line 26) | MessageContentTypeTranscript MessageContentType = "transcript"
constant MessageContentTypeInputText (line 27) | MessageContentTypeInputText MessageContentType = "input_text"
constant MessageContentTypeInputAudio (line 28) | MessageContentTypeInputAudio MessageContentType = "input_audio"
constant MessageContentTypeInputImage (line 29) | MessageContentTypeInputImage MessageContentType = "input_image"
constant MessageContentTypeOutputText (line 30) | MessageContentTypeOutputText MessageContentType = "output_text"
constant MessageContentTypeOutputAudio (line 31) | MessageContentTypeOutputAudio MessageContentType = "output_audio"
type MessageContentText (line 34) | type MessageContentText struct
type MessageContentAudio (line 38) | type MessageContentAudio struct
type MessageContentTranscript (line 43) | type MessageContentTranscript struct
type MessageContentImage (line 48) | type MessageContentImage struct
type MessageContentSystem (line 54) | type MessageContentSystem
type MessageItemSystem (line 56) | type MessageItemSystem struct
method MessageItemType (line 70) | func (m MessageItemSystem) MessageItemType() MessageItemType {
method Role (line 74) | func (m MessageItemSystem) Role() MessageRole {
method MarshalJSON (line 78) | func (m MessageItemSystem) MarshalJSON() ([]byte, error) {
type MessageItemUser (line 93) | type MessageItemUser struct
method MessageItemType (line 107) | func (m MessageItemUser) MessageItemType() MessageItemType {
method Role (line 111) | func (m MessageItemUser) Role() MessageRole {
method MarshalJSON (line 115) | func (m MessageItemUser) MarshalJSON() ([]byte, error) {
type MessageItemAssistant (line 130) | type MessageItemAssistant struct
method MessageItemType (line 144) | func (m MessageItemAssistant) MessageItemType() MessageItemType {
method Role (line 148) | func (m MessageItemAssistant) Role() MessageRole {
method MarshalJSON (line 152) | func (m MessageItemAssistant) MarshalJSON() ([]byte, error) {
type MessageContentInput (line 167) | type MessageContentInput struct
type MessageContentOutput (line 187) | type MessageContentOutput struct
type MessageItemFunctionCall (line 201) | type MessageItemFunctionCall struct
method MessageItemType (line 221) | func (m MessageItemFunctionCall) MessageItemType() MessageItemType {
method MarshalJSON (line 225) | func (m MessageItemFunctionCall) MarshalJSON() ([]byte, error) {
type MessageItemFunctionCallOutput (line 238) | type MessageItemFunctionCallOutput struct
method MessageItemType (line 255) | func (m MessageItemFunctionCallOutput) MessageItemType() MessageItemTy...
method MarshalJSON (line 259) | func (m MessageItemFunctionCallOutput) MarshalJSON() ([]byte, error) {
type MessageItemMCPApprovalResponse (line 272) | type MessageItemMCPApprovalResponse struct
method MessageItemType (line 286) | func (m MessageItemMCPApprovalResponse) MessageItemType() MessageItemT...
method MarshalJSON (line 290) | func (m MessageItemMCPApprovalResponse) MarshalJSON() ([]byte, error) {
type MCPTool (line 303) | type MCPTool struct
type MessageItemMCPListTools (line 317) | type MessageItemMCPListTools struct
method MessageItemType (line 328) | func (m MessageItemMCPListTools) MessageItemType() MessageItemType {
method MarshalJSON (line 332) | func (m MessageItemMCPListTools) MarshalJSON() ([]byte, error) {
type MCPErrorType (line 345) | type MCPErrorType
constant MCPErrorTypeProtocolError (line 348) | MCPErrorTypeProtocolError MCPErrorType = "protocol_error"
constant MCPErrorTypeToolExecution (line 349) | MCPErrorTypeToolExecution MCPErrorType = "tool_execution_error"
constant MCPErrorTypeHTTPError (line 350) | MCPErrorTypeHTTPError MCPErrorType = "http_error"
type MCPProtocolError (line 353) | type MCPProtocolError struct
method ErrorType (line 361) | func (m MCPProtocolError) ErrorType() MCPErrorType {
method MarshalJSON (line 365) | func (m MCPProtocolError) MarshalJSON() ([]byte, error) {
type MCPToolExecutionError (line 378) | type MCPToolExecutionError struct
method ErrorType (line 383) | func (m MCPToolExecutionError) ErrorType() MCPErrorType {
method MarshalJSON (line 387) | func (m MCPToolExecutionError) MarshalJSON() ([]byte, error) {
type MCPHTTPError (line 400) | type MCPHTTPError struct
method ErrorType (line 408) | func (m MCPHTTPError) ErrorType() MCPErrorType {
method MarshalJSON (line 412) | func (m MCPHTTPError) MarshalJSON() ([]byte, error) {
type MCPError (line 425) | type MCPError struct
method MarshalJSON (line 436) | func (m MCPError) MarshalJSON() ([]byte, error) {
method UnmarshalJSON (line 446) | func (m *MCPError) UnmarshalJSON(data []byte) error {
type MessageItemMCPToolCall (line 466) | type MessageItemMCPToolCall struct
method MessageItemType (line 489) | func (m MessageItemMCPToolCall) MessageItemType() MessageItemType {
method MarshalJSON (line 493) | func (m MessageItemMCPToolCall) MarshalJSON() ([]byte, error) {
type MessageItemMCPApprovalRequest (line 506) | type MessageItemMCPApprovalRequest struct
method MessageItemType (line 520) | func (m MessageItemMCPApprovalRequest) MessageItemType() MessageItemTy...
method MarshalJSON (line 524) | func (m MessageItemMCPApprovalRequest) MarshalJSON() ([]byte, error) {
type MessageItemUnion (line 537) | type MessageItemUnion struct
method MarshalJSON (line 566) | func (m MessageItemUnion) MarshalJSON() ([]byte, error) {
method UnmarshalJSON (line 591) | func (m *MessageItemUnion) UnmarshalJSON(data []byte) error {
FILE: core/http/endpoints/openai/types/server_events.go
type ServerEventType (line 8) | type ServerEventType
constant ServerEventTypeError (line 11) | ServerEventTypeError ServerEv...
constant ServerEventTypeSessionCreated (line 12) | ServerEventTypeSessionCreated ServerEv...
constant ServerEventTypeSessionUpdated (line 13) | ServerEventTypeSessionUpdated ServerEv...
constant ServerEventTypeConversationItemAdded (line 14) | ServerEventTypeConversationItemAdded ServerEv...
constant ServerEventTypeConversationItemDone (line 15) | ServerEventTypeConversationItemDone ServerEv...
constant ServerEventTypeConversationItemRetrieved (line 16) | ServerEventTypeConversationItemRetrieved ServerEv...
constant ServerEventTypeConversationItemInputAudioTranscriptionCompleted (line 17) | ServerEventTypeConversationItemInputAudioTranscriptionCompleted ServerEv...
constant ServerEventTypeConversationItemInputAudioTranscriptionDelta (line 18) | ServerEventTypeConversationItemInputAudioTranscriptionDelta ServerEv...
constant ServerEventTypeConversationItemInputAudioTranscriptionSegment (line 19) | ServerEventTypeConversationItemInputAudioTranscriptionSegment ServerEv...
constant ServerEventTypeConversationItemInputAudioTranscriptionFailed (line 20) | ServerEventTypeConversationItemInputAudioTranscriptionFailed ServerEv...
constant ServerEventTypeConversationItemTruncated (line 21) | ServerEventTypeConversationItemTruncated ServerEv...
constant ServerEventTypeConversationItemDeleted (line 22) | ServerEventTypeConversationItemDeleted ServerEv...
constant ServerEventTypeInputAudioBufferCommitted (line 23) | ServerEventTypeInputAudioBufferCommitted ServerEv...
constant ServerEventTypeInputAudioBufferCleared (line 24) | ServerEventTypeInputAudioBufferCleared ServerEv...
constant ServerEventTypeInputAudioBufferSpeechStarted (line 25) | ServerEventTypeInputAudioBufferSpeechStarted ServerEv...
constant ServerEventTypeInputAudioBufferSpeechStopped (line 26) | ServerEventTypeInputAudioBufferSpeechStopped ServerEv...
constant ServerEventTypeInputAudioBufferTimeoutTriggered (line 27) | ServerEventTypeInputAudioBufferTimeoutTriggered ServerEv...
constant ServerEventTypeResponseCreated (line 28) | ServerEventTypeResponseCreated ServerEv...
constant ServerEventTypeResponseDone (line 29) | ServerEventTypeResponseDone ServerEv...
constant ServerEventTypeResponseOutputItemAdded (line 30) | ServerEventTypeResponseOutputItemAdded ServerEv...
constant ServerEventTypeResponseOutputItemDone (line 31) | ServerEventTypeResponseOutputItemDone ServerEv...
constant ServerEventTypeResponseContentPartAdded (line 32) | ServerEventTypeResponseContentPartAdded ServerEv...
constant ServerEventTypeResponseContentPartDone (line 33) | ServerEventTypeResponseContentPartDone ServerEv...
constant ServerEventTypeResponseOutputTextDelta (line 34) | ServerEventTypeResponseOutputTextDelta ServerEv...
constant ServerEventTypeResponseOutputTextDone (line 35) | ServerEventTypeResponseOutputTextDone ServerEv...
constant ServerEventTypeResponseOutputAudioTranscriptDelta (line 36) | ServerEventTypeResponseOutputAudioTranscriptDelta ServerEv...
constant ServerEventTypeResponseOutputAudioTranscriptDone (line 37) | ServerEventTypeResponseOutputAudioTranscriptDone ServerEv...
constant ServerEventTypeResponseOutputAudioDelta (line 38) | ServerEventTypeResponseOutputAudioDelta ServerEv...
constant ServerEventTypeResponseOutputAudioDone (line 39) | ServerEventTypeResponseOutputAudioDone ServerEv...
constant ServerEventTypeResponseFunctionCallArgumentsDelta (line 40) | ServerEventTypeResponseFunctionCallArgumentsDelta ServerEv...
constant ServerEventTypeResponseFunctionCallArgumentsDone (line 41) | ServerEventTypeResponseFunctionCallArgumentsDone ServerEv...
constant ServerEventTypeResponseMcpCallArgumentsDelta (line 42) | ServerEventTypeResponseMcpCallArgumentsDelta ServerEv...
constant ServerEventTypeResponseMcpCallArgumentsDone (line 43) | ServerEventTypeResponseMcpCallArgumentsDone ServerEv...
constant ServerEventTypeResponseMcpCallInProgress (line 44) | ServerEventTypeResponseMcpCallInProgress ServerEv...
constant ServerEventTypeResponseMcpCallCompleted (line 45) | ServerEventTypeResponseMcpCallCompleted ServerEv...
constant ServerEventTypeResponseMcpCallFailed (line 46) | ServerEventTypeResponseMcpCallFailed ServerEv...
constant ServerEventTypeMcpListToolsInProgress (line 47) | ServerEventTypeMcpListToolsInProgress ServerEv...
constant ServerEventTypeMcpListToolsCompleted (line 48) | ServerEventTypeMcpListToolsCompleted ServerEv...
constant ServerEventTypeMcpListToolsFailed (line 49) | ServerEventTypeMcpListToolsFailed ServerEv...
constant ServerEventTypeRateLimitsUpdated (line 50) | ServerEventTypeRateLimitsUpdated ServerEv...
type ServerEvent (line 54) | type ServerEvent interface
type ServerEventBase (line 59) | type ServerEventBase struct
type ErrorEvent (line 66) | type ErrorEvent struct
method ServerEventType (line 72) | func (m ErrorEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 76) | func (m ErrorEvent) MarshalJSON() ([]byte, error) {
type SessionCreatedEvent (line 92) | type SessionCreatedEvent struct
method ServerEventType (line 98) | func (m SessionCreatedEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 102) | func (m SessionCreatedEvent) MarshalJSON() ([]byte, error) {
type SessionUpdatedEvent (line 118) | type SessionUpdatedEvent struct
method ServerEventType (line 124) | func (m SessionUpdatedEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 128) | func (m SessionUpdatedEvent) MarshalJSON() ([]byte, error) {
type InputAudioBufferCommittedEvent (line 146) | type InputAudioBufferCommittedEvent struct
method ServerEventType (line 154) | func (m InputAudioBufferCommittedEvent) ServerEventType() ServerEventT...
method MarshalJSON (line 158) | func (m InputAudioBufferCommittedEvent) MarshalJSON() ([]byte, error) {
type InputAudioBufferClearedEvent (line 174) | type InputAudioBufferClearedEvent struct
method ServerEventType (line 178) | func (m InputAudioBufferClearedEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 182) | func (m InputAudioBufferClearedEvent) MarshalJSON() ([]byte, error) {
type InputAudioBufferSpeechStartedEvent (line 204) | type InputAudioBufferSpeechStartedEvent struct
method ServerEventType (line 212) | func (m InputAudioBufferSpeechStartedEvent) ServerEventType() ServerEv...
method MarshalJSON (line 216) | func (m InputAudioBufferSpeechStartedEvent) MarshalJSON() ([]byte, err...
type InputAudioBufferSpeechStoppedEvent (line 234) | type InputAudioBufferSpeechStoppedEvent struct
method ServerEventType (line 242) | func (m InputAudioBufferSpeechStoppedEvent) ServerEventType() ServerEv...
method MarshalJSON (line 246) | func (m InputAudioBufferSpeechStoppedEvent) MarshalJSON() ([]byte, err...
type InputAudioBufferTimeoutTriggeredEvent (line 272) | type InputAudioBufferTimeoutTriggeredEvent struct
method ServerEventType (line 282) | func (m InputAudioBufferTimeoutTriggeredEvent) ServerEventType() Serve...
method MarshalJSON (line 286) | func (m InputAudioBufferTimeoutTriggeredEvent) MarshalJSON() ([]byte, ...
type ConversationItemAddedEvent (line 312) | type ConversationItemAddedEvent struct
method ServerEventType (line 321) | func (m ConversationItemAddedEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 325) | func (m ConversationItemAddedEvent) MarshalJSON() ([]byte, error) {
type ConversationItemDoneEvent (line 343) | type ConversationItemDoneEvent struct
method ServerEventType (line 352) | func (m ConversationItemDoneEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 356) | func (m ConversationItemDoneEvent) MarshalJSON() ([]byte, error) {
type ConversationItemRetrievedEvent (line 372) | type ConversationItemRetrievedEvent struct
method ServerEventType (line 378) | func (m ConversationItemRetrievedEvent) ServerEventType() ServerEventT...
method MarshalJSON (line 382) | func (m ConversationItemRetrievedEvent) MarshalJSON() ([]byte, error) {
type Logprobs (line 395) | type Logprobs struct
type ConversationItemInputAudioTranscriptionCompletedEvent (line 411) | type ConversationItemInputAudioTranscriptionCompletedEvent struct
method ServerEventType (line 429) | func (m ConversationItemInputAudioTranscriptionCompletedEvent) ServerE...
method MarshalJSON (line 433) | func (m ConversationItemInputAudioTranscriptionCompletedEvent) Marshal...
type ConversationItemInputAudioTranscriptionDeltaEvent (line 449) | type ConversationItemInputAudioTranscriptionDeltaEvent struct
method ServerEventType (line 464) | func (m ConversationItemInputAudioTranscriptionDeltaEvent) ServerEvent...
method MarshalJSON (line 468) | func (m ConversationItemInputAudioTranscriptionDeltaEvent) MarshalJSON...
type ConversationItemInputAudioTranscriptionSegmentEvent (line 484) | type ConversationItemInputAudioTranscriptionSegmentEvent struct
method ServerEventType (line 511) | func (m ConversationItemInputAudioTranscriptionSegmentEvent) ServerEve...
method MarshalJSON (line 515) | func (m ConversationItemInputAudioTranscriptionSegmentEvent) MarshalJS...
type ConversationItemInputAudioTranscriptionFailedEvent (line 531) | type ConversationItemInputAudioTranscriptionFailedEvent struct
method ServerEventType (line 543) | func (m ConversationItemInputAudioTranscriptionFailedEvent) ServerEven...
method MarshalJSON (line 547) | func (m ConversationItemInputAudioTranscriptionFailedEvent) MarshalJSO...
type ConversationItemTruncatedEvent (line 565) | type ConversationItemTruncatedEvent struct
method ServerEventType (line 577) | func (m ConversationItemTruncatedEvent) ServerEventType() ServerEventT...
method MarshalJSON (line 581) | func (m ConversationItemTruncatedEvent) MarshalJSON() ([]byte, error) {
type ConversationItemDeletedEvent (line 597) | type ConversationItemDeletedEvent struct
method ServerEventType (line 603) | func (m ConversationItemDeletedEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 607) | func (m ConversationItemDeletedEvent) MarshalJSON() ([]byte, error) {
type ResponseCreatedEvent (line 623) | type ResponseCreatedEvent struct
method ServerEventType (line 629) | func (m ResponseCreatedEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 633) | func (m ResponseCreatedEvent) MarshalJSON() ([]byte, error) {
type ResponseDoneEvent (line 652) | type ResponseDoneEvent struct
method ServerEventType (line 658) | func (m ResponseDoneEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 662) | func (m ResponseDoneEvent) MarshalJSON() ([]byte, error) {
type ResponseOutputItemAddedEvent (line 678) | type ResponseOutputItemAddedEvent struct
method ServerEventType (line 688) | func (m ResponseOutputItemAddedEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 692) | func (m ResponseOutputItemAddedEvent) MarshalJSON() ([]byte, error) {
type ResponseOutputItemDoneEvent (line 708) | type ResponseOutputItemDoneEvent struct
method ServerEventType (line 718) | func (m ResponseOutputItemDoneEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 722) | func (m ResponseOutputItemDoneEvent) MarshalJSON() ([]byte, error) {
type ResponseContentPartAddedEvent (line 738) | type ResponseContentPartAddedEvent struct
method ServerEventType (line 747) | func (m ResponseContentPartAddedEvent) ServerEventType() ServerEventTy...
method MarshalJSON (line 751) | func (m ResponseContentPartAddedEvent) MarshalJSON() ([]byte, error) {
type ResponseContentPartDoneEvent (line 767) | type ResponseContentPartDoneEvent struct
method ServerEventType (line 781) | func (m ResponseContentPartDoneEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 785) | func (m ResponseContentPartDoneEvent) MarshalJSON() ([]byte, error) {
type ResponseOutputTextDeltaEvent (line 801) | type ResponseOutputTextDeltaEvent struct
method ServerEventType (line 810) | func (m ResponseOutputTextDeltaEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 814) | func (m ResponseOutputTextDeltaEvent) MarshalJSON() ([]byte, error) {
type ResponseOutputTextDoneEvent (line 830) | type ResponseOutputTextDoneEvent struct
method ServerEventType (line 839) | func (m ResponseOutputTextDoneEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 843) | func (m ResponseOutputTextDoneEvent) MarshalJSON() ([]byte, error) {
type ResponseOutputAudioTranscriptDeltaEvent (line 859) | type ResponseOutputAudioTranscriptDeltaEvent struct
method ServerEventType (line 873) | func (m ResponseOutputAudioTranscriptDeltaEvent) ServerEventType() Ser...
method MarshalJSON (line 877) | func (m ResponseOutputAudioTranscriptDeltaEvent) MarshalJSON() ([]byte...
type ResponseOutputAudioTranscriptDoneEvent (line 893) | type ResponseOutputAudioTranscriptDoneEvent struct
method ServerEventType (line 907) | func (m ResponseOutputAudioTranscriptDoneEvent) ServerEventType() Serv...
method MarshalJSON (line 911) | func (m ResponseOutputAudioTranscriptDoneEvent) MarshalJSON() ([]byte,...
type ResponseOutputAudioDeltaEvent (line 927) | type ResponseOutputAudioDeltaEvent struct
method ServerEventType (line 941) | func (m ResponseOutputAudioDeltaEvent) ServerEventType() ServerEventTy...
method MarshalJSON (line 945) | func (m ResponseOutputAudioDeltaEvent) MarshalJSON() ([]byte, error) {
type ResponseOutputAudioDoneEvent (line 961) | type ResponseOutputAudioDoneEvent struct
method ServerEventType (line 973) | func (m ResponseOutputAudioDoneEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 977) | func (m ResponseOutputAudioDoneEvent) MarshalJSON() ([]byte, error) {
type ResponseFunctionCallArgumentsDeltaEvent (line 993) | type ResponseFunctionCallArgumentsDeltaEvent struct
method ServerEventType (line 1007) | func (m ResponseFunctionCallArgumentsDeltaEvent) ServerEventType() Ser...
method MarshalJSON (line 1011) | func (m ResponseFunctionCallArgumentsDeltaEvent) MarshalJSON() ([]byte...
type ResponseFunctionCallArgumentsDoneEvent (line 1027) | type ResponseFunctionCallArgumentsDoneEvent struct
method ServerEventType (line 1043) | func (m ResponseFunctionCallArgumentsDoneEvent) ServerEventType() Serv...
method MarshalJSON (line 1047) | func (m ResponseFunctionCallArgumentsDoneEvent) MarshalJSON() ([]byte,...
type ResponseMcpCallArgumentsDeltaEvent (line 1063) | type ResponseMcpCallArgumentsDeltaEvent struct
method ServerEventType (line 1077) | func (m ResponseMcpCallArgumentsDeltaEvent) ServerEventType() ServerEv...
method MarshalJSON (line 1081) | func (m ResponseMcpCallArgumentsDeltaEvent) MarshalJSON() ([]byte, err...
type ResponseMcpCallArgumentsDoneEvent (line 1097) | type ResponseMcpCallArgumentsDoneEvent struct
method ServerEventType (line 1109) | func (m ResponseMcpCallArgumentsDoneEvent) ServerEventType() ServerEve...
method MarshalJSON (line 1113) | func (m ResponseMcpCallArgumentsDoneEvent) MarshalJSON() ([]byte, erro...
type ResponseMcpCallInProgressEvent (line 1129) | type ResponseMcpCallInProgressEvent struct
method ServerEventType (line 1137) | func (m ResponseMcpCallInProgressEvent) ServerEventType() ServerEventT...
method MarshalJSON (line 1141) | func (m ResponseMcpCallInProgressEvent) MarshalJSON() ([]byte, error) {
type ResponseMcpCallCompletedEvent (line 1157) | type ResponseMcpCallCompletedEvent struct
method ServerEventType (line 1165) | func (m ResponseMcpCallCompletedEvent) ServerEventType() ServerEventTy...
method MarshalJSON (line 1169) | func (m ResponseMcpCallCompletedEvent) MarshalJSON() ([]byte, error) {
type ResponseMcpCallFailedEvent (line 1185) | type ResponseMcpCallFailedEvent struct
method ServerEventType (line 1193) | func (m ResponseMcpCallFailedEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 1197) | func (m ResponseMcpCallFailedEvent) MarshalJSON() ([]byte, error) {
type McpListToolsInProgressEvent (line 1213) | type McpListToolsInProgressEvent struct
method ServerEventType (line 1219) | func (m McpListToolsInProgressEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 1223) | func (m McpListToolsInProgressEvent) MarshalJSON() ([]byte, error) {
type McpListToolsCompletedEvent (line 1239) | type McpListToolsCompletedEvent struct
method ServerEventType (line 1245) | func (m McpListToolsCompletedEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 1249) | func (m McpListToolsCompletedEvent) MarshalJSON() ([]byte, error) {
type McpListToolsFailedEvent (line 1265) | type McpListToolsFailedEvent struct
method ServerEventType (line 1271) | func (m McpListToolsFailedEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 1275) | func (m McpListToolsFailedEvent) MarshalJSON() ([]byte, error) {
type RateLimitsUpdatedEvent (line 1291) | type RateLimitsUpdatedEvent struct
method ServerEventType (line 1297) | func (m RateLimitsUpdatedEvent) ServerEventType() ServerEventType {
method MarshalJSON (line 1301) | func (m RateLimitsUpdatedEvent) MarshalJSON() ([]byte, error) {
type ServerEventInterface (line 1314) | type ServerEventInterface interface
function unmarshalServerEvent (line 1357) | func unmarshalServerEvent[T ServerEventInterface](data []byte) (T, error) {
function UnmarshalServerEvent (line 1367) | func UnmarshalServerEvent(data []byte) (ServerEvent, error) { //nolint:f...
FILE: core/http/endpoints/openai/types/types.go
type Voice (line 11) | type Voice
constant VoiceAlloy (line 14) | VoiceAlloy Voice = "alloy"
constant VoiceAsh (line 15) | VoiceAsh Voice = "ash"
constant VoiceBallad (line 16) | VoiceBallad Voice = "ballad"
constant VoiceCoral (line 17) | VoiceCoral Voice = "coral"
constant VoiceEcho (line 18) | VoiceEcho Voice = "echo"
constant VoiceSage (line 19) | VoiceSage Voice = "sage"
constant VoiceShimmer (line 20) | VoiceShimmer Voice = "shimmer"
constant VoiceVerse (line 21) | VoiceVerse Voice = "verse"
constant VoiceMarin (line 22) | VoiceMarin Voice = "marin"
constant VoiceCedar (line 23) | VoiceCedar Voice = "cedar"
constant VoiceFable (line 24) | VoiceFable Voice = "fable"
constant VoiceOnyx (line 25) | VoiceOnyx Voice = "onyx"
constant VoiceNova (line 26) | VoiceNova Voice = "nova"
type AudioFormat (line 29) | type AudioFormat
constant AudioFormatPcm16 (line 32) | AudioFormatPcm16 AudioFormat = "pcm16"
constant AudioFormatG711Ulaw (line 33) | AudioFormatG711Ulaw AudioFormat = "g711_ulaw"
constant AudioFormatG711Alaw (line 34) | AudioFormatG711Alaw AudioFormat = "g711_alaw"
type Modality (line 37) | type Modality
constant ModalityText (line 40) | ModalityText Modality = "text"
constant ModalityAudio (line 41) | ModalityAudio Modality = "audio"
type TurnDetectionType (line 44) | type TurnDetectionType
constant TurnDetectionTypeServerVad (line 47) | TurnDetectionTypeServerVad TurnDetectionType = "server_vad"
constant TurnDetectionTypeSemanticVad (line 48) | TurnDetectionTypeSemanticVad TurnDetectionType = "semantic_vad"
type ToolChoiceMode (line 51) | type ToolChoiceMode
method ToolChoiceType (line 59) | func (t ToolChoiceMode) ToolChoiceType() string {
constant ToolChoiceModeNone (line 54) | ToolChoiceModeNone ToolChoiceMode = "none"
constant ToolChoiceModeAuto (line 55) | ToolChoiceModeAuto ToolChoiceMode = "auto"
constant ToolChoiceModeRequired (line 56) | ToolChoiceModeRequired ToolChoiceMode = "required"
type ToolChoiceType (line 63) | type ToolChoiceType
constant ToolChoiceTypeFunction (line 66) | ToolChoiceTypeFunction ToolChoiceType = "function"
constant ToolChoiceTypeMCP (line 67) | ToolChoiceTypeMCP ToolChoiceType = "mcp"
type ToolChoiceFunction (line 70) | type ToolChoiceFunction struct
method ToolChoiceType (line 75) | func (t ToolChoiceFunction) ToolChoiceType() string {
method MarshalJSON (line 79) | func (t ToolChoiceFunction) MarshalJSON() ([]byte, error) {
type ToolChoiceMCP (line 92) | type ToolChoiceMCP struct
method ToolChoiceType (line 100) | func (t ToolChoiceMCP) ToolChoiceType() string {
method MarshalJSON (line 104) | func (t ToolChoiceMCP) MarshalJSON() ([]byte, error) {
type ToolChoiceUnion (line 117) | type ToolChoiceUnion struct
method MarshalJSON (line 134) | func (t ToolChoiceUnion) MarshalJSON() ([]byte, error) {
method UnmarshalJSON (line 144) | func (t *ToolChoiceUnion) UnmarshalJSON(data []byte) error {
type ToolType (line 164) | type ToolType
constant ToolTypeFunction (line 167) | ToolTypeFunction ToolType = "function"
constant ToolTypeMCP (line 168) | ToolTypeMCP ToolType = "mcp"
type ToolFunction (line 171) | type ToolFunction struct
method ToolType (line 182) | func (t ToolFunction) ToolType() ToolType {
method MarshalJSON (line 186) | func (t ToolFunction) MarshalJSON() ([]byte, error) {
type MCPToolFilter (line 199) | type MCPToolFilter struct
type MCPAllowedToolsUnion (line 207) | type MCPAllowedToolsUnion struct
method MarshalJSON (line 215) | func (t MCPAllowedToolsUnion) MarshalJSON() ([]byte, error) {
method UnmarshalJSON (line 222) | func (t *MCPAllowedToolsUnion) UnmarshalJSON(data []byte) error {
type MCPRequireApprovalFilter (line 232) | type MCPRequireApprovalFilter struct
type MCPToolRequireApprovalUnion (line 240) | type MCPToolRequireApprovalUnion struct
method MarshalJSON (line 248) | func (t MCPToolRequireApprovalUnion) MarshalJSON() ([]byte, error) {
method UnmarshalJSON (line 255) | func (t *MCPToolRequireApprovalUnion) UnmarshalJSON(data []byte) error {
type ToolMCP (line 265) | type ToolMCP struct
method ToolType (line 302) | func (t ToolMCP) ToolType() ToolType {
method MarshalJSON (line 306) | func (t ToolMCP) MarshalJSON() ([]byte, error) {
type TracingConfiguration (line 319) | type TracingConfiguration struct
type ToolUnion (line 325) | type ToolUnion struct
method MarshalJSON (line 332) | func (t ToolUnion) MarshalJSON() ([]byte, error) {
method UnmarshalJSON (line 342) | func (t *ToolUnion) UnmarshalJSON(data []byte) error {
type TracingMode (line 360) | type TracingMode
constant TracingModeAuto (line 363) | TracingModeAuto = "auto"
type TracingUnion (line 366) | type TracingUnion struct
type TruncationStrategy (line 371) | type TruncationStrategy
method TruncationStrategy (line 379) | func (t TruncationStrategy) TruncationStrategy() string {
constant TruncationStrategyAuto (line 374) | TruncationStrategyAuto TruncationStrategy = "auto"
constant TruncationStrategyDisabled (line 375) | TruncationStrategyDisabled TruncationStrategy = "disabled"
constant TruncationStrategyRetentionRatio (line 376) | TruncationStrategyRetentionRatio TruncationStrategy = "retention_ratio"
type RetentionRatioTruncation (line 383) | type RetentionRatioTruncation struct
method TruncationStrategy (line 387) | func (t RetentionRatioTruncation) TruncationStrategy() string {
type TruncationUnion (line 391) | type TruncationUnion struct
method UnmarshalJSON (line 402) | func (t *TruncationUnion) UnmarshalJSON(data []byte) error {
constant nullString (line 396) | nullString = "null"
function isNull (line 398) | func isNull(data []byte) bool {
type ResponseAudioOutput (line 422) | type ResponseAudioOutput struct
type ResponseAudio (line 430) | type ResponseAudio struct
type MessageRole (line 434) | type MessageRole
constant MessageRoleSystem (line 437) | MessageRoleSystem MessageRole = "system"
constant MessageRoleAssistant (line 438) | MessageRoleAssistant MessageRole = "assistant"
constant MessageRoleUser (line 439) | MessageRoleUser MessageRole = "user"
type Tool (line 442) | type Tool struct
type ResponseMessageItem (line 449) | type ResponseMessageItem struct
type Error (line 455) | type Error struct
type AudioFormatType (line 468) | type AudioFormatType
constant AudioFormatTypePCM (line 471) | AudioFormatTypePCM AudioFormatType = "audio/pcm"
constant AudioFormatTypePCMU (line 472) | AudioFormatTypePCMU AudioFormatType = "audio/pcmu"
constant AudioFormatTypePCMA (line 473) | AudioFormatTypePCMA AudioFormatType = "audio/pcma"
type AudioFormatPCM (line 477) | type AudioFormatPCM struct
method AudioFormat (line 482) | func (p AudioFormatPCM) AudioFormat() string {
method MarshalJSON (line 486) | func (p AudioFormatPCM) MarshalJSON() ([]byte, error) {
type AudioFormatPCMU (line 499) | type AudioFormatPCMU struct
method AudioFormat (line 502) | func (p AudioFormatPCMU) AudioFormat() string {
method MarshalJSON (line 506) | func (p AudioFormatPCMU) MarshalJSON() ([]byte, error) {
type AudioFormatPCMA (line 519) | type AudioFormatPCMA struct
method AudioFormat (line 522) | func (p AudioFormatPCMA) AudioFormat() string {
method MarshalJSON (line 526) | func (p AudioFormatPCMA) MarshalJSON() ([]byte, error) {
type AudioFormatUnion (line 538) | type AudioFormatUnion struct
method MarshalJSON (line 549) | func (r AudioFormatUnion) MarshalJSON() ([]byte, error) {
method UnmarshalJSON (line 562) | func (r *AudioFormatUnion) UnmarshalJSON(data []byte) error {
type AudioNoiseReduction (line 588) | type AudioNoiseReduction struct
type ServerVad (line 593) | type ServerVad struct
method VadType (line 617) | func (r ServerVad) VadType() TurnDetectionType {
method MarshalJSON (line 621) | func (r ServerVad) MarshalJSON() ([]byte, error) {
type RealtimeSessionSemanticVad (line 634) | type RealtimeSessionSemanticVad struct
method VadType (line 645) | func (r RealtimeSessionSemanticVad) VadType() TurnDetectionType {
method MarshalJSON (line 649) | func (r RealtimeSessionSemanticVad) MarshalJSON() ([]byte, error) {
type TurnDetectionUnion (line 662) | type TurnDetectionUnion struct
method MarshalJSON (line 670) | func (r TurnDetectionUnion) MarshalJSON() ([]byte, error) {
method UnmarshalJSON (line 680) | func (r *TurnDetectionUnion) UnmarshalJSON(data []byte) error {
type AudioTranscription (line 698) | type AudioTranscription struct
type SessionAudioInput (line 709) | type SessionAudioInput struct
method UnmarshalJSON (line 728) | func (s *SessionAudioInput) UnmarshalJSON(data []byte) error {
type SessionAudioOutput (line 748) | type SessionAudioOutput struct
type RealtimeSessionAudio (line 7
Copy disabled (too large)
Download .json
Condensed preview — 1287 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (15,036K chars).
[
{
"path": ".agents/adding-backends.md",
"chars": 5910,
"preview": "# Adding a New Backend\n\nWhen adding a new backend to LocalAI, you need to update several files to ensure the backend is "
},
{
"path": ".agents/api-endpoints-and-auth.md",
"chars": 9013,
"preview": "# API Endpoints and Authentication\n\nThis guide covers how to add new API endpoints and properly integrate them with the "
},
{
"path": ".agents/building-and-testing.md",
"chars": 2071,
"preview": "# Build and Testing\n\nBuilding and testing the project depends on the components involved and the platform where developm"
},
{
"path": ".agents/coding-style.md",
"chars": 1487,
"preview": "# Coding Style\n\nThe project has the following .editorconfig:\n\n```\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\n"
},
{
"path": ".agents/llama-cpp-backend.md",
"chars": 3857,
"preview": "# llama.cpp Backend\n\nThe llama.cpp backend (`backend/cpp/llama-cpp/grpc-server.cpp`) is a gRPC adaptation of the upstrea"
},
{
"path": ".agents/testing-mcp-apps.md",
"chars": 5809,
"preview": "# Testing MCP Apps (Interactive Tool UIs)\n\nMCP Apps is an extension to MCP where tools declare interactive HTML UIs via "
},
{
"path": ".air.toml",
"chars": 195,
"preview": "# .air.toml\n[build]\ncmd = \"make build\"\nbin = \"./local-ai\"\nargs_bin = [ \"--debug\" ]\ninclude_ext = [\"go\", \"html\", \"yaml\", "
},
{
"path": ".devcontainer/devcontainer.json",
"chars": 870,
"preview": "{\r\n \"$schema\": \"https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.schema.json\",\r\n \"na"
},
{
"path": ".devcontainer/docker-compose-devcontainer.yml",
"chars": 1087,
"preview": "services:\n api:\n build:\n context: ..\n dockerfile: Dockerfile\n target: devcontainer\n env_file:\n "
},
{
"path": ".devcontainer/grafana/datasource.yml",
"chars": 149,
"preview": "\napiVersion: 1\n\ndatasources:\n- name: Prometheus\n type: prometheus\n url: http://prometheus:9090 \n isDefault: true\n ac"
},
{
"path": ".devcontainer/prometheus/prometheus.yml",
"chars": 399,
"preview": "global:\n scrape_interval: 15s\n scrape_timeout: 10s\n evaluation_interval: 15s\nalerting:\n alertmanagers:\n - static_co"
},
{
"path": ".devcontainer-scripts/postcreate.sh",
"chars": 394,
"preview": "#!/bin/bash\n\ncd /workspace\n\n# Get the files into the volume without a bind mount\nif [ ! -d \".git\" ]; then\n git clone "
},
{
"path": ".devcontainer-scripts/poststart.sh",
"chars": 304,
"preview": "#!/bin/bash\n\ncd /workspace\n\n# Ensures generated source files are present upon load\nmake prepare\n\necho \"Standard Post-Sta"
},
{
"path": ".devcontainer-scripts/utils.sh",
"chars": 1527,
"preview": "#!/bin/bash\n\n# This file contains some really simple functions that are useful when building up customization scripts.\n\n"
},
{
"path": ".dockerignore",
"chars": 360,
"preview": ".idea\n.github\n.vscode\n.devcontainer\nmodels\nbackends\nexamples/chatbot-ui/models\nbackend/go/image/stablediffusion-ggml/bui"
},
{
"path": ".editorconfig",
"chars": 348,
"preview": "\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\n"
},
{
"path": ".gitattributes",
"chars": 58,
"preview": "*.sh text eol=lf\nbackend/cpp/llama/*.hpp linguist-vendored"
},
{
"path": ".github/FUNDING.yml",
"chars": 111,
"preview": "# These are supported funding model platforms\n\ngithub: [mudler]\ncustom: \n- https://www.buymeacoffee.com/mudler\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 1040,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug, unconfirmed, up-for-grabs\n---\n\n<!-"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 277,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Community Support\n url: https://github.com/go-skynet/LocalAI/dis"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 881,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: enhancement, up-for-grabs\n---\n\n<!-- "
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1085,
"preview": "**Description**\n\nThis PR fixes #\n\n**Notes for Reviewers**\n\n\n**[Signed commits](../CONTRIBUTING.md#signing-off-on-commits"
},
{
"path": ".github/bump_deps.sh",
"chars": 642,
"preview": "#!/bin/bash\nset -xe\nREPO=$1\nBRANCH=$2\nVAR=$3\nFILE=$4\n\nif [ -z \"$FILE\" ]; then\n FILE=\"Makefile\"\nfi\n\nLAST_COMMIT=$(curl"
},
{
"path": ".github/bump_docs.sh",
"chars": 216,
"preview": "#!/bin/bash\nset -xe\nREPO=$1\n\nLATEST_TAG=$(curl -s \"https://api.github.com/repos/$REPO/releases/latest\" | jq -r '.tag_nam"
},
{
"path": ".github/check_and_update.py",
"chars": 2917,
"preview": "import hashlib\r\nfrom huggingface_hub import hf_hub_download, get_paths_info\r\nimport requests\r\nimport sys\r\nimport os\r\n\r\nu"
},
{
"path": ".github/checksum_checker.sh",
"chars": 2284,
"preview": "#!/bin/bash\n# This scripts needs yq and huggingface_hub to be installed\n# to install hugingface_hub run pip install hugg"
},
{
"path": ".github/ci/modelslist.go",
"chars": 12034,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"html/template\"\n\t\"io/ioutil\"\n\t\"os\"\n\n\t\"github.com/microcosm-cc/bluemonday\"\n\t\"gopkg.in/yaml"
},
{
"path": ".github/dependabot.yml",
"chars": 3817,
"preview": "# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabo"
},
{
"path": ".github/gallery-agent/agent.go",
"chars": 14478,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"regexp\"\n\t\"slices\"\n\t\"strings\"\n\n\t\"gith"
},
{
"path": ".github/gallery-agent/gallery.go",
"chars": 6642,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/ghodss/yaml\"\n\t\"github.com/mudle"
},
{
"path": ".github/gallery-agent/main.go",
"chars": 12826,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\thfapi \"github.com/mudler"
},
{
"path": ".github/gallery-agent/testing.go",
"chars": 7607,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"strings\"\n\t\"time\"\n)\n\n// runSyntheticMode generates synthetic test"
},
{
"path": ".github/gallery-agent/tools.go",
"chars": 1142,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\n\thfapi \"github.com/mudler/LocalAI/pkg/huggingface-api\"\n\topenai \"github.com/sashabaranov/g"
},
{
"path": ".github/labeler.yml",
"chars": 612,
"preview": "enhancement:\n - head-branch: ['^feature', 'feature']\n\ndependencies:\n- any:\n - changed-files:\n - any-glob-to-any-file"
},
{
"path": ".github/release.yml",
"chars": 744,
"preview": "# .github/release.yml\n\nchangelog:\n exclude:\n labels:\n - ignore-for-release\n categories:\n - title: Breaking "
},
{
"path": ".github/stale.yml",
"chars": 788,
"preview": "# Number of days of inactivity before an issue becomes stale\ndaysUntilStale: 45\n# Number of days of inactivity before a "
},
{
"path": ".github/workflows/backend.yml",
"chars": 93107,
"preview": "---\nname: 'build backend container images'\n\non:\n push:\n branches:\n - master\n tags:\n - '*'\n\nconcurrency:"
},
{
"path": ".github/workflows/backend_build.yml",
"chars": 8807,
"preview": "---\nname: 'build backend container images (reusable)'\n\non:\n workflow_call:\n inputs:\n base-image:\n descri"
},
{
"path": ".github/workflows/backend_build_darwin.yml",
"chars": 4217,
"preview": "---\nname: 'build darwin python backend container images (reusable)'\n\non:\n workflow_call:\n inputs:\n backend:\n "
},
{
"path": ".github/workflows/backend_pr.yml",
"chars": 2751,
"preview": "name: 'build backend container images (PR-filtered)'\n\non:\n pull_request:\n\nconcurrency:\n group: ci-backends-pr-${{ gith"
},
{
"path": ".github/workflows/build-test.yaml",
"chars": 1633,
"preview": "name: Build test\n\non:\n push:\n branches:\n - master\n pull_request:\n\njobs:\n build-test:\n runs-on: ubuntu-late"
},
{
"path": ".github/workflows/bump_deps.yaml",
"chars": 2400,
"preview": "name: Bump Backend dependencies\non:\n schedule:\n - cron: 0 20 * * *\n workflow_dispatch:\njobs:\n bump-backends:\n i"
},
{
"path": ".github/workflows/bump_docs.yaml",
"chars": 921,
"preview": "name: Bump Documentation\non:\n schedule:\n - cron: 0 20 * * *\n workflow_dispatch:\njobs:\n bump-docs:\n if: github.r"
},
{
"path": ".github/workflows/checksum_checker.yaml",
"chars": 1561,
"preview": "name: Check if checksums are up-to-date\non:\n schedule:\n - cron: 0 20 * * *\n workflow_dispatch:\njobs:\n checksum_che"
},
{
"path": ".github/workflows/deploy-explorer.yaml",
"chars": 2151,
"preview": "name: Explorer deployment\n\non:\n push:\n branches:\n - master\n tags:\n - 'v*'\n\nconcurrency:\n group: ci-dep"
},
{
"path": ".github/workflows/disabled/comment-pr.yaml",
"chars": 2851,
"preview": "name: Comment PRs\non:\n pull_request_target:\n\njobs:\n comment-pr:\n env:\n MODEL_NAME: hermes-2-theta-llama-3-8b"
},
{
"path": ".github/workflows/disabled/dependabot_auto.yml",
"chars": 1299,
"preview": "name: Dependabot auto-merge\non:\n- pull_request_target\n\npermissions:\n contents: write\n pull-requests: write\n packages:"
},
{
"path": ".github/workflows/disabled/labeler.yml",
"chars": 206,
"preview": "name: \"Pull Request Labeler\"\non:\n- pull_request_target\n\njobs:\n labeler:\n permissions:\n contents: read\n pul"
},
{
"path": ".github/workflows/disabled/localaibot_automerge.yml",
"chars": 1170,
"preview": "name: LocalAI-bot auto-merge\non:\n- pull_request_target\n\npermissions:\n contents: write\n pull-requests: write\n packages"
},
{
"path": ".github/workflows/disabled/notify-models.yaml",
"chars": 6968,
"preview": "name: Notifications for new models\non:\n pull_request_target:\n types:\n - closed\n\npermissions:\n contents: read"
},
{
"path": ".github/workflows/disabled/prlint.yaml",
"chars": 635,
"preview": "name: Check PR style\n\non:\n pull_request_target:\n types:\n - opened\n - reopened\n - edited\n - synch"
},
{
"path": ".github/workflows/disabled/test-gpu.yml",
"chars": 1935,
"preview": "---\nname: 'GPU tests'\n\non:\n pull_request:\n push:\n branches:\n - master\n tags:\n - '*'\n\nconcurrency:\n gr"
},
{
"path": ".github/workflows/gallery-agent.yaml",
"chars": 5742,
"preview": "name: Gallery Agent\non:\n\n schedule:\n - cron: '0 */3 * * *' # Run every 4 hours\n workflow_dispatch:\n inputs:\n "
},
{
"path": ".github/workflows/generate_grpc_cache.yaml",
"chars": 3745,
"preview": "name: 'generate and publish GRPC docker caches'\n\non:\n workflow_dispatch:\n\n schedule:\n # daily at midnight\n - cro"
},
{
"path": ".github/workflows/generate_intel_image.yaml",
"chars": 1747,
"preview": "name: 'generate and publish intel docker caches'\n\non:\n workflow_dispatch:\n push:\n branches:\n - master\n\nconcurr"
},
{
"path": ".github/workflows/image-pr.yml",
"chars": 3694,
"preview": "---\n name: 'build container images tests'\n \n on:\n pull_request:\n \n concurrency:\n group: ci-${{ github.head_re"
},
{
"path": ".github/workflows/image.yml",
"chars": 7122,
"preview": "---\n name: 'build container images'\n \n on:\n push:\n branches:\n - master\n tags:\n - '*'\n \n "
},
{
"path": ".github/workflows/image_build.yml",
"chars": 10067,
"preview": "---\nname: 'build container images (reusable)'\n\non:\n workflow_call:\n inputs:\n base-image:\n description: '"
},
{
"path": ".github/workflows/notify-releases.yaml",
"chars": 2169,
"preview": "name: Release notifications\non:\n release:\n types:\n - published\n\njobs:\n notify-discord:\n if: github.reposito"
},
{
"path": ".github/workflows/release.yaml",
"chars": 1621,
"preview": "name: goreleaser\n\non:\n push:\n tags:\n - 'v*'\n\njobs:\n goreleaser:\n runs-on: ubuntu-latest\n steps:\n - "
},
{
"path": ".github/workflows/secscan.yaml",
"chars": 978,
"preview": "name: \"Security Scan\"\n\n# Run workflow each time code is pushed to your repository and on a schedule.\n# The scheduled wor"
},
{
"path": ".github/workflows/stalebot.yml",
"chars": 1090,
"preview": "name: 'Close stale issues and PRs'\npermissions:\n issues: write\n pull-requests: write\non:\n schedule:\n - cron: '30 1"
},
{
"path": ".github/workflows/test-extra.yml",
"chars": 16979,
"preview": "---\nname: 'Tests extras backends'\n\non:\n pull_request:\n push:\n branches:\n - master\n tags:\n - '*'\n\nconcu"
},
{
"path": ".github/workflows/test.yml",
"chars": 8966,
"preview": "---\nname: 'tests'\n\non:\n pull_request:\n push:\n branches:\n - master\n tags:\n - '*'\n\nenv:\n GRPC_VERSION: "
},
{
"path": ".github/workflows/tests-e2e.yml",
"chars": 1869,
"preview": "---\nname: 'E2E Backend Tests'\n\non:\n pull_request:\n push:\n branches:\n - master\n tags:\n - '*'\n\nconcurren"
},
{
"path": ".github/workflows/tests-ui-e2e.yml",
"chars": 2250,
"preview": "---\nname: 'UI E2E Tests'\n\non:\n pull_request:\n paths:\n - 'core/http/**'\n - 'tests/e2e-ui/**'\n - 'tests"
},
{
"path": ".github/workflows/update_swagger.yaml",
"chars": 1175,
"preview": "name: Update swagger\non:\n schedule:\n - cron: 0 20 * * *\n workflow_dispatch:\njobs:\n swagger:\n if: github.reposit"
},
{
"path": ".github/workflows/yaml-check.yml",
"chars": 768,
"preview": "name: 'Yamllint GitHub Actions'\non:\n - pull_request\njobs:\n yamllint:\n name: 'Yamllint'\n runs-on: ubuntu-latest\n "
},
{
"path": ".gitignore",
"chars": 1301,
"preview": "# go-llama build artifacts\n/sources/\n__pycache__/\n*.a\n*.o\nget-sources\nprepare-sources\n/backend/cpp/llama-cpp/grpc-server"
},
{
"path": ".gitmodules",
"chars": 142,
"preview": "[submodule \"docs/themes/hugo-theme-relearn\"]\n\tpath = docs/themes/hugo-theme-relearn\n\turl = https://github.com/McShelby/h"
},
{
"path": ".goreleaser.yaml",
"chars": 915,
"preview": "version: 2\nbefore:\n hooks:\n - make protogen-go\n - make react-ui\n - go mod tidy\ndist: release\nsource:\n enabled"
},
{
"path": ".vscode/extensions.json",
"chars": 54,
"preview": "{\n \"recommendations\": [\n \"golang.go\"\n ]\n}"
},
{
"path": ".vscode/launch.json",
"chars": 990,
"preview": "{\n \"version\": \"0.2.0\",\n \"configurations\": [\n {\n \"name\": \"Python: Current File\",\n \"typ"
},
{
"path": ".yamllint",
"chars": 52,
"preview": "extends: default\r\n\r\nrules:\r\n line-length: disable"
},
{
"path": "AGENTS.md",
"chars": 1600,
"preview": "# LocalAI Agent Instructions\n\nThis file is an index to detailed topic guides in the `.agents/` directory. Read the relev"
},
{
"path": "CONTRIBUTING.md",
"chars": 10390,
"preview": "# Contributing to LocalAI\n\nThank you for your interest in contributing to LocalAI! We appreciate your time and effort in"
},
{
"path": "Dockerfile",
"chars": 15201,
"preview": "ARG BASE_IMAGE=ubuntu:24.04\nARG GRPC_BASE_IMAGE=${BASE_IMAGE}\nARG INTEL_BASE_IMAGE=${BASE_IMAGE}\nARG UBUNTU_CODENAME=nob"
},
{
"path": "Entitlements.plist",
"chars": 310,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "LICENSE",
"chars": 1099,
"preview": "MIT License\n\nCopyright (c) 2023-2025 Ettore Di Giacinto (mudler@localai.io)\n\nPermission is hereby granted, free of charg"
},
{
"path": "Makefile",
"chars": 28941,
"preview": "# Disable parallel execution for backend builds\n.NOTPARALLEL: backends/diffusers backends/llama-cpp backends/outetts bac"
},
{
"path": "README.md",
"chars": 26156,
"preview": "<h1 align=\"center\">\n <br>\n <img width=\"300\" src=\"./core/http/static/logo.png\"> <br>\n<br>\n</h1>\n\n<p align=\"center\">\n<a "
},
{
"path": "SECURITY.md",
"chars": 3922,
"preview": "# Security Policy\n\n## Introduction\n\nAt LocalAI, we take the security of our software seriously. We understand the import"
},
{
"path": "backend/Dockerfile.golang",
"chars": 8918,
"preview": "ARG BASE_IMAGE=ubuntu:24.04\n\nFROM ${BASE_IMAGE} AS builder\nARG BACKEND=rerankers\nARG BUILD_TYPE\nENV BUILD_TYPE=${BUILD_T"
},
{
"path": "backend/Dockerfile.llama-cpp",
"chars": 12042,
"preview": "ARG BASE_IMAGE=ubuntu:24.04\nARG GRPC_BASE_IMAGE=${BASE_IMAGE}\n\n\n# The grpc target does one thing, it builds and installs"
},
{
"path": "backend/Dockerfile.python",
"chars": 8930,
"preview": "ARG BASE_IMAGE=ubuntu:24.04\n\nFROM ${BASE_IMAGE} AS builder\nARG BACKEND=rerankers\nARG BUILD_TYPE\nENV BUILD_TYPE=${BUILD_T"
},
{
"path": "backend/README.md",
"chars": 7434,
"preview": "# LocalAI Backend Architecture\n\nThis directory contains the core backend infrastructure for LocalAI, including the gRPC "
},
{
"path": "backend/backend.proto",
"chars": 14074,
"preview": "syntax = \"proto3\";\n\noption go_package = \"github.com/go-skynet/LocalAI/pkg/grpc/proto\";\noption java_multiple_files = true"
},
{
"path": "backend/cpp/grpc/.gitignore",
"chars": 43,
"preview": "installed_packages/\ngrpc_build/\ngrpc_repo/\n"
},
{
"path": "backend/cpp/grpc/Makefile",
"chars": 2103,
"preview": "# Basic platform detection\nHOST_SYSTEM = $(shell uname | cut -f 1 -d_)\nSYSTEM ?= $(HOST_SYSTEM)\n\nTAG_LIB_GRPC?=v1.59.0\nG"
},
{
"path": "backend/cpp/llama-cpp/CMakeLists.txt",
"chars": 2573,
"preview": "set(TARGET grpc-server)\nset(CMAKE_CXX_STANDARD 17)\ncmake_minimum_required(VERSION 3.15)\nset(TARGET grpc-server)\nset(_PRO"
},
{
"path": "backend/cpp/llama-cpp/Makefile",
"chars": 7171,
"preview": "\nLLAMA_VERSION?=5744d7ec430e2f875a393770195fda530560773f\nLLAMA_REPO?=https://github.com/ggerganov/llama.cpp\n\nCMAKE_ARGS?"
},
{
"path": "backend/cpp/llama-cpp/grpc-server.cpp",
"chars": 148316,
"preview": "// llama.cpp gRPC C++ backend server\n//\n// Ettore Di Giacinto <mudler@localai.io> and llama.cpp authors\n//\n// This is a "
},
{
"path": "backend/cpp/llama-cpp/package.sh",
"chars": 2181,
"preview": "#!/bin/bash\n\n# Script to copy the appropriate libraries based on architecture\n# This script is used in the final stage o"
},
{
"path": "backend/cpp/llama-cpp/prepare.sh",
"chars": 809,
"preview": "#!/bin/bash\n\n## Patches\n\n## Apply patches from the `patches` directory\nif [ -d \"patches\" ]; then\n for patch in $(ls p"
},
{
"path": "backend/cpp/llama-cpp/run.sh",
"chars": 1480,
"preview": "#!/bin/bash\nset -ex\n\n# Get the absolute current dir where the script is located\nCURDIR=$(dirname \"$(realpath $0)\")\n\ncd /"
},
{
"path": "backend/go/acestep-cpp/CMakeLists.txt",
"chars": 2403,
"preview": "cmake_minimum_required(VERSION 3.14)\nproject(goacestepcpp LANGUAGES C CXX)\nset(CMAKE_POSITION_INDEPENDENT_CODE ON)\nset(C"
},
{
"path": "backend/go/acestep-cpp/Makefile",
"chars": 4110,
"preview": "CMAKE_ARGS?=\nBUILD_TYPE?=\nNATIVE?=false\n\nGOCMD?=go\nGO_TAGS?=\nJOBS?=$(shell nproc --ignore=1)\n\n# acestep.cpp version\nACES"
},
{
"path": "backend/go/acestep-cpp/acestepcpp_test.go",
"chars": 5219,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"testing\"\n\t\"time\"\n\n\tpb \"github.com/mudler/LocalAI/p"
},
{
"path": "backend/go/acestep-cpp/cpp/goacestepcpp.cpp",
"chars": 10638,
"preview": "#include \"goacestepcpp.h\"\n#include \"ggml-backend.h\"\n\n#include \"audio-io.h\"\n#include \"bpe.h\"\n#include \"cond-enc.h\"\n#inclu"
},
{
"path": "backend/go/acestep-cpp/cpp/goacestepcpp.h",
"chars": 469,
"preview": "#include <cstddef>\n#include <cstdint>\n\nextern \"C\" {\nint load_model(const char *lm_model_path, const char *text_encoder_p"
},
{
"path": "backend/go/acestep-cpp/goacestepcpp.go",
"chars": 3028,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/mudler/LocalAI/pkg/grpc/base\"\n\tpb \"github."
},
{
"path": "backend/go/acestep-cpp/main.go",
"chars": 929,
"preview": "package main\n\n// Note: this is started internally by LocalAI and a server is allocated for each model\nimport (\n\t\"flag\"\n\t"
},
{
"path": "backend/go/acestep-cpp/package.sh",
"chars": 3130,
"preview": "#!/bin/bash\n\n# Script to copy the appropriate libraries based on architecture\n# This script is used in the final stage o"
},
{
"path": "backend/go/acestep-cpp/run.sh",
"chars": 1253,
"preview": "#!/bin/bash\nset -ex\n\n# Get the absolute current dir where the script is located\nCURDIR=$(dirname \"$(realpath $0)\")\n\ncd /"
},
{
"path": "backend/go/acestep-cpp/test.sh",
"chars": 1634,
"preview": "#!/bin/bash\nset -e\n\nCURDIR=$(dirname \"$(realpath $0)\")\n\necho \"Running acestep-cpp backend tests...\"\n\n# The test requires"
},
{
"path": "backend/go/llm/llama/llama.go",
"chars": 7783,
"preview": "package main\n\n// This is a wrapper to statisfy the GRPC service interface\n// It is meant to be used by the main executab"
},
{
"path": "backend/go/llm/llama/main.go",
"chars": 379,
"preview": "package main\n\n// GRPC Falcon server\n\n// Note: this is started internally by LocalAI and a server is allocated for each m"
},
{
"path": "backend/go/local-store/Makefile",
"chars": 194,
"preview": "GOCMD=go\n\nlocal-store:\n\tCGO_ENABLED=0 $(GOCMD) build -ldflags \"$(LD_FLAGS)\" -tags \"$(GO_TAGS)\" -o local-store ./\n\npackag"
},
{
"path": "backend/go/local-store/debug.go",
"chars": 172,
"preview": "//go:build debug\n// +build debug\n\npackage main\n\nimport (\n\t\"github.com/mudler/xlog\"\n)\n\nfunc assert(cond bool, msg string)"
},
{
"path": "backend/go/local-store/main.go",
"chars": 505,
"preview": "package main\n\n// Note: this is started internally by LocalAI and a server is allocated for each store\n\nimport (\n\t\"flag\"\n"
},
{
"path": "backend/go/local-store/package.sh",
"chars": 291,
"preview": "#!/bin/bash\n\n# Script to copy the appropriate libraries based on architecture\n# This script is used in the final stage o"
},
{
"path": "backend/go/local-store/production.go",
"chars": 89,
"preview": "//go:build !debug\n// +build !debug\n\npackage main\n\nfunc assert(cond bool, msg string) {\n}\n"
},
{
"path": "backend/go/local-store/run.sh",
"chars": 86,
"preview": "#!/bin/bash\nset -ex\n\nCURDIR=$(dirname \"$(realpath $0)\")\n\nexec $CURDIR/local-store \"$@\""
},
{
"path": "backend/go/local-store/store.go",
"chars": 12430,
"preview": "package main\n\n// This is a wrapper to statisfy the GRPC service interface\n// It is meant to be used by the main executab"
},
{
"path": "backend/go/opus/Makefile",
"chars": 358,
"preview": "GOCMD?=go\nGO_TAGS?=\n\nOPUS_CFLAGS := $(shell pkg-config --cflags opus)\nOPUS_LIBS := $(shell pkg-config --libs opus)\n\nlibo"
},
{
"path": "backend/go/opus/codec.go",
"chars": 6542,
"preview": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"sync\"\n\n\t\"github.com/ebitengine/purego\"\n)\n\nco"
},
{
"path": "backend/go/opus/csrc/opus_shim.c",
"chars": 298,
"preview": "#include <opus.h>\n\nint opus_shim_encoder_set_bitrate(OpusEncoder *st, opus_int32 bitrate) {\n return opus_encoder_ctl(st"
},
{
"path": "backend/go/opus/main.go",
"chars": 262,
"preview": "package main\n\nimport (\n\t\"flag\"\n\n\tgrpc \"github.com/mudler/LocalAI/pkg/grpc\"\n)\n\nvar addr = flag.String(\"addr\", \"localhost:"
},
{
"path": "backend/go/opus/opus.go",
"chars": 4443,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/mudler/LocalAI/pkg/grpc/base\"\n\tpb \"github.com/mudler/LocalAI"
},
{
"path": "backend/go/opus/opus_test.go",
"chars": 42952,
"preview": "package main\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"math/rand/v2\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"sync\""
},
{
"path": "backend/go/opus/package.sh",
"chars": 2219,
"preview": "#!/bin/bash\nset -e\n\nCURDIR=$(dirname \"$(realpath $0)\")\n\nmkdir -p $CURDIR/package/lib\n\ncp -avf $CURDIR/opus $CURDIR/packa"
},
{
"path": "backend/go/opus/run.sh",
"chars": 323,
"preview": "#!/bin/bash\nset -ex\n\nCURDIR=$(dirname \"$(realpath $0)\")\n\nexport LD_LIBRARY_PATH=$CURDIR/lib:$LD_LIBRARY_PATH\nexport OPUS"
},
{
"path": "backend/go/piper/Makefile",
"chars": 1589,
"preview": "\n# go-piper version\nPIPER_REPO?=https://github.com/mudler/go-piper\nPIPER_VERSION?=e10ca041a885d4a8f3871d52924b47792d5e5a"
},
{
"path": "backend/go/piper/main.go",
"chars": 358,
"preview": "package main\n\n// Note: this is started internally by LocalAI and a server is allocated for each model\n\nimport (\n\t\"flag\"\n"
},
{
"path": "backend/go/piper/package.sh",
"chars": 2721,
"preview": "#!/bin/bash\n\n# Script to copy the appropriate libraries based on architecture\n# This script is used in the final stage o"
},
{
"path": "backend/go/piper/piper.go",
"chars": 1190,
"preview": "package main\n\n// This is a wrapper to statisfy the GRPC service interface\n// It is meant to be used by the main executab"
},
{
"path": "backend/go/piper/run.sh",
"chars": 317,
"preview": "#!/bin/bash\nset -ex\n\nCURDIR=$(dirname \"$(realpath $0)\")\n\nexport ESPEAK_NG_DATA=$CURDIR/espeak-ng-data\nexport LD_LIBRARY_"
},
{
"path": "backend/go/silero-vad/Makefile",
"chars": 1642,
"preview": "\nCURRENT_DIR=$(abspath ./)\nGOCMD=go\n\nONNX_VERSION?=1.20.0\nONNX_ARCH?=x64\nONNX_OS?=linux\n\n# Detect if we are running on a"
},
{
"path": "backend/go/silero-vad/main.go",
"chars": 356,
"preview": "package main\n\n// Note: this is started internally by LocalAI and a server is allocated for each model\n\nimport (\n\t\"flag\"\n"
},
{
"path": "backend/go/silero-vad/package.sh",
"chars": 2657,
"preview": "#!/bin/bash\n\n# Script to copy the appropriate libraries based on architecture\n# This script is used in the final stage o"
},
{
"path": "backend/go/silero-vad/run.sh",
"chars": 282,
"preview": "#!/bin/bash\nset -ex\n\nCURDIR=$(dirname \"$(realpath $0)\")\n\nexport LD_LIBRARY_PATH=$CURDIR/lib:$LD_LIBRARY_PATH\n\n# If there"
},
{
"path": "backend/go/silero-vad/vad.go",
"chars": 1373,
"preview": "package main\n\n// This is a wrapper to statisfy the GRPC service interface\n// It is meant to be used by the main executab"
},
{
"path": "backend/index.yaml",
"chars": 120326,
"preview": "---\n## metas\n- &llamacpp\n name: \"llama-cpp\"\n alias: \"llama-cpp\"\n license: mit\n icon: https://user-images.githubuserc"
},
{
"path": "backend/python/README.md",
"chars": 4981,
"preview": "# Python Backends for LocalAI\n\nThis directory contains Python-based AI backends for LocalAI, providing support for vario"
},
{
"path": "backend/python/ace-step/Makefile",
"chars": 241,
"preview": ".DEFAULT_GOAL := install\n\n.PHONY: install\ninstall:\n\tbash install.sh\n\n.PHONY: protogen-clean\nprotogen-clean:\n\t$(RM) backe"
},
{
"path": "backend/python/ace-step/backend.py",
"chars": 19718,
"preview": "#!/usr/bin/env python3\n\"\"\"\nLocalAI ACE-Step Backend\n\ngRPC backend for ACE-Step 1.5 music generation. Aligns with upstrea"
},
{
"path": "backend/python/ace-step/install.sh",
"chars": 569,
"preview": "#!/bin/bash\nset -e\n\nbackend_dir=$(dirname $0)\nif [ -d $backend_dir/common ]; then\n source $backend_dir/common/libback"
},
{
"path": "backend/python/ace-step/requirements-cpu.txt",
"chars": 374,
"preview": "--extra-index-url https://download.pytorch.org/whl/cpu\ntorch\ntorchaudio\ntorchvision\n\n# Core dependencies\ntransformers>=4"
},
{
"path": "backend/python/ace-step/requirements-cublas12.txt",
"chars": 384,
"preview": "--extra-index-url https://download.pytorch.org/whl/cu128\ntorch\ntorchaudio\ntorchvision\n\n# Core dependencies\ntransformers>"
},
{
"path": "backend/python/ace-step/requirements-cublas13.txt",
"chars": 384,
"preview": "--extra-index-url https://download.pytorch.org/whl/cu130\ntorch\ntorchaudio\ntorchvision\n\n# Core dependencies\ntransformers>"
},
{
"path": "backend/python/ace-step/requirements-hipblas.txt",
"chars": 400,
"preview": "--extra-index-url https://download.pytorch.org/whl/rocm6.4\ntorch==2.8.0+rocm6.4\ntorchaudio\ntorchvision\n\n# Core dependenc"
},
{
"path": "backend/python/ace-step/requirements-intel.txt",
"chars": 444,
"preview": "--extra-index-url https://download.pytorch.org/whl/xpu\ntorch\ntorchaudio\ntorchvision\n\n# Core dependencies\ntransformers>=4"
},
{
"path": "backend/python/ace-step/requirements-l4t13.txt",
"chars": 383,
"preview": "--extra-index-url https://download.pytorch.org/whl/cu130\ntorch\ntorchaudio\ntorchvision\n# Core dependencies\ntransformers>="
},
{
"path": "backend/python/ace-step/requirements-mps.txt",
"chars": 389,
"preview": "torch\ntorchaudio\ntorchvision\n\n# Core dependencies\ntransformers>=4.51.0,<4.58.0\ndiffusers\ngradio\nmatplotlib>=3.7.5\nscipy>"
},
{
"path": "backend/python/ace-step/requirements.txt",
"chars": 43,
"preview": "setuptools\ngrpcio==1.76.0\nprotobuf\ncertifi\n"
},
{
"path": "backend/python/ace-step/run.sh",
"chars": 192,
"preview": "#!/bin/bash\nbackend_dir=$(dirname $0)\nif [ -d $backend_dir/common ]; then\n source $backend_dir/common/libbackend.sh\ne"
},
{
"path": "backend/python/ace-step/test.py",
"chars": 1623,
"preview": "\"\"\"\nTests for the ACE-Step gRPC backend.\n\"\"\"\nimport os\nimport tempfile\nimport unittest\n\nimport backend_pb2\nimport backen"
},
{
"path": "backend/python/ace-step/test.sh",
"chars": 488,
"preview": "#!/bin/bash\nset -e\n\nbackend_dir=$(dirname $0)\nif [ -d $backend_dir/common ]; then\n source $backend_dir/common/libback"
},
{
"path": "backend/python/chatterbox/Makefile",
"chars": 373,
"preview": ".PHONY: chatterbox\nchatterbox:\n\tbash install.sh\n\n.PHONY: run\nrun: chatterbox\n\t@echo \"Running coqui...\"\n\tbash run.sh\n\t@ec"
},
{
"path": "backend/python/chatterbox/backend.py",
"chars": 9177,
"preview": "#!/usr/bin/env python3\n\"\"\"\nThis is an extra gRPC server of LocalAI for Chatterbox TTS\n\"\"\"\nfrom concurrent import futures"
},
{
"path": "backend/python/chatterbox/install.sh",
"chars": 955,
"preview": "#!/bin/bash\nset -e\n\nbackend_dir=$(dirname $0)\nif [ -d $backend_dir/common ]; then\n source $backend_dir/common/libback"
},
{
"path": "backend/python/chatterbox/requirements-cpu.txt",
"chars": 281,
"preview": "--extra-index-url https://download.pytorch.org/whl/cpu\naccelerate\ntorch\ntorchaudio\nnumpy>=1.24.0,<1.26.0\ntransformers\n# "
},
{
"path": "backend/python/chatterbox/requirements-cublas12.txt",
"chars": 204,
"preview": "torch\ntorchaudio\ntransformers\nnumpy>=1.24.0,<1.26.0\n# https://github.com/mudler/LocalAI/pull/6240#issuecomment-332951828"
},
{
"path": "backend/python/chatterbox/requirements-cublas13.txt",
"chars": 261,
"preview": "--extra-index-url https://download.pytorch.org/whl/cu130\ntorch\ntorchaudio\ntransformers\nnumpy>=1.24.0,<1.26.0\n# https://g"
},
{
"path": "backend/python/chatterbox/requirements-hipblas.txt",
"chars": 293,
"preview": "--extra-index-url https://download.pytorch.org/whl/rocm6.4\ntorch==2.9.1+rocm6.4\ntorchaudio==2.9.1+rocm6.4\ntransformers\nn"
},
{
"path": "backend/python/chatterbox/requirements-install.txt",
"chars": 192,
"preview": "# Build dependencies needed for packages installed from source (e.g., git dependencies)\n# When using --no-build-isolatio"
},
{
"path": "backend/python/chatterbox/requirements-intel.txt",
"chars": 315,
"preview": "--extra-index-url https://download.pytorch.org/whl/xpu\ntorch\ntorchaudio\ntransformers\nnumpy>=1.24.0,<1.26.0\n# https://git"
},
{
"path": "backend/python/chatterbox/requirements-l4t12.txt",
"chars": 193,
"preview": "--extra-index-url https://pypi.jetson-ai-lab.io/jp6/cu126/\ntorch\ntorchaudio\ntransformers\nnumpy>=1.24.0,<1.26.0\nchatterbo"
},
{
"path": "backend/python/chatterbox/requirements-l4t13.txt",
"chars": 191,
"preview": "--extra-index-url https://download.pytorch.org/whl/cu130\ntorch\ntorchaudio\ntransformers\nnumpy>=1.24.0,<1.26.0\nchatterbox-"
},
{
"path": "backend/python/chatterbox/requirements-mps.txt",
"chars": 203,
"preview": "torch\ntorchaudio\naccelerate\nnumpy>=1.24.0,<1.26.0\ntransformers\n# https://github.com/mudler/LocalAI/pull/6240#issuecommen"
},
{
"path": "backend/python/chatterbox/requirements.txt",
"chars": 59,
"preview": "grpcio==1.71.0\nprotobuf\ncertifi\npackaging\nsetuptools\npoetry"
},
{
"path": "backend/python/chatterbox/run.sh",
"chars": 191,
"preview": "#!/bin/bash\nbackend_dir=$(dirname $0)\nif [ -d $backend_dir/common ]; then\n source $backend_dir/common/libbackend.sh\ne"
},
{
"path": "backend/python/chatterbox/test.py",
"chars": 2718,
"preview": "\"\"\"\nA test script to test the gRPC service\n\"\"\"\nimport unittest\nimport subprocess\nimport time\nimport backend_pb2\nimport b"
},
{
"path": "backend/python/chatterbox/test.sh",
"chars": 197,
"preview": "#!/bin/bash\nset -e\n\nbackend_dir=$(dirname $0)\nif [ -d $backend_dir/common ]; then\n source $backend_dir/common/libback"
},
{
"path": "backend/python/common/libbackend.sh",
"chars": 18181,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\n#\n# use the library by adding the following line to a script:\n# source $(dirname "
},
{
"path": "backend/python/common/template/Makefile",
"chars": 211,
"preview": ".DEFAULT_GOAL := install\n\n.PHONY: install\ninstall:\n\tbash install.sh\n\n.PHONY: protogen-clean\nprotogen-clean:\n\t$(RM) backe"
},
{
"path": "backend/python/common/template/backend.py",
"chars": 78,
"preview": "#!/usr/bin/env python3\nimport grpc\nimport backend_pb2\nimport backend_pb2_grpc\n"
},
{
"path": "backend/python/common/template/install.sh",
"chars": 839,
"preview": "#!/bin/bash\nset -e\n\nbackend_dir=$(dirname $0)\nif [ -d $backend_dir/common ]; then\n source $backend_dir/common/libback"
},
{
"path": "backend/python/common/template/protogen.sh",
"chars": 195,
"preview": "#!/bin/bash\nset -e\n\nbackend_dir=$(dirname $0)\nif [ -d $backend_dir/common ]; then\n source $backend_dir/common/libback"
},
{
"path": "backend/python/common/template/requirements-hipblas.txt",
"chars": 64,
"preview": "--extra-index-url https://download.pytorch.org/whl/rocm6.4\ntorch"
},
{
"path": "backend/python/common/template/requirements-intel.txt",
"chars": 111,
"preview": "--extra-index-url https://download.pytorch.org/whl/xpu\ntorch==2.8.0\noneccl_bind_pt==2.8.0+xpu\noptimum[openvino]"
},
{
"path": "backend/python/common/template/requirements.txt",
"chars": 36,
"preview": "grpcio==1.78.1\nprotobuf\ngrpcio-tools"
},
{
"path": "backend/python/common/template/run.sh",
"chars": 191,
"preview": "#!/bin/bash\nbackend_dir=$(dirname $0)\nif [ -d $backend_dir/common ]; then\n source $backend_dir/common/libbackend.sh\ne"
},
{
"path": "backend/python/common/template/test.sh",
"chars": 197,
"preview": "#!/bin/bash\nset -e\n\nbackend_dir=$(dirname $0)\nif [ -d $backend_dir/common ]; then\n source $backend_dir/common/libback"
},
{
"path": "backend/python/coqui/Makefile",
"chars": 353,
"preview": ".PHONY: coqui\ncoqui:\n\tbash install.sh\n\n.PHONY: run\nrun: coqui\n\t@echo \"Running coqui...\"\n\tbash run.sh\n\t@echo \"coqui run.\""
},
{
"path": "backend/python/coqui/README.md",
"chars": 117,
"preview": "# Creating a separate environment for coqui project\n\n```\nmake coqui\n```\n\n# Testing the gRPC server\n\n```\nmake test\n```"
},
{
"path": "backend/python/coqui/backend.py",
"chars": 4981,
"preview": "#!/usr/bin/env python3\n\"\"\"\nThis is an extra gRPC server of LocalAI for Coqui TTS\n\"\"\"\nfrom concurrent import futures\nimpo"
},
{
"path": "backend/python/coqui/install.sh",
"chars": 839,
"preview": "#!/bin/bash\nset -e\n\nbackend_dir=$(dirname $0)\nif [ -d $backend_dir/common ]; then\n source $backend_dir/common/libback"
},
{
"path": "backend/python/coqui/requirements-cpu.txt",
"chars": 54,
"preview": "transformers==4.48.3\naccelerate\ntorch==2.4.1\ncoqui-tts"
},
{
"path": "backend/python/coqui/requirements-cublas12.txt",
"chars": 72,
"preview": "torch==2.4.1\ntorchaudio==2.4.1\ntransformers==4.48.3\naccelerate\ncoqui-tts"
},
{
"path": "backend/python/coqui/requirements-hipblas.txt",
"chars": 147,
"preview": "--extra-index-url https://download.pytorch.org/whl/rocm6.4\ntorch==2.8.0+rocm6.4\ntorchaudio==2.8.0+rocm6.4\ntransformers=="
},
{
"path": "backend/python/coqui/requirements-intel.txt",
"chars": 164,
"preview": "--extra-index-url https://download.pytorch.org/whl/xpu\ntorch==2.8.0+xpu\ntorchaudio==2.8.0+xpu\noptimum[openvino]\nsetuptoo"
},
{
"path": "backend/python/coqui/requirements-mps.txt",
"chars": 55,
"preview": "torch==2.7.1\ntransformers==4.48.3\naccelerate\ncoqui-tts\n"
},
{
"path": "backend/python/coqui/requirements.txt",
"chars": 47,
"preview": "grpcio==1.78.1\nprotobuf\ncertifi\npackaging==24.1"
},
{
"path": "backend/python/coqui/run.sh",
"chars": 191,
"preview": "#!/bin/bash\nbackend_dir=$(dirname $0)\nif [ -d $backend_dir/common ]; then\n source $backend_dir/common/libbackend.sh\ne"
},
{
"path": "backend/python/coqui/test.py",
"chars": 2780,
"preview": "\"\"\"\nA test script to test the gRPC service\n\"\"\"\nimport unittest\nimport subprocess\nimport time\nimport backend_pb2\nimport b"
},
{
"path": "backend/python/coqui/test.sh",
"chars": 197,
"preview": "#!/bin/bash\nset -e\n\nbackend_dir=$(dirname $0)\nif [ -d $backend_dir/common ]; then\n source $backend_dir/common/libback"
},
{
"path": "backend/python/diffusers/Makefile",
"chars": 710,
"preview": "export CONDA_ENV_PATH = \"diffusers.yml\"\n\nifeq ($(BUILD_TYPE), hipblas)\nexport CONDA_ENV_PATH = \"diffusers-rocm.yml\"\nendi"
},
{
"path": "backend/python/diffusers/README.md",
"chars": 4860,
"preview": "# LocalAI Diffusers Backend\n\nThis backend provides gRPC access to Hugging Face diffusers pipelines with dynamic pipeline"
},
{
"path": "backend/python/diffusers/backend.py",
"chars": 46809,
"preview": "#!/usr/bin/env python3\n\"\"\"\nLocalAI Diffusers Backend\n\nThis backend provides gRPC access to diffusers pipelines with dyna"
},
{
"path": "backend/python/diffusers/diffusers_dynamic_loader.py",
"chars": 19337,
"preview": "\"\"\"\nDynamic Diffusers Pipeline Loader\n\nThis module provides dynamic discovery and loading of diffusers pipelines at runt"
},
{
"path": "backend/python/diffusers/install.sh",
"chars": 1055,
"preview": "#!/bin/bash\nset -e\n\nbackend_dir=$(dirname $0)\nif [ -d $backend_dir/common ]; then\n source $backend_dir/common/libback"
},
{
"path": "backend/python/diffusers/requirements-cpu.txt",
"chars": 256,
"preview": "--extra-index-url https://download.pytorch.org/whl/cpu\ngit+https://github.com/huggingface/diffusers\nopencv-python\ntransf"
},
{
"path": "backend/python/diffusers/requirements-cublas12.txt",
"chars": 244,
"preview": "--extra-index-url https://download.pytorch.org/whl/cu121\ngit+https://github.com/huggingface/diffusers\nopencv-python\ntran"
},
{
"path": "backend/python/diffusers/requirements-cublas13.txt",
"chars": 244,
"preview": "--extra-index-url https://download.pytorch.org/whl/cu130\ngit+https://github.com/huggingface/diffusers\nopencv-python\ntran"
},
{
"path": "backend/python/diffusers/requirements-hipblas.txt",
"chars": 236,
"preview": "--extra-index-url https://download.pytorch.org/whl/rocm6.4\ntorch==2.8.0+rocm6.4\ntorchvision==0.23.0+rocm6.4\ngit+https://"
},
{
"path": "backend/python/diffusers/requirements-intel.txt",
"chars": 270,
"preview": "--extra-index-url https://download.pytorch.org/whl/xpu\ntorch\ntorchvision\noptimum[openvino]\nsetuptools\ngit+https://github"
},
{
"path": "backend/python/diffusers/requirements-l4t12.txt",
"chars": 200,
"preview": "--extra-index-url https://pypi.jetson-ai-lab.io/jp6/cu129/\ntorch\ngit+https://github.com/huggingface/diffusers\ntransforme"
},
{
"path": "backend/python/diffusers/requirements-l4t13.txt",
"chars": 206,
"preview": "--extra-index-url https://download.pytorch.org/whl/cu130\ntorch\ngit+https://github.com/huggingface/diffusers\ntransformers"
},
{
"path": "backend/python/diffusers/requirements-mps.txt",
"chars": 161,
"preview": "torch==2.7.1\ntorchvision==0.22.1\ngit+https://github.com/huggingface/diffusers\nopencv-python\ntransformers\naccelerate\ncomp"
}
]
// ... and 1087 more files (download for full content)
About this extraction
This page contains the full source code of the mudler/LocalAI GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1287 files (13.0 MB), approximately 3.5M tokens, and a symbol index with 6071 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.