ratio1 3.4.40__tar.gz → 3.4.42__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.
- {ratio1-3.4.40 → ratio1-3.4.42}/PKG-INFO +1 -1
- {ratio1-3.4.40 → ratio1-3.4.42}/pyproject.toml +1 -1
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/_ver.py +1 -1
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/base/generic_session.py +9 -1
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/const/base.py +2 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex02_part1_deploy_webapi.py +26 -19
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex21_telegram_community_bot.py +50 -23
- {ratio1-3.4.40 → ratio1-3.4.42}/.devcontainer/Dockerfile +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/.devcontainer/devcontainer.json +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/.gitattributes +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/.github/workflows/python-publish.yml +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/.gitignore +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/.vscode/launch.json +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/LICENSE +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/README.md +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/TODOs.md +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/r1ctl.MD +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/base/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/base/distributed_custom_code_presets.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/base/instance.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/base/payload/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/base/payload/payload.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/base/pipeline.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/base/plugin_template.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/base/responses.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/base/transaction.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/base/webapp_pipeline.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/base_decentra_object.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/bc/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/bc/base.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/bc/chain.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/bc/ec.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/bc/evm.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/certs/51.15.142.167.crt +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/certs/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/certs/a0d9818f.ala.eu-central-1.emqxsl.com.crt +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/certs/r9092118.ala.eu-central-1.emqxsl.com.crt +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/certs/s624dbd4.ala.us-east-1.emqxsl.com.crt +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/cli/README.md +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/cli/cli.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/cli/cli_commands.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/cli/nodes.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/cli/oracles.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/cli/package_update.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/code_cheker/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/code_cheker/base.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/code_cheker/checker.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/comm/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/comm/amqp_wrapper.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/comm/base_comm_wrapper.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/comm/mqtt_wrapper.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/const/README.md +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/const/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/const/apps.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/const/comms.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/const/environment.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/const/evm_net.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/const/formatter.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/const/heartbeat.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/const/misc.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/const/payload.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/const/plugins/deeploy_const.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/default/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/default/instance/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/default/instance/chain_dist_custom_job_01_plugin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/default/instance/custom_webapi_01_plugin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/default/instance/generic_http_01_plugin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/default/instance/net_mon_01_plugin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/default/instance/telegram_basic_bot_01_plugin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/default/instance/telegram_conversational_bot_01_plugin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/default/instance/view_scene_01_plugin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/default/session/mqtt_session.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/io_formatter/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/io_formatter/base/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/io_formatter/base/base_formatter.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/io_formatter/default/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/io_formatter/default/a_dummy.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/io_formatter/default/aixp1.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/io_formatter/default/default.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/io_formatter/io_formatter_manager.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/ipfs/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/ipfs/ifps_keygen +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/ipfs/ipfs_setup/ipfs.service +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/ipfs/ipfs_setup/launch_service.sh +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/ipfs/ipfs_setup/restart.sh +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/ipfs/ipfs_setup/run.sh +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/ipfs/ipfs_setup/setup.sh +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/ipfs/ipfs_setup/show.sh +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/ipfs/ipfs_setup/write_key.sh +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/ipfs/r1fs.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/base_logger.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/logger_mixins/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/logger_mixins/class_instance_mixin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/logger_mixins/computer_vision_mixin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/logger_mixins/datetime_mixin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/logger_mixins/download_mixin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/logger_mixins/general_serialization_mixin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/logger_mixins/json_serialization_mixin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/logger_mixins/machine_mixin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/logger_mixins/pickle_serialization_mixin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/logger_mixins/process_mixin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/logger_mixins/resource_size_mixin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/logger_mixins/timers_mixin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/logger_mixins/upload_mixin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/logger_mixins/utils_mixin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/small_logger.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/tzlocal/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/tzlocal/unix.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/tzlocal/utils.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/tzlocal/win32.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/logging/tzlocal/windows_tz.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/plugins_manager_mixin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/utils/__init__.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/utils/comm_utils.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/utils/config.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/utils/dotenv.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/ratio1/utils/oracle_sync/oracle_tester.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/requirements.txt +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/template.env +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/.example_env +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/8. custom_code_fastapi_assets/index.html +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/9. code_sandbox_from_scratch_assets/index.html +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/_example_pk_sdk.pem +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/eth2025/deploy_home_safety.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/eth2025/deploy_maintenance_monitoring.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex01_part1_connect.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex01_part2_filter.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex01_part3_adv_filter.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex02_part2_deploy_plugin.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex02_part3_deploy_r1fs_test.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex03_custom_code_on_one_remote__example_1.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex04_custom_code_on_one_remote__example_2.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex05_custom_code_on_one_remote__example_3.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex06_custom_code_on_multiple_remotes__example_1.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex07_custom_code_on_multiple_remotes__example_2.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex08_custom_webapi.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex09_code_sandbox_from_scratch.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex10_telegram_echo_bot.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex11_telegram_blackjack_bot.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex12_telegram_smart_bot.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex13_launch_repo_based_webapp.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex14_wallets.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex15_telegram_rogue_style_game.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex16_launch_repo_based_http_server.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex17_launch_repo_based_balanced_webapp.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex18_deploy_container_webapi.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex19_deeploy_container_example.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex20_deeploy_telegram_bot.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex22_deeploy_custom_code.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/tutorials/video_presentation/1. hello_world.ipynb +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/winrun.bat +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/README.md +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/_show_config_check.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/cstore_check.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/dauth_check.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/keys_check.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/node_info_check.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/ora_check.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/ora_intervals.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/ora_sign_check.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/owner_check.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/payload_check.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/session_check.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/w3_auth_check.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/w3_nodes_licenses.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/w3_oracles_check.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/whitelist_check.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/_checks/workload_check.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/dates/check_date.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/debug/close_pipeline.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/decentralized/chain_dist_example.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/decentralized/chain_dist_example_initiator.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/decentralized/chain_dist_example_worker.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/deeploy/checker.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/deeploy/checker2.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/deeploy/create_request.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/enc_dec/enc_dec_test.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/eth/balance.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/eth/eth_sign.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/eth/info.md +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/eth/send.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/eth/send_many.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/eth/sign.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/log.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/logger/run.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/lp/lp_checker.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/multi-enc-dec/multi_test1.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/multi-enc-dec/multi_test2.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/pipelines/start.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/pipelines/stop.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/scripts/monitoring/collect_messages.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/scripts/monitoring/get_hb_distribution.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/scripts/monitoring/multithreaded_network_sniffer.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/sign/simple_payload_checker.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/sign/test_sign1.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/sign/test_sign2.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/test.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/tokens/get_check.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/utils/get_documentation.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/various/attach_example.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/various/ex1.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/various/hello.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/various/remote_exec.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/various/save_images.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/wl/wl_add.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/xarchive/_tutorials/3. simple_real_time_custom_code.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/xarchive/_tutorials/4. real_time_custom_code_2.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/xarchive/_tutorials/8. chatbot.py +0 -0
- {ratio1-3.4.40 → ratio1-3.4.42}/xperimental/xarchive/test.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ratio1
|
|
3
|
-
Version: 3.4.
|
|
3
|
+
Version: 3.4.42
|
|
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
|
|
@@ -2883,10 +2883,14 @@ class GenericSession(BaseDecentrAIObject):
|
|
|
2883
2883
|
A list of dictionaries defining the endpoint configuration. Defaults to None.
|
|
2884
2884
|
"""
|
|
2885
2885
|
ngrok_kwargs = {}
|
|
2886
|
-
cloudflare_kwargs = {}
|
|
2886
|
+
cloudflare_kwargs = {}
|
|
2887
2887
|
|
|
2888
2888
|
if tunnel_engine_enabled:
|
|
2889
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')
|
|
2890
2894
|
if not isinstance(ngrok_edge_label, str):
|
|
2891
2895
|
ngrok_edge_label = None
|
|
2892
2896
|
warn_msg = f"WARNING! Without a pre-defined `ngrok_edge_label`, the URL will be generated automatically, "
|
|
@@ -2899,6 +2903,10 @@ class GenericSession(BaseDecentrAIObject):
|
|
|
2899
2903
|
"ngrok_use_api": ngrok_use_api,
|
|
2900
2904
|
}
|
|
2901
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')
|
|
2902
2910
|
if not isinstance(cloudflare_token, str):
|
|
2903
2911
|
raise ValueError(f"`cloudflare` must be a string when using cloudflare tunnel engine. {type(cloudflare_token)} provided.")
|
|
2904
2912
|
cloudflare_kwargs = {
|
|
@@ -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=
|
|
36
|
+
session = Session(silent=False)
|
|
35
37
|
|
|
36
|
-
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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=
|
|
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
|
)
|
|
@@ -29,13 +29,14 @@ def loop_processing(plugin: CustomPluginTemplate):
|
|
|
29
29
|
# Define cache keys and file names for storing epoch review data and watched wallets
|
|
30
30
|
epoch_review_cache_key = f"ratio1_epoch_review"
|
|
31
31
|
watched_wallets_cache_key = f"ratio1_watched_wallets"
|
|
32
|
+
watched_wallets_loops_delay_cache_key = f"ratio1_watched_wallets_loops_delay"
|
|
32
33
|
alert_cache_key = f"ratio1_node_alerts"
|
|
33
34
|
cache_already_read_key = f"ratio1_epoch_review_already_read"
|
|
34
35
|
diskapi_epoch_review_file_name = "ratio1_epoch_review_data.pkl"
|
|
35
36
|
diskapi_watched_wallets_file_name = "ratio1_watched_wallets_data.pkl"
|
|
36
37
|
|
|
37
38
|
def get_erc721_total_supply(contract_address: str) -> int:
|
|
38
|
-
return int(plugin.requests.post("https://base.
|
|
39
|
+
return int(plugin.requests.post("https://base-mainnet.public.blastapi.io", json={
|
|
39
40
|
"jsonrpc": "2.0",
|
|
40
41
|
"method": "eth_call",
|
|
41
42
|
"params": [
|
|
@@ -83,32 +84,37 @@ def loop_processing(plugin: CustomPluginTemplate):
|
|
|
83
84
|
plugin.obj_cache[epoch_review_cache_key] = plugin.diskapi_load_pickle_from_data(diskapi_epoch_review_file_name) or {}
|
|
84
85
|
plugin.obj_cache[watched_wallets_cache_key] = plugin.diskapi_load_pickle_from_data(diskapi_watched_wallets_file_name) or {}
|
|
85
86
|
plugin.obj_cache[alert_cache_key] = {}
|
|
87
|
+
plugin.obj_cache[watched_wallets_loops_delay_cache_key] = 30
|
|
86
88
|
plugin.obj_cache[cache_already_read_key] = True # We use this flag to read the cache only once at the first run
|
|
87
89
|
|
|
88
90
|
# Check users' watched wallets and notify if any node is offline
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
for
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
91
|
+
if plugin.obj_cache.get(watched_wallets_loops_delay_cache_key) == 30:
|
|
92
|
+
watched_wallets = plugin.obj_cache.get(watched_wallets_cache_key)
|
|
93
|
+
if watched_wallets is not None:
|
|
94
|
+
for user, wallets in watched_wallets.items():
|
|
95
|
+
for wallet in wallets:
|
|
96
|
+
wallet_nodes = plugin.bc.get_wallet_nodes(wallet)
|
|
97
|
+
for node in wallet_nodes:
|
|
98
|
+
if node == "0x0000000000000000000000000000000000000000":
|
|
99
|
+
continue
|
|
97
100
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
101
|
+
node_alert_cache_key = f"{user}-{node}"
|
|
102
|
+
node_internal_addr = plugin.bc.eth_addr_to_internal_addr(node)
|
|
103
|
+
node_is_online = plugin.netmon.network_node_is_online(node_internal_addr)
|
|
104
|
+
if node_is_online:
|
|
105
|
+
if plugin.obj_cache[alert_cache_key].get(node_alert_cache_key) is not None:
|
|
106
|
+
# Node was previously offline, now it is back online, we notify the user
|
|
107
|
+
message = f"✅ Node {plugin.netmon.network_node_eeid(node_internal_addr)} ({node}) is back online."
|
|
108
|
+
plugin.send_message_to_user(user_id=user, text=message)
|
|
109
|
+
plugin.obj_cache[alert_cache_key][node_alert_cache_key] = None
|
|
110
|
+
elif plugin.obj_cache[alert_cache_key].get(node_alert_cache_key) is None:
|
|
111
|
+
# Node is offline and we haven't notified the user yet
|
|
112
|
+
plugin.obj_cache[alert_cache_key][node_alert_cache_key] = True
|
|
113
|
+
message = f"⚠️ Node {plugin.netmon.network_node_eeid(node_internal_addr)} ({node}) is offline. Please check your node status."
|
|
105
114
|
plugin.send_message_to_user(user_id=user, text=message)
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
plugin.obj_cache[alert_cache_key][node_alert_cache_key] = True
|
|
110
|
-
message = f"⚠️ Node {plugin.netmon.network_node_eeid(node_internal_addr)} ({node}) is offline. Please check your node status."
|
|
111
|
-
plugin.send_message_to_user(user_id=user, text=message)
|
|
115
|
+
plugin.obj_cache[watched_wallets_loops_delay_cache_key] = 0
|
|
116
|
+
else:
|
|
117
|
+
plugin.obj_cache[watched_wallets_loops_delay_cache_key] += 1
|
|
112
118
|
|
|
113
119
|
# Check if the epoch review has already been processed for the last epoch
|
|
114
120
|
if plugin.obj_cache.get(epoch_review_cache_key) is not None:
|
|
@@ -145,7 +151,8 @@ def loop_processing(plugin: CustomPluginTemplate):
|
|
|
145
151
|
message += f"🔄 Circulating R1 Supply: {circulating_supply:,.0f} R1\n"
|
|
146
152
|
message += f"💎 Total R1 Supply: {total_supply:,.0f} R1\n"
|
|
147
153
|
message += f"🎁 Last Epoch PoA Mining: {(last_epoch_nd_mining):,.2f} R1\n"
|
|
148
|
-
|
|
154
|
+
if burned_last_epoch > 0:
|
|
155
|
+
message += f"🔥 Last Epoch Burn: {(burned_last_epoch):,.2f} R1\n"
|
|
149
156
|
message += f"🔥 Total Burn: {(current_burn):,.2f} R1\n"
|
|
150
157
|
plugin.send_message_to_user(user_id=plugin.cfg_chat_id, text=message)
|
|
151
158
|
|
|
@@ -222,6 +229,24 @@ def reply(plugin: CustomPluginTemplate, message: str, user: str, chat_id: str):
|
|
|
222
229
|
message += f"- {wallet}\n"
|
|
223
230
|
return message
|
|
224
231
|
|
|
232
|
+
def handle_nodes():
|
|
233
|
+
user_watched_wallets = plugin.obj_cache.get(watched_wallets_cache_key).get(chat_id, [])
|
|
234
|
+
if not user_watched_wallets:
|
|
235
|
+
return "You are not watching any wallet. Use /watch <wallet_address> to start watching a wallet."
|
|
236
|
+
message = "You are currently watching the following wallets and their nodes:\n"
|
|
237
|
+
for wallet in user_watched_wallets:
|
|
238
|
+
wallet_nodes = plugin.bc.get_wallet_nodes(wallet)
|
|
239
|
+
message += f"- {wallet}:\n"
|
|
240
|
+
for node in wallet_nodes:
|
|
241
|
+
if node == "0x0000000000000000000000000000000000000000":
|
|
242
|
+
continue
|
|
243
|
+
node_internal_addr = plugin.bc.eth_addr_to_internal_addr(node)
|
|
244
|
+
node_alias = plugin.netmon.network_node_eeid(node_internal_addr)
|
|
245
|
+
node_is_online = plugin.netmon.network_node_is_online(node_internal_addr)
|
|
246
|
+
short_node = node[:6] + "..." + node[-4:]
|
|
247
|
+
message += f" - {'🟢' if node_is_online else '🔴'} {node_alias} ({short_node})\n"
|
|
248
|
+
return message
|
|
249
|
+
|
|
225
250
|
def handle_start():
|
|
226
251
|
return "Welcome to the Ratio1 Bot! Use /watch <wallet_address> to start watching your nodes. You will receive notifications when your nodes are offline."
|
|
227
252
|
|
|
@@ -238,6 +263,8 @@ def reply(plugin: CustomPluginTemplate, message: str, user: str, chat_id: str):
|
|
|
238
263
|
return handle_unwatchall()
|
|
239
264
|
if message.startswith("/unwatch"):
|
|
240
265
|
return handle_unwatch()
|
|
266
|
+
if message.startswith("/nodes"):
|
|
267
|
+
return handle_nodes()
|
|
241
268
|
if message.startswith("/start"):
|
|
242
269
|
return handle_start()
|
|
243
270
|
|
|
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
|
|
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
|
{ratio1-3.4.40 → ratio1-3.4.42}/ratio1/default/instance/telegram_conversational_bot_01_plugin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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
|
{ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex06_custom_code_on_multiple_remotes__example_1.py
RENAMED
|
File without changes
|
{ratio1-3.4.40 → ratio1-3.4.42}/tutorials/ex07_custom_code_on_multiple_remotes__example_2.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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
|
{ratio1-3.4.40 → ratio1-3.4.42}/xperimental/scripts/monitoring/multithreaded_network_sniffer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ratio1-3.4.40 → ratio1-3.4.42}/xperimental/xarchive/_tutorials/3. simple_real_time_custom_code.py
RENAMED
|
File without changes
|
{ratio1-3.4.40 → ratio1-3.4.42}/xperimental/xarchive/_tutorials/4. real_time_custom_code_2.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|