-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
120 lines (112 loc) · 5.58 KB
/
Copy pathpyproject.toml
File metadata and controls
120 lines (112 loc) · 5.58 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
[project]
name = "maestro"
version = "1.0.2"
description = "MAESTRO - Multi-Agent Evaluation for Structured Relational Output. Thesis artifact comparing orchestration frameworks for relational visualization."
readme = "README.md"
license = { text = "MIT" }
requires-python = ">=3.11,<3.12"
authors = [
{ name = "Colin Bolli", email = "colin.bolli@stud.fhgr.ch" }
]
keywords = ["multi-agent", "llm", "visualization", "orchestration", "thesis"]
dependencies = [
# When adding a runtime-relevant dep here, also add it to _LIB_WHITELIST
# in src/maestro/db/environment.py so its installed version is captured
# in run_environments.lib_versions for every experiment invocation.
# Pure dev tooling (pytest, ruff under [project.optional-dependencies])
# is exempt: it does not affect experiment results.
# Core
"python-dotenv>=1.2.2",
"pydantic>=2.13.3",
"anthropic>=0.88",
"openai>=2.30",
# 2.4.6 was a compromised release (TanStack supply-chain incident); 2.4.7+
# restructured the SDK layout: `Mistral` and `SDKError` moved out of the
# package root. Pin >=2.4.7 to enforce both: skip-the-bad-release and
# match-the-import-paths-this-code-uses.
"mistralai>=2.4.7",
"google-genai>=1.75.0",
"crewai>=1.6.1",
"langgraph>=1.1.10",
# Provider-level retry with exponential backoff (see providers/_retry.py).
# Already pulled in transitively by langgraph/crewai but declared
# explicitly so it doesn't silently disappear on a transitive bump.
# >=8.1.0: that release introduced `wait_exponential_jitter`, which
# _retry.py imports directly. 8.0.x lacks the symbol.
"tenacity>=9.1.4",
# Statistical analysis pipeline (src/maestro/analysis/statistics.py).
# statsmodels provides the factorial ANOVA (ols + anova_lm) and Tukey
# HSD used for the thesis-grade analysis; pandas is its tabular input
# layer (and statsmodels pulls it in regardless) so we depend on it
# explicitly rather than relying on the transitive pin. scipy arrives
# transitively via statsmodels and is not declared here directly.
"statsmodels>=0.15.0",
# pandas 3.0.4 was yanked from PyPI; 3.0.3 is the latest non-yanked release.
"pandas>=3.0.5",
# scipy is a transitive dependency of statsmodels (it supplies the
# underlying distributions for the F-test, Tukey HSD, etc.), so its
# version materially affects the statistics output. Not declared as a
# direct dependency, but listed in _LIB_WHITELIST (db/environment.py) so
# its installed version is captured in run_environments.lib_versions.
# Visualizer (src/maestro/viz/): a Streamlit dashboard reading the
# experiment DB read-only. Kept in core (not an extra) because this is a
# single-image monorepo: the container serves the experiment OR the viz,
# never both at once, and the extra footprint is negligible at the scale
# Docker already handles. One install (pip install -e .) covers everything.
#
# Charts are rendered with matplotlib (displayed via st.pyplot), not a
# browser-component library: the thesis deliverable is static,
# publication-quality figures, and matplotlib gives one style system for
# both the dashboard and the embedded thesis figures with no
# browser-component fragility.
"streamlit>=1.63.0,<2.0",
"matplotlib>=3.11.1,<4",
# Windows-only: provides the IANA timezone database that zoneinfo
# (used by analysis/timestamps.py) needs at runtime. macOS and most
# Linux distros ship the DB with the OS, so this is a no-op there:
# the environment marker keeps the install footprint unchanged
# on the development OS. Without this, a Windows reviewer running
# the timestamp tests (or the analysis layer once #19/#24 ship)
# would hit ZoneInfoNotFoundError on every named zone.
"tzdata; sys_platform == 'win32'",
]
[project.optional-dependencies]
# Dev tooling - install with: pip install -e ".[dev]"
dev = [
"pytest>=9.1.1",
# Cap below 0.16: that release turned on formatting of Python inside
# markdown fences by default, which reformats doc code blocks (and
# misreads illustrative fragments, e.g. a trailing-comma snippet as a
# tuple). Adopt it deliberately later with an explicit config, not via a
# floating CI install. The pre-commit rev tracks this bound in lockstep.
"ruff>=0.15.22,<0.16",
# Strips notebook outputs/exec-counts/metadata; also wired as a pre-commit
# hook. Here so the CLI is available to strip a notebook on demand.
"nbstripout>=0.9.1",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src/maestro"]
[tool.ruff]
line-length = 88
target-version = "py311"
[tool.ruff.lint]
select = ["E", "F", "I", "W"]
[tool.ruff.lint.per-file-ignores]
# run.py deliberately calls load_dotenv() and sets CrewAI env vars before
# importing strategy modules: those imports must see the configured
# environment, so they cannot move to the top of the file.
"src/maestro/run.py" = ["E402"]
# experiment_config.py is a data registry: each InputFile carries a one-line
# human description of the diagram. These are intentionally long prose strings
# where wrapping would hurt readability, so line length is not enforced here.
"src/maestro/experiment_config.py" = ["E501"]
# prompts.py holds the canonical Mermaid output contract: each rule is a single
# prose line shown to the model verbatim. Wrapping a rule would split it across
# bullets in the rendered prompt, so line length is not enforced here.
"src/maestro/prompts.py" = ["E501"]
[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["src"]