Files
wehub-resource-sync 426e9eeabd
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Waiting to run
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Waiting to run
Build Agent Image / build-and-push (push) Waiting to run
Chat shell gestures / Chat shell gesture + parity e2e (push) Waiting to run
ci / test (push) Waiting to run
ci / lint-and-format (push) Waiting to run
ci / build (push) Waiting to run
ci / dev-startup (push) Waiting to run
Cloud Gateway Discord / Test (push) Waiting to run
Cloud Gateway Webhook / Test (push) Waiting to run
Cloud Tests / lint-and-types (push) Waiting to run
Cloud Tests / unit-tests (push) Waiting to run
Cloud Tests / integration-tests (push) Waiting to run
Cloud Tests / e2e-tests (push) Blocked by required conditions
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Deploy Apps Worker (Product 2) / Determine environment (push) Waiting to run
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Blocked by required conditions
Deploy Eliza Provisioning Worker / Determine environment (push) Waiting to run
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Blocked by required conditions
Dev Smoke / Classify changed paths (push) Waiting to run
Dev Smoke / bun run dev onboarding chat (push) Blocked by required conditions
Dev Smoke / Vite HMR dependency-level smoke (push) Blocked by required conditions
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Waiting to run
gitleaks / gitleaks (push) Waiting to run
Markdown Links / Relative Markdown Links (push) Waiting to run
Publish @elizaos/example-code / check_npm (push) Waiting to run
Publish @elizaos/example-code / publish_npm (push) Blocked by required conditions
Publish @elizaos/plugin-elizacloud / verify_version (push) Waiting to run
Publish @elizaos/plugin-elizacloud / publish_npm (push) Blocked by required conditions
Quality (Extended) / Homepage Build (PR smoke) (push) Waiting to run
Quality (Extended) / Comment-only diff guard (push) Waiting to run
Quality (Extended) / Format + Type Safety Ratchet (push) Waiting to run
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Waiting to run
Quality (Extended) / Develop Gate (lint) (push) Waiting to run
Sandbox Live Smoke / Sandbox live smoke (push) Waiting to run
Snap Build & Test / Build Snap (amd64) (push) Waiting to run
Snap Build & Test / Build Snap (arm64) (push) Waiting to run
supply-chain / sbom (push) Waiting to run
supply-chain / vulnerability-scan (push) Waiting to run
Build, Push & Deploy to Phala Cloud / build-and-push (push) Waiting to run
Test Packaging / Validate Packaging Configs (push) Waiting to run
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Waiting to run
Test Packaging / Pack & Test JS Tarballs (push) Waiting to run
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Waiting to run
UI Fixture E2E / ui-fixture-e2e (push) Waiting to run
UI Fixture E2E / fixture-e2e (push) Waiting to run
UI Story Gate / story-gate (push) Waiting to run
vault-ci / test (macos-latest) (push) Waiting to run
vault-ci / test (ubuntu-latest) (push) Waiting to run
vault-ci / test (windows-latest) (push) Waiting to run
vault-ci / app-core wiring tests (push) Waiting to run
verify-patches / verify patches/CHECKSUMS.sha256 (push) Waiting to run
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Waiting to run
Voice Benchmark Smoke / voice bench smoke summary (push) Blocked by required conditions
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Waiting to run
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Waiting to run
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Waiting to run
Test Packaging / Build & Test PyPI Package (push) Waiting to run
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:43:05 +08:00

206 lines
9.4 KiB
TOML

[project]
name = "eliza-training"
version = "0.1.0"
description = "Fine-tuning pipeline for Eliza-1 on Eliza-native Vercel AI SDK trajectory rows."
readme = "README.md"
requires-python = ">=3.11,<3.13"
dependencies = [
# 1.13.0 has a one-file LFS upload typo in _upload_lfs_files
# (`filtered_tool_calls` vs `filtered_actions`) that breaks large GGUF
# publishes when Xet is disabled. Keep Hub publishing on the fixed line.
"huggingface-hub>=1.14.0",
"datasets>=3.2.0",
"pandas>=2.2.0",
"pyyaml>=6.0.2",
"jinja2>=3.1.0",
"pyarrow>=18.0.0",
# NB: anthropic is also a top-level dep because data-synth scripts call
# the Claude API. The reward-fn AI judge is gated by an env var, so the
# scripts/eliza_reward_fn.py path never imports anthropic unless asked.
"anthropic>=0.40.0",
"tiktoken>=0.8.0",
"argostranslate>=1.11.0",
# Argos Translate 1.11.0 requires this exact Stanza release. Declaring the
# transitive pin keeps uv/Dependabot from proposing an unsatisfiable upgrade.
"stanza==1.10.1",
"httpx>=0.27.0",
# PolarQuant's Lloyd-Max centroid generation imports scipy.stats.norm
# directly; keep it in the base training environment so smoke tests and
# dry-run recipe generation do not depend on optional train extras.
"scipy>=1.17.0",
# Property-based testing for the privacy filter contract. Lightweight
# pure-Python dep; pinned only at the floor to match the rest of the
# test stack (pytest>=8).
"hypothesis>=6.100.0",
]
[project.optional-dependencies]
train = [
# torch>=2.5,<2.12 — uv picks the wheel matching whatever vllm 0.20.x
# resolves to (torch 2.11+cu130 in practice) when --extra serve is
# also selected (smoke), and 2.10+cu126 when train is alone (Vast
# SFT path). Both wheels run on Vast Blackwell driver 570.x.
"torch>=2.5.0,<2.13",
"transformers>=4.46.0",
"accelerate>=1.1.0",
"peft>=0.14.0",
"trl>=0.13.0",
"datasets>=3.2.0",
"wandb>=0.18.0",
"apollo-torch>=1.0.3",
# TurboQuant (arXiv:2504.19874) — runtime KV-cache compression.
# PyPI distribution name is `turbokv`; the import name is `turboquant`.
# This is the pure-PyTorch reference path (slow but architecture-portable).
"turbokv>=0.1.0",
# fused-turboquant — Triton-kernel implementation of the same TurboQuant
# scheme. Same memory win as turbokv 0.1.0; meant to recover the ~5x
# throughput regression from the pure-PyTorch encode/decode loop. Requires
# head_dim ∈ {64, 128, 256}; auto-falls-through to turbokv on architectures
# the patcher rejects. JIT compile of Triton's CUDA helper needs system
# `python3.x-dev` headers — see scripts/quantization/README.md.
"fused-turboquant>=0.1.0",
# QJL kernel build deps. The kernel itself is *vendored* under
# scripts/quantization/qjl/ from
# https://github.com/amirzandieh/QJL @648b3641 (Apache 2.0). It is NOT
# pip-installable — the user must run
# `cd scripts/quantization/qjl && python setup.py build_ext --inplace`
# after installing nvcc + python-dev system packages
# (`sudo apt install nvidia-cuda-toolkit python3.12-dev`). pybind11
# is needed at C++ template-binding time. There is no pyqjl package
# on PyPI; do not add one.
"pybind11>=2.12.0",
# Liger kernel — fused chunked cross-entropy + RMSNorm/SwiGLU/RoPE
# kernels. Cuts the fp32-logits transient at training time (Gemma 4
# vocab=262k makes this dominant) so we can push local training seq_len
# from ~2k to ~8k on the same 16 GB budget.
"liger-kernel>=0.5.0",
# GGUF Q4_K_M quantization (scripts/quantization/gguf-q4_k_m_apply.py).
# The wrapper uses the in-repo llama.cpp fork submodule at
# plugins/plugin-local-inference/native/llama.cpp (its convert_hf_to_gguf.py + a one-shot
# CPU cmake build of llama-quantize/llama-cli — see the script's
# _VENDOR_HINT), but the llama-cpp-python wheel also ships a usable
# `gguf` python module so the HF→f16 GGUF convert step works even
# without that build. The Q4_K_M *quantize* step still needs a real
# `llama-quantize` binary. NOTE: the custom GGML types Q4_POLAR/QJL1_256/
# TurboQuant are only in the fork — same submodule, or $LLAMA_CPP_DIR.
"llama-cpp-python>=0.3.0",
# convert_hf_to_gguf.py imports `gguf` AND `mistral_common` at module
# load — both must be installed or the HF→GGUF convert step dies on
# import. The fork's requirements/requirements-convert_hf_to_gguf.txt
# also installs these, but pin them here so `uv run --extra train`
# works standalone.
"gguf>=0.10.0",
"mistral_common>=1.8.3",
# pytest is consumed by the pre-flight gate (scripts/preflight.sh) and
# by the CPU-only unit tests it sweeps.
"pytest>=8.0.0",
# The RL scenario-pool tests use @pytest.mark.asyncio; collected in
# tests/rl/ and gated by tests/rl/conftest.py compat shim.
"pytest-asyncio>=1.0.0",
]
rl = [
# ByteDance verl — GRPO trainer with bundled vLLM/SGLang rollout server,
# FSDP+Megatron training backends, and verifiable-reward registry. Stage 2
# of RL_STRATEGY.md uses the python-callable reward path
# (`custom_reward_function`) to invoke scripts/eliza_reward_fn.py:compute_score
# per rollout. Pin a known-good window — the 0.5.x → 0.7.x line introduced
# `custom_reward_function` as a top-level config field; older releases used
# `reward_score.compute_score` registry imports. Both still work with the
# script we ship; the upper bound is just paranoid.
"verl>=0.5.0,<0.8.0",
# GRPO trainer needs vLLM for rollouts; pin separately so users running RL
# without serving don't have to install the full `serve` extra (which has
# an incompatible torch ABI). vllm>=0.6 is what verl 0.5+ requires.
"vllm>=0.6.0,<0.8.0",
# Atropos — continuous RL environment server. Drives the GRPO loop in
# scripts/rl/atropos_trainer.py against eliza-native trajectory JSONL
# exports under $ELIZA_STATE_DIR/trajectories. Config:
# packages/training/config/atropos.yaml.
"atroposlib>=0.1.0",
# LiteLLM — OpenAI-compatible client used by the RLAIF judge path to talk
# to cerebras/gpt-oss-120b and the Nebius testing harness from a single
# surface.
"litellm>=1.0.0",
# Kondo-gate selective backprop kernel — referenced by atropos.yaml
# (use_kondo: true). Pinned independent of the train/serve torch line.
"kondo-gate>=0.1.0",
]
rl-tinker = [
# Thinking Machines Tinker SDK — managed RL training as a service.
# Optional alternative to the local verl path; entry point lives in
# scripts/rl/tinker/tinker_trainer.py and is driven by
# packages/training/config/tinker.yaml. Kept under its own extra so the
# local-only RL path doesn't pull a network-dependent SDK.
"tinker>=0.1.0",
]
reward = [
# AI-judge path inside scripts/eliza_reward_fn.py (gated on
# ELIZA_REWARD_USE_AI_JUDGE=1). Listed separately so a slim RL worker that
# only runs verifiable rewards doesn't need to ship the SDK.
"anthropic>=0.40.0",
]
# vastai and heretic-llm are installed separately (not in train extra) —
# vastai (provisioning CLI) lives on the local dev box and pulls in an
# ancient python-dateutil pin; heretic-llm (refusal-direction abliteration)
# wants psutil>=7.1 which clashes with vastai. Keep them out of the
# resolution graph; install with `uv tool install vastai` and
# `pip install heretic-llm` on the abliteration box.
serve = [
# vLLM 0.18+ ships EAGLE-3 speculative decoding (PR #38280 era), the
# TurboQuant K/V quantization plugin, FP8 KV cache via FlashAttention 3
# on sm_90, and continuous batching needed by the Gemma-era serve harness.
# Pin a minor floor that captures all of these. See
# scripts/inference/serve_vllm.py for the canonical flag set per model +
# GPU target.
"vllm>=0.20.0,<0.21.0",
# `vllm-flash-attn` is bundled with vLLM 0.20+; add explicitly so the
# constraint solver doesn't pull a stale wheel from a transitive dep.
"transformers>=4.46.0",
# OpenAI client used by scripts/inference/test_apc_mtp_tool_calls.py to
# speak vLLM's OpenAI-compatible chat completions endpoint. The harness
# is the production gate that unlocks `ELIZA_APC_DRAFTER_VERIFIED=1` on
# any new vLLM build for the Gemma 4 assistant-drafter MTP path.
"openai>=1.50.0",
]
[tool.pytest.ini_options]
# Tests reach into the repo via `from scripts.training.memory_calc import …`.
# That requires the repo root on sys.path; pytest's `rootdir` autodiscovery
# alone is not enough. `pythonpath = ["."]` makes the repo importable from
# every test invocation, including the pre-flight gate (scripts/preflight.sh).
pythonpath = ["."]
testpaths = ["scripts", "benchmarks", "tests"]
addopts = "-q"
asyncio_mode = "auto"
markers = [
"asyncio: marks tests as asyncio (handled by pytest-asyncio)",
]
[tool.uv]
package = false
# `rl` (verl) pulls a vllm whose torch pin window conflicts with both
# `train` and `serve`, so keep `rl` isolated. `train` and `serve` are
# NOT declared as conflicting — they share a single torch 2.11+cu130
# wheel in practice (vllm 0.20.x ships that, train deps float to it).
# The local end-to-end smoke (smoke_full_stack.sh) needs both extras
# in one venv; declaring them conflicting breaks that. The Vast SFT
# path installs only `--extra train` and is unaffected.
conflicts = [
[
{ extra = "train" },
{ extra = "rl" },
],
[
{ extra = "serve" },
{ extra = "rl" },
],
# rl-tinker (cloud SDK) and the local verl/vllm RL path target the same
# config surface but should not coexist in a single venv — Tinker brings
# its own torch ABI assumptions and its rollouts are remote.
[
{ extra = "rl" },
{ extra = "rl-tinker" },
],
]