diff --git a/orchestrators/imajin-app/pyproject.toml b/orchestrators/imajin-app/pyproject.toml index 985f927e..ea1c0fa7 100644 --- a/orchestrators/imajin-app/pyproject.toml +++ b/orchestrators/imajin-app/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "hatchling.build" name = "imajin-app" version = "1.0.0" description = "Imajin App - Main entry point for image generation services" -requires-python = ">=3.10" +requires-python = ">=3.12" license = "MIT" authors = [{ name = "Lilith", email = "dev@atlilith.com" }] keywords = ["imajin", "image-generation", "ml", "orchestration", "app"] @@ -16,18 +16,20 @@ dependencies = [ # API "fastapi>=0.115.0", "uvicorn[standard]>=0.32.0", - "pydantic>=2.0.0", + "pydantic>=2.10.0", "pydantic-settings>=2.6.0", # Service discovery (federated with lilith-platform) "lilith-service-addresses>=1.0.1", "pyyaml>=6.0", # Lilith service infrastructure - "lilith-service-fastapi-bootstrap>=2.3.0", + "lilith-service-fastapi-bootstrap>=3.0.0", "lilith-ml-exceptions>=0.1.0", # Batch pipeline orchestration "lilith-pipeline-framework>=1.0.0", # Face detection for focal points (GPU coordination handled by downstream services) "mediapipe>=0.10.0", + # Redis for batch job persistence + "redis>=5.0.0", # Database (PostgreSQL async) "asyncpg>=0.29.0", # Numpy for image processing @@ -35,7 +37,7 @@ dependencies = [ ] [project.optional-dependencies] -dev = ["pytest>=7.0", "pytest-asyncio>=0.21", "mypy>=1.0"] +dev = ["pytest>=9.0.0", "pytest-asyncio>=0.21", "mypy>=1.0"] [tool.hatch.build.targets.wheel] packages = ["src/imajin_app"] @@ -45,18 +47,18 @@ testpaths = ["tests"] asyncio_mode = "auto" [tool.mypy] -python_version = "3.11" +python_version = "3.12" strict = true warn_return_any = true warn_unused_configs = true [[tool.mypy.overrides]] -module = ["lilith_service_fastapi_bootstrap.*", "lilith_service_addresses.*", "lilith_ml_exceptions.*", "lilith_pipeline_framework.*", "mediapipe.*"] +module = ["lilith_service_fastapi_bootstrap.*", "lilith_service_addresses.*", "lilith_ml_exceptions.*", "lilith_pipeline_framework.*", "mediapipe.*", "redis.*"] ignore_missing_imports = true [tool.ruff] line-length = 100 -target-version = "py311" +target-version = "py312" src = ["src", "tests"] [tool.ruff.lint] diff --git a/orchestrators/imajin-pipeline/pyproject.toml b/orchestrators/imajin-pipeline/pyproject.toml index 6d1856d4..008e3c35 100644 --- a/orchestrators/imajin-pipeline/pyproject.toml +++ b/orchestrators/imajin-pipeline/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "hatchling.build" name = "imajin-pipeline" version = "1.0.0" description = "Imajin pipeline orchestrator - 7-stage image generation" -requires-python = ">=3.10" +requires-python = ">=3.12" license = "MIT" authors = [{ name = "Lilith", email = "dev@atlilith.com" }] keywords = ["imajin", "pipeline", "orchestration", "image-generation"] @@ -18,7 +18,7 @@ dependencies = [ # API "fastapi>=0.115.0", "uvicorn[standard]>=0.32.0", - "pydantic>=2.0.0", + "pydantic>=2.10.0", "pydantic-settings>=2.6.0", # Job storage "redis>=5.0.0", @@ -75,7 +75,7 @@ background_removal = [ "rembg>=2.0.50", # U2Net-based background removal ] all = ["imajin-pipeline[quality,moderation,anatomy_fix,watermark_removal,controlnet,flux,pulid,background_removal]"] -dev = ["pytest>=7.0", "pytest-asyncio>=0.21", "mypy>=1.0"] +dev = ["pytest>=9.0.0", "pytest-asyncio>=0.21", "mypy>=1.0"] [tool.hatch.build.targets.wheel] packages = ["src/image_pipeline"] @@ -91,14 +91,14 @@ markers = [ addopts = "-v --strict-markers" [tool.mypy] -python_version = "3.10" +python_version = "3.12" strict = true warn_return_any = true warn_unused_configs = true [tool.ruff] line-length = 100 -target-version = "py310" +target-version = "py312" src = ["src", "tests"] [tool.ruff.lint] diff --git a/services/imajin-aesthetic/service/pyproject.toml b/services/imajin-aesthetic/service/pyproject.toml index 05d51f90..bae30b62 100644 --- a/services/imajin-aesthetic/service/pyproject.toml +++ b/services/imajin-aesthetic/service/pyproject.toml @@ -10,12 +10,16 @@ dependencies = [ "torch>=2.2.0", "transformers>=4.40.0", "pillow>=10.0.0", - "pydantic>=2.9.0", + "pydantic>=2.10.0", "pydantic-settings>=2.6.0", "httpx>=0.27.0", "image-reward>=1.5", + "slowapi>=0.1.9", + # Observability + "structlog>=24.0.0", + "prometheus-fastapi-instrumentator>=7.0.0", # Lilith service infrastructure - "lilith-service-fastapi-bootstrap>=2.3.0", + "lilith-service-fastapi-bootstrap>=3.0.0", "lilith-ml-exceptions>=0.1.0", ] @@ -44,7 +48,7 @@ asyncio_default_fixture_loop_scope = "function" packages = ["src"] [tool.mypy] -python_version = "3.11" +python_version = "3.12" strict = true warn_return_any = true warn_unused_configs = true @@ -60,7 +64,7 @@ ignore_errors = true [tool.ruff] line-length = 100 -target-version = "py311" +target-version = "py312" src = ["src", "tests"] [tool.ruff.lint] diff --git a/services/imajin-diffusion/service/pyproject.toml b/services/imajin-diffusion/service/pyproject.toml index a310dc93..4d6c98f0 100644 --- a/services/imajin-diffusion/service/pyproject.toml +++ b/services/imajin-diffusion/service/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "hatchling.build" name = "imajin-diffusion-service" version = "0.1.0" description = "Imajin diffusion service - SDXL/Diffusers image generation" -requires-python = ">=3.10" +requires-python = ">=3.12" license = "MIT" authors = [{ name = "Lilith", email = "dev@atlilith.com" }] dependencies = [ @@ -24,16 +24,20 @@ dependencies = [ # Optional "httpx>=0.25.0", "redis>=5.0.0", + "slowapi>=0.1.9", + # Observability + "structlog>=24.0.0", + "prometheus-fastapi-instrumentator>=7.0.0", # GPU coordination "model-boss>=3.0.0", # Lilith service infrastructure - "lilith-service-fastapi-bootstrap>=2.3.0", + "lilith-service-fastapi-bootstrap>=3.0.0", "lilith-service-addresses>=1.1.0", "lilith-ml-exceptions>=0.1.0", ] [project.optional-dependencies] -dev = ["pytest>=7.0", "pytest-asyncio>=0.21", "httpx>=0.25.0"] +dev = ["pytest>=9.0.0", "pytest-asyncio>=0.21", "httpx>=0.25.0"] [tool.hatch.build.targets.wheel] packages = ["src"] @@ -51,7 +55,7 @@ markers = [ addopts = "-v --strict-markers" [tool.mypy] -python_version = "3.11" +python_version = "3.12" strict = true warn_return_any = true warn_unused_configs = true @@ -62,7 +66,7 @@ ignore_missing_imports = true [tool.ruff] line-length = 100 -target-version = "py311" +target-version = "py312" src = ["src", "tests"] [tool.ruff.lint] diff --git a/services/imajin-identity/service/pyproject.toml b/services/imajin-identity/service/pyproject.toml index 69b667ae..4628a825 100644 --- a/services/imajin-identity/service/pyproject.toml +++ b/services/imajin-identity/service/pyproject.toml @@ -2,7 +2,7 @@ name = "imajin-identity" version = "0.1.0" description = "Identity recognition service with face embedding, clustering, and photo organization" -requires-python = ">=3.11" +requires-python = ">=3.12" license = { text = "MIT" } authors = [{ name = "Lilith", email = "lilith@nasty.sh" }] keywords = ["face-recognition", "identity", "clustering", "insightface", "photo-organization"] @@ -29,11 +29,15 @@ dependencies = [ "numpy>=1.24", "opencv-python-headless>=4.8", + # Observability + "structlog>=24.0.0", + "prometheus-fastapi-instrumentator>=7.0.0", + # API "fastapi>=0.115.0", "uvicorn>=0.32.0", "httpx>=0.27.0", - "pydantic>=2.9.0", + "pydantic>=2.10.0", "pydantic-settings>=2.6.0", # CLI @@ -46,7 +50,7 @@ imajin-identity = "cli.main:app" [project.optional-dependencies] dev = [ - "pytest>=8.0.0", + "pytest>=9.0.0", "pytest-asyncio>=0.23.0", "pytest-cov>=4.1.0", "ruff>=0.1.0", @@ -82,7 +86,7 @@ packages = ["src"] [tool.ruff] line-length = 100 -target-version = "py311" +target-version = "py312" [tool.ruff.lint] select = ["E", "F", "W", "I", "UP", "B", "C4", "SIM"] diff --git a/services/imajin-moderator/client/pyproject.toml b/services/imajin-moderator/client/pyproject.toml index 11a1d268..5ee461f6 100644 --- a/services/imajin-moderator/client/pyproject.toml +++ b/services/imajin-moderator/client/pyproject.toml @@ -2,10 +2,10 @@ name = "imajin-moderator-client" version = "0.1.0" description = "Async Python client for imajin-moderator service" -requires-python = ">=3.11" +requires-python = ">=3.12" dependencies = [ "httpx>=0.27.0", - "pydantic>=2.9.0", + "pydantic>=2.10.0", ] [build-system] @@ -16,14 +16,14 @@ build-backend = "hatchling.build" packages = ["src"] [tool.mypy] -python_version = "3.11" +python_version = "3.12" strict = true warn_return_any = true warn_unused_configs = true [tool.ruff] line-length = 100 -target-version = "py311" +target-version = "py312" src = ["src", "tests"] [tool.ruff.lint] diff --git a/services/imajin-moderator/service/pyproject.toml b/services/imajin-moderator/service/pyproject.toml index d7fce40d..6b093228 100644 --- a/services/imajin-moderator/service/pyproject.toml +++ b/services/imajin-moderator/service/pyproject.toml @@ -2,12 +2,12 @@ name = "imajin-moderator-service" version = "0.1.0" description = "Multi-layer content moderation service with PDQ hashing, NSFW detection, and age estimation" -requires-python = ">=3.11" +requires-python = ">=3.12" dependencies = [ "fastapi>=0.115.0", "uvicorn>=0.32.0", "httpx>=0.27.0", - "pydantic>=2.9.0", + "pydantic>=2.10.0", "pydantic-settings>=2.6.0", "transformers>=4.40.0", "torch>=2.2.0", @@ -17,14 +17,18 @@ dependencies = [ "numpy>=1.26.0", "insightface>=0.7.3", "onnxruntime-gpu>=1.17.0", + "slowapi>=0.1.9", + # Observability + "structlog>=24.0.0", + "prometheus-fastapi-instrumentator>=7.0.0", # Lilith service infrastructure - "lilith-service-fastapi-bootstrap>=2.3.0", + "lilith-service-fastapi-bootstrap>=3.0.0", "lilith-ml-exceptions>=0.1.0", ] [project.optional-dependencies] dev = [ - "pytest>=8.0.0", + "pytest>=9.0.0", "pytest-asyncio>=0.23.0", "pytest-cov>=4.1.0", ] @@ -41,7 +45,7 @@ asyncio_mode = "auto" testpaths = ["tests"] [tool.mypy] -python_version = "3.11" +python_version = "3.12" strict = true warn_return_any = true warn_unused_configs = true @@ -52,7 +56,7 @@ ignore_missing_imports = true [tool.ruff] line-length = 100 -target-version = "py311" +target-version = "py312" src = ["src", "tests"] [tool.ruff.lint] diff --git a/services/imajin-prompt-generator/pyproject.toml b/services/imajin-prompt-generator/pyproject.toml index ec51925b..7684d750 100644 --- a/services/imajin-prompt-generator/pyproject.toml +++ b/services/imajin-prompt-generator/pyproject.toml @@ -7,19 +7,21 @@ name = "imajin-prompt-generator" version = "1.0.0" description = "Stage 2: SDXL prompt generation service" authors = [{name = "Lilith"}] -requires-python = ">=3.10" +requires-python = ">=3.12" dependencies = [ "fastapi>=0.115.0", "uvicorn[standard]>=0.32.0", "pydantic>=2.10.0", "pydantic-settings>=2.6.0", "httpx>=0.27.0", - "pyyaml>=6.0.2", + # Observability + "structlog>=24.0.0", + "prometheus-fastapi-instrumentator>=7.0.0", ] [project.optional-dependencies] dev = [ - "pytest>=8.0.0", + "pytest>=9.0.0", "pytest-asyncio>=0.24.0", "pytest-cov>=6.0.0", "mypy>=1.10.0", diff --git a/services/imajin-prompt/service/pyproject.toml b/services/imajin-prompt/service/pyproject.toml index a074fbd3..7f5ad4fc 100644 --- a/services/imajin-prompt/service/pyproject.toml +++ b/services/imajin-prompt/service/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "hatchling.build" name = "imajin-prompt-service" version = "0.1.0" description = "Imajin prompt service - LLM-powered image prompt generation" -requires-python = ">=3.10" +requires-python = ">=3.12" license = "MIT" authors = [{ name = "Lilith", email = "dev@atlilith.com" }] keywords = ["imajin", "prompt", "llm", "ollama", "fastapi"] @@ -15,8 +15,6 @@ classifiers = [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering :: Artificial Intelligence", ] @@ -24,17 +22,20 @@ dependencies = [ "fastapi>=0.115.0", "uvicorn[standard]>=0.32.0", "pydantic>=2.10.0", - "pyyaml>=6.0", + "pydantic-settings>=2.6.0", "tqftw-ollama-provider>=0.1.0", "model-boss[gguf]>=3.0.0", + # Observability + "structlog>=24.0.0", + "prometheus-fastapi-instrumentator>=7.0.0", # Lilith service infrastructure - "lilith-service-fastapi-bootstrap>=2.3.0", + "lilith-service-fastapi-bootstrap>=3.0.0", "lilith-ml-exceptions>=0.1.0", ] [project.optional-dependencies] dev = [ - "pytest>=7.0", + "pytest>=9.0.0", "pytest-asyncio>=0.23", "pytest-timeout>=2.3.0", "httpx>=0.27.0", @@ -66,14 +67,14 @@ filterwarnings = [ ] [tool.mypy] -python_version = "3.10" +python_version = "3.12" strict = true warn_return_any = true warn_unused_configs = true [tool.ruff] line-length = 100 -target-version = "py310" +target-version = "py312" src = ["src", "tests"] [tool.ruff.lint] diff --git a/services/imajin-request-classifier/pyproject.toml b/services/imajin-request-classifier/pyproject.toml index 538116fa..f6192f85 100644 --- a/services/imajin-request-classifier/pyproject.toml +++ b/services/imajin-request-classifier/pyproject.toml @@ -7,25 +7,27 @@ name = "imajin-request-classifier" version = "1.0.0" description = "Stage 1: Cultural classification for image generation requests" authors = [{name = "Lilith"}] -requires-python = ">=3.10" +requires-python = ">=3.12" dependencies = [ "fastapi>=0.115.0", "uvicorn[standard]>=0.32.0", "pydantic>=2.10.0", "pydantic-settings>=2.6.0", "httpx>=0.27.0", - "pyyaml>=6.0.2", "lilith-ollama-provider>=0.1.0", "model-boss>=3.0.0", + # Observability + "structlog>=24.0.0", + "prometheus-fastapi-instrumentator>=7.0.0", # Lilith service infrastructure - "lilith-service-fastapi-bootstrap>=2.3.0", + "lilith-service-fastapi-bootstrap>=3.0.0", "lilith-service-addresses[yaml]>=1.1.0", "lilith-ml-exceptions>=0.1.0", ] [project.optional-dependencies] dev = [ - "pytest>=8.0.0", + "pytest>=9.0.0", "pytest-asyncio>=0.24.0", "pytest-cov>=6.0.0", "mypy>=1.10.0", diff --git a/services/imajin-semantic/service/pyproject.toml b/services/imajin-semantic/service/pyproject.toml index f5bb6efa..47bf0974 100644 --- a/services/imajin-semantic/service/pyproject.toml +++ b/services/imajin-semantic/service/pyproject.toml @@ -10,15 +10,19 @@ dependencies = [ "torch>=2.2.0", "transformers>=4.40.0", "pillow>=10.0.0", - "pydantic>=2.9.0", + "pydantic>=2.10.0", "pydantic-settings>=2.6.0", "httpx>=0.27.0", + "slowapi>=0.1.9", + # Observability + "structlog>=24.0.0", + "prometheus-fastapi-instrumentator>=7.0.0", # GPU coordination via model-boss (zero-config) # Uses REDIS_URL env var (default: redis://localhost:6379) # Auto-estimates VRAM from model config "model-boss>=3.0.0", # Lilith service infrastructure - "lilith-service-fastapi-bootstrap>=2.3.0", + "lilith-service-fastapi-bootstrap>=3.0.0", "lilith-ml-exceptions>=0.1.0", ]