chapkit 2.0.0__tar.gz → 2.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {chapkit-2.0.0 → chapkit-2.0.1}/PKG-INFO +1 -1
- {chapkit-2.0.0 → chapkit-2.0.1}/pyproject.toml +1 -1
- {chapkit-2.0.0 → chapkit-2.0.1}/pyproject.toml.orig +1 -1
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/manifest.json +1 -1
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/service_builder.py +6 -1
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/migrate.py +4 -4
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/migrate/CHAPKIT_migrate.md.jinja2 +1 -1
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/ml/router.py +5 -1
- {chapkit-2.0.0 → chapkit-2.0.1}/README.md +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/__init__.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/alembic/__init__.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/alembic/env.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/alembic/script.py.mako +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/alembic/versions/20251010_0927_4d869b5fb06e_initial_schema.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/alembic/versions/__init__.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/alembic_helpers.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/__init__.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/dist-B7bpuMSM.js +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/index-CQwQU2vo.js +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/index-HY9NoZeE.css +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/javascript-CppQSorr.js +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/roboto-cyrillic-ext-wght-normal-BCp_3N7R.woff2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/roboto-cyrillic-wght-normal-fOt7epNf.woff2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/roboto-greek-ext-wght-normal-Bgw4czJT.woff2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/roboto-greek-wght-normal-DlT9XTxE.woff2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/roboto-latin-ext-wght-normal-DYIxWhlt.woff2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/roboto-latin-wght-normal-ccAYIvAh.woff2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/roboto-math-wght-normal-4a3xuzGk.woff2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/roboto-symbols-wght-normal-B7iHSfaG.woff2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/roboto-vietnamese-wght-normal-_f1XEJpo.woff2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/vitesse-dark-BZCL-v6S.js +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/vitesse-light-VbXTXTou.js +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/favicon.svg +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/icons.svg +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/index.html +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/dependencies.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/artifact/__init__.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/artifact/manager.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/artifact/models.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/artifact/repository.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/artifact/router.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/artifact/schemas.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/__init__.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/__main__.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/artifact.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/cli.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/init.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/mlproject.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/requirements.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/run.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/.dockerignore +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/.gitignore +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/.python-version +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/Dockerfile.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/README.md.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/compose.yml.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/main.py.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/main_shell.py.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/migrate/Dockerfile_migrate.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/migrate/Makefile_migrate.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/migrate/README_migrate.md.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/migrate/dockerignore_migrate.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/migrate/gitignore_migrate.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/migrate/main_migrate.py.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/migrate/pyproject_migrate.toml.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/migrate/requirements_migrate.txt.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/publish-docker.yml.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/pyproject.toml.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/scripts/predict.R.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/scripts/predict_model.py.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/scripts/train.R.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/scripts/train_model.py.jinja2 +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/test/__init__.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/test/command.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/test/runner.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/test/utils.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/config/__init__.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/config/manager.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/config/models.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/config/repository.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/config/router.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/config/schemas.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/data/__init__.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/data/dataframe.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/data/generator.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/data/geo.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/ml/__init__.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/ml/manager.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/ml/runner.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/ml/schemas.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/py.typed +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/scheduler.py +0 -0
- {chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/utils.py +0 -0
|
@@ -63,10 +63,15 @@ class AssessedStatus(StrEnum):
|
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
class PeriodType(StrEnum):
|
|
66
|
-
"""Supported period types for ML services.
|
|
66
|
+
"""Supported period types for ML services.
|
|
67
|
+
|
|
68
|
+
`any` declares that the model accepts both weekly and monthly data; chap-core
|
|
69
|
+
then skips its period-type check and dispatches whatever the dataset holds.
|
|
70
|
+
"""
|
|
67
71
|
|
|
68
72
|
weekly = "weekly"
|
|
69
73
|
monthly = "monthly"
|
|
74
|
+
any = "any"
|
|
70
75
|
|
|
71
76
|
|
|
72
77
|
class ModelMetadata(BaseModel):
|
|
@@ -679,16 +679,16 @@ def detect_base_image(
|
|
|
679
679
|
|
|
680
680
|
|
|
681
681
|
_VALID_ASSESSED_STATUS = {"gray", "red", "orange", "yellow", "green"}
|
|
682
|
-
_VALID_PERIOD_TYPES = {"weekly", "monthly"}
|
|
682
|
+
_VALID_PERIOD_TYPES = {"weekly", "monthly", "any"}
|
|
683
683
|
|
|
684
684
|
|
|
685
685
|
def build_service_info_context(mlproject: MLProject) -> dict[str, Any]:
|
|
686
686
|
"""Build the ModelMetadata + capability-constraints block for MLServiceInfo.
|
|
687
687
|
|
|
688
688
|
Handles the MLproject -> chapkit vocabulary mismatches:
|
|
689
|
-
- MLproject `supported_period_type
|
|
690
|
-
PeriodType
|
|
691
|
-
|
|
689
|
+
- MLproject `supported_period_type` passes through when it is one of
|
|
690
|
+
chapkit's PeriodType values (weekly/monthly/any); anything else, or an
|
|
691
|
+
absent value, becomes `monthly`.
|
|
692
692
|
- `author_assessed_status` is validated against chapkit's AssessedStatus
|
|
693
693
|
enum; unknown values fall back to None.
|
|
694
694
|
- URL-typed fields (organization_logo_url, repository_url,
|
|
@@ -179,7 +179,7 @@ Your runtime deps (`[project.dependencies]`) have been auto-merged into the new
|
|
|
179
179
|
|
|
180
180
|
### [`MLServiceInfo`](https://dhis2-chap.github.io/chapkit/guides/ml-workflows/#mlserviceinfo-fields) — who you are
|
|
181
181
|
|
|
182
|
-
The service's public identity and contract: `id`, `display_name`, `description`, [`model_metadata`](https://dhis2-chap.github.io/chapkit/guides/ml-workflows/#modelmetadata-fields), [`period_type`](https://dhis2-chap.github.io/chapkit/guides/ml-workflows/#mlserviceinfo-fields) (`monthly` / `weekly`), [`required_covariates`](#covariates). This is what chap-core reads via `/api/v1/info` when it decides whether to dispatch a dataset to your model.
|
|
182
|
+
The service's public identity and contract: `id`, `display_name`, `description`, [`model_metadata`](https://dhis2-chap.github.io/chapkit/guides/ml-workflows/#modelmetadata-fields), [`period_type`](https://dhis2-chap.github.io/chapkit/guides/ml-workflows/#mlserviceinfo-fields) (`monthly` / `weekly` / `any`), [`required_covariates`](#covariates). This is what chap-core reads via `/api/v1/info` when it decides whether to dispatch a dataset to your model.
|
|
183
183
|
|
|
184
184
|
### [`ModelMetadata.author_assessed_status`](https://dhis2-chap.github.io/chapkit/guides/ml-workflows/#modelmetadata-fields) — traffic-light maturity
|
|
185
185
|
|
|
@@ -100,7 +100,11 @@ class MLRouter(Router):
|
|
|
100
100
|
return DataFrame.model_validate(frame).with_schema(required_covariates=required_covariates).model_dump()
|
|
101
101
|
|
|
102
102
|
requires_geo = bool(sample_metadata.get("requires_geo", False))
|
|
103
|
-
|
|
103
|
+
# A service declaring `any` accepts both formats; generate monthly rows for it.
|
|
104
|
+
declared_period = sample_metadata.get("period_type")
|
|
105
|
+
if declared_period not in ("monthly", "weekly"):
|
|
106
|
+
declared_period = None
|
|
107
|
+
resolved_period = period_type or declared_period or "monthly"
|
|
104
108
|
want_geo = requires_geo if include_geo is None else include_geo
|
|
105
109
|
geo = generator.generate_geo_data(num_features=num_locations, geo_type=geo_type) if want_geo else None
|
|
106
110
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/vitesse-dark-BZCL-v6S.js
RENAMED
|
File without changes
|
{chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/api/apps/console/assets/vitesse-light-VbXTXTou.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/migrate/dockerignore_migrate.jinja2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/migrate/pyproject_migrate.toml.jinja2
RENAMED
|
File without changes
|
{chapkit-2.0.0 → chapkit-2.0.1}/src/chapkit/cli/templates/migrate/requirements_migrate.txt.jinja2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|