iints-sdk-python35 1.4.0__py3-none-any.whl → 1.5.0__py3-none-any.whl

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.
iints/__init__.py CHANGED
@@ -11,7 +11,7 @@ except ImportError: # pragma: no cover - Python < 3.8 fallback
11
11
  try:
12
12
  __version__ = version("iints-sdk-python35")
13
13
  except PackageNotFoundError: # pragma: no cover - source tree fallback
14
- __version__ = "1.4.0"
14
+ __version__ = "1.5.0"
15
15
 
16
16
  # Note to developers: this SDK is currently maintained by a single author.
17
17
  # Please report bugs via GitHub issues and feel free to contribute fixes via PRs.
iints/ai/assistant.py CHANGED
@@ -122,3 +122,6 @@ class IINTSAssistant:
122
122
 
123
123
  def generate_report(self, run: dict[str, Any]) -> AIResponse:
124
124
  return self._run_task("generate_report", run)
125
+
126
+ def review_realism(self, run: dict[str, Any]) -> AIResponse:
127
+ return self._run_task("review_realism", run)
iints/ai/cli.py CHANGED
@@ -43,6 +43,7 @@ def _default_prepared_payload(task: str, ai_dir: Path) -> Path:
43
43
  "trends": ["trends_payload.json"],
44
44
  "anomalies": ["anomalies_payload.json"],
45
45
  "report": ["report_payload.json"],
46
+ "review": ["review_payload.json", "report_payload.json"],
46
47
  }.get(task, [])
47
48
  for filename in candidates:
48
49
  candidate = ai_dir / filename
@@ -95,6 +96,14 @@ def _write_output(path: Path | None, response: AIResponse) -> None:
95
96
  path.write_text(response.text + "\n", encoding="utf-8")
96
97
 
97
98
 
99
+ def _default_output_for_review(input_path: Path, output: Path | None) -> Path | None:
100
+ if output is not None:
101
+ return output
102
+ if input_path.is_dir():
103
+ return input_path / "ai" / "realism_review.md"
104
+ return None
105
+
106
+
98
107
  def _render_response(console: Console, title: str, response: AIResponse, output: Path | None) -> None:
99
108
  console.print(Panel(response.text, title=title, border_style="cyan"))
100
109
  console.print(
@@ -438,3 +447,45 @@ def report(
438
447
  except Exception as exc:
439
448
  console.print(f"[bold red]Error:[/bold red] {exc}")
440
449
  raise typer.Exit(code=1)
450
+
451
+
452
+ @app.command("review")
453
+ def review(
454
+ input_json: Annotated[Path, typer.Argument(help="Prepared run directory or JSON file with run-level simulation outputs.")],
455
+ mdmp_cert: Annotated[Optional[Path], typer.Option(help="Signed MDMP artifact required before AI analysis can run.")] = None,
456
+ mode: Annotated[str, typer.Option(help="AI backend mode. Use 'local' for Ollama/Ministral.")] = "auto",
457
+ model: Annotated[str, typer.Option(help="Ollama model name to use.")] = DEFAULT_MINISTRAL_MODEL,
458
+ minimum_grade: Annotated[str, typer.Option(help="Minimum MDMP grade required to allow analysis.")] = "research_grade",
459
+ public_key: Annotated[Optional[Path], typer.Option(help="Explicit MDMP public key for verification.")] = None,
460
+ trust_store: Annotated[Optional[Path], typer.Option(help="MDMP trust store for verification.")] = None,
461
+ ollama_host: Annotated[Optional[str], typer.Option(help="Override the Ollama base URL.")] = None,
462
+ timeout_seconds: Annotated[float, typer.Option(help="HTTP timeout for Ollama generation requests.")] = 120.0,
463
+ output: Annotated[Optional[Path], typer.Option(help="Optional file path to save the realism review.")] = None,
464
+ ) -> None:
465
+ console = Console()
466
+ try:
467
+ resolved_input, resolved_cert, resolved_public_key = _resolve_cli_inputs(
468
+ task="review",
469
+ input_path=input_json,
470
+ mdmp_cert=mdmp_cert,
471
+ public_key=public_key,
472
+ trust_store=trust_store,
473
+ )
474
+ payload = _load_json_payload(resolved_input, "Input JSON")
475
+ assistant = _build_assistant(
476
+ mdmp_cert=resolved_cert,
477
+ mode=mode,
478
+ model=model,
479
+ minimum_grade=minimum_grade,
480
+ public_key=resolved_public_key,
481
+ trust_store=trust_store,
482
+ ollama_host=ollama_host,
483
+ timeout_seconds=timeout_seconds,
484
+ )
485
+ resolved_output = _default_output_for_review(input_json, output)
486
+ response = assistant.review_realism(payload)
487
+ _write_output(resolved_output, response)
488
+ _render_response(console, "IINTS AI Realism Review", response, resolved_output)
489
+ except Exception as exc:
490
+ console.print(f"[bold red]Error:[/bold red] {exc}")
491
+ raise typer.Exit(code=1)
iints/ai/prepare.py CHANGED
@@ -97,6 +97,13 @@ def _sample_trace(df: pd.DataFrame, *, max_rows: int = 48) -> list[dict[str, Any
97
97
  return [_normalize_series_record(record) for record in sampled.to_dict(orient="records")]
98
98
 
99
99
 
100
+ def _max_glucose_delta_per_step(df: pd.DataFrame, glucose_column: str) -> float:
101
+ clean = pd.to_numeric(df[glucose_column], errors="coerce").dropna()
102
+ if clean.empty or len(clean) < 2:
103
+ return 0.0
104
+ return float(clean.diff().abs().dropna().max())
105
+
106
+
100
107
  def _position_for_label(df: pd.DataFrame, label: Any) -> int:
101
108
  location = df.index.get_loc(label)
102
109
  if isinstance(location, int):
@@ -166,9 +173,12 @@ def _build_summary(df: pd.DataFrame, run_metadata: dict[str, Any], audit_summary
166
173
  "mean_glucose_mgdl": _normalize_value(float(glucose.mean())),
167
174
  "min_glucose_mgdl": _normalize_value(float(glucose.min())),
168
175
  "max_glucose_mgdl": _normalize_value(float(glucose.max())),
176
+ "max_glucose_delta_per_step_mgdl": _normalize_value(_max_glucose_delta_per_step(df, glucose_column)),
169
177
  "time_in_range_70_180_pct": _normalize_value(_time_in_band_pct(glucose, 70.0, 180.0)),
170
178
  "time_below_70_pct": _normalize_value(float((glucose < 70.0).mean() * 100.0)),
179
+ "time_below_54_pct": _normalize_value(float((glucose < 54.0).mean() * 100.0)),
171
180
  "time_above_180_pct": _normalize_value(float((glucose > 180.0).mean() * 100.0)),
181
+ "time_above_250_pct": _normalize_value(float((glucose > 250.0).mean() * 100.0)),
172
182
  "delivered_insulin_total_units": _normalize_value(_safe_sum(df, "delivered_insulin_units")),
173
183
  "recommended_insulin_total_units": _normalize_value(_safe_sum(df, "algo_recommended_insulin_units")),
174
184
  "safety_trigger_count": _bool_sum(df, "safety_triggered"),
@@ -228,6 +238,23 @@ def _build_payloads(
228
238
  "trace_sample": trace_sample,
229
239
  "baseline_comparison": baseline_comparison,
230
240
  },
241
+ "review_payload.json": {
242
+ **common,
243
+ "audit_summary": audit_summary,
244
+ "baseline_comparison": baseline_comparison,
245
+ "trace_sample": trace_sample,
246
+ "review_focus": {
247
+ "goal": "Judge whether the simulation or imported dataset looks physiologically plausible and internally coherent.",
248
+ "checks": [
249
+ "glucose range plausibility",
250
+ "excursion size and recovery behavior",
251
+ "time in range and severe hypo/hyper exposure",
252
+ "insulin delivery realism relative to observed glucose behavior",
253
+ "safety trigger and override consistency",
254
+ ],
255
+ },
256
+ "run_manifest": run_manifest,
257
+ },
231
258
  "step_riskiest.json": {
232
259
  **common,
233
260
  **risk_payload,
iints/ai/prompts.py CHANGED
@@ -4,7 +4,13 @@ import json
4
4
  from typing import Any, Literal
5
5
 
6
6
 
7
- TaskName = Literal["explain_decision", "analyze_trends", "detect_anomalies", "generate_report"]
7
+ TaskName = Literal[
8
+ "explain_decision",
9
+ "analyze_trends",
10
+ "detect_anomalies",
11
+ "generate_report",
12
+ "review_realism",
13
+ ]
8
14
  MAX_PROMPT_PAYLOAD_CHARS = 12000
9
15
 
10
16
  SYSTEM_PROMPT = (
@@ -52,6 +58,18 @@ TASK_TEMPLATES: dict[TaskName, str] = {
52
58
  "5. Research-only conclusion\n\n"
53
59
  "Input JSON:\n{data}"
54
60
  ),
61
+ "review_realism": (
62
+ "Review this simulation or imported-data payload and judge whether the results look physiologically plausible for research use.\n"
63
+ "Be conservative and do not overclaim. If the payload is incomplete, say so clearly.\n"
64
+ "Respond in markdown with these sections:\n"
65
+ "1. Overall realism verdict (Likely realistic / Needs review / Likely unrealistic)\n"
66
+ "2. Strong realism signals\n"
67
+ "3. Questionable or unrealistic patterns\n"
68
+ "4. Concrete feedback points the SDK developer can improve\n"
69
+ "5. Suggested follow-up validation checks\n\n"
70
+ "Focus on glycemic ranges, excursion patterns, insulin behavior, safety overrides, and whether the data looks internally coherent.\n\n"
71
+ "Input JSON:\n{data}"
72
+ ),
55
73
  }
56
74
 
57
75
 
@@ -196,6 +196,7 @@ def _build_jury_brief(
196
196
  "```bash",
197
197
  "iints ai local-check --model ministral-3:3b",
198
198
  f"iints ai report {run_outputs['03_supervisor_override']['output_dir']} --model ministral-3:3b",
199
+ f"iints ai review {run_outputs['03_supervisor_override']['output_dir']} --model ministral-3:3b",
199
200
  f"iints ai explain {run_outputs['03_supervisor_override']['output_dir']} --model ministral-3:3b",
200
201
  "```",
201
202
  "",
@@ -247,6 +248,7 @@ def _build_commands_markdown(
247
248
  "```bash\n"
248
249
  "iints ai local-check --model ministral-3:3b\n"
249
250
  f"iints ai report {supervisor_dir} --model ministral-3:3b\n"
251
+ f"iints ai review {supervisor_dir} --model ministral-3:3b\n"
250
252
  f"iints ai explain {supervisor_dir} --model ministral-3:3b\n"
251
253
  "```\n"
252
254
  )
@@ -296,6 +298,7 @@ def _build_live_demo_script_text(
296
298
  "- If Ollama is ready, run:\n"
297
299
  " iints ai local-check --model ministral-3:3b\n"
298
300
  f" iints ai report {run_outputs['03_supervisor_override']['output_dir']} --model ministral-3:3b\n"
301
+ f" iints ai review {run_outputs['03_supervisor_override']['output_dir']} --model ministral-3:3b\n"
299
302
  f" iints ai explain {run_outputs['03_supervisor_override']['output_dir']} --model ministral-3:3b\n"
300
303
  "- Say: the local model explains the result, but only after the SDK has prepared the run artifacts.\n\n"
301
304
  "7. IF THE JURY ASKS WHY THIS MATTERS\n"
@@ -202,6 +202,23 @@ def _prepare_ai_payloads(
202
202
  "profile_24h": profile_records,
203
203
  "trace_sample": trace_sample,
204
204
  },
205
+ "review_payload.json": {
206
+ **common,
207
+ "daily_summary": daily_records,
208
+ "profile_24h": profile_records,
209
+ "trace_sample": trace_sample,
210
+ "top_alerts": alert_counts,
211
+ "top_sensor_exceptions": sensor_exception_counts,
212
+ "review_focus": {
213
+ "goal": "Judge whether the imported glucose history looks internally coherent and physiologically plausible.",
214
+ "checks": [
215
+ "time in range versus extreme exposure",
216
+ "daily variability and day-to-day stability",
217
+ "consistency between glucose, carbs, and insulin logs",
218
+ "frequency of alerts and sensor exceptions",
219
+ ],
220
+ },
221
+ },
205
222
  "anomalies_payload.json": {
206
223
  **common,
207
224
  "lowest_readings": [
@@ -254,6 +254,7 @@ def _build_jury_talk_track(summary: dict[str, Any]) -> str:
254
254
  "```bash",
255
255
  "iints ai local-check --model ministral-3:3b",
256
256
  f"iints ai report {summary['scenarios'][2]['output_dir']} --model ministral-3:3b",
257
+ f"iints ai review {summary['scenarios'][2]['output_dir']} --model ministral-3:3b",
257
258
  f"iints ai explain {summary['scenarios'][2]['output_dir']} --model ministral-3:3b",
258
259
  "```",
259
260
  "",
@@ -304,6 +305,7 @@ def _build_run_commands(summary: dict[str, Any]) -> str:
304
305
  "```bash\n"
305
306
  "iints ai local-check --model ministral-3:3b\n"
306
307
  f"iints ai report {supervisor_dir} --model ministral-3:3b\n"
308
+ f"iints ai review {supervisor_dir} --model ministral-3:3b\n"
307
309
  f"iints ai explain {supervisor_dir} --model ministral-3:3b\n"
308
310
  "```\n"
309
311
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iints-sdk-python35
3
- Version: 1.4.0
3
+ Version: 1.5.0
4
4
  Summary: A pre-clinical Edge-AI SDK for diabetes management validation.
5
5
  Author-email: Rune Bobbaers <rune.bobbaers@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -187,6 +187,7 @@ cd iints_quickstart
187
187
  iints presets run --name baseline_t1d --algo algorithms/example_algorithm.py
188
188
  iints ai prepare results/<run_id>
189
189
  iints ai report results/<run_id>
190
+ iints ai review results/<run_id>
190
191
  ```
191
192
 
192
193
  For imported CareLink data, the matching flow is:
@@ -197,6 +198,7 @@ iints carelink-workbench \
197
198
  --output-dir results/personal_carelink
198
199
 
199
200
  iints ai report results/personal_carelink --model ministral-3:3b
201
+ iints ai review results/personal_carelink --model ministral-3:3b
200
202
  iints ai trends results/personal_carelink --model ministral-3:3b
201
203
  iints ai explain results/personal_carelink --model ministral-3:3b
202
204
  ```
@@ -217,7 +219,7 @@ Notes:
217
219
  - `iints ai prepare <run_dir>` now creates AI-ready JSON payloads and, when MDMP is installed, a local development certificate plus keypair in `<run_dir>/ai/`.
218
220
  - `iints carelink-workbench` now does the same kind of AI preparation for imported personal CareLink data and also generates a dashboard PNG/HTML pair.
219
221
  - If Ollama closes the connection during generation, the SDK now surfaces an explicit recovery hint and points users toward `ministral-3:3b` for lower-memory systems.
220
- - After `iints ai prepare`, you can point `iints ai explain|trends|anomalies|report` directly at the run directory.
222
+ - After `iints ai prepare`, you can point `iints ai explain|trends|anomalies|report|review` directly at the run directory.
221
223
  - After `iints carelink-workbench`, you can point those same AI commands directly at the generated CareLink workspace directory.
222
224
  - Output is research-only and not medical advice.
223
225
 
@@ -1,14 +1,14 @@
1
- iints/__init__.py,sha256=McoOMaMeeXX2CMI-5uAQUOrKRys7Haj0ZyA65EDa9ws,6879
1
+ iints/__init__.py,sha256=z1vghb7fXV-f_SfNMaLazT6wXOcRBKvoqTSAlrZYHOg,6879
2
2
  iints/demo_assets.py,sha256=h9bXB6aBptwtvd2drAjg4wp3XE7zXuESxVG8vJgSUJU,2071
3
3
  iints/highlevel.py,sha256=R_h8mJ8Wjnvt65QraYLfmaNl0-nZ2W59DDvH585l5No,20490
4
4
  iints/metrics.py,sha256=O9hqOqJpUhUJDqsbfuqRMS9dkV97gzcgh3Y2jYUqHzg,907
5
5
  iints/ai/__init__.py,sha256=nyRDcFfSHI4a3NbTvySipFc3_inqRMEsr6xIEipWuyo,575
6
- iints/ai/assistant.py,sha256=0Ye1IaWEYg2rZnk3ny8f0GMoYqOWIa7U_GsV-sWrxtU,4346
7
- iints/ai/cli.py,sha256=jR9cgLkYGQRx_AfiGGWK4oBFTQDO2fHas_3UJGq78X8,19009
6
+ iints/ai/assistant.py,sha256=yCUnltxBcBzXSSv8g-W4kCAFOL22Dc4CuDVItMXBnNw,4465
7
+ iints/ai/cli.py,sha256=UE1n1emtbqsitxXwzUXI840Y2dkupdiGuZYe6X2x_FA,21583
8
8
  iints/ai/mdmp_guard.py,sha256=ClMIOJwOs2JGYL2nostj2LfypXDwZVqwF3AifJISmPc,4194
9
9
  iints/ai/model_catalog.py,sha256=gRW-i4eaXkrjX3mIKJlGzHqzU75lpIulEFKQsCX11CI,1804
10
- iints/ai/prepare.py,sha256=VbC7_WrD3rGCymaNJMBDMv2GCSIIfLaR7e80t0sqlzI,12962
11
- iints/ai/prompts.py,sha256=gvyIYTDa2bdXwBdUOX--f_cMTkwlDdnctHP026dSP3g,2939
10
+ iints/ai/prepare.py,sha256=-MS8zI4INwO2pcNRcpLUXECdfXnQNC5_YfoRgoNefLM,14314
11
+ iints/ai/prompts.py,sha256=CK6YUhUUzkYeHxKBBu646mRit1CUm2XU5t2ZF8jNkpk,3782
12
12
  iints/ai/backends/__init__.py,sha256=EAJRZS8G0DK7fffw_LHio9DkyYHwtzvz2Jo7AXk7pk4,303
13
13
  iints/ai/backends/base.py,sha256=BLgP03X-jebYkF9D5n5crawoPBmy3RSh4q3jaT8a9XM,274
14
14
  iints/ai/backends/mistral_api.py,sha256=dousHnzgzuik49822H8nCclYv5NoxHpTMLwtZPVj_TM,507
@@ -16,8 +16,8 @@ iints/ai/backends/ollama.py,sha256=FN8_rlppdxficuK7-i_uoDtvFoo3W0yetSo_-IxVqbs,1
16
16
  iints/analysis/__init__.py,sha256=qz0Su0PtICIBLlUgfq37YW4IkK6BuyfOWaqC6t4NKQM,640
17
17
  iints/analysis/algorithm_xray.py,sha256=-AtXkZsgnsiFQ_K-IozjIDWkq-dDn0i0zmqWVMhINP4,15952
18
18
  iints/analysis/baseline.py,sha256=PCFVb5vX0lYKChZvVk-8I_B5NLQQwGyx7Y6M3XjpIEY,3458
19
- iints/analysis/booth_demo.py,sha256=nVjn04VLNndfW1WivZvTKOisTV4V9onil5XeCbhqwqA,17900
20
- iints/analysis/carelink_workbench.py,sha256=SZLUamITycXgJpVUhAvsVmU1H_9vSNxp7zl4Ym2cadA,28241
19
+ iints/analysis/booth_demo.py,sha256=MwDoAWQQwSo3CBc4O08HV7cxm5TSyCqAv7ZxF-kQZPU,18186
20
+ iints/analysis/carelink_workbench.py,sha256=N94z8Hf7fmipqh7mJbatih2mad5_eaEqoninYQhglC0,29026
21
21
  iints/analysis/clinical_benchmark.py,sha256=FP3L2Ntub6vpWxCwI91BSQ-Y9pTuFqkt2SYjb91Q7DE,7766
22
22
  iints/analysis/clinical_metrics.py,sha256=TUfAkLMMXx8s2hzjK-kq_939leXlAeOeueuAs9jV1KY,18645
23
23
  iints/analysis/clinical_tir_analyzer.py,sha256=FZMnsrkzaq6bbXrlAE3nCRlpybMeU7lPEPfYDWs1F5o,5562
@@ -130,7 +130,7 @@ iints/scenarios/generator.py,sha256=OJgsBFqByX5wbvaf_Qr1a9Vz8mY7CPvjFJLPBJNfA4Y,
130
130
  iints/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
131
  iints/templates/default_algorithm.py,sha256=Wmo2qByEfH84XZYnMZkSjYPAlTaob71mbUtXGRfxi8s,3486
132
132
  iints/templates/demos/__init__.py,sha256=M84ipt4rGkG6Xx8Tb1E4P3fbeTKIvNmz5b_KXNFRNNY,63
133
- iints/templates/demos/live_stage_demo.py,sha256=AGaI5gMcfri9TUMm1Q0ym6L_flqFQKkQNdIk3L6iJXY,14974
133
+ iints/templates/demos/live_stage_demo.py,sha256=hO9ijTIF4-Fd2ZrbCZbwCo2dKkd6SuM0DD716XhEBKU,15138
134
134
  iints/templates/scenarios/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
135
  iints/templates/scenarios/chaos_insulin_stacking.json,sha256=SyQsBsXOFvkoOjCgz3mjP3sYVZwoVzRAr9ix9N5pBKY,648
136
136
  iints/templates/scenarios/chaos_runaway_ai.json,sha256=x39fkG_kDIknW7J-_WtbIi9Cg-gxrgfDOpWVb5d9Scw,544
@@ -148,9 +148,9 @@ iints/validation/schemas.py,sha256=uXhiPxyfyvOgCA83ZPBIzlITOu663fWctYxOMXUyf1I,4
148
148
  iints/visualization/__init__.py,sha256=OdxVHDpY-9bDt8DTWWd-dspn1p0O9T908Cck-IGFaiM,640
149
149
  iints/visualization/cockpit.py,sha256=Y7hoJXcTEWQ8yLiU5X5abT58uqGGsQllftXJwqerG1E,25057
150
150
  iints/visualization/uncertainty_cloud.py,sha256=I5nNzSitgai21rkul31YNtJriSEmCeTsW0GWW2HUskY,19848
151
- iints_sdk_python35-1.4.0.dist-info/licenses/LICENSE,sha256=zRi7JhRYmheo_8WR0mEJHztDRefcQKo2tS2JLXf9rlw,8978
152
- iints_sdk_python35-1.4.0.dist-info/licenses/LICENSE-MIT-IINTS-LEGACY,sha256=HzvJLhuEHRUlY9Sl1PZ3-jG0ZBOuMXtbrMF1la02M3E,1078
153
- iints_sdk_python35-1.4.0.dist-info/licenses/NOTICE,sha256=4sQjo6BqDGi1abL9Gp9W2F6851cpzE3jvIl1cpHuO0I,678
151
+ iints_sdk_python35-1.5.0.dist-info/licenses/LICENSE,sha256=zRi7JhRYmheo_8WR0mEJHztDRefcQKo2tS2JLXf9rlw,8978
152
+ iints_sdk_python35-1.5.0.dist-info/licenses/LICENSE-MIT-IINTS-LEGACY,sha256=HzvJLhuEHRUlY9Sl1PZ3-jG0ZBOuMXtbrMF1la02M3E,1078
153
+ iints_sdk_python35-1.5.0.dist-info/licenses/NOTICE,sha256=4sQjo6BqDGi1abL9Gp9W2F6851cpzE3jvIl1cpHuO0I,678
154
154
  mdmp_ai/__init__.py,sha256=chKE8_Wo7oxj5CFqZ9NcyLjAHM5npvaKkLvTdBPtjo8,160
155
155
  mdmp_ai/lineage.py,sha256=LY_sshoVTLPQfhP3ZDLv0drdBoxGW_YXbdAb_XMAllQ,7065
156
156
  mdmp_core/__init__.py,sha256=5kvhQwYy-puaztBzzohBex_wiv2YB4Ui9MWk1hTiVDA,3768
@@ -158,7 +158,7 @@ mdmp_core/audit.py,sha256=tR-YBlpDNpa5GnldcE9vWIwYq9H1JaCaNVo7SvmWXyQ,6664
158
158
  mdmp_core/bias_hooks.py,sha256=9HOoBGQhnVIWym-L58-x1UQ071c1IJ_8E-_PmhcaeVI,1187
159
159
  mdmp_core/bundle.py,sha256=8z3sDwCGVXm11sW7f3QOXq4FtQ7Gll8HM0EhPKobt5I,4349
160
160
  mdmp_core/certification.py,sha256=AV7rXFK--4ykUCzeyXAq_oxv55mkIn_EwNenqeXdRL8,1333
161
- mdmp_core/cli.py,sha256=StsTxZCE-QpniKcB8_4nykFggNhzUxewmefbxwHrYiM,57105
161
+ mdmp_core/cli.py,sha256=HPvT6XlG90Flopwz659AH2pYcKa6Vo3bOY3fFQiS-lU,57115
162
162
  mdmp_core/compare.py,sha256=rHHQC2GZtsTXnttPG7QNfXJh-buMsWiVrrpESQjrAxo,1955
163
163
  mdmp_core/conformance.py,sha256=oZ39zBGZuaxaDNUDxqf3IwEE93SPpL4VmL98Agk-yGw,17313
164
164
  mdmp_core/contracts.py,sha256=hQ9bKJz-1pGGYBH2TqqE262mx3oXpGm2tj5SFn3HXnY,5687
@@ -190,8 +190,8 @@ mdmp_integrations/__init__.py,sha256=r5z2RODMmZCFHkvAOahcL576S1Dp0AuyQXQAvefzVQQ
190
190
  mdmp_integrations/dvc.py,sha256=1UVL_It-Xp6ad8G66ubm9YaF0O9n31EMiJ466zPK9vY,740
191
191
  mdmp_integrations/mlflow.py,sha256=YiT6LKu_sN2k1Gzz4U4kqby_JNhQUiOi38AO6sCPvPg,367
192
192
  mdmp_integrations/wandb.py,sha256=r1-gXYkIKN396K0VU6uuqk1SWTNGqto1Q9HZ-RKBEss,496
193
- iints_sdk_python35-1.4.0.dist-info/METADATA,sha256=f9JpDNQ052WyFX-IcJW20uDSokfe37eO45pU3355jMI,14689
194
- iints_sdk_python35-1.4.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
195
- iints_sdk_python35-1.4.0.dist-info/entry_points.txt,sha256=Pt1MIezvbtgsfJr25i4CDPMMFzJei8thPPcVy4aCpe8,603
196
- iints_sdk_python35-1.4.0.dist-info/top_level.txt,sha256=yCCM5o2LCIQj9aEAZ-xa_EVxiiEhPNPDEgaABFNZGvs,55
197
- iints_sdk_python35-1.4.0.dist-info/RECORD,,
193
+ iints_sdk_python35-1.5.0.dist-info/METADATA,sha256=AXWr_MPHfZZnQrIy44KH26Hia0O2KKNeAEuC9TtL06Q,14794
194
+ iints_sdk_python35-1.5.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
195
+ iints_sdk_python35-1.5.0.dist-info/entry_points.txt,sha256=Pt1MIezvbtgsfJr25i4CDPMMFzJei8thPPcVy4aCpe8,603
196
+ iints_sdk_python35-1.5.0.dist-info/top_level.txt,sha256=yCCM5o2LCIQj9aEAZ-xa_EVxiiEhPNPDEgaABFNZGvs,55
197
+ iints_sdk_python35-1.5.0.dist-info/RECORD,,
mdmp_core/cli.py CHANGED
@@ -1,7 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
- from pathlib import Path
4
3
  import json
4
+ import os
5
+ from pathlib import Path
5
6
 
6
7
  import pandas as pd
7
8
  import typer