iints-sdk-python35 1.5.9__tar.gz → 1.5.11__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.
Files changed (294) hide show
  1. {iints_sdk_python35-1.5.9/src/iints_sdk_python35.egg-info → iints_sdk_python35-1.5.11}/PKG-INFO +7 -5
  2. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/README.md +3 -3
  3. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/pyproject.toml +4 -2
  4. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/__init__.py +4 -2
  5. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/ai/__init__.py +14 -1
  6. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/ai/assistant.py +13 -2
  7. iints_sdk_python35-1.5.11/src/iints/ai/backends/mistral_api.py +46 -0
  8. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/ai/cli.py +28 -1
  9. iints_sdk_python35-1.5.11/src/iints/ai/model_catalog.py +174 -0
  10. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/ai/prompts.py +17 -0
  11. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/reporting.py +268 -69
  12. iints_sdk_python35-1.5.11/src/iints/analysis/run_quality.py +179 -0
  13. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/api/base_algorithm.py +2 -0
  14. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/cli/cli.py +1673 -100
  15. iints_sdk_python35-1.5.11/src/iints/core/algorithms/mpc_controller.py +207 -0
  16. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/devices/models.py +98 -14
  17. iints_sdk_python35-1.5.11/src/iints/core/digital_twin.py +168 -0
  18. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/patient/bergman_model.py +125 -26
  19. iints_sdk_python35-1.5.11/src/iints/core/patient/hovorka_model.py +552 -0
  20. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/patient/models.py +53 -7
  21. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/patient/patient_factory.py +12 -0
  22. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/physiology_variation.py +39 -2
  23. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/safety/config.py +6 -0
  24. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/simulator.py +284 -13
  25. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/realism_dashboard.py +2 -0
  26. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/realism_validator.py +185 -7
  27. iints_sdk_python35-1.5.11/src/iints/live_patient/fpga.py +972 -0
  28. iints_sdk_python35-1.5.11/src/iints/presets/evidence_sources.yaml +235 -0
  29. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/presets/presets.json +170 -75
  30. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/__init__.py +30 -0
  31. iints_sdk_python35-1.5.11/src/iints/research/forecasting.py +679 -0
  32. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/predictor.py +8 -0
  33. iints_sdk_python35-1.5.11/src/iints/research/results_manager.py +535 -0
  34. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/utils/plotting.py +9 -0
  35. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/validation/schemas.py +17 -1
  36. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/visualization/cockpit.py +44 -20
  37. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11/src/iints_sdk_python35.egg-info}/PKG-INFO +7 -5
  38. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints_sdk_python35.egg-info/SOURCES.txt +7 -0
  39. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints_sdk_python35.egg-info/requires.txt +3 -1
  40. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_bergman.py +17 -0
  41. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_cli_demo_live.py +48 -0
  42. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_cli_edge_runtime.py +87 -0
  43. iints_sdk_python35-1.5.11/tests/test_cli_fpga.py +139 -0
  44. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_cli_onboarding.py +121 -0
  45. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_cli_research_workflows.py +23 -0
  46. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_physiology_variation.py +27 -1
  47. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_presets_realism.py +44 -1
  48. iints_sdk_python35-1.5.9/src/iints/ai/backends/mistral_api.py +0 -17
  49. iints_sdk_python35-1.5.9/src/iints/ai/model_catalog.py +0 -55
  50. iints_sdk_python35-1.5.9/src/iints/analysis/run_quality.py +0 -91
  51. iints_sdk_python35-1.5.9/src/iints/presets/evidence_sources.yaml +0 -123
  52. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/LICENSE +0 -0
  53. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/LICENSE-MIT-IINTS-LEGACY +0 -0
  54. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/NOTICE +0 -0
  55. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/setup.cfg +0 -0
  56. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/ai/backends/__init__.py +1 -1
  57. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/ai/backends/base.py +0 -0
  58. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/ai/backends/ollama.py +0 -0
  59. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/ai/mdmp_guard.py +0 -0
  60. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/ai/prepare.py +0 -0
  61. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/__init__.py +0 -0
  62. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/algorithm_xray.py +0 -0
  63. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/baseline.py +0 -0
  64. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/booth_demo.py +0 -0
  65. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/carelink_workbench.py +0 -0
  66. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/clinical_benchmark.py +0 -0
  67. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/clinical_metrics.py +0 -0
  68. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/clinical_tir_analyzer.py +0 -0
  69. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/diabetes_metrics.py +0 -0
  70. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/edge_efficiency.py +0 -0
  71. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/edge_performance_monitor.py +0 -0
  72. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/eucys_results.py +0 -0
  73. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/evidence_bundle.py +0 -0
  74. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/explainability.py +0 -0
  75. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/explainable_ai.py +0 -0
  76. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/hardware_benchmark.py +0 -0
  77. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/metrics.py +0 -0
  78. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/population_report.py +0 -0
  79. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/poster.py +0 -0
  80. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/safety_index.py +0 -0
  81. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/safety_visualizer.py +0 -0
  82. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/sensor_filtering.py +0 -0
  83. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/study_analysis.py +0 -0
  84. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/study_engine.py +0 -0
  85. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/study_experiment.py +0 -0
  86. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/study_poster.py +0 -0
  87. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/study_protocol.py +0 -0
  88. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/analysis/validator.py +0 -0
  89. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/api/__init__.py +0 -0
  90. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/api/registry.py +0 -0
  91. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/api/template_algorithm.py +0 -0
  92. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/assets/iints_logo.png +0 -0
  93. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/cli/__init__.py +0 -0
  94. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/cli/patient_cli.py +0 -0
  95. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/__init__.py +0 -0
  96. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/algorithms/__init__.py +0 -0
  97. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/algorithms/battle_runner.py +0 -0
  98. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/algorithms/clinical_baseline.py +0 -0
  99. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/algorithms/correction_bolus.py +0 -0
  100. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/algorithms/discovery.py +0 -0
  101. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/algorithms/fixed_basal_bolus.py +0 -0
  102. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/algorithms/hybrid_algorithm.py +0 -0
  103. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/algorithms/imitation_controller.py +0 -0
  104. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/algorithms/lstm_algorithm.py +0 -0
  105. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/algorithms/mock_algorithms.py +0 -0
  106. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/algorithms/neural_controller.py +0 -0
  107. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/algorithms/pid_controller.py +0 -0
  108. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/algorithms/standard_pump_algo.py +0 -0
  109. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/device.py +0 -0
  110. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/device_manager.py +0 -0
  111. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/devices/__init__.py +0 -0
  112. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/patient/__init__.py +0 -0
  113. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/patient/profile.py +0 -0
  114. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/safety/__init__.py +0 -0
  115. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/safety/input_validator.py +0 -0
  116. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/safety/supervisor.py +0 -0
  117. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/simulation/__init__.py +0 -0
  118. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/simulation/scenario_parser.py +0 -0
  119. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/core/supervisor.py +0 -0
  120. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/__init__.py +0 -0
  121. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/adapter.py +0 -0
  122. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/certify.py +0 -0
  123. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/column_mapper.py +0 -0
  124. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/contracts.py +0 -0
  125. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/datasets.json +0 -0
  126. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/demo/__init__.py +0 -0
  127. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/demo/demo_cgm.csv +0 -0
  128. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/evidence.py +0 -0
  129. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/guardians.py +0 -0
  130. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/importer.py +0 -0
  131. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/ingestor.py +0 -0
  132. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/mdmp_visualizer.py +0 -0
  133. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/medtronic_live.py +0 -0
  134. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/nightscout.py +0 -0
  135. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/physiology_residual_profiles.json +0 -0
  136. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/quality_checker.py +0 -0
  137. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/realism_governance.py +0 -0
  138. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/realism_reference.py +0 -0
  139. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/realism_references.json +0 -0
  140. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/registry.py +0 -0
  141. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/research_catalog.py +0 -0
  142. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/runner.py +0 -0
  143. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/study_corruption.py +0 -0
  144. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/synthetic_mirror.py +0 -0
  145. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/tidepool.py +0 -0
  146. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/universal_parser.py +0 -0
  147. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/virtual_patients/clinic_safe_baseline.yaml +0 -0
  148. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/virtual_patients/clinic_safe_hyper_challenge.yaml +0 -0
  149. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/virtual_patients/clinic_safe_hypo_prone.yaml +0 -0
  150. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/virtual_patients/clinic_safe_midnight.yaml +0 -0
  151. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/virtual_patients/clinic_safe_pizza.yaml +0 -0
  152. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/virtual_patients/clinic_safe_stress_meal.yaml +0 -0
  153. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/virtual_patients/default_patient.yaml +0 -0
  154. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/virtual_patients/patient_559_config.yaml +0 -0
  155. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/virtual_patients/reference_azt1d_t1d.yaml +0 -0
  156. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/virtual_patients/reference_free_living_t1d.yaml +0 -0
  157. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/data/virtual_patients/reference_hupa_ucm_t1d.yaml +0 -0
  158. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/demo_assets.py +0 -0
  159. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/emulation/__init__.py +0 -0
  160. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/emulation/legacy_base.py +0 -0
  161. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/emulation/medtronic_780g.py +0 -0
  162. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/emulation/omnipod_5.py +0 -0
  163. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/emulation/tandem_controliq.py +0 -0
  164. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/highlevel.py +0 -0
  165. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/jetson/__init__.py +0 -0
  166. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/jetson/endurance.py +0 -0
  167. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/jetson/research_pipeline.py +0 -0
  168. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/learning/__init__.py +0 -0
  169. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/learning/autonomous_optimizer.py +0 -0
  170. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/learning/learning_system.py +0 -0
  171. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/live_patient/__init__.py +0 -0
  172. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/live_patient/api.py +0 -0
  173. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/live_patient/daemon.py +0 -0
  174. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/live_patient/edge_benchmark.py +0 -0
  175. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/live_patient/edge_ops.py +0 -0
  176. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/live_patient/long_study.py +0 -0
  177. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/live_patient/medtronic_direct.py +0 -0
  178. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/live_patient/pico_pump.py +0 -0
  179. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/live_patient/runtime.py +0 -0
  180. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/live_patient/service_export.py +0 -0
  181. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/live_patient/uno_q.py +0 -0
  182. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/mdmp/__init__.py +0 -0
  183. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/mdmp/backend.py +0 -0
  184. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/mdmp/eu_ai_pact.py +0 -0
  185. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/metrics.py +0 -0
  186. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/population/__init__.py +0 -0
  187. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/population/generator.py +0 -0
  188. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/population/runner.py +0 -0
  189. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/presets/__init__.py +0 -0
  190. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/presets/forecast_calibration_profiles.yaml +0 -0
  191. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/presets/golden_benchmark.yaml +0 -0
  192. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/presets/safety_contract_default.yaml +0 -0
  193. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/presets/validation_profiles.yaml +0 -0
  194. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/audit.py +0 -0
  195. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/calibration_gate.py +0 -0
  196. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/config.py +0 -0
  197. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/control.py +0 -0
  198. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/control_eval.py +0 -0
  199. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/data_blend.py +0 -0
  200. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/dataset.py +0 -0
  201. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/evaluation.py +0 -0
  202. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/local_ai.py +0 -0
  203. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/local_ai_gate.py +0 -0
  204. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/losses.py +0 -0
  205. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/metrics.py +0 -0
  206. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/model_registry.py +0 -0
  207. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/research/neural_control.py +0 -0
  208. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/scenarios/__init__.py +0 -0
  209. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/scenarios/generator.py +0 -0
  210. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/scenarios/study_pack.py +0 -0
  211. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/templates/__init__.py +0 -0
  212. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/templates/default_algorithm.py +0 -0
  213. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/templates/demos/__init__.py +0 -0
  214. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/templates/demos/live_stage_demo.py +0 -0
  215. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/templates/pico_pump/README.md +0 -0
  216. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/templates/pico_pump/code.py +0 -0
  217. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/templates/pico_pump/serial_protocol.txt +0 -0
  218. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/templates/scenarios/__init__.py +0 -0
  219. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/templates/scenarios/chaos_insulin_stacking.json +0 -0
  220. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/templates/scenarios/chaos_runaway_ai.json +0 -0
  221. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/templates/scenarios/example_scenario.json +0 -0
  222. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/templates/scenarios/exercise_stress.json +0 -0
  223. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/templates/uno_q/README.md +0 -0
  224. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/templates/uno_q/iints_supervisor_bridge.ino +0 -0
  225. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/utils/__init__.py +0 -0
  226. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/utils/csv_safety.py +0 -0
  227. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/utils/run_io.py +0 -0
  228. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/utils/url_safety.py +0 -0
  229. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/validation/__init__.py +0 -0
  230. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/validation/golden.py +0 -0
  231. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/validation/replay.py +0 -0
  232. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/validation/run_doctor.py +0 -0
  233. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/validation/run_validation.py +0 -0
  234. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/validation/safety_contract.py +0 -0
  235. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/visualization/__init__.py +0 -0
  236. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints/visualization/uncertainty_cloud.py +0 -0
  237. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints_sdk_python35.egg-info/dependency_links.txt +0 -0
  238. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints_sdk_python35.egg-info/entry_points.txt +0 -0
  239. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/iints_sdk_python35.egg-info/top_level.txt +0 -0
  240. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_ai/__init__.py +0 -0
  241. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_ai/lineage.py +0 -0
  242. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/__init__.py +0 -0
  243. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/audit.py +0 -0
  244. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/bias_hooks.py +0 -0
  245. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/bundle.py +0 -0
  246. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/certification.py +0 -0
  247. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/cli.py +0 -0
  248. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/compare.py +0 -0
  249. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/conformance.py +0 -0
  250. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/contracts.py +0 -0
  251. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/crypto.py +0 -0
  252. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/data/conformance/vectors/delegation.json +0 -0
  253. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/data/conformance/vectors/fingerprint.json +0 -0
  254. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/data/conformance/vectors/grading.json +0 -0
  255. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/data/conformance/vectors/signing.json +0 -0
  256. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/delegate.py +0 -0
  257. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/diffing.py +0 -0
  258. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/drift.py +0 -0
  259. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/exceptions.py +0 -0
  260. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/fingerprint.py +0 -0
  261. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/fingerprint_store.py +0 -0
  262. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/hf.py +0 -0
  263. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/keys/mdmp_pub_v1.pem +0 -0
  264. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/llm_provenance.py +0 -0
  265. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/migrate.py +0 -0
  266. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/policy.py +0 -0
  267. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/prov.py +0 -0
  268. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/registry.py +0 -0
  269. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/runner.py +0 -0
  270. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/schema_export.py +0 -0
  271. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/synthetic.py +0 -0
  272. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/trust.py +0 -0
  273. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_core/visualizer.py +0 -0
  274. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_flavors/__init__.py +0 -0
  275. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_integrations/__init__.py +0 -0
  276. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_integrations/dvc.py +0 -0
  277. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_integrations/mlflow.py +0 -0
  278. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/src/mdmp_integrations/wandb.py +0 -0
  279. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_ci_governance.py +0 -0
  280. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_cli_algorithm_loading.py +0 -0
  281. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_cli_booth_demo.py +0 -0
  282. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_cli_carelink_workbench.py +0 -0
  283. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_cli_cloud_import_security.py +0 -0
  284. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_cli_demo_export.py +0 -0
  285. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_cli_expo_tools.py +0 -0
  286. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_cli_patient_runtime.py +0 -0
  287. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_cli_poster.py +0 -0
  288. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_cli_run_summary.py +0 -0
  289. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_install_doctor.py +0 -0
  290. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_jetson_endurance.py +0 -0
  291. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_plugin_system.py +0 -0
  292. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_population.py +0 -0
  293. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_research_realism_tools.py +0 -0
  294. {iints_sdk_python35-1.5.9 → iints_sdk_python35-1.5.11}/tests/test_simulator_calibration.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iints-sdk-python35
3
- Version: 1.5.9
3
+ Version: 1.5.11
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
@@ -18,7 +18,7 @@ Description-Content-Type: text/markdown
18
18
  License-File: LICENSE
19
19
  License-File: NOTICE
20
20
  License-File: LICENSE-MIT-IINTS-LEGACY
21
- Requires-Dist: fastapi<0.136.4,>=0.115.0
21
+ Requires-Dist: fastapi!=0.136.3,<1.0.0,>=0.115.0
22
22
  Requires-Dist: numpy<3.0.0,>=1.24.0
23
23
  Requires-Dist: pandas<3.0.0,>=2.0.0
24
24
  Requires-Dist: pydantic<3.0.0,>=2.0.0
@@ -34,6 +34,7 @@ Requires-Dist: fpdf2<3.0.0,>=2.8.0; extra == "reports"
34
34
  Requires-Dist: matplotlib<4.0.0,>=3.5.0; extra == "reports"
35
35
  Requires-Dist: openpyxl<4.0.0,>=3.0.0; extra == "reports"
36
36
  Requires-Dist: pillow<13.0.0,>=12.1.1; extra == "reports"
37
+ Requires-Dist: SciencePlots<3.0.0,>=2.1.0; extra == "reports"
37
38
  Requires-Dist: seaborn<1.0.0,>=0.11.0; extra == "reports"
38
39
  Provides-Extra: full
39
40
  Requires-Dist: fpdf2<3.0.0,>=2.8.0; extra == "full"
@@ -41,6 +42,7 @@ Requires-Dist: matplotlib<4.0.0,>=3.5.0; extra == "full"
41
42
  Requires-Dist: openpyxl<4.0.0,>=3.0.0; extra == "full"
42
43
  Requires-Dist: pyserial<4.0,>=3.5; extra == "full"
43
44
  Requires-Dist: pillow<13.0.0,>=12.1.1; extra == "full"
45
+ Requires-Dist: SciencePlots<3.0.0,>=2.1.0; extra == "full"
44
46
  Requires-Dist: seaborn<1.0.0,>=0.11.0; extra == "full"
45
47
  Provides-Extra: dev
46
48
  Requires-Dist: pytest<10.0.0,>=7.0.0; extra == "dev"
@@ -117,13 +119,13 @@ Full documentation: [python35.github.io/IINTS-SDK](https://python35.github.io/II
117
119
 
118
120
  ## Live Demo
119
121
 
120
- For a Zoom call, jury walkthrough, or sponsor demo where you want to show both the code and the generated outputs in one terminal flow:
122
+ For a Zoom call, jury walkthrough, or sponsor demo where you want the story first and code as proof:
121
123
 
122
124
  ```bash
123
- iints demo-live --output-dir results/live_demo
125
+ iints demo eucys --output-dir results/live_demo
124
126
  ```
125
127
 
126
- That exports the showable demo script, prints the key SDK calls, runs the demo, and lists the poster plus proof artifacts to open next.
128
+ Use `iints demo doctor` for clinical feedback conversations and `iints demo booth` for public digital-patient demos.
127
129
 
128
130
  ---
129
131
 
@@ -50,13 +50,13 @@ Full documentation: [python35.github.io/IINTS-SDK](https://python35.github.io/II
50
50
 
51
51
  ## Live Demo
52
52
 
53
- For a Zoom call, jury walkthrough, or sponsor demo where you want to show both the code and the generated outputs in one terminal flow:
53
+ For a Zoom call, jury walkthrough, or sponsor demo where you want the story first and code as proof:
54
54
 
55
55
  ```bash
56
- iints demo-live --output-dir results/live_demo
56
+ iints demo eucys --output-dir results/live_demo
57
57
  ```
58
58
 
59
- That exports the showable demo script, prints the key SDK calls, runs the demo, and lists the poster plus proof artifacts to open next.
59
+ Use `iints demo doctor` for clinical feedback conversations and `iints demo booth` for public digital-patient demos.
60
60
 
61
61
  ---
62
62
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "iints-sdk-python35"
7
- version = "1.5.9"
7
+ version = "1.5.11"
8
8
  authors = [
9
9
  { name="Rune Bobbaers", email="rune.bobbaers@gmail.com" },
10
10
  ]
@@ -24,7 +24,7 @@ classifiers = [
24
24
  "Development Status :: 5 - Production/Stable",
25
25
  ]
26
26
  dependencies = [
27
- "fastapi>=0.115.0,<0.136.4",
27
+ "fastapi>=0.115.0,!=0.136.3,<1.0.0",
28
28
  "numpy>=1.24.0,<3.0.0",
29
29
  "pandas>=2.0.0,<3.0.0",
30
30
  "pydantic>=2.0.0,<3.0.0",
@@ -44,6 +44,7 @@ reports = [
44
44
  "matplotlib>=3.5.0,<4.0.0",
45
45
  "openpyxl>=3.0.0,<4.0.0",
46
46
  "pillow>=12.1.1,<13.0.0",
47
+ "SciencePlots>=2.1.0,<3.0.0",
47
48
  "seaborn>=0.11.0,<1.0.0",
48
49
  ]
49
50
  full = [
@@ -52,6 +53,7 @@ full = [
52
53
  "openpyxl>=3.0.0,<4.0.0",
53
54
  "pyserial>=3.5,<4.0",
54
55
  "pillow>=12.1.1,<13.0.0",
56
+ "SciencePlots>=2.1.0,<3.0.0",
55
57
  "seaborn>=0.11.0,<1.0.0",
56
58
  ]
57
59
  dev = [
@@ -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.5.9"
14
+ __version__ = "1.5.11"
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.
@@ -237,9 +237,10 @@ def generate_agp_assets(
237
237
  output_dir: Optional[str] = None,
238
238
  subject_name: str = "Research simulation",
239
239
  summary_json_path: Optional[str] = None,
240
+ export_svg: bool = True,
240
241
  ) -> Optional[dict]:
241
242
  """
242
- Export AGP-style PNG assets and summary JSON from dense CGM/simulation data.
243
+ Export AGP-style PNG/SVG assets and summary JSON from dense CGM/simulation data.
243
244
  """
244
245
  if output_dir is None:
245
246
  return None
@@ -249,6 +250,7 @@ def generate_agp_assets(
249
250
  output_dir,
250
251
  subject_name=subject_name,
251
252
  summary_json_path=summary_json_path,
253
+ export_svg=export_svg,
252
254
  )
253
255
 
254
256
  # You can also define __all__ to explicitly control what gets imported with `from iints import *`
@@ -1,7 +1,15 @@
1
1
  from .assistant import AIResponse, IINTSAssistant
2
2
  from .backends import DEFAULT_MINISTRAL_MODEL, DEFAULT_OLLAMA_HOST, OllamaBackend
3
3
  from .mdmp_guard import GuardResult, MDMPGuard
4
- from .model_catalog import LocalMistralModelProfile, list_local_mistral_models
4
+ from .model_catalog import (
5
+ DEFAULT_MISTRAL_API_MODEL,
6
+ DEFAULT_MISTRAL_API_REASONING_EFFORT,
7
+ LocalMistralModelProfile,
8
+ MistralAPIMigrationProfile,
9
+ list_local_mistral_models,
10
+ list_mistral_api_migrations,
11
+ migrate_mistral_api_model,
12
+ )
5
13
  from .prepare import prepare_ai_ready_artifacts
6
14
 
7
15
  __all__ = [
@@ -12,7 +20,12 @@ __all__ = [
12
20
  "OllamaBackend",
13
21
  "GuardResult",
14
22
  "MDMPGuard",
23
+ "DEFAULT_MISTRAL_API_MODEL",
24
+ "DEFAULT_MISTRAL_API_REASONING_EFFORT",
15
25
  "LocalMistralModelProfile",
26
+ "MistralAPIMigrationProfile",
16
27
  "list_local_mistral_models",
28
+ "list_mistral_api_migrations",
29
+ "migrate_mistral_api_model",
17
30
  "prepare_ai_ready_artifacts",
18
31
  ]
@@ -82,12 +82,20 @@ class IINTSAssistant:
82
82
  ollama_backend.ensure_model_ready()
83
83
  return local_backend
84
84
  if requested == "api":
85
- api_backend: CompletionBackend = MistralAPIBackend()
85
+ api_backend: CompletionBackend = MistralAPIBackend(model_name=model)
86
86
  if api_backend.available():
87
87
  return api_backend
88
+ api_model = getattr(api_backend, "model_name", "mistral-small-latest")
89
+ api_reasoning = getattr(api_backend, "reasoning_effort", None)
90
+ reasoning_hint = (
91
+ f" with reasoning_effort='{api_reasoning}'"
92
+ if isinstance(api_reasoning, str) and api_reasoning.strip()
93
+ else ""
94
+ )
88
95
  raise RuntimeError(
89
96
  "Cloud API fallback is not enabled in this SDK build yet. "
90
- "Use mode='local' with Ollama."
97
+ "Use mode='local' with Ollama, or configure an external Mistral client with "
98
+ f"`{api_model}`{reasoning_hint}."
91
99
  )
92
100
  raise ValueError(f"Unsupported AI mode: {mode}")
93
101
 
@@ -125,3 +133,6 @@ class IINTSAssistant:
125
133
 
126
134
  def review_realism(self, run: dict[str, Any]) -> AIResponse:
127
135
  return self._run_task("review_realism", run)
136
+
137
+ def predict_insulin(self, payload: dict[str, Any]) -> AIResponse:
138
+ return self._run_task("predict_insulin", payload)
@@ -0,0 +1,46 @@
1
+ from __future__ import annotations
2
+
3
+ from ..model_catalog import (
4
+ DEFAULT_MISTRAL_API_MODEL,
5
+ DEFAULT_MISTRAL_API_REASONING_EFFORT,
6
+ migrate_mistral_api_model,
7
+ )
8
+
9
+
10
+ class MistralAPIBackend:
11
+ backend_name = "mistral_api"
12
+
13
+ def __init__(
14
+ self,
15
+ *,
16
+ model_name: str = DEFAULT_MISTRAL_API_MODEL,
17
+ reasoning_effort: str | None = DEFAULT_MISTRAL_API_REASONING_EFFORT,
18
+ **kwargs,
19
+ ) -> None:
20
+ migrated_model, migrated_reasoning, migrated = migrate_mistral_api_model(model_name)
21
+ self.requested_model_name = model_name
22
+ self.model_name = migrated_model
23
+ self.reasoning_effort = migrated_reasoning if migrated_reasoning is not None else reasoning_effort
24
+ self.model_was_migrated = migrated
25
+
26
+ def available(self) -> bool:
27
+ return False
28
+
29
+ def complete(self, *, system_prompt: str, user_prompt: str) -> str:
30
+ migration_hint = (
31
+ f" Requested deprecated model '{self.requested_model_name}' was mapped to "
32
+ f"'{self.model_name}'."
33
+ if self.model_was_migrated
34
+ else ""
35
+ )
36
+ reasoning_hint = (
37
+ f" Default Mistral reasoning_effort is '{self.reasoning_effort}'."
38
+ if self.reasoning_effort
39
+ else ""
40
+ )
41
+ raise RuntimeError(
42
+ "Cloud fallback is not enabled in this SDK build yet. "
43
+ "Use mode='local' with Ollama for the open Ministral 3 model, or configure "
44
+ f"your external Mistral client for '{self.model_name}'."
45
+ f"{reasoning_hint}{migration_hint}"
46
+ )
@@ -12,7 +12,13 @@ from typing_extensions import Annotated
12
12
 
13
13
  from .assistant import AIResponse, IINTSAssistant
14
14
  from .backends import DEFAULT_MINISTRAL_MODEL, OllamaBackend
15
- from .model_catalog import list_local_mistral_models
15
+ from .model_catalog import (
16
+ DEFAULT_MISTRAL_API_MODEL,
17
+ DEFAULT_MISTRAL_API_REASONING_EFFORT,
18
+ STRONG_MISTRAL_API_MODEL,
19
+ list_local_mistral_models,
20
+ list_mistral_api_migrations,
21
+ )
16
22
  from .prepare import prepare_ai_ready_artifacts
17
23
 
18
24
 
@@ -183,10 +189,31 @@ def models() -> None:
183
189
  )
184
190
 
185
191
  console.print(table)
192
+ migration_table = Table(title="Mistral Serverless Migration Guide")
193
+ migration_table.add_column("Deprecated", style="yellow", overflow="fold")
194
+ migration_table.add_column("Replacement", style="cyan", no_wrap=True)
195
+ migration_table.add_column("Reasoning")
196
+ migration_table.add_column("Retires")
197
+ migration_table.add_column("Use Case", overflow="fold")
198
+ for migration_profile in list_mistral_api_migrations():
199
+ reasoning = migration_profile.reasoning_effort or "n/a"
200
+ migration_table.add_row(
201
+ ", ".join(migration_profile.deprecated_models),
202
+ migration_profile.replacement_model,
203
+ reasoning,
204
+ migration_profile.retirement_date,
205
+ migration_profile.use_case,
206
+ )
207
+ console.print(migration_table)
186
208
  console.print(
187
209
  "[dim]Tip:[/dim] start with "
188
210
  f"`{DEFAULT_MINISTRAL_MODEL}` unless you know your hardware can comfortably run a larger local model."
189
211
  )
212
+ console.print(
213
+ "[dim]Serverless:[/dim] use "
214
+ f"`{DEFAULT_MISTRAL_API_MODEL}` with `reasoning_effort={DEFAULT_MISTRAL_API_REASONING_EFFORT}` "
215
+ f"for small reasoning/code tasks, or `{STRONG_MISTRAL_API_MODEL}` for stronger review."
216
+ )
190
217
 
191
218
 
192
219
  @app.command(name="prepare")
@@ -0,0 +1,174 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+
5
+ from .backends.ollama import DEFAULT_MINISTRAL_MODEL
6
+
7
+ DEFAULT_MISTRAL_API_MODEL = "mistral-small-latest"
8
+ DEFAULT_MISTRAL_API_REASONING_EFFORT = "high"
9
+ STRONG_MISTRAL_API_MODEL = "mistral-medium-3-5"
10
+ DEFAULT_MISTRAL_OCR_MODEL = "mistral-ocr-latest"
11
+ DEFAULT_MISTRAL_MODERATION_MODEL = "mistral-moderation-2603"
12
+ DEFAULT_MISTRAL_TRANSCRIBE_MODEL = "voxtral-mini-latest"
13
+
14
+
15
+ @dataclass(frozen=True)
16
+ class LocalMistralModelProfile:
17
+ tag: str
18
+ label: str
19
+ approx_download_gb: float
20
+ recommended_system_ram_gb: int
21
+ recommended_vram_gb: int | None
22
+ fit: str
23
+ notes: str
24
+ aliases: tuple[str, ...] = ()
25
+
26
+
27
+ @dataclass(frozen=True)
28
+ class MistralAPIMigrationProfile:
29
+ deprecated_models: tuple[str, ...]
30
+ replacement_model: str
31
+ reasoning_effort: str | None
32
+ retirement_date: str
33
+ use_case: str
34
+ notes: str
35
+
36
+
37
+ LOCAL_MISTRAL_MODEL_PROFILES: tuple[LocalMistralModelProfile, ...] = (
38
+ LocalMistralModelProfile(
39
+ tag="ministral-3:3b",
40
+ label="Ministral 3 3B",
41
+ approx_download_gb=3.0,
42
+ recommended_system_ram_gb=16,
43
+ recommended_vram_gb=6,
44
+ fit="Entry-level laptop / small edge box",
45
+ notes="Best starting point for CPU-only systems or modest GPUs. Fastest option, lowest memory pressure.",
46
+ aliases=("ministral-3:3b",),
47
+ ),
48
+ LocalMistralModelProfile(
49
+ tag=DEFAULT_MINISTRAL_MODEL,
50
+ label="Ministral 3 8B",
51
+ approx_download_gb=6.0,
52
+ recommended_system_ram_gb=24,
53
+ recommended_vram_gb=10,
54
+ fit="Balanced desktop / strong laptop",
55
+ notes="Recommended default for most users. Best trade-off between quality, speed, and local memory footprint.",
56
+ aliases=("ministral", "ministral-3", "ministral-3:8b"),
57
+ ),
58
+ LocalMistralModelProfile(
59
+ tag="ministral-3:14b",
60
+ label="Ministral 3 14B",
61
+ approx_download_gb=10.0,
62
+ recommended_system_ram_gb=32,
63
+ recommended_vram_gb=16,
64
+ fit="High-end workstation",
65
+ notes="Use when you have plenty of RAM or a strong GPU and want better reasoning depth at the cost of latency.",
66
+ aliases=("ministral-3:14b",),
67
+ ),
68
+ )
69
+
70
+
71
+ MISTRAL_API_MIGRATION_PROFILES: tuple[MistralAPIMigrationProfile, ...] = (
72
+ MistralAPIMigrationProfile(
73
+ deprecated_models=("devstral-small-2507", "devstral-small-latest"),
74
+ replacement_model=DEFAULT_MISTRAL_API_MODEL,
75
+ reasoning_effort=DEFAULT_MISTRAL_API_REASONING_EFFORT,
76
+ retirement_date="2026-05-31",
77
+ use_case="code and agentic helper",
78
+ notes="Use Mistral Small 4 through the stable latest alias.",
79
+ ),
80
+ MistralAPIMigrationProfile(
81
+ deprecated_models=("devstral-medium-2507", "devstral-2512", "devstral-latest"),
82
+ replacement_model=STRONG_MISTRAL_API_MODEL,
83
+ reasoning_effort=DEFAULT_MISTRAL_API_REASONING_EFFORT,
84
+ retirement_date="2026-05-31 / 2026-07-31",
85
+ use_case="strong code and research assistant",
86
+ notes="Use Mistral Medium 3.5 for higher-complexity code/research review.",
87
+ ),
88
+ MistralAPIMigrationProfile(
89
+ deprecated_models=("magistral-small-2509",),
90
+ replacement_model=DEFAULT_MISTRAL_API_MODEL,
91
+ reasoning_effort=DEFAULT_MISTRAL_API_REASONING_EFFORT,
92
+ retirement_date="2026-07-31",
93
+ use_case="small reasoning",
94
+ notes="Mistral Small 4 now supports adjustable reasoning.",
95
+ ),
96
+ MistralAPIMigrationProfile(
97
+ deprecated_models=("magistral-medium-2509", "magistral-medium-latest"),
98
+ replacement_model=STRONG_MISTRAL_API_MODEL,
99
+ reasoning_effort=DEFAULT_MISTRAL_API_REASONING_EFFORT,
100
+ retirement_date="2026-07-31",
101
+ use_case="medium reasoning",
102
+ notes="Mistral Medium 3.5 supports adjustable reasoning for harder tasks.",
103
+ ),
104
+ MistralAPIMigrationProfile(
105
+ deprecated_models=(
106
+ "mistral-large-2411",
107
+ "pixtral-large-2411",
108
+ "mistral-medium-2505",
109
+ "mistral-medium-2508",
110
+ ),
111
+ replacement_model=STRONG_MISTRAL_API_MODEL,
112
+ reasoning_effort=DEFAULT_MISTRAL_API_REASONING_EFFORT,
113
+ retirement_date="2026-05-31 / 2026-08-31",
114
+ use_case="general strong cloud model",
115
+ notes="Medium 3.5 is the current stronger general-purpose replacement.",
116
+ ),
117
+ MistralAPIMigrationProfile(
118
+ deprecated_models=("mistral-small-2506",),
119
+ replacement_model=DEFAULT_MISTRAL_API_MODEL,
120
+ reasoning_effort=DEFAULT_MISTRAL_API_REASONING_EFFORT,
121
+ retirement_date="2026-07-31",
122
+ use_case="small general cloud model",
123
+ notes="Use the Mistral Small 4 latest alias.",
124
+ ),
125
+ MistralAPIMigrationProfile(
126
+ deprecated_models=("open-mistral-nemo-2407",),
127
+ replacement_model="ministral-8b-2512",
128
+ reasoning_effort=None,
129
+ retirement_date="2026-07-31",
130
+ use_case="small/low-cost serverless model",
131
+ notes="Serverless replacement for Nemo. Local SDK defaults still use Ollama `ministral-3:8b`.",
132
+ ),
133
+ MistralAPIMigrationProfile(
134
+ deprecated_models=("mistral-ocr-2505",),
135
+ replacement_model=DEFAULT_MISTRAL_OCR_MODEL,
136
+ reasoning_effort=None,
137
+ retirement_date="2026-05-31",
138
+ use_case="OCR",
139
+ notes="Use OCR 3 through the latest alias.",
140
+ ),
141
+ MistralAPIMigrationProfile(
142
+ deprecated_models=("mistral-moderation-2411", "mistral-moderation-latest"),
143
+ replacement_model=DEFAULT_MISTRAL_MODERATION_MODEL,
144
+ reasoning_effort=None,
145
+ retirement_date="2026-06-30",
146
+ use_case="moderation",
147
+ notes="Use Mistral Moderation 2.",
148
+ ),
149
+ MistralAPIMigrationProfile(
150
+ deprecated_models=("voxtral-mini-2507",),
151
+ replacement_model=DEFAULT_MISTRAL_TRANSCRIBE_MODEL,
152
+ reasoning_effort=None,
153
+ retirement_date="2026-05-31",
154
+ use_case="audio transcription",
155
+ notes="Use Voxtral Mini Transcribe 2.0 through the latest alias.",
156
+ ),
157
+ )
158
+
159
+
160
+ def list_local_mistral_models() -> list[LocalMistralModelProfile]:
161
+ return list(LOCAL_MISTRAL_MODEL_PROFILES)
162
+
163
+
164
+ def list_mistral_api_migrations() -> list[MistralAPIMigrationProfile]:
165
+ return list(MISTRAL_API_MIGRATION_PROFILES)
166
+
167
+
168
+ def migrate_mistral_api_model(model_name: str) -> tuple[str, str | None, bool]:
169
+ requested = model_name.strip()
170
+ requested_key = requested.lower()
171
+ for profile in MISTRAL_API_MIGRATION_PROFILES:
172
+ if requested_key in {model.lower() for model in profile.deprecated_models}:
173
+ return profile.replacement_model, profile.reasoning_effort, True
174
+ return requested, None, False
@@ -10,6 +10,7 @@ TaskName = Literal[
10
10
  "detect_anomalies",
11
11
  "generate_report",
12
12
  "review_realism",
13
+ "predict_insulin",
13
14
  ]
14
15
  MAX_PROMPT_PAYLOAD_CHARS = 12000
15
16
 
@@ -71,6 +72,22 @@ TASK_TEMPLATES: dict[TaskName, str] = {
71
72
  "Focus on glycemic ranges, excursion patterns, insulin behavior, safety overrides, and whether the data looks internally coherent.\n\n"
72
73
  "Input JSON:\n{data}"
73
74
  ),
75
+ "predict_insulin": (
76
+ "You are reviewing a simulated bi-hormonal (Insulin + Glucagon) dose candidate inside the IINTS-AF research sandbox.\n"
77
+ "You are not controlling a real pump, not treating a patient, and not giving medical advice.\n"
78
+ "You will be provided with the current biological state of the patient, which now includes deep science metrics like "
79
+ "active_insulin, insulin_effect, plasma_glucagon_pg_ml, and the haaf_metric (Hypoglycemia-Associated Autonomic Failure memory). "
80
+ "You will also see a mathematically optimal insulin dose calculated by a deterministic MPC solver running differential equations.\n\n"
81
+ "Your task is to critique the candidate and decide on both Insulin and Glucagon doses for research simulation only. "
82
+ "Never increase insulin above the deterministic MPC dose or safety caps. "
83
+ "If glucose is low, predicted low, falling quickly, or active insulin is high, reduce the insulin dose to 0.0. "
84
+ "If the patient is in severe hypoglycemia risk and HAAF is high (meaning natural rescue is failing), "
85
+ "you may propose a simulation-only glucagon rescue candidate. The simulator will still apply hard glucagon safety caps.\n"
86
+ "Respond with a short explanation followed by exactly this format:\n"
87
+ "FINAL_DOSE: <number>\n"
88
+ "FINAL_GLUCAGON_DOSE_MG: <number>\n\n"
89
+ "Input JSON:\n{data}"
90
+ ),
74
91
  }
75
92
 
76
93