-
Notifications
You must be signed in to change notification settings - Fork 41
Expand file tree
/
Copy pathpyproject.toml
More file actions
135 lines (121 loc) · 4.74 KB
/
Copy pathpyproject.toml
File metadata and controls
135 lines (121 loc) · 4.74 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
[project]
name = "litereality-agent"
version = "0.0.1"
description = "Resumable scene reconstruction from a RoomPlan capture to editable Room.py and Room.glb."
readme = "README.md"
requires-python = ">=3.10,<3.13"
license = { file = "LICENSE" }
authors = [{ name = "Zhening Huang" }, { name = "LiteReality contributors" }]
keywords = ["3d-scene", "reconstruction", "agentic", "roomplan", "trellis", "blender"]
classifiers = [
"Development Status :: 3 - Alpha",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Multimedia :: Graphics :: 3D Modeling",
]
dependencies = [
"numpy",
"pillow",
"pydantic>=2.0.0",
"pydantic-settings>=2.10.0",
"rich>=13.7.0",
# model providers
"anthropic>=0.40.0",
"openai>=1.40.0",
"google-genai>=1.0.0",
"claude-agent-sdk",
# init / preprocessing (DINO, projection, meshes)
"trimesh>=4.0",
"opencv-python",
"tqdm",
"open3d",
# QC true-mesh collision. NOT optional: publish runs `room_qc.correct` on every default run and
# only records a warning if it exits non-zero, so a missing FCL turned the deterministic clash
# gate into a silent no-op. Prebuilt wheels exist for every interpreter and platform we support,
# so this costs a few MB and no compiler — cheaper than shipping a gate that quietly does nothing.
"python-fcl",
"networkx",
# Sim-ready object physics. NOT optional, for the same reason as python-fcl above and with a
# nastier failure: without `coacd` every concave link falls back to its own convex hull and the
# gate still reports a clean pass, so a cupboard silently becomes a solid block and a drawer a
# brick — the exact failure the decomposition exists to prevent, invisible in the report.
# Without `mujoco` the drop/release/tilt gate cannot run at all, while the physics json and
# URDF are still written, so the output looks complete and was never checked. Both ship
# prebuilt wheels for every interpreter and platform we support.
"coacd",
"mujoco",
# viewer (later)
"fastapi>=0.111.0",
"uvicorn>=0.30.0",
]
[project.optional-dependencies]
modal = ["modal>=1.3,<2"]
# Heavy local models run in their OWN env (isolated subprocess workers); install these only
# in that env, NOT the light loop/agent env.
detect = ["torch", "torchvision", "transformers"] # GroundingDINO detect + DINOv2 grouping (torchvision required by DINOv2 image processor)
gen3d = ["torch", "trimesh"] # TRELLIS (gen3d role) — later
[project.urls]
Repository = "https://github.com/ZheningHuang/LiteReality-Agent"
Issues = "https://github.com/ZheningHuang/LiteReality-Agent/issues"
[project.scripts]
litereality = "litereality_agent.cli:main"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src/litereality_agent"]
[tool.hatch.build.targets.sdist]
exclude = [
"/.claude",
"/.github",
"/.mypy_cache",
"/.pytest_cache",
"/.ruff_cache",
"/.uv-cache",
"/.venv",
"/data",
"/dist",
"/run",
"/output_objinit_test",
"/scans_uploaded",
"/weights",
]
[dependency-groups]
dev = [
"pre-commit>=4.2.0",
"pytest>=8.4.0",
"pytest-xdist>=3.8.0",
"ruff>=0.11.0",
]
[tool.uv]
required-version = ">=0.9.17"
[tool.pytest.ini_options]
testpaths = ["tests"]
# The default run must stay offline and fast, so it is worth running before every commit. Anything
# needing Blender, a real scan, or a paid model call is opt-in by marker.
addopts = "-m 'not blender and not scan and not live' --strict-markers"
markers = [
"blender: needs a Blender install ($LITEREALITY_BLENDER) — run with `-m blender`",
"scan: needs real scan data under scans_uploaded/ — run with `-m scan`",
"live: makes paid model calls — run with `-m live`",
]
[tool.ruff]
line-length = 100
target-version = "py310"
extend-exclude = ["data", "run", "run-*", "output_objinit_test", "scans_uploaded", "weights",
"src/litereality_agent/pipeline/scene_init/ingest/preprocessing/vendor",
"third_party", "legacy"]
[tool.ruff.lint]
select = ["E", "F", "I"]
ignore = ["E501"]
[tool.ruff.lint.per-file-ignores]
# Vendored/ported math + Blender helpers — keep their original style instead of risking edits.
"src/litereality_agent/agent/tools/shared/image_selection/**/*.py" = ["E741", "E402", "E731"]
"src/litereality_agent/models/object_generation/articulated-glb-agent/**/*.py" = ["F841", "I001"]
"src/litereality_agent/models/trellis/inference.py" = ["I001"]
[tool.ruff.format]
quote-style = "double"
indent-style = "space"