Repository navigation
Expand file tree
/
Copy pathpyproject.toml
More file actions
71 lines (63 loc) · 2.84 KB
/
Copy pathpyproject.toml
File metadata and controls
71 lines (63 loc) · 2.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
[build-system]
requires = ["setuptools>=64.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "DMI"
version = "1.2.0"
description = "A decoupled, asynchronous observation substrate for high-speed LLM inference."
requires-python = ">=3.10"
dynamic = ["dependencies"]
[project.optional-dependencies]
s3 = ["boto3>=1.40,<2"]
# DMI-configurator. A normal DMI install does not pull in a web framework.
# JSON only -- the browser reads files itself and posts their contents, so
# there is no multipart/form-data surface to support. httpx (used by
# fastapi.testclient) is already a core runtime dependency.
ui = [
"fastapi>=0.115",
"uvicorn>=0.30",
]
# Resolving a bare model directory or Hugging Face model id (`dmi ui
# Qwen/Qwen3-8B`, `dmi describe-model ./Qwen3-8B`) reads its config via
# `transformers.AutoConfig`. Pointing at a `config.json` directly needs none
# of this -- see src/dmi/configuration/introspect.py.
hf = [
"transformers>=4.40",
]
[project.scripts]
dmi = "dmi.cli:main"
[tool.setuptools.dynamic]
dependencies = { file = ["requirements.txt"] }
[tool.setuptools]
include-package-data = true
package-dir = {"" = "src"}
[tool.setuptools.package-data]
# DMI-configurator's browser assets ship with the package; there is no build step.
"dmi.ui" = ["static/*"]
[tool.setuptools.packages.find]
# Runtime code has one canonical namespace. Native sources and external
# repositories live under ``native/`` and ``third_party/``.
where = ["src"]
include = ["dmi*"]
[tool.pytest.ini_options]
# `manual` tools and native-ring sources are not collected by default. The
# lightweight PR gate should select true CPU tests explicitly:
# python -m pytest -m "cpu" -q
addopts = "-ra -m 'not manual'"
pythonpath = ["src"]
norecursedirs = ["tests/tools", "tests/native", ".venv", "native", "third_party", "build"]
markers = [
"cpu: pure-CPU contract/unit test (no CUDA / ClickHouse / model weights / native extension build required)",
"gpu: requires a CUDA device",
"multi_gpu: requires >= 2 CUDA devices (TP / EP / routing)",
"e2e: end-to-end pipeline through the native backend + host engine",
"clickhouse: requires a reachable ClickHouse instance",
"hf: requires HuggingFace weights / model cache",
"native_backend: requires the DMI native backend .so importable/built; no GPU necessarily",
"framework_fork: requires vendored/modified framework forks importable",
"ring_native: native CUDA ring tests built via tests/native/ring/Makefile (needs nvcc)",
"slow: tests that take more than ~30 s (per-hook isolation full sweep, large E2E sweeps); skipped by default unless `-m slow` is passed",
"manual: investigation / tooling, not a regression gate; not collected by default",
"garage: requires a reachable Garage S3-compatible endpoint",
"numeric: per-hook numeric-difference study (drift vs the unhooked baseline)",
]