ratio1 3.4.109__tar.gz → 3.4.110__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 (231) hide show
  1. {ratio1-3.4.109 → ratio1-3.4.110}/PKG-INFO +1 -1
  2. {ratio1-3.4.109 → ratio1-3.4.110}/pyproject.toml +1 -1
  3. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/_ver.py +1 -1
  4. ratio1-3.4.110/tutorials/ex26_cerviguard_war_loopback.py +374 -0
  5. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/dauth_check.py +2 -1
  6. {ratio1-3.4.109 → ratio1-3.4.110}/.devcontainer/Dockerfile +0 -0
  7. {ratio1-3.4.109 → ratio1-3.4.110}/.devcontainer/devcontainer.json +0 -0
  8. {ratio1-3.4.109 → ratio1-3.4.110}/.gitattributes +0 -0
  9. {ratio1-3.4.109 → ratio1-3.4.110}/.github/workflows/python-publish.yml +0 -0
  10. {ratio1-3.4.109 → ratio1-3.4.110}/.gitignore +0 -0
  11. {ratio1-3.4.109 → ratio1-3.4.110}/.vscode/launch.json +0 -0
  12. {ratio1-3.4.109 → ratio1-3.4.110}/LICENSE +0 -0
  13. {ratio1-3.4.109 → ratio1-3.4.110}/README.md +0 -0
  14. {ratio1-3.4.109 → ratio1-3.4.110}/TODOs.md +0 -0
  15. {ratio1-3.4.109 → ratio1-3.4.110}/__init__.py +0 -0
  16. {ratio1-3.4.109 → ratio1-3.4.110}/r1ctl.MD +0 -0
  17. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/__init__.py +0 -0
  18. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/base/__init__.py +0 -0
  19. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/base/distributed_custom_code_presets.py +0 -0
  20. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/base/generic_session.py +0 -0
  21. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/base/instance.py +0 -0
  22. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/base/payload/__init__.py +0 -0
  23. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/base/payload/payload.py +0 -0
  24. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/base/pipeline.py +0 -0
  25. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/base/plugin_template.py +0 -0
  26. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/base/responses.py +0 -0
  27. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/base/transaction.py +0 -0
  28. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/base/webapp_pipeline.py +0 -0
  29. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/base_decentra_object.py +0 -0
  30. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/bc/__init__.py +0 -0
  31. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/bc/base.py +0 -0
  32. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/bc/chain.py +0 -0
  33. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/bc/ec.py +0 -0
  34. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/bc/evm.py +0 -0
  35. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/certs/141.136.35.100.crt +0 -0
  36. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/certs/195.35.29.4.crt +0 -0
  37. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/certs/31.97.72.187.crt +0 -0
  38. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/certs/51.15.142.167.crt +0 -0
  39. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/certs/72.60.187.24.crt +0 -0
  40. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/certs/72.60.81.67.crt +0 -0
  41. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/certs/72.60.83.78.crt +0 -0
  42. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/certs/__init__.py +0 -0
  43. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/certs/a0d9818f.ala.eu-central-1.emqxsl.com.crt +0 -0
  44. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/certs/r9092118.ala.eu-central-1.emqxsl.com.crt +0 -0
  45. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/certs/s624dbd4.ala.us-east-1.emqxsl.com.crt +0 -0
  46. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/cli/README.md +0 -0
  47. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/cli/cli.py +0 -0
  48. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/cli/cli_commands.py +0 -0
  49. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/cli/nodes.py +0 -0
  50. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/cli/oracles.py +0 -0
  51. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/cli/package_update.py +0 -0
  52. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/code_cheker/__init__.py +0 -0
  53. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/code_cheker/base.py +0 -0
  54. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/code_cheker/checker.py +0 -0
  55. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/comm/__init__.py +0 -0
  56. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/comm/amqp_wrapper.py +0 -0
  57. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/comm/base_comm_wrapper.py +0 -0
  58. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/comm/mqtt_wrapper.py +0 -0
  59. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/const/README.md +0 -0
  60. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/const/__init__.py +0 -0
  61. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/const/apps.py +0 -0
  62. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/const/base.py +0 -0
  63. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/const/comms.py +0 -0
  64. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/const/environment.py +0 -0
  65. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/const/evm_net.py +0 -0
  66. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/const/formatter.py +0 -0
  67. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/const/heartbeat.py +0 -0
  68. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/const/misc.py +0 -0
  69. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/const/payload.py +0 -0
  70. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/const/plugins/deeploy_const.py +0 -0
  71. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/default/__init__.py +0 -0
  72. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/default/instance/__init__.py +0 -0
  73. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/default/instance/chain_dist_custom_job_01_plugin.py +0 -0
  74. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/default/instance/custom_webapi_01_plugin.py +0 -0
  75. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/default/instance/generic_http_01_plugin.py +0 -0
  76. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/default/instance/net_mon_01_plugin.py +0 -0
  77. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/default/instance/telegram_basic_bot_01_plugin.py +0 -0
  78. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/default/instance/telegram_conversational_bot_01_plugin.py +0 -0
  79. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/default/instance/view_scene_01_plugin.py +0 -0
  80. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/default/session/mqtt_session.py +0 -0
  81. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/io_formatter/__init__.py +0 -0
  82. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/io_formatter/base/__init__.py +0 -0
  83. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/io_formatter/base/base_formatter.py +0 -0
  84. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/io_formatter/default/__init__.py +0 -0
  85. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/io_formatter/default/a_dummy.py +0 -0
  86. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/io_formatter/default/aixp1.py +0 -0
  87. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/io_formatter/default/default.py +0 -0
  88. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/io_formatter/io_formatter_manager.py +0 -0
  89. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/ipfs/__init__.py +0 -0
  90. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/ipfs/ifps_keygen +0 -0
  91. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/ipfs/ipfs_setup/ipfs.service +0 -0
  92. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/ipfs/ipfs_setup/launch_service.sh +0 -0
  93. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/ipfs/ipfs_setup/restart.sh +0 -0
  94. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/ipfs/ipfs_setup/run.sh +0 -0
  95. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/ipfs/ipfs_setup/setup.sh +0 -0
  96. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/ipfs/ipfs_setup/show.sh +0 -0
  97. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/ipfs/ipfs_setup/write_key.sh +0 -0
  98. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/ipfs/r1fs.py +0 -0
  99. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/__init__.py +0 -0
  100. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/base_logger.py +0 -0
  101. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/logger_mixins/__init__.py +0 -0
  102. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/logger_mixins/class_instance_mixin.py +0 -0
  103. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/logger_mixins/computer_vision_mixin.py +0 -0
  104. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/logger_mixins/datetime_mixin.py +0 -0
  105. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/logger_mixins/download_mixin.py +0 -0
  106. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/logger_mixins/general_serialization_mixin.py +0 -0
  107. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/logger_mixins/json_serialization_mixin.py +0 -0
  108. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/logger_mixins/machine_mixin.py +0 -0
  109. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/logger_mixins/pickle_serialization_mixin.py +0 -0
  110. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/logger_mixins/process_mixin.py +0 -0
  111. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/logger_mixins/resource_size_mixin.py +0 -0
  112. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/logger_mixins/timers_mixin.py +0 -0
  113. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/logger_mixins/upload_mixin.py +0 -0
  114. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/logger_mixins/utils_mixin.py +0 -0
  115. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/small_logger.py +0 -0
  116. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/tzlocal/__init__.py +0 -0
  117. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/tzlocal/unix.py +0 -0
  118. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/tzlocal/utils.py +0 -0
  119. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/tzlocal/win32.py +0 -0
  120. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/logging/tzlocal/windows_tz.py +0 -0
  121. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/plugins_manager_mixin.py +0 -0
  122. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/utils/__init__.py +0 -0
  123. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/utils/comm_utils.py +0 -0
  124. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/utils/config.py +0 -0
  125. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/utils/dotenv.py +0 -0
  126. {ratio1-3.4.109 → ratio1-3.4.110}/ratio1/utils/oracle_sync/oracle_tester.py +0 -0
  127. {ratio1-3.4.109 → ratio1-3.4.110}/requirements.txt +0 -0
  128. {ratio1-3.4.109 → ratio1-3.4.110}/template.env +0 -0
  129. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/.example_env +0 -0
  130. {ratio1-3.4.109/tutorials/25_cerviguard_war_loopback → ratio1-3.4.110/tutorials/26_cerviguard_war_loopback}/cerviguard_test_ui.html +0 -0
  131. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/8. custom_code_fastapi_assets/index.html +0 -0
  132. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/9. code_sandbox_from_scratch_assets/index.html +0 -0
  133. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/_example_pk_sdk.pem +0 -0
  134. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/eth2025/deploy_home_safety.py +0 -0
  135. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/eth2025/deploy_maintenance_monitoring.py +0 -0
  136. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex01_part1_connect.py +0 -0
  137. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex01_part2_filter.py +0 -0
  138. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex01_part3_adv_filter.py +0 -0
  139. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex02_part1_deploy_webapi.py +0 -0
  140. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex02_part2_deploy_plugin.py +0 -0
  141. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex02_part3_deploy_r1fs_test.py +0 -0
  142. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex03_custom_code_on_one_remote__example_1.py +0 -0
  143. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex04_custom_code_on_one_remote__example_2.py +0 -0
  144. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex05_custom_code_on_one_remote__example_3.py +0 -0
  145. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex06_custom_code_on_multiple_remotes__example_1.py +0 -0
  146. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex07_custom_code_on_multiple_remotes__example_2.py +0 -0
  147. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex08_custom_webapi.py +0 -0
  148. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex09_code_sandbox_from_scratch.py +0 -0
  149. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex10_telegram_echo_bot.py +0 -0
  150. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex11_telegram_blackjack_bot.py +0 -0
  151. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex12_telegram_smart_bot.py +0 -0
  152. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex13_launch_repo_based_webapp.py +0 -0
  153. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex14_wallets.py +0 -0
  154. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex15_telegram_rogue_style_game.py +0 -0
  155. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex16_launch_repo_based_http_server.py +0 -0
  156. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex17_launch_repo_based_balanced_webapp.py +0 -0
  157. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex18_deploy_container_webapi.py +0 -0
  158. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex19_deeploy_container_example.py +0 -0
  159. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex20_deeploy_telegram_bot.py +0 -0
  160. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex21_telegram_community_bot.py +0 -0
  161. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex22_deeploy_custom_code.py +0 -0
  162. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex23_deploy_worker_app.py +0 -0
  163. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex24_multi_video_stream_monitor.py +0 -0
  164. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/ex25_local_serving_api.py +0 -0
  165. {ratio1-3.4.109 → ratio1-3.4.110}/tutorials/video_presentation/1. hello_world.ipynb +0 -0
  166. {ratio1-3.4.109 → ratio1-3.4.110}/winrun.bat +0 -0
  167. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/README.md +0 -0
  168. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/_show_config_check.py +0 -0
  169. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/cstore_check.py +0 -0
  170. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/keys_check.py +0 -0
  171. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/node_info_check.py +0 -0
  172. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/ora_check.py +0 -0
  173. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/ora_intervals.py +0 -0
  174. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/ora_sign_check.py +0 -0
  175. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/owner_check.py +0 -0
  176. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/payload_check.py +0 -0
  177. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/session_check.py +0 -0
  178. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/w3_all_active_jobs_check.py +0 -0
  179. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/w3_auth_check.py +0 -0
  180. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/w3_first_closable_job_check.py +0 -0
  181. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/w3_nodes_licenses.py +0 -0
  182. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/w3_oracles_check.py +0 -0
  183. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/w3_poai_check.py +0 -0
  184. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/whitelist_check.py +0 -0
  185. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/_checks/workload_check.py +0 -0
  186. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/ai4e/delete.py +0 -0
  187. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/ai4e/launcher.py +0 -0
  188. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/dates/check_date.py +0 -0
  189. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/debug/close_pipeline.py +0 -0
  190. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/decentralized/chain_dist_example.py +0 -0
  191. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/decentralized/chain_dist_example_initiator.py +0 -0
  192. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/decentralized/chain_dist_example_worker.py +0 -0
  193. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/deeploy/checker.py +0 -0
  194. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/deeploy/checker2.py +0 -0
  195. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/deeploy/create_request.py +0 -0
  196. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/enc_dec/enc_dec_test.py +0 -0
  197. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/eth/allocate_rewards.py +0 -0
  198. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/eth/balance.py +0 -0
  199. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/eth/eth_sign.py +0 -0
  200. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/eth/info.md +0 -0
  201. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/eth/send.py +0 -0
  202. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/eth/send_many.py +0 -0
  203. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/eth/sign.py +0 -0
  204. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/log.py +0 -0
  205. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/logger/run.py +0 -0
  206. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/lp/lp_checker.py +0 -0
  207. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/multi-enc-dec/multi_test1.py +0 -0
  208. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/multi-enc-dec/multi_test2.py +0 -0
  209. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/netmon/check_netmon.py +0 -0
  210. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/netmon/netmon_data.json +0 -0
  211. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/pipelines/start.py +0 -0
  212. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/pipelines/stop.py +0 -0
  213. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/scripts/monitoring/collect_messages.py +0 -0
  214. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/scripts/monitoring/get_hb_distribution.py +0 -0
  215. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/scripts/monitoring/multithreaded_network_sniffer.py +0 -0
  216. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/sign/simple_payload_checker.py +0 -0
  217. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/sign/test_sign1.py +0 -0
  218. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/sign/test_sign2.py +0 -0
  219. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/test.py +0 -0
  220. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/tokens/get_check.py +0 -0
  221. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/utils/get_documentation.py +0 -0
  222. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/various/attach_example.py +0 -0
  223. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/various/ex1.py +0 -0
  224. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/various/hello.py +0 -0
  225. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/various/remote_exec.py +0 -0
  226. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/various/save_images.py +0 -0
  227. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/wl/wl_add.py +0 -0
  228. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/xarchive/_tutorials/3. simple_real_time_custom_code.py +0 -0
  229. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/xarchive/_tutorials/4. real_time_custom_code_2.py +0 -0
  230. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/xarchive/_tutorials/8. chatbot.py +0 -0
  231. {ratio1-3.4.109 → ratio1-3.4.110}/xperimental/xarchive/test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ratio1
3
- Version: 3.4.109
3
+ Version: 3.4.110
4
4
  Summary: `ratio1` or Ration1 SDK is the Python SDK required for client app development for the Ratio1 ecosystem
5
5
  Project-URL: Homepage, https://github.com/Ratio1/ratio1_sdk
6
6
  Project-URL: Bug Tracker, https://github.com/Ratio1/ratio1_sdk/issues
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ratio1"
7
- version = "3.4.109"
7
+ version = "3.4.110"
8
8
  authors = [
9
9
  { name="Andrei Ionut Damian", email="andrei.damian@ratio1.ai" },
10
10
  { name="Cristan Bleotiu", email="cristian.bleotiu@ratio1.ai" },
@@ -1,4 +1,4 @@
1
- __VER__ = "3.4.109"
1
+ __VER__ = "3.4.110"
2
2
 
3
3
  if __name__ == "__main__":
4
4
  with open("pyproject.toml", "rt") as fd:
@@ -0,0 +1,374 @@
1
+ """
2
+ ex26_cerviguard_war_loopback.py
3
+ ---------------------------------
4
+
5
+ CerviGuard WAR - Loopback Pipeline Testing
6
+
7
+ This tutorial demonstrates the complete CerviGuard WAR (Web Application Resource)
8
+ architecture using the loopback mechanism to test image processing pipelines.
9
+
10
+ Architecture:
11
+ 1. LOCAL_SERVING_API (FastAPI backend, IS_LOOPBACK_PLUGIN=True)
12
+ - Receives images from UI via REST endpoints
13
+ - Writes requests to loopback queue
14
+ - Reads from loopback queue in process() loop
15
+ - Calls CERVIGUARD_IMAGE_ANALYZER serving plugin directly
16
+ - Caches results for polling
17
+
18
+ 2. Loopback DCT (Data Capture Thread)
19
+ - Reads from shared memory queue
20
+ - Feeds data back into pipeline
21
+
22
+ 3. CERVIGUARD_IMAGE_ANALYZER (Serving Plugin - runs in isolated process)
23
+ - Decodes base64 images
24
+ - Extracts dimensions and quality metrics
25
+ - Mockup for future AI model integration
26
+
27
+ 4. CerviGuard UI (worker_app_runner - to be added by you)
28
+ - Frontend that interacts with the API
29
+
30
+ Flow:
31
+ UI → POST /cerviguard_submit_image → Write to loopback queue
32
+ → Loopback DCT feeds back → process() reads from loopback
33
+ → Calls serving plugin via dataapi_inferences()
34
+ → Caches result → UI polls via GET /cerviguard_get_result
35
+
36
+ This setup allows you to verify the loopback mechanism works correctly
37
+ before integrating the actual AI model for cervical cancer detection.
38
+ """
39
+ import json
40
+ import time
41
+ import requests
42
+ import base64
43
+ from ratio1 import Session
44
+ import numpy as np
45
+ from PIL import Image
46
+ import io
47
+
48
+ def encode_image_to_base64(image_path: str) -> str:
49
+ """
50
+ Encode an image file to base64 string
51
+
52
+ Parameters
53
+ ----------
54
+ image_path : str
55
+ Path to the image file
56
+
57
+ Returns
58
+ -------
59
+ str
60
+ Base64 encoded image string
61
+ """
62
+ with open(image_path, 'rb') as f:
63
+ img_bytes = f.read()
64
+ b64_string = base64.b64encode(img_bytes).decode('utf-8')
65
+ return b64_string
66
+
67
+
68
+ def test_cerviguard_api(base_url: str, session):
69
+ """
70
+ Test the CerviGuard API endpoints
71
+
72
+ Parameters
73
+ ----------
74
+ base_url : str
75
+ Base URL of the API (e.g., http://localhost:5002)
76
+ session : Session
77
+ The ratio1 session for logging
78
+ """
79
+
80
+ session.P("\n" + "="*70)
81
+ session.P("Testing CerviGuard WAR Loopback Pipeline")
82
+ session.P("="*70 + "\n")
83
+
84
+ # Test 1: Check system status
85
+ session.P("1. Checking CerviGuard system status...", color='b')
86
+ try:
87
+ response = requests.get(f"{base_url}/cerviguard_status")
88
+ session.P(f"Status: {response.status_code}", color='g' if response.status_code == 200 else 'r')
89
+ result = response.json()
90
+ session.P(f"Service: {result['result']['service']}", color='g')
91
+ session.P(f"Version: {result['result']['version']}", color='g')
92
+ session.P(f"Status: {result['result']['status']}", color='g')
93
+ except Exception as e:
94
+ session.P(f"Error: {e}", color='r')
95
+ session.P("Make sure the pipeline is deployed and API is running!", color='r')
96
+ return
97
+
98
+ print()
99
+
100
+ # Test 2: Create a test image (1x1 pixel red image)
101
+ session.P("2. Creating test cervical image (mockup)...", color='b')
102
+
103
+ # Create a small test image (100x100 red square)
104
+ test_img = np.zeros((100, 100, 3), dtype=np.uint8)
105
+ test_img[:, :, 0] = 255 # Red channel
106
+
107
+ # Convert to PIL Image
108
+ pil_img = Image.fromarray(test_img)
109
+
110
+ # Convert to base64
111
+ buffer = io.BytesIO()
112
+ pil_img.save(buffer, format='PNG')
113
+ img_base64 = base64.b64encode(buffer.getvalue()).decode('utf-8')
114
+
115
+ session.P(f"Created test image: 100x100 pixels, RGB", color='g')
116
+ session.P(f"Base64 length: {len(img_base64)} characters", color='g')
117
+
118
+ print()
119
+
120
+ # Test 3: Submit image for processing
121
+ session.P("3. Submitting image to CerviGuard API...", color='b')
122
+
123
+ try:
124
+ response = requests.post(
125
+ f"{base_url}/cerviguard_submit_image",
126
+ json={
127
+ "image_data": img_base64,
128
+ "metadata": {
129
+ "patient_id": "TEST-001",
130
+ "capture_date": "2025-01-01",
131
+ "test_mode": True
132
+ }
133
+ }
134
+ )
135
+
136
+ session.P(f"Status: {response.status_code}", color='g' if response.status_code == 200 else 'r')
137
+ result = response.json()
138
+
139
+ if result.get('result', {}).get('status') == 'submitted':
140
+ request_id = result['result']['request_id']
141
+ session.P(f"Request ID: {request_id}", color='g')
142
+ session.P(f"Poll endpoint: {result['result']['poll_endpoint']}", color='g')
143
+
144
+ print()
145
+
146
+ # Test 4: Poll for results
147
+ session.P("4. Polling for results (loopback processing)...", color='b')
148
+
149
+ max_attempts = 10
150
+ attempt = 0
151
+ result_data = None
152
+
153
+ while attempt < max_attempts:
154
+ attempt += 1
155
+ time.sleep(1) # Wait 1 second between polls
156
+
157
+ session.P(f" Polling attempt {attempt}/{max_attempts}...", color='y')
158
+
159
+ response = requests.get(
160
+ f"{base_url}/cerviguard_get_result",
161
+ params={"request_id": request_id}
162
+ )
163
+
164
+ if response.status_code == 200:
165
+ poll_result = response.json()
166
+ status = poll_result.get('result', {}).get('status')
167
+
168
+ if status == 'completed':
169
+ result_data = poll_result['result']['result']
170
+ session.P(f" ✓ Processing completed!", color='g')
171
+ break
172
+ elif status == 'processing':
173
+ session.P(f" ⏳ Still processing...", color='y')
174
+ elif status == 'error':
175
+ session.P(f" ✗ Error: {poll_result.get('result', {}).get('error')}", color='r')
176
+ break
177
+ else:
178
+ session.P(f" Unknown status: {status}", color='y')
179
+ else:
180
+ session.P(f" HTTP error: {response.status_code}", color='r')
181
+ break
182
+
183
+ print()
184
+
185
+ # Test 5: Display results
186
+ if result_data:
187
+ session.P("5. Processing Results (via Loopback Pipeline):", color='b')
188
+ session.P("="*70, color='g')
189
+
190
+ if result_data.get('status') == 'completed':
191
+ img_info = result_data.get('image_info', {})
192
+ session.P(f" Image Dimensions:", color='g')
193
+ session.P(f" Width: {img_info.get('width')} pixels", color='w')
194
+ session.P(f" Height: {img_info.get('height')} pixels", color='w')
195
+ session.P(f" Channels: {img_info.get('channels')}", color='w')
196
+ session.P(f" Total Pixels: {img_info.get('total_pixels'):,}", color='w')
197
+ session.P(f" Size: {img_info.get('size_mb')} MB", color='w')
198
+ session.P(f" Data Type: {img_info.get('dtype')}", color='w')
199
+ session.P(f" Shape: {img_info.get('shape')}", color='w')
200
+ session.P("", color='w')
201
+ session.P(f" Processing Info:", color='g')
202
+ session.P(f" Processor Version: {result_data.get('processor_version')}", color='w')
203
+ session.P(f" Processed At: {result_data.get('processed_at')}", color='w')
204
+
205
+ session.P("="*70, color='g')
206
+ session.P("\n✓ Loopback pipeline working correctly!", color='g', boxed=True)
207
+ session.P(" The image went through the complete flow:", color='g')
208
+ session.P(" 1. Submitted to LOCAL_SERVING_API endpoint", color='w')
209
+ session.P(" 2. Written to loopback queue (IS_LOOPBACK_PLUGIN=True)", color='w')
210
+ session.P(" 3. Loopback DCT feeds data back to pipeline", color='w')
211
+ session.P(" 4. LOCAL_SERVING_API process() reads from loopback", color='w')
212
+ session.P(" 5. Calls CERVIGUARD_IMAGE_ANALYZER serving plugin", color='w')
213
+ session.P(" 6. Result cached in LOCAL_SERVING_API", color='w')
214
+ session.P(" 7. Retrieved via API polling endpoint", color='w')
215
+ else:
216
+ session.P(f" Status: {result_data.get('status')}", color='y')
217
+ session.P(f" Error: {result_data.get('error', 'Unknown')}", color='r')
218
+ else:
219
+ session.P("5. ✗ No results received after polling", color='r')
220
+ session.P(" Check edge node logs for issues", color='y')
221
+
222
+ else:
223
+ session.P(f"Failed to submit image: {result}", color='r')
224
+
225
+ except Exception as e:
226
+ session.P(f"Error during testing: {e}", color='r')
227
+ import traceback
228
+ session.P(traceback.format_exc(), color='r')
229
+
230
+ print()
231
+ session.P("="*70)
232
+ session.P("CerviGuard WAR Testing Complete")
233
+ session.P("="*70 + "\n")
234
+
235
+
236
+ if __name__ == "__main__":
237
+ # Create a session
238
+ session = Session(silent=False)
239
+
240
+ # Get target node from environment or use default
241
+ # node = os.environ.get("EE_TARGET_NODE", "INSERT_YOUR_NODE_ADDRESS_HERE")
242
+ node = "0xai_Avvuy6USRwVfbbxEG2HPiCz85mSJle3zo2MbDh5kBD-g"
243
+
244
+ session.P(f"Deploying CerviGuard WAR Loopback Pipeline to {node}...", color='b', boxed=True)
245
+ session.wait_for_node(node)
246
+
247
+ # Pipeline configuration with TWO components:
248
+ # 1. Loopback DCT (reads from queue and feeds back)
249
+ # 2. LOCAL_SERVING_API (writes to queue, reads from queue, calls serving plugin)
250
+ # Note: CERVIGUARD_IMAGE_ANALYZER serving plugin is called via AI_ENGINE config
251
+
252
+ pipeline_config = {
253
+ "NAME": "cerviguard_demo",
254
+ "TYPE": "Loopback", # CRITICAL: Use Loopback DCT
255
+ "LOOPBACK_QUEUE_SIZE": 32,
256
+
257
+ "PLUGINS": [
258
+ # Backend API (receives images, writes to loopback, reads from loopback, calls serving)
259
+ {
260
+ "SIGNATURE": "LOCAL_SERVING_API",
261
+ "INSTANCES": [
262
+ {
263
+ "PORT": 5002,
264
+ "INSTANCE_ID": "cerviguard_api",
265
+ "AI_ENGINE": "CERVIGUARD_IMAGE_ANALYZER", # Serving plugin to use
266
+ "LOG_REQUESTS": True,
267
+ "RESPONSE_FORMAT": "WRAPPED",
268
+ "RESULT_CACHE_TTL": 300, # Keep results for 5 minutes
269
+ }
270
+ ]
271
+ }
272
+
273
+ # TODO: Add your CerviGuard UI plugin here
274
+ # {
275
+ # "SIGNATURE": "YOUR_CERVIGUARD_UI_WORKER_APP",
276
+ # "INSTANCES": [{"INSTANCE_ID": "ui_01"}]
277
+ # }
278
+ ]
279
+ }
280
+
281
+ session.P("\nPipeline Configuration:", color='b')
282
+ session.P(json.dumps(pipeline_config, indent=2), color='w')
283
+
284
+ # Deploy the pipeline
285
+ session.P("\nDeploying pipeline...", color='b')
286
+
287
+ # Create the pipeline with Loopback data source
288
+ pipeline = session.create_pipeline(
289
+ node=node,
290
+ name=pipeline_config["NAME"],
291
+ data_source=pipeline_config["TYPE"], # "Loopback"
292
+ config={
293
+ "LOOPBACK_QUEUE_SIZE": pipeline_config["LOOPBACK_QUEUE_SIZE"]
294
+ }
295
+ )
296
+
297
+ # Add the LOCAL_SERVING_API plugin
298
+ # This plugin handles everything: API endpoints, loopback, and serving plugin calls
299
+ session.P("Adding LOCAL_SERVING_API plugin...", color='b')
300
+ api_instance = pipeline.create_plugin_instance(
301
+ signature='LOCAL_SERVING_API',
302
+ instance_id='cerviguard_api',
303
+ log_requests=True,
304
+ response_format='WRAPPED',
305
+ port=5082,
306
+ ai_engine='CERVIGUARD_IMAGE_ANALYZER', # This serving plugin runs in isolated process
307
+ result_cache_ttl=300,
308
+ )
309
+
310
+ # Deploy the pipeline
311
+ session.P("Deploying pipeline to node...", color='b')
312
+ pipeline.deploy()
313
+
314
+ # Wait for deployment
315
+ session.P("Waiting for pipeline to be fully deployed...", color='b')
316
+ time.sleep(8)
317
+
318
+ # The API should be accessible on localhost
319
+ # Port is configured in plugin config as 5082
320
+ base_url = "http://localhost:5082"
321
+
322
+ session.P(f"\n" + "="*70, color='g')
323
+ session.P(f"CerviGuard WAR Backend Deployed!", color='g', boxed=True)
324
+ session.P(f"="*70, color='g')
325
+ session.P(f"API URL: {base_url}", color='g')
326
+ session.P(f"Pipeline: {pipeline_config['NAME']}", color='g')
327
+ session.P(f"Loopback: ENABLED", color='g')
328
+ session.P(f"="*70 + "\n", color='g')
329
+
330
+ # Give the server a bit more time to start
331
+ session.P("Waiting for API server to be ready...", color='b')
332
+ time.sleep(30)
333
+
334
+ # Run tests
335
+ test_cerviguard_api(base_url, session)
336
+
337
+ # Show API endpoints
338
+ session.P("\n" + "="*70)
339
+ session.P("Available CerviGuard API Endpoints:")
340
+ session.P("="*70)
341
+ session.P(f" POST {base_url}/cerviguard_submit_image", color='g')
342
+ session.P(f" - Submit cervical image for analysis", color='w')
343
+ session.P(f" - Body: {{'image_data': '<base64>', 'metadata': {{...}}}}", color='w')
344
+ session.P("")
345
+ session.P(f" GET {base_url}/cerviguard_get_result?request_id=<id>", color='g')
346
+ session.P(f" - Poll for processing results", color='w')
347
+ session.P("")
348
+ session.P(f" GET {base_url}/cerviguard_status", color='g')
349
+ session.P(f" - Check system status", color='w')
350
+ session.P("="*70 + "\n")
351
+
352
+ # Integration instructions
353
+ session.P("Next Steps for CerviGuard UI Integration:", color='y', boxed=True)
354
+ session.P("1. Add your CerviGuard UI worker_app to the pipeline", color='w')
355
+ session.P("2. From UI JavaScript, call the API endpoints:", color='w')
356
+ session.P(" - Submit image: POST /cerviguard_submit_image", color='w')
357
+ session.P(" - Poll results: GET /cerviguard_get_result?request_id=<id>", color='w')
358
+ session.P("3. Display the image analysis results in your UI", color='w')
359
+ session.P("4. The serving plugin runs in isolated process for fault isolation", color='w')
360
+ session.P("5. Later: Enhance CERVIGUARD_IMAGE_ANALYZER with actual AI model", color='w')
361
+ session.P("")
362
+
363
+ # Keep running
364
+ session.P("Press Ctrl+C to stop and cleanup...", color='y')
365
+
366
+ try:
367
+ session.run(
368
+ wait=True,
369
+ close_pipelines=True
370
+ )
371
+ except KeyboardInterrupt:
372
+ session.P("\nStopping and cleaning up...", color='y')
373
+
374
+ session.P("\nCerviGuard WAR tutorial completed!", color='g', boxed=True)
@@ -23,8 +23,9 @@ if __name__ == '__main__' :
23
23
 
24
24
  eng.reset_network("mainnet")
25
25
 
26
- for _ in range(50):
26
+ for i in range(50):
27
27
  sleep(1)
28
+ l.P(f"Running dauth autocomplete check #{i+1}...", show=True)
28
29
  d = eng.dauth_autocomplete(
29
30
  # dauth_endp='N/Adhstrgredshtfnfnhgm',
30
31
  add_env=False,
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