ratio1 3.4.39__tar.gz → 3.4.41__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 (212) hide show
  1. {ratio1-3.4.39 → ratio1-3.4.41}/PKG-INFO +1 -1
  2. {ratio1-3.4.39 → ratio1-3.4.41}/pyproject.toml +1 -1
  3. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/_ver.py +1 -1
  4. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/base/generic_session.py +14 -4
  5. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/cli/nodes.py +26 -34
  6. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex02_part1_deploy_webapi.py +26 -19
  7. {ratio1-3.4.39 → ratio1-3.4.41}/.devcontainer/Dockerfile +0 -0
  8. {ratio1-3.4.39 → ratio1-3.4.41}/.devcontainer/devcontainer.json +0 -0
  9. {ratio1-3.4.39 → ratio1-3.4.41}/.gitattributes +0 -0
  10. {ratio1-3.4.39 → ratio1-3.4.41}/.github/workflows/python-publish.yml +0 -0
  11. {ratio1-3.4.39 → ratio1-3.4.41}/.gitignore +0 -0
  12. {ratio1-3.4.39 → ratio1-3.4.41}/.vscode/launch.json +0 -0
  13. {ratio1-3.4.39 → ratio1-3.4.41}/LICENSE +0 -0
  14. {ratio1-3.4.39 → ratio1-3.4.41}/README.md +0 -0
  15. {ratio1-3.4.39 → ratio1-3.4.41}/TODOs.md +0 -0
  16. {ratio1-3.4.39 → ratio1-3.4.41}/__init__.py +0 -0
  17. {ratio1-3.4.39 → ratio1-3.4.41}/r1ctl.MD +0 -0
  18. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/__init__.py +0 -0
  19. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/base/__init__.py +0 -0
  20. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/base/distributed_custom_code_presets.py +0 -0
  21. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/base/instance.py +0 -0
  22. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/base/payload/__init__.py +0 -0
  23. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/base/payload/payload.py +0 -0
  24. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/base/pipeline.py +0 -0
  25. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/base/plugin_template.py +0 -0
  26. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/base/responses.py +0 -0
  27. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/base/transaction.py +0 -0
  28. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/base/webapp_pipeline.py +0 -0
  29. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/base_decentra_object.py +0 -0
  30. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/bc/__init__.py +0 -0
  31. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/bc/base.py +0 -0
  32. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/bc/chain.py +0 -0
  33. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/bc/ec.py +0 -0
  34. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/bc/evm.py +0 -0
  35. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/certs/51.15.142.167.crt +0 -0
  36. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/certs/__init__.py +0 -0
  37. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/certs/a0d9818f.ala.eu-central-1.emqxsl.com.crt +0 -0
  38. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/certs/r9092118.ala.eu-central-1.emqxsl.com.crt +0 -0
  39. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/certs/s624dbd4.ala.us-east-1.emqxsl.com.crt +0 -0
  40. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/cli/README.md +0 -0
  41. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/cli/cli.py +0 -0
  42. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/cli/cli_commands.py +0 -0
  43. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/cli/oracles.py +0 -0
  44. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/cli/package_update.py +0 -0
  45. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/code_cheker/__init__.py +0 -0
  46. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/code_cheker/base.py +0 -0
  47. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/code_cheker/checker.py +0 -0
  48. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/comm/__init__.py +0 -0
  49. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/comm/amqp_wrapper.py +0 -0
  50. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/comm/base_comm_wrapper.py +0 -0
  51. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/comm/mqtt_wrapper.py +0 -0
  52. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/const/README.md +0 -0
  53. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/const/__init__.py +0 -0
  54. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/const/apps.py +0 -0
  55. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/const/base.py +0 -0
  56. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/const/comms.py +0 -0
  57. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/const/environment.py +0 -0
  58. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/const/evm_net.py +0 -0
  59. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/const/formatter.py +0 -0
  60. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/const/heartbeat.py +0 -0
  61. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/const/misc.py +0 -0
  62. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/const/payload.py +0 -0
  63. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/const/plugins/deeploy_const.py +0 -0
  64. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/default/__init__.py +0 -0
  65. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/default/instance/__init__.py +0 -0
  66. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/default/instance/chain_dist_custom_job_01_plugin.py +0 -0
  67. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/default/instance/custom_webapi_01_plugin.py +0 -0
  68. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/default/instance/generic_http_01_plugin.py +0 -0
  69. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/default/instance/net_mon_01_plugin.py +0 -0
  70. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/default/instance/telegram_basic_bot_01_plugin.py +0 -0
  71. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/default/instance/telegram_conversational_bot_01_plugin.py +0 -0
  72. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/default/instance/view_scene_01_plugin.py +0 -0
  73. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/default/session/mqtt_session.py +0 -0
  74. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/io_formatter/__init__.py +0 -0
  75. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/io_formatter/base/__init__.py +0 -0
  76. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/io_formatter/base/base_formatter.py +0 -0
  77. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/io_formatter/default/__init__.py +0 -0
  78. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/io_formatter/default/a_dummy.py +0 -0
  79. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/io_formatter/default/aixp1.py +0 -0
  80. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/io_formatter/default/default.py +0 -0
  81. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/io_formatter/io_formatter_manager.py +0 -0
  82. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/ipfs/__init__.py +0 -0
  83. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/ipfs/ifps_keygen +0 -0
  84. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/ipfs/ipfs_setup/ipfs.service +0 -0
  85. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/ipfs/ipfs_setup/launch_service.sh +0 -0
  86. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/ipfs/ipfs_setup/restart.sh +0 -0
  87. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/ipfs/ipfs_setup/run.sh +0 -0
  88. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/ipfs/ipfs_setup/setup.sh +0 -0
  89. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/ipfs/ipfs_setup/show.sh +0 -0
  90. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/ipfs/ipfs_setup/write_key.sh +0 -0
  91. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/ipfs/r1fs.py +0 -0
  92. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/__init__.py +0 -0
  93. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/base_logger.py +0 -0
  94. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/logger_mixins/__init__.py +0 -0
  95. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/logger_mixins/class_instance_mixin.py +0 -0
  96. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/logger_mixins/computer_vision_mixin.py +0 -0
  97. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/logger_mixins/datetime_mixin.py +0 -0
  98. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/logger_mixins/download_mixin.py +0 -0
  99. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/logger_mixins/general_serialization_mixin.py +0 -0
  100. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/logger_mixins/json_serialization_mixin.py +0 -0
  101. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/logger_mixins/machine_mixin.py +0 -0
  102. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/logger_mixins/pickle_serialization_mixin.py +0 -0
  103. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/logger_mixins/process_mixin.py +0 -0
  104. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/logger_mixins/resource_size_mixin.py +0 -0
  105. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/logger_mixins/timers_mixin.py +0 -0
  106. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/logger_mixins/upload_mixin.py +0 -0
  107. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/logger_mixins/utils_mixin.py +0 -0
  108. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/small_logger.py +0 -0
  109. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/tzlocal/__init__.py +0 -0
  110. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/tzlocal/unix.py +0 -0
  111. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/tzlocal/utils.py +0 -0
  112. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/tzlocal/win32.py +0 -0
  113. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/logging/tzlocal/windows_tz.py +0 -0
  114. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/plugins_manager_mixin.py +0 -0
  115. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/utils/__init__.py +0 -0
  116. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/utils/comm_utils.py +0 -0
  117. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/utils/config.py +0 -0
  118. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/utils/dotenv.py +0 -0
  119. {ratio1-3.4.39 → ratio1-3.4.41}/ratio1/utils/oracle_sync/oracle_tester.py +0 -0
  120. {ratio1-3.4.39 → ratio1-3.4.41}/requirements.txt +0 -0
  121. {ratio1-3.4.39 → ratio1-3.4.41}/template.env +0 -0
  122. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/.example_env +0 -0
  123. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/8. custom_code_fastapi_assets/index.html +0 -0
  124. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/9. code_sandbox_from_scratch_assets/index.html +0 -0
  125. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/_example_pk_sdk.pem +0 -0
  126. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/eth2025/deploy_home_safety.py +0 -0
  127. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/eth2025/deploy_maintenance_monitoring.py +0 -0
  128. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex01_part1_connect.py +0 -0
  129. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex01_part2_filter.py +0 -0
  130. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex01_part3_adv_filter.py +0 -0
  131. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex02_part2_deploy_plugin.py +0 -0
  132. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex02_part3_deploy_r1fs_test.py +0 -0
  133. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex03_custom_code_on_one_remote__example_1.py +0 -0
  134. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex04_custom_code_on_one_remote__example_2.py +0 -0
  135. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex05_custom_code_on_one_remote__example_3.py +0 -0
  136. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex06_custom_code_on_multiple_remotes__example_1.py +0 -0
  137. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex07_custom_code_on_multiple_remotes__example_2.py +0 -0
  138. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex08_custom_webapi.py +0 -0
  139. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex09_code_sandbox_from_scratch.py +0 -0
  140. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex10_telegram_echo_bot.py +0 -0
  141. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex11_telegram_blackjack_bot.py +0 -0
  142. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex12_telegram_smart_bot.py +0 -0
  143. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex13_launch_repo_based_webapp.py +0 -0
  144. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex14_wallets.py +0 -0
  145. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex15_telegram_rogue_style_game.py +0 -0
  146. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex16_launch_repo_based_http_server.py +0 -0
  147. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex17_launch_repo_based_balanced_webapp.py +0 -0
  148. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex18_deploy_container_webapi.py +0 -0
  149. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex19_deeploy_container_example.py +0 -0
  150. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex20_deeploy_telegram_bot.py +0 -0
  151. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex21_telegram_community_bot.py +0 -0
  152. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/ex22_deeploy_custom_code.py +0 -0
  153. {ratio1-3.4.39 → ratio1-3.4.41}/tutorials/video_presentation/1. hello_world.ipynb +0 -0
  154. {ratio1-3.4.39 → ratio1-3.4.41}/winrun.bat +0 -0
  155. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/README.md +0 -0
  156. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/_show_config_check.py +0 -0
  157. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/cstore_check.py +0 -0
  158. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/dauth_check.py +0 -0
  159. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/keys_check.py +0 -0
  160. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/node_info_check.py +0 -0
  161. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/ora_check.py +0 -0
  162. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/ora_intervals.py +0 -0
  163. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/ora_sign_check.py +0 -0
  164. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/owner_check.py +0 -0
  165. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/payload_check.py +0 -0
  166. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/session_check.py +0 -0
  167. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/w3_auth_check.py +0 -0
  168. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/w3_nodes_licenses.py +0 -0
  169. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/w3_oracles_check.py +0 -0
  170. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/whitelist_check.py +0 -0
  171. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/_checks/workload_check.py +0 -0
  172. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/dates/check_date.py +0 -0
  173. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/debug/close_pipeline.py +0 -0
  174. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/decentralized/chain_dist_example.py +0 -0
  175. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/decentralized/chain_dist_example_initiator.py +0 -0
  176. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/decentralized/chain_dist_example_worker.py +0 -0
  177. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/deeploy/checker.py +0 -0
  178. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/deeploy/checker2.py +0 -0
  179. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/deeploy/create_request.py +0 -0
  180. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/enc_dec/enc_dec_test.py +0 -0
  181. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/eth/balance.py +0 -0
  182. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/eth/eth_sign.py +0 -0
  183. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/eth/info.md +0 -0
  184. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/eth/send.py +0 -0
  185. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/eth/send_many.py +0 -0
  186. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/eth/sign.py +0 -0
  187. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/log.py +0 -0
  188. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/logger/run.py +0 -0
  189. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/lp/lp_checker.py +0 -0
  190. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/multi-enc-dec/multi_test1.py +0 -0
  191. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/multi-enc-dec/multi_test2.py +0 -0
  192. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/pipelines/start.py +0 -0
  193. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/pipelines/stop.py +0 -0
  194. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/scripts/monitoring/collect_messages.py +0 -0
  195. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/scripts/monitoring/get_hb_distribution.py +0 -0
  196. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/scripts/monitoring/multithreaded_network_sniffer.py +0 -0
  197. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/sign/simple_payload_checker.py +0 -0
  198. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/sign/test_sign1.py +0 -0
  199. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/sign/test_sign2.py +0 -0
  200. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/test.py +0 -0
  201. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/tokens/get_check.py +0 -0
  202. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/utils/get_documentation.py +0 -0
  203. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/various/attach_example.py +0 -0
  204. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/various/ex1.py +0 -0
  205. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/various/hello.py +0 -0
  206. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/various/remote_exec.py +0 -0
  207. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/various/save_images.py +0 -0
  208. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/wl/wl_add.py +0 -0
  209. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/xarchive/_tutorials/3. simple_real_time_custom_code.py +0 -0
  210. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/xarchive/_tutorials/4. real_time_custom_code_2.py +0 -0
  211. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/xarchive/_tutorials/8. chatbot.py +0 -0
  212. {ratio1-3.4.39 → ratio1-3.4.41}/xperimental/xarchive/test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ratio1
3
- Version: 3.4.39
3
+ Version: 3.4.41
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.39"
7
+ version = "3.4.41"
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.39"
1
+ __VER__ = "3.4.41"
2
2
 
3
3
  if __name__ == "__main__":
4
4
  with open("pyproject.toml", "rt") as fd:
@@ -2696,7 +2696,7 @@ class GenericSession(BaseDecentrAIObject):
2696
2696
  node = self.__get_node_address(node)
2697
2697
  return node in self._dct_online_nodes_pipelines
2698
2698
 
2699
- def is_peered(self, node):
2699
+ def is_peered(self, node, return_full_address=False):
2700
2700
  """
2701
2701
  Public method for checking if a node is peered with the current session.
2702
2702
  Parameters
@@ -2709,8 +2709,10 @@ class GenericSession(BaseDecentrAIObject):
2709
2709
  bool
2710
2710
  True if the node is peered, False otherwise.
2711
2711
  """
2712
- node = self.__get_node_address(node)
2713
- return self._dct_can_send_to_node.get(node, False)
2712
+ node_addr = self.__get_node_address(node)
2713
+ if return_full_address:
2714
+ return self._dct_can_send_to_node.get(node_addr, False), node_addr
2715
+ return self._dct_can_send_to_node.get(node_addr, False)
2714
2716
 
2715
2717
  def get_last_seen_time(self, node, *, default_value=0):
2716
2718
  """
@@ -2881,10 +2883,14 @@ class GenericSession(BaseDecentrAIObject):
2881
2883
  A list of dictionaries defining the endpoint configuration. Defaults to None.
2882
2884
  """
2883
2885
  ngrok_kwargs = {}
2884
- cloudflare_kwargs = {}
2886
+ cloudflare_kwargs = {}
2885
2887
 
2886
2888
  if tunnel_engine_enabled:
2887
2889
  if tunnel_engine == "ngrok":
2890
+ if ngrok_edge_label is None:
2891
+ ngrok_edge_label = os.environ.get("EE_NGROK_EDGE_LABEL", None)
2892
+ if ngrok_edge_label is not None:
2893
+ self.P("Using ngrok edge label from environment variable EE_NGROK_EDGE_LABEL", color='g')
2888
2894
  if not isinstance(ngrok_edge_label, str):
2889
2895
  ngrok_edge_label = None
2890
2896
  warn_msg = f"WARNING! Without a pre-defined `ngrok_edge_label`, the URL will be generated automatically, "
@@ -2897,6 +2903,10 @@ class GenericSession(BaseDecentrAIObject):
2897
2903
  "ngrok_use_api": ngrok_use_api,
2898
2904
  }
2899
2905
  elif tunnel_engine == "cloudflare":
2906
+ if cloudflare_token is None:
2907
+ cloudflare_token = os.environ.get("EE_CLOUDFLARE_TOKEN", None)
2908
+ if cloudflare_token is not None:
2909
+ self.P("Using Cloudflare token from environment variable EE_CLOUDFLARE_TOKEN", color='g')
2900
2910
  if not isinstance(cloudflare_token, str):
2901
2911
  raise ValueError(f"`cloudflare` must be a string when using cloudflare tunnel engine. {type(cloudflare_token)} provided.")
2902
2912
  cloudflare_kwargs = {
@@ -209,52 +209,39 @@ def get_apps(args):
209
209
  return
210
210
 
211
211
  def _send_command_to_node(args, command, ignore_not_found=False):
212
+ from ratio1 import Session
213
+
212
214
  node = args.node
213
215
  silent = not args.verbose
214
216
  ignore_peering = args.ignore_peering
215
217
 
216
218
  t1 = time()
217
- df, _, _, _, _, sess = _get_netstats(
218
- silent=silent, online_only=True, return_session=True, all_info=True,
219
- wait_for_node=node
220
- )
221
-
222
- peered = None
223
- selection = (df.Alias == node) | (df.Address == node)
224
- if 'ETH Address' in df.columns:
225
- selection = selection | (df['ETH Address'] == node)
226
- found = selection.any()
227
- node_addr = None
228
- alias = None
229
- df_found = df[selection]
230
- if found:
231
- alias = df_found.Alias.values[0]
232
- peered = df_found.Peered.values[0]
233
- node_addr = df_found.Address.values[0]
234
- log_with_color(f"{df_found}")
235
- else:
236
- log_with_color("Node '{}' <{}> not found in network (total {} nodes, {} peered).".format(
237
- node, node_addr, df.shape[0], df.Peered.sum()), color='r'
238
- )
239
- node_addr = node
219
+ sess = Session(silent=silent)
220
+
221
+ peered, node_addr = sess.is_peered(node, return_full_address=True)
222
+ found = False
240
223
 
241
- if not peered and not ignore_peering:
242
- log_with_color(f"Node '{node}' <{node_addr}> not peered, exiting...", color='r')
243
- return
224
+ if not ignore_peering:
225
+ found = sess.wait_for_node(node_addr, timeout=30)
226
+ sess.P(f"Node {node_addr} is online.")
244
227
 
228
+ # Display peering status.
245
229
  if not peered:
230
+ if not ignore_peering:
231
+ log_with_color(f"Node <{node_addr}> is not peered. Exiting...", color='r')
232
+ return
233
+
246
234
  if found:
247
235
  log_with_color(f"Node '{node}' <{node_addr}> is not peered.", color='r')
248
236
  else:
249
237
  log_with_color(f"Node '{node}' <{node_addr}> may not accept this command.", color='r')
250
238
 
251
- # TODO: currently this is based on node alias, but we should be based on node address
252
- # and maybe even node alias
253
- if (found and peered) or ignore_not_found:
254
- if found and peered:
255
- log_with_color(f"Sending '{command}' to node '{alias}' <{node_addr}>", color='b')
256
- else:
257
- log_with_color(f"Sending blind '{command}' to node '{alias}' <{node_addr}>", color='b')
239
+ if found and peered:
240
+ log_with_color(f"Sending '{command}' to node <{node_addr}>", color='b')
241
+ else:
242
+ log_with_color(f"Sending blind '{command}' to node <{node_addr}>", color='b')
243
+
244
+ if (found and peered) or ignore_not_found or ignore_peering:
258
245
  if command == COMMANDS.RESTART:
259
246
  sess._send_command_restart_node(node_addr)
260
247
  elif command == COMMANDS.STOP:
@@ -262,7 +249,12 @@ def _send_command_to_node(args, command, ignore_not_found=False):
262
249
  else:
263
250
  log_with_color(f"Command '{command}' not supported.", color='r')
264
251
  return
265
- elapsed = time() - t1
252
+
253
+ sess.close()
254
+ log_with_color(f"Command successfully sent.")
255
+ elapsed = time() - t1
256
+ if not silent:
257
+ log_with_color(f"Command '{command}' seinging took {elapsed}s.", color='b')
266
258
  return
267
259
 
268
260
  def restart_node(args):
@@ -12,6 +12,7 @@ def run_predict(plugin: CustomPluginTemplate, inputs: list[int], nr_steps: int)
12
12
  """
13
13
  Here we use the Ratio1 build in basic ML internal API
14
14
  """
15
+
15
16
  preds = plugin.basic_ts_fit_predict(inputs, nr_steps)
16
17
  # now we apply some simple heuristic to get the lower and upper bounds
17
18
  lower_bound = []
@@ -22,6 +23,7 @@ def run_predict(plugin: CustomPluginTemplate, inputs: list[int], nr_steps: int)
22
23
  upper_bound.append(int(pred + abs(pred * heuristic_factor)))
23
24
  #endfor
24
25
  result = {
26
+ "server" : plugin.e2_addr,
25
27
  "predictions": [round(x,1) for x in preds],
26
28
  "lower_bound": lower_bound,
27
29
  "upper_bound": upper_bound
@@ -31,30 +33,35 @@ def run_predict(plugin: CustomPluginTemplate, inputs: list[int], nr_steps: int)
31
33
 
32
34
  if __name__ == '__main__':
33
35
 
34
- session = Session(silent=True)
36
+ session = Session(silent=False)
35
37
 
36
- my_node = "0xai_ApM1AbzLq1VtsLIidmvzt1Nv4Cyl5Wed0fHNMoZv9u4X"
38
+ my_nodes = [
39
+ "0xai_A74xZKZJa4LekjvJ6oJz29qxOOs5nLClXAZEhYv59t3Z",
40
+ "0xai_AgnygSlY8BwnmaCj6mItg36JHlG_Lh3UqqFaTPbuNzy0",
41
+ ]
37
42
 
38
43
  # NOTE: When working with SDK please use the nodes internal addresses. While the EVM address of the node
39
44
  # is basically based on the same sk/pk it is in a different format and not directly usable with the SDK
40
45
  # the internal node address is easily spoted as starting with 0xai_ and can be found
41
46
  # via `docker exec r1node get_node_info` or via the launcher UI
42
-
43
- app, _ = session.create_custom_webapi(
44
- node=my_node,
45
- name="ratio1_simple_predict_webapp",
46
- endpoints=[
47
- {
48
- "function": run_predict,
49
- "method": "post",
50
- },
51
- ]
52
- )
53
- try:
54
- url = app.deploy()
55
- print("Webapp deployed at: ", url)
56
- except Exception as e:
57
- print("Error deploying webapp: ", e)
47
+ for i, node in enumerate(my_nodes):
48
+ app, _ = session.create_custom_webapi(
49
+ node=node,
50
+ name="ratio1_simple_predict_webapp",
51
+ tunnel_engine="cloudflare", # set this to "cloudflare" or "ngrok"
52
+ # assume tokens are either
53
+ endpoints=[
54
+ {
55
+ "function": run_predict,
56
+ "method": "post",
57
+ },
58
+ ]
59
+ )
60
+ try:
61
+ url = app.deploy()
62
+ print(f"Webapp deployed on node {i+1}/{len(my_nodes)} at: {url}")
63
+ except Exception as e:
64
+ print("Error deploying webapp: ", e)
58
65
 
59
66
  # Observation:
60
67
  # next code is not mandatory - it is used to keep the session open and cleanup the resources
@@ -63,7 +70,7 @@ if __name__ == '__main__':
63
70
  # in production, you would not need this code as the script can close
64
71
  # after the pipeline will be sent
65
72
  session.wait(
66
- seconds=120, # we wait the session for 60 seconds
73
+ seconds=300, # we wait the session for 60 seconds
67
74
  close_pipelines=True, # we close the pipelines after the session
68
75
  close_session=True, # we close the session after the session
69
76
  )
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
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