-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
144 lines (132 loc) · 5.04 KB
/
pyproject.toml
File metadata and controls
144 lines (132 loc) · 5.04 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
136
137
138
139
140
141
142
143
144
# hatchling 1.30.0 (released 2026-06-01) emits ``Metadata-Version: 2.5``
# per PEP 770, but ``pypa/gh-action-pypi-publish@v1.14.0`` ships
# ``twine==6.1.0`` which only recognises up to 2.4 and rejects the wheel
# at preflight. Cap below 1.30 until the publish action picks up a
# twine that knows about 2.5. Drop the cap when that lands.
[build-system]
requires = ["hatchling<1.30"]
build-backend = "hatchling.build"
[project]
name = "openarmature"
version = "0.11.0"
description = "Workflow framework for LLM pipelines and tool-calling agents."
readme = "README.md"
requires-python = ">=3.12"
authors = [{ name = "Chris Colinsky", email = "chris@lunarcommand.xyz" }]
license = "Apache-2.0"
license-files = ["LICENSE"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.12",
"Topic :: Software Development :: Libraries :: Python Modules",
"Typing :: Typed",
]
dependencies = [
"pydantic>=2.7",
"httpx>=0.27",
"jsonschema>=4.0",
"jinja2>=3.1",
]
[project.optional-dependencies]
# Spec observability §6 OTel mapping. Optional per charter §3.1
# principle 5 — backend mappings are pluggable rather than core
# dependencies. Plan to lift into a sibling ``openarmature-otel``
# package at v1.0 launch alongside ``openarmature-eval``.
otel = [
"opentelemetry-api>=1.27,<3",
"opentelemetry-sdk>=1.27,<3",
# Provides ``LoggingHandler`` after the SDK's deprecation
# of ``opentelemetry.sdk._logs.LoggingHandler``. No upper
# bound — the contrib repo cycles fast on minor releases
# below 1.0; revisit when 1.0 lands.
"opentelemetry-instrumentation-logging>=0.62.0b1",
]
# Spec observability §8 Langfuse mapping. Optional per charter §3.1
# principle 5; matches the [otel] extras' shape. Validated against
# Langfuse Python SDK 4.6.x; bridge from the SDK's v4 API onto the
# LangfuseClient Protocol lives in ``observability.langfuse.adapter``.
langfuse = [
"langfuse>=4.6,<5",
]
[project.urls]
Repository = "https://github.com/LunarCommand/openarmature-python"
Specification = "https://github.com/LunarCommand/openarmature-spec"
[project.scripts]
openarmature = "openarmature.cli:main"
[tool.openarmature]
spec_version = "0.38.0"
[dependency-groups]
dev = [
"pre-commit>=3.7",
"pyright>=1.1.360",
"pytest>=8.2",
"pytest-asyncio>=0.23",
"pytest-examples>=0.0.13",
"pyyaml>=6.0",
"ruff>=0.5",
"types-pyyaml",
# Used only by ``tests/integration/test_otel_hyperdx_export.py``
# against a live HyperDX endpoint. Not promoted to a public extras
# group yet: one downstream user, one destination; revisit when
# multiple users want OTLP-HTTP export packaged.
"opentelemetry-exporter-otlp-proto-http>=1.27,<3",
]
docs = [
"mkdocs>=1.6,<2",
"mkdocs-material[imaging]>=9.5,<10",
"mkdocstrings[python]>=0.27,<1",
"pymdown-extensions>=10.0,<11",
"mkdocs-glightbox>=0.4,<1",
"mkdocs-llmstxt>=0.1,<1",
]
# Deps for the runnable demos under ``examples/``. The demos call out to
# an OpenAI-compatible LLM endpoint, so ``openai`` is the one extra
# they need beyond the core package.
examples = [
"openai>=1.40",
]
# Self-references the project's public otel + langfuse extras so the
# observability backends can be defaulted into the local env: uv can
# default dependency groups but not extras.
observability = ["openarmature[otel,langfuse]"]
[tool.uv]
# Default-synced env for local work so a plain `uv run` (mkdocs
# serve, the examples, pytest) needs no per-command flags. Naming
# default-groups overrides uv's built-in ["dev"] default, hence "dev"
# is re-listed. The "observability" group carries the otel/langfuse
# extras, which uv otherwise can't default.
default-groups = ["dev", "docs", "examples", "observability"]
[tool.hatch.build.targets.wheel]
packages = ["src/openarmature"]
[tool.pyright]
include = ["src", "tests", "examples"]
pythonVersion = "3.12"
typeCheckingMode = "strict"
reportMissingTypeStubs = false
# Underscore-prefixed names are conventionally "package-private" — used
# across sibling modules within `openarmature.graph` but not part of the
# public API (which is enforced by `__all__`). Pyright's strict default
# treats them as module-private; turn it off so legitimate cross-module
# package-private imports don't need per-line ignores.
reportPrivateUsage = false
[tool.ruff]
line-length = 110
target-version = "py312"
extend-exclude = ["openarmature-spec"]
[tool.ruff.lint]
select = ["E", "F", "I", "B", "UP"]
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
# Opt-in markers for tests that hit real external services. CI skips
# these by default — run with `-m integration` to include them after
# setting the relevant env vars (LANGFUSE_PUBLIC_KEY / SECRET_KEY for
# Langfuse Cloud, etc).
markers = [
"integration: tests that exercise real external services (Langfuse Cloud, HyperDX). Skipped by default.",
]
addopts = ["-m", "not integration"]