[project] name = "ai-workspace" version = "0.1.0" description = "AI Workspace: kontextgebundene KI-Arbeitsplattform" requires-python = ">=3.12" dependencies = [ "fastapi>=0.115", "uvicorn>=0.32", "sqlalchemy>=2.0.36", "alembic>=1.14", "psycopg[binary]>=3.2", "jinja2>=3.1", "python-multipart>=0.0.20", "pydantic-settings>=2.6", "cryptography>=50.0.2", "openai>=3.36.0", "argon2-cffi>=25.1.0", "httpx>=0.28", "mcp>=2.3.0", "jsonschema>=4.26.0", "markdown-it-py>=4.2.0", "nh3>=0.3.7", "duckdb>=2.0.0", "prometheus-client>=0.26.0", "pyyaml>=6.0.3", ] [project.scripts] aiw = "app.cli:main" [dependency-groups] dev = [ "pytest>=8.3", "httpx>=0.28", # Für den DB-Dienst Oracle (services/db-mcp) in der Entwicklung und für tests/test_db_service.py "oracledb>=3", "ruff>=0.17.2", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["app"] [tool.pytest.ini_options] testpaths = ["tests"] [tool.ruff] line-length = 120 target-version = "py313" extend-exclude = ["app/migrations/versions"] [tool.ruff.lint] select = ["E", "W", "F", "B", "I", "UP", "SIM", "RUF100"] ignore = [ "E731", # kurze Lambdas als lokale Helfer sind gewollt "B008", # FastAPI-Abhängigkeiten in Standardwerten "SIM108", # Ternär nicht erzwingen ] [tool.ruff.lint.per-file-ignores] # Fixtures aus anderen Testmodulen werden importiert und als Parameter wiederverwendet "tests/*" = ["F811", "B011"] [tool.ruff.lint.pycodestyle] # Ziel bleibt 120; bis 140 kein Fund, wo ein Umbruch nicht lesbarer wäre max-line-length = 140 [tool.ruff.lint.isort] known-first-party = ["app", "helpers"]