Files

121 lines
2.7 KiB
TOML

[project]
name = "ragcore"
version = "1.2.1"
description = "Central, secure, local-first RAG platform"
readme = "README.md"
requires-python = ">=3.13,<3.14"
license = { text = "Proprietary" }
authors = [{ name = "ITWorx" }]
dependencies = [
"fastapi>=0.116,<1",
"pydantic-settings>=2.10,<3",
"uvicorn[standard]>=0.35,<1",
]
[project.optional-dependencies]
control = [
"alembic>=1.16,<2",
"psycopg[binary,pool]>=3.2,<4",
"sqlalchemy[asyncio]>=2.0.41,<3",
]
retrieval = [
"httpx>=0.28,<1",
"qdrant-client>=1.15,<2",
]
ingestion = [
"docling>=2.117,<2.118",
"python-multipart>=0.0.20,<1",
]
auth = [
"httpx>=0.28,<1",
"pyjwt[crypto]>=2.10,<3",
]
telemetry = [
"opentelemetry-api>=1.27,<2",
"opentelemetry-sdk>=1.27,<2",
"opentelemetry-exporter-otlp-proto-http>=1.27,<2",
]
web = [
"jinja2>=3.1.6,<4",
"python-multipart>=0.0.20,<1",
]
mcp = [
"mcp>=1.12,<3",
]
[dependency-groups]
dev = [
"mypy>=1.17,<2",
"pytest>=8.4,<9",
"pytest-asyncio>=1.1,<2",
"pytest-cov>=6.2,<7",
"pyyaml>=6.0.2,<7",
"ruff>=0.12,<1",
"types-pyyaml>=6.0.12,<7",
"httpx>=0.28,<1",
"playwright>=1.62.0",
"ragcore-sdk",
]
[project.scripts]
ragcore = "ragcore.main:run"
ragcore-worker = "ragcore.worker:run"
ragcore-mcp = "ragcore.mcp.main:run"
ragcore-modelforge-shadow = "ragcore.ops.modelforge_shadow:run"
ragcore-modelforge-evaluate = "ragcore.ops.modelforge_evaluate:run"
ragcore-modelforge-rerank-evaluate = "ragcore.ops.modelforge_rerank_evaluate:run"
ragcore-modelforge-selected-comparison = "ragcore.ops.modelforge_selected_comparison:run"
ragcore-modelforge-embedding-cutover = "ragcore.ops.modelforge_embedding_cutover:run"
ragcore-modelforge-embedding-bootstrap = "ragcore.ops.modelforge_embedding_bootstrap:run"
[build-system]
requires = ["uv_build>=0.8,<1"]
build-backend = "uv_build"
[tool.uv.build-backend]
module-name = "ragcore"
module-root = "src"
[tool.uv.workspace]
members = ["sdk/python"]
[tool.uv.sources]
ragcore-sdk = { workspace = true }
[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "-ra --strict-markers --strict-config"
asyncio_mode = "auto"
markers = [
"integration: requires disposable infrastructure",
"security: authorization or adversarial security test",
"evaluation: retrieval/generation quality gate",
]
[tool.ruff]
target-version = "py313"
line-length = 100
src = ["src", "tests", "scripts"]
[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B", "SIM", "ASYNC", "S", "RUF"]
ignore = ["S101"]
[tool.ruff.lint.per-file-ignores]
"tests/**" = ["S105", "S106"]
"scripts/**" = ["S603", "S607"]
[tool.mypy]
python_version = "3.13"
strict = true
mypy_path = "src"
plugins = ["pydantic.mypy"]
[tool.coverage.run]
branch = true
source = ["ragcore"]
[tool.coverage.report]
show_missing = true
fail_under = 80