zrb 1.9.0__tar.gz → 1.9.1__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 (396) hide show
  1. {zrb-1.9.0 → zrb-1.9.1}/PKG-INFO +1 -1
  2. {zrb-1.9.0 → zrb-1.9.1}/pyproject.toml +1 -1
  3. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/llm_ask.py +4 -0
  4. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/code.py +2 -2
  5. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/file.py +105 -2
  6. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/web.py +1 -1
  7. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/config.py +14 -8
  8. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/llm_config.py +24 -20
  9. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/context_enrichment.py +31 -21
  10. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/history_summarization.py +31 -21
  11. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm_task.py +155 -18
  12. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/file.py +3 -2
  13. {zrb-1.9.0 → zrb-1.9.1}/README.md +0 -0
  14. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/__init__.py +0 -0
  15. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/__main__.py +0 -0
  16. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/attr/__init__.py +0 -0
  17. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/attr/type.py +0 -0
  18. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/__init__.py +0 -0
  19. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/base64.py +0 -0
  20. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/git.py +0 -0
  21. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/git_subtree.py +0 -0
  22. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/group.py +0 -0
  23. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/http.py +0 -0
  24. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/jwt.py +0 -0
  25. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/chat_session.py +0 -0
  26. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/history.py +0 -0
  27. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/input.py +0 -0
  28. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/previous-session.js +0 -0
  29. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/__init__.py +0 -0
  30. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/api.py +0 -0
  31. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/cli.py +0 -0
  32. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/rag.py +0 -0
  33. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/sub_agent.py +0 -0
  34. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/md5.py +0 -0
  35. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/__init__.py +0 -0
  36. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
  37. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
  38. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
  39. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
  40. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
  41. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
  42. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
  43. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
  44. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_util.py +0 -0
  45. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
  46. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +0 -0
  47. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
  48. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/gateway/view/content/my-module/my-entity.html +0 -0
  49. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/my_entity_service.py +0 -0
  50. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/my_entity_service_factory.py +0 -0
  51. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_db_repository.py +0 -0
  52. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_repository.py +0 -0
  53. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_repository_factory.py +0 -0
  54. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -0
  55. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/test/my_module/my_entity/test_create_my_entity.py +0 -0
  56. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/test/my_module/my_entity/test_delete_my_entity.py +0 -0
  57. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/test/my_module/my_entity/test_read_my_entity.py +0 -0
  58. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/test/my_module/my_entity/test_update_my_entity.py +0 -0
  59. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
  60. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
  61. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/navigation_config_file.py +0 -0
  62. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
  63. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
  64. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
  65. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
  66. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
  67. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +0 -0
  68. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
  69. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_api_client.py +0 -0
  70. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_client.py +0 -0
  71. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_client_factory.py +0 -0
  72. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_direct_client.py +0 -0
  73. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
  74. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
  75. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/script.py.mako +0 -0
  76. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
  77. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
  78. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +0 -0
  79. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
  80. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
  81. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/navigation_config_file.py +0 -0
  82. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
  83. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +0 -0
  84. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
  85. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
  86. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
  87. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
  88. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
  89. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
  90. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
  91. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
  92. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
  93. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
  94. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
  95. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
  96. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
  97. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
  98. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
  99. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
  100. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
  101. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
  102. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
  103. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
  104. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
  105. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
  106. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
  107. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
  108. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
  109. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
  110. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -0
  111. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/8ed025bcc845_create_permissions.py +0 -0
  112. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
  113. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
  114. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
  115. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
  116. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +0 -0
  117. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
  118. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
  119. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
  120. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
  121. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
  122. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +0 -0
  123. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
  124. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
  125. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +0 -0
  126. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
  127. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
  128. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -0
  129. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
  130. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
  131. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +0 -0
  132. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
  133. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
  134. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/config/navigation.py +0 -0
  135. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
  136. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
  137. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
  138. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
  139. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
  140. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
  141. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/schema/navigation.py +0 -0
  142. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
  143. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/auth.py +0 -0
  144. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
  145. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +0 -0
  146. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +0 -0
  147. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +0 -0
  148. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
  149. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
  150. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/login.html +0 -0
  151. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/logout.html +0 -0
  152. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/common/util.js +0 -0
  153. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/style.css +0 -0
  154. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +0 -0
  155. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/pico-style.css +0 -0
  156. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/script.js +0 -0
  157. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/style.css +0 -0
  158. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
  159. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
  160. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
  161. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +0 -0
  162. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +0 -0
  163. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +0 -0
  164. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +0 -0
  165. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +0 -0
  166. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +0 -0
  167. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +0 -0
  168. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +0 -0
  169. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +0 -0
  170. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
  171. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +0 -0
  172. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +0 -0
  173. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +0 -0
  174. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +0 -0
  175. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +0 -0
  176. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +0 -0
  177. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +0 -0
  178. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +0 -0
  179. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +0 -0
  180. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +0 -0
  181. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
  182. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
  183. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
  184. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
  185. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
  186. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
  187. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
  188. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/_util/access_token.py +0 -0
  189. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_create_permission.py +0 -0
  190. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_delete_permission.py +0 -0
  191. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_read_permission.py +0 -0
  192. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_update_permission.py +0 -0
  193. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/test_user_session.py +0 -0
  194. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_health_and_readiness.py +0 -0
  195. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_homepage.py +0 -0
  196. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_not_found_error.py +0 -0
  197. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
  198. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
  199. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/create/__init__.py +0 -0
  200. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  201. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  202. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/create/project_task.py +0 -0
  203. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/python.py +0 -0
  204. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/random.py +0 -0
  205. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
  206. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
  207. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/common_input.py +0 -0
  208. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
  209. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
  210. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
  211. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
  212. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/ubuntu.py +0 -0
  213. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
  214. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
  215. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
  216. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/shell/__init__.py +0 -0
  217. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
  218. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  219. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  220. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  221. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/todo.py +0 -0
  222. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/uuid.py +0 -0
  223. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/callback/__init__.py +0 -0
  224. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/callback/any_callback.py +0 -0
  225. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/callback/callback.py +0 -0
  226. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/cmd/__init__.py +0 -0
  227. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/cmd/cmd_result.py +0 -0
  228. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/cmd/cmd_val.py +0 -0
  229. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/content_transformer/__init__.py +0 -0
  230. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/content_transformer/any_content_transformer.py +0 -0
  231. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/content_transformer/content_transformer.py +0 -0
  232. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/context/__init__.py +0 -0
  233. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/context/any_context.py +0 -0
  234. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/context/any_shared_context.py +0 -0
  235. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/context/context.py +0 -0
  236. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/context/shared_context.py +0 -0
  237. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/dot_dict/__init__.py +0 -0
  238. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/dot_dict/dot_dict.py +0 -0
  239. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/env/__init__.py +0 -0
  240. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/env/any_env.py +0 -0
  241. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/env/env.py +0 -0
  242. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/env/env_file.py +0 -0
  243. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/env/env_map.py +0 -0
  244. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/group/__init__.py +0 -0
  245. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/group/any_group.py +0 -0
  246. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/group/group.py +0 -0
  247. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/__init__.py +0 -0
  248. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/any_input.py +0 -0
  249. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/base_input.py +0 -0
  250. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/bool_input.py +0 -0
  251. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/float_input.py +0 -0
  252. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/int_input.py +0 -0
  253. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/option_input.py +0 -0
  254. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/password_input.py +0 -0
  255. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/str_input.py +0 -0
  256. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/text_input.py +0 -0
  257. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/llm_rate_limitter.py +0 -0
  258. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/__init__.py +0 -0
  259. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/cli.py +0 -0
  260. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/common_util.py +0 -0
  261. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_app.py +0 -0
  262. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_auth_config.py +0 -0
  263. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/__init__.py +0 -0
  264. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/docs_route.py +0 -0
  265. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
  266. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
  267. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/error_page/view.html +0 -0
  268. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
  269. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
  270. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/home_page/view.html +0 -0
  271. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/login_api_route.py +0 -0
  272. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
  273. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/login_page/view.html +0 -0
  274. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/logout_api_route.py +0 -0
  275. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
  276. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/logout_page/view.html +0 -0
  277. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
  278. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
  279. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
  280. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
  281. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
  282. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
  283. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
  284. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/global_template.html +0 -0
  285. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
  286. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/common.css +0 -0
  287. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/common.js +0 -0
  288. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
  289. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
  290. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
  291. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.amber.min.css +0 -0
  292. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.blue.min.css +0 -0
  293. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.cyan.min.css +0 -0
  294. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.fuchsia.min.css +0 -0
  295. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.green.min.css +0 -0
  296. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.grey.min.css +0 -0
  297. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.indigo.min.css +0 -0
  298. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.jade.min.css +0 -0
  299. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.lime.min.css +0 -0
  300. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.min.css +0 -0
  301. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.orange.min.css +0 -0
  302. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.pink.min.css +0 -0
  303. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.pumpkin.min.css +0 -0
  304. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.purple.min.css +0 -0
  305. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.red.min.css +0 -0
  306. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.sand.min.css +0 -0
  307. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.slate.min.css +0 -0
  308. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.violet.min.css +0 -0
  309. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.yellow.min.css +0 -0
  310. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.zinc.min.css +0 -0
  311. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
  312. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
  313. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
  314. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
  315. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/static_route.py +0 -0
  316. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
  317. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
  318. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_schema/session.py +0 -0
  319. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_schema/token.py +0 -0
  320. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_schema/user.py +0 -0
  321. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_util/cookie.py +0 -0
  322. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_util/html.py +0 -0
  323. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_util/token.py +0 -0
  324. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_util/user.py +0 -0
  325. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session/__init__.py +0 -0
  326. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session/any_session.py +0 -0
  327. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session/session.py +0 -0
  328. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session_state_log/__init__.py +0 -0
  329. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session_state_log/session_state_log.py +0 -0
  330. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session_state_logger/__init__.py +0 -0
  331. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  332. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  333. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
  334. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/__init__.py +0 -0
  335. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/any_task.py +0 -0
  336. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base/__init__.py +0 -0
  337. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base/context.py +0 -0
  338. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base/execution.py +0 -0
  339. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base/lifecycle.py +0 -0
  340. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base/monitoring.py +0 -0
  341. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base/operators.py +0 -0
  342. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base_task.py +0 -0
  343. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base_trigger.py +0 -0
  344. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/cmd_task.py +0 -0
  345. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/http_check.py +0 -0
  346. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/__init__.py +0 -0
  347. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/agent.py +0 -0
  348. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/config.py +0 -0
  349. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/context.py +0 -0
  350. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/error.py +0 -0
  351. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/history.py +0 -0
  352. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/print_node.py +0 -0
  353. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/prompt.py +0 -0
  354. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/tool_wrapper.py +0 -0
  355. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/typing.py +0 -0
  356. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/make_task.py +0 -0
  357. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/rsync_task.py +0 -0
  358. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/scaffolder.py +0 -0
  359. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/scheduler.py +0 -0
  360. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/task.py +0 -0
  361. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/tcp_check.py +0 -0
  362. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task_status/__init__.py +0 -0
  363. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task_status/task_status.py +0 -0
  364. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/__init__.py +0 -0
  365. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/attr.py +0 -0
  366. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/cli/__init__.py +0 -0
  367. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/cli/style.py +0 -0
  368. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/cli/subcommand.py +0 -0
  369. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/cmd/__init__.py +0 -0
  370. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/cmd/command.py +0 -0
  371. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/cmd/remote.py +0 -0
  372. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/__init__.py +0 -0
  373. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modification_mode.py +0 -0
  374. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_class.py +0 -0
  375. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_class_parent.py +0 -0
  376. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_class_property.py +0 -0
  377. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_dict.py +0 -0
  378. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_function.py +0 -0
  379. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_function_call.py +0 -0
  380. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_method.py +0 -0
  381. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_module.py +0 -0
  382. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/cron.py +0 -0
  383. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/git.py +0 -0
  384. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/git_subtree.py +0 -0
  385. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/group.py +0 -0
  386. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/init_path.py +0 -0
  387. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/load.py +0 -0
  388. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/run.py +0 -0
  389. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/string/__init__.py +0 -0
  390. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/string/conversion.py +0 -0
  391. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/string/format.py +0 -0
  392. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/string/name.py +0 -0
  393. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/todo.py +0 -0
  394. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/todo_model.py +0 -0
  395. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/xcom/__init__.py +0 -0
  396. {zrb-1.9.0 → zrb-1.9.1}/src/zrb/xcom/xcom.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zrb
3
- Version: 1.9.0
3
+ Version: 1.9.1
4
4
  Summary: Your Automation Powerhouse
5
5
  Home-page: https://github.com/state-alchemists/zrb
6
6
  License: AGPL-3.0-or-later
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zrb"
3
- version = "1.9.0"
3
+ version = "1.9.1"
4
4
  description = "Your Automation Powerhouse"
5
5
  authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
6
6
  license = "AGPL-3.0-or-later"
@@ -10,7 +10,9 @@ from zrb.builtin.llm.tool.file import (
10
10
  apply_diff,
11
11
  list_files,
12
12
  read_from_file,
13
+ read_many_files,
13
14
  search_files,
15
+ write_many_files,
14
16
  write_to_file,
15
17
  )
16
18
  from zrb.builtin.llm.tool.web import (
@@ -132,8 +134,10 @@ if CFG.LLM_ALLOW_ACCESS_LOCAL_FILE:
132
134
  search_files,
133
135
  list_files,
134
136
  read_from_file,
137
+ read_many_files,
135
138
  apply_diff,
136
139
  write_to_file,
140
+ write_many_files,
137
141
  )
138
142
 
139
143
  if CFG.LLM_ALLOW_ACCESS_SHELL:
@@ -82,8 +82,8 @@ async def analyze_repo(
82
82
  goal: str,
83
83
  extensions: list[str] = _DEFAULT_EXTENSIONS,
84
84
  exclude_patterns: list[str] = DEFAULT_EXCLUDED_PATTERNS,
85
- extraction_token_limit: int = 30000,
86
- summarization_token_limit: int = 30000,
85
+ extraction_token_limit: int = 40000,
86
+ summarization_token_limit: int = 40000,
87
87
  ) -> str:
88
88
  """
89
89
  Extract and summarize information from any directory.
@@ -2,7 +2,7 @@ import fnmatch
2
2
  import json
3
3
  import os
4
4
  import re
5
- from typing import Any, Optional
5
+ from typing import Any, Dict, List, Optional
6
6
 
7
7
  from zrb.builtin.llm.tool.sub_agent import create_sub_agent_tool
8
8
  from zrb.context.any_context import AnyContext
@@ -215,6 +215,7 @@ def read_from_file(
215
215
  end_line: Optional[int] = None,
216
216
  ) -> str:
217
217
  """Read file content (or specific lines) at a path, including line numbers.
218
+ This tool can read both, text and pdf file.
218
219
  Args:
219
220
  path (str): Path to read. Pass exactly as provided, including '~'.
220
221
  start_line (Optional[int]): Starting line number (1-based).
@@ -466,7 +467,7 @@ def apply_diff(
466
467
 
467
468
 
468
469
  async def analyze_file(
469
- ctx: AnyContext, path: str, query: str, token_limit: int = 30000
470
+ ctx: AnyContext, path: str, query: str, token_limit: int = 40000
470
471
  ) -> str:
471
472
  """Analyze file using LLM capability to reduce context usage.
472
473
  Use this tool for:
@@ -498,3 +499,105 @@ async def analyze_file(
498
499
  )
499
500
  clipped_payload = llm_rate_limitter.clip_prompt(payload, token_limit)
500
501
  return await _analyze_file(ctx, clipped_payload)
502
+
503
+
504
+ def read_many_files(paths: List[str]) -> str:
505
+ """
506
+ Read and return the content of multiple files.
507
+
508
+ This function is ideal for when you need to inspect the contents of
509
+ several files at once. For each file path provided in the input list,
510
+ it reads the entire file content. The result is a JSON string
511
+ containing a dictionary where keys are the file paths and values are
512
+ the corresponding file contents.
513
+
514
+ Use this tool when you need a comprehensive view of multiple files,
515
+ for example, to understand how different parts of a module interact,
516
+ to check configurations across various files, or to gather context
517
+ before making widespread changes.
518
+
519
+ Args:
520
+ paths (List[str]): A list of absolute or relative paths to the
521
+ files you want to read. It is crucial to
522
+ provide accurate paths. Use the `list_files`
523
+ tool if you are unsure about the exact file
524
+ locations.
525
+
526
+ Returns:
527
+ str: A JSON string representing a dictionary where each key is a
528
+ file path and the corresponding value is the content of that
529
+ file. If a file cannot be read, its entry in the dictionary
530
+ will contain an error message.
531
+ Example:
532
+ {
533
+ "results": {
534
+ "path/to/file1.py": "...",
535
+ "path/to/file2.txt": "..."
536
+ }
537
+ }
538
+ """
539
+ results = {}
540
+ for path in paths:
541
+ try:
542
+ abs_path = os.path.abspath(os.path.expanduser(path))
543
+ if not os.path.exists(abs_path):
544
+ raise FileNotFoundError(f"File not found: {path}")
545
+ content = read_file_with_line_numbers(abs_path)
546
+ results[path] = content
547
+ except Exception as e:
548
+ results[path] = f"Error reading file: {e}"
549
+ return json.dumps({"results": results})
550
+
551
+
552
+ def write_many_files(files: Dict[str, str]) -> str:
553
+ """
554
+ Write content to multiple files simultaneously.
555
+
556
+ This function allows you to create, overwrite, or update multiple
557
+ files in a single operation. You provide a dictionary where each
558
+ key is a file path and the corresponding value is the content to be
559
+ written to that file. This is particularly useful for applying
560
+ changes across a project, such as refactoring code, updating
561
+ configuration files, or creating a set of new files from a template.
562
+
563
+ Each file is handled as a complete replacement of its content. If the
564
+ file does not exist, it will be created. If it already exists, its
565
+
566
+ entire content will be overwritten with the new content you provide.
567
+ Therefore, it is essential to provide the full, intended content for
568
+ each file.
569
+
570
+ Args:
571
+ files (Dict[str, str]): A dictionary where keys are the file paths
572
+ (absolute or relative) and values are the
573
+ complete contents to be written to those
574
+ files.
575
+
576
+ Returns:
577
+ str: A JSON string summarizing the operation. It includes a list
578
+ of successfully written files and a list of files that
579
+ failed, along with the corresponding error messages.
580
+ Example:
581
+ {
582
+ "success": [
583
+ "path/to/file1.py",
584
+ "path/to/file2.txt"
585
+ ],
586
+ "errors": {
587
+ "path/to/problematic/file.py": "Error message"
588
+ }
589
+ }
590
+ """
591
+ success = []
592
+ errors = {}
593
+ for path, content in files.items():
594
+ try:
595
+ abs_path = os.path.abspath(os.path.expanduser(path))
596
+ directory = os.path.dirname(abs_path)
597
+ if directory and not os.path.exists(directory):
598
+ os.makedirs(directory, exist_ok=True)
599
+ write_file(abs_path, content)
600
+ success.append(path)
601
+ except Exception as e:
602
+ errors[path] = f"Error writing file: {e}"
603
+ return json.dumps({"success": success, "errors": errors})
@@ -58,7 +58,7 @@ async def open_web_page(url: str) -> str:
58
58
 
59
59
  def create_search_internet_tool(serp_api_key: str) -> Callable[[str, int], str]:
60
60
  def search_internet(query: str, num_results: int = 10) -> str:
61
- """Search the internet using SerpApi (Google Search) and return parsed results.
61
+ """Search the internet Google Search and return parsed results.
62
62
  Args:
63
63
  query (str): Search query.
64
64
  num_results (int): Search result count. Defaults to 10.
@@ -243,13 +243,19 @@ class Config:
243
243
 
244
244
  @property
245
245
  def LLM_MAX_REQUESTS_PER_MINUTE(self) -> int:
246
- """Maximum number of LLM requests allowed per minute."""
247
- return int(os.getenv("LLM_MAX_REQUESTS_PER_MINUTE", "60"))
246
+ """
247
+ Maximum number of LLM requests allowed per minute.
248
+ Default is conservative to accommodate free-tier LLM providers.
249
+ """
250
+ return int(os.getenv("LLM_MAX_REQUESTS_PER_MINUTE", "15"))
248
251
 
249
252
  @property
250
253
  def LLM_MAX_TOKENS_PER_MINUTE(self) -> int:
251
- """Maximum number of LLM tokens allowed per minute."""
252
- return int(os.getenv("ZRB_LLM_MAX_TOKENS_PER_MINUTE", "200000"))
254
+ """
255
+ Maximum number of LLM tokens allowed per minute.
256
+ Default is conservative to accommodate free-tier LLM providers.
257
+ """
258
+ return int(os.getenv("ZRB_LLM_MAX_TOKENS_PER_MINUTE", "100000"))
253
259
 
254
260
  @property
255
261
  def LLM_MAX_TOKENS_PER_REQUEST(self) -> int:
@@ -270,16 +276,16 @@ class Config:
270
276
  return to_boolean(os.getenv("ZRB_LLM_SUMMARIZE_HISTORY", "true"))
271
277
 
272
278
  @property
273
- def LLM_HISTORY_SUMMARIZATION_THRESHOLD(self) -> int:
274
- return int(os.getenv("ZRB_LLM_HISTORY_SUMMARIZATION_THRESHOLD", "5"))
279
+ def LLM_HISTORY_SUMMARIZATION_TOKEN_THRESHOLD(self) -> int:
280
+ return int(os.getenv("ZRB_LLM_HISTORY_SUMMARIZATION_TOKEN_THRESHOLD", "3000"))
275
281
 
276
282
  @property
277
283
  def LLM_ENRICH_CONTEXT(self) -> bool:
278
284
  return to_boolean(os.getenv("ZRB_LLM_ENRICH_CONTEXT", "true"))
279
285
 
280
286
  @property
281
- def LLM_CONTEXT_ENRICHMENT_THRESHOLD(self) -> int:
282
- return int(os.getenv("ZRB_LLM_CONTEXT_ENRICHMENT_THRESHOLD", "5"))
287
+ def LLM_CONTEXT_ENRICHMENT_TOKEN_THRESHOLD(self) -> int:
288
+ return int(os.getenv("ZRB_LLM_CONTEXT_ENRICHMENT_TOKEN_THRESHOLD", "3000"))
283
289
 
284
290
  @property
285
291
  def LLM_HISTORY_DIR(self) -> str:
@@ -178,9 +178,9 @@ class LLMConfig:
178
178
  default_summarization_prompt: str | None = None,
179
179
  default_context_enrichment_prompt: str | None = None,
180
180
  default_summarize_history: bool | None = None,
181
- default_history_summarization_threshold: int | None = None,
181
+ default_history_summarization_token_threshold: int | None = None,
182
182
  default_enrich_context: bool | None = None,
183
- default_context_enrichment_threshold: int | None = None,
183
+ default_context_enrichment_token_threshold: int | None = None,
184
184
  default_model: "Model | None" = None,
185
185
  default_model_settings: "ModelSettings | None" = None,
186
186
  default_model_provider: "Provider | None" = None,
@@ -195,12 +195,12 @@ class LLMConfig:
195
195
  self._default_summarization_prompt = default_summarization_prompt
196
196
  self._default_context_enrichment_prompt = default_context_enrichment_prompt
197
197
  self._default_summarize_history = default_summarize_history
198
- self._default_history_summarization_threshold = (
199
- default_history_summarization_threshold
198
+ self._default_history_summarization_token_threshold = (
199
+ default_history_summarization_token_threshold
200
200
  )
201
201
  self._default_enrich_context = default_enrich_context
202
- self._default_context_enrichment_threshold = (
203
- default_context_enrichment_threshold
202
+ self._default_context_enrichment_token_threshold = (
203
+ default_context_enrichment_token_threshold
204
204
  )
205
205
  self._default_model_settings = default_model_settings
206
206
  self._default_model_provider = default_model_provider
@@ -316,10 +316,10 @@ class LLMConfig:
316
316
  return CFG.LLM_SUMMARIZE_HISTORY
317
317
 
318
318
  @property
319
- def default_history_summarization_threshold(self) -> int:
320
- if self._default_history_summarization_threshold is not None:
321
- return self._default_history_summarization_threshold
322
- return CFG.LLM_HISTORY_SUMMARIZATION_THRESHOLD
319
+ def default_history_summarization_token_threshold(self) -> int:
320
+ if self._default_history_summarization_token_threshold is not None:
321
+ return self._default_history_summarization_token_threshold
322
+ return CFG.LLM_HISTORY_SUMMARIZATION_TOKEN_THRESHOLD
323
323
 
324
324
  @property
325
325
  def default_enrich_context(self) -> bool:
@@ -328,10 +328,10 @@ class LLMConfig:
328
328
  return CFG.LLM_ENRICH_CONTEXT
329
329
 
330
330
  @property
331
- def default_context_enrichment_threshold(self) -> int:
332
- if self._default_context_enrichment_threshold is not None:
333
- return self._default_context_enrichment_threshold
334
- return CFG.LLM_CONTEXT_ENRICHMENT_THRESHOLD
331
+ def default_context_enrichment_token_threshold(self) -> int:
332
+ if self._default_context_enrichment_token_threshold is not None:
333
+ return self._default_context_enrichment_token_threshold
334
+ return CFG.LLM_CONTEXT_ENRICHMENT_TOKEN_THRESHOLD
335
335
 
336
336
  def set_default_persona(self, persona: str):
337
337
  self._default_persona = persona
@@ -369,18 +369,22 @@ class LLMConfig:
369
369
  def set_default_summarize_history(self, summarize_history: bool):
370
370
  self._default_summarize_history = summarize_history
371
371
 
372
- def set_default_history_summarization_threshold(
373
- self, history_summarization_threshold: int
372
+ def set_default_history_summarization_token_threshold(
373
+ self, history_summarization_token_threshold: int
374
374
  ):
375
- self._default_history_summarization_threshold = history_summarization_threshold
375
+ self._default_history_summarization_token_threshold = (
376
+ history_summarization_token_threshold
377
+ )
376
378
 
377
379
  def set_default_enrich_context(self, enrich_context: bool):
378
380
  self._default_enrich_context = enrich_context
379
381
 
380
- def set_default_context_enrichment_threshold(
381
- self, context_enrichment_threshold: int
382
+ def set_default_context_enrichment_token_threshold(
383
+ self, context_enrichment_token_threshold: int
382
384
  ):
383
- self._default_context_enrichment_threshold = context_enrichment_threshold
385
+ self._default_context_enrichment_token_threshold = (
386
+ context_enrichment_token_threshold
387
+ )
384
388
 
385
389
  def set_default_model_settings(self, model_settings: "ModelSettings"):
386
390
  self._default_model_settings = model_settings
@@ -5,7 +5,7 @@ from typing import TYPE_CHECKING
5
5
  from zrb.attr.type import BoolAttr, IntAttr
6
6
  from zrb.context.any_context import AnyContext
7
7
  from zrb.llm_config import llm_config
8
- from zrb.llm_rate_limitter import LLMRateLimiter
8
+ from zrb.llm_rate_limitter import LLMRateLimiter, llm_rate_limitter
9
9
  from zrb.task.llm.agent import run_agent_iteration
10
10
  from zrb.task.llm.history import (
11
11
  count_part_in_history_list,
@@ -20,6 +20,12 @@ if TYPE_CHECKING:
20
20
  from pydantic_ai.settings import ModelSettings
21
21
 
22
22
 
23
+ def _count_token_in_history(history_list: ListOfDict) -> int:
24
+ """Counts the total number of tokens in a conversation history list."""
25
+ text_to_count = json.dumps(history_list)
26
+ return llm_rate_limitter.count_token(text_to_count)
27
+
28
+
23
29
  async def enrich_context(
24
30
  ctx: AnyContext,
25
31
  model: "Model | str | None",
@@ -77,22 +83,22 @@ async def enrich_context(
77
83
  return previous_long_term_context
78
84
 
79
85
 
80
- def get_context_enrichment_threshold(
86
+ def get_context_enrichment_token_threshold(
81
87
  ctx: AnyContext,
82
- context_enrichment_threshold_attr: IntAttr | None,
83
- render_context_enrichment_threshold: bool,
88
+ context_enrichment_token_threshold_attr: IntAttr | None,
89
+ render_context_enrichment_token_threshold: bool,
84
90
  ) -> int:
85
- """Gets the context enrichment threshold, handling defaults and errors."""
91
+ """Gets the context enrichment token threshold, handling defaults and errors."""
86
92
  try:
87
93
  return get_int_attr(
88
94
  ctx,
89
- context_enrichment_threshold_attr,
90
- llm_config.default_context_enrichment_threshold,
91
- auto_render=render_context_enrichment_threshold,
95
+ context_enrichment_token_threshold_attr,
96
+ llm_config.default_context_enrichment_token_threshold,
97
+ auto_render=render_context_enrichment_token_threshold,
92
98
  )
93
99
  except ValueError as e:
94
100
  ctx.log_warning(
95
- f"Could not convert context_enrichment_threshold to int: {e}. "
101
+ f"Could not convert context_enrichment_token_threshold to int: {e}. "
96
102
  "Defaulting to -1 (no threshold)."
97
103
  )
98
104
  return -1
@@ -103,21 +109,25 @@ def should_enrich_context(
103
109
  history_list: ListOfDict,
104
110
  should_enrich_context_attr: BoolAttr | None,
105
111
  render_enrich_context: bool,
106
- context_enrichment_threshold_attr: IntAttr | None,
107
- render_context_enrichment_threshold: bool,
112
+ context_enrichment_token_threshold_attr: IntAttr | None,
113
+ render_context_enrichment_token_threshold: bool,
108
114
  ) -> bool:
109
115
  """
110
- Determines if context enrichment should occur based on history, threshold, and config.
116
+ Determines if context enrichment should occur based on history, token threshold, and config.
111
117
  """
112
118
  history_part_count = count_part_in_history_list(history_list)
113
119
  if history_part_count == 0:
114
120
  return False
115
- enrichment_threshold = get_context_enrichment_threshold(
121
+ enrichment_token_threshold = get_context_enrichment_token_threshold(
116
122
  ctx,
117
- context_enrichment_threshold_attr,
118
- render_context_enrichment_threshold,
123
+ context_enrichment_token_threshold_attr,
124
+ render_context_enrichment_token_threshold,
119
125
  )
120
- if enrichment_threshold == -1 or enrichment_threshold > history_part_count:
126
+ history_token_count = _count_token_in_history(history_list)
127
+ if (
128
+ enrichment_token_threshold == -1
129
+ or enrichment_token_threshold > history_token_count
130
+ ):
121
131
  return False
122
132
  return get_bool_attr(
123
133
  ctx,
@@ -133,22 +143,22 @@ async def maybe_enrich_context(
133
143
  long_term_context: str,
134
144
  should_enrich_context_attr: BoolAttr | None,
135
145
  render_enrich_context: bool,
136
- context_enrichment_threshold_attr: IntAttr | None,
137
- render_context_enrichment_threshold: bool,
146
+ context_enrichment_token_threshold_attr: IntAttr | None,
147
+ render_context_enrichment_token_threshold: bool,
138
148
  model: "str | Model | None",
139
149
  model_settings: "ModelSettings | None",
140
150
  context_enrichment_prompt: str,
141
151
  rate_limitter: LLMRateLimiter | None = None,
142
152
  ) -> str:
143
- """Enriches context based on history if enabled and threshold met."""
153
+ """Enriches context based on history if enabled and token threshold met."""
144
154
  shorten_history_list = replace_system_prompt_in_history_list(history_list)
145
155
  if should_enrich_context(
146
156
  ctx,
147
157
  shorten_history_list,
148
158
  should_enrich_context_attr,
149
159
  render_enrich_context,
150
- context_enrichment_threshold_attr,
151
- render_context_enrichment_threshold,
160
+ context_enrichment_token_threshold_attr,
161
+ render_context_enrichment_token_threshold,
152
162
  ):
153
163
  return await enrich_context(
154
164
  ctx=ctx,
@@ -5,7 +5,7 @@ from typing import TYPE_CHECKING
5
5
  from zrb.attr.type import BoolAttr, IntAttr
6
6
  from zrb.context.any_context import AnyContext
7
7
  from zrb.llm_config import llm_config
8
- from zrb.llm_rate_limitter import LLMRateLimiter
8
+ from zrb.llm_rate_limitter import LLMRateLimiter, llm_rate_limitter
9
9
  from zrb.task.llm.agent import run_agent_iteration
10
10
  from zrb.task.llm.history import (
11
11
  count_part_in_history_list,
@@ -20,22 +20,28 @@ if TYPE_CHECKING:
20
20
  from pydantic_ai.settings import ModelSettings
21
21
 
22
22
 
23
- def get_history_summarization_threshold(
23
+ def _count_token_in_history(history_list: ListOfDict) -> int:
24
+ """Counts the total number of tokens in a conversation history list."""
25
+ text_to_count = json.dumps(history_list)
26
+ return llm_rate_limitter.count_token(text_to_count)
27
+
28
+
29
+ def get_history_summarization_token_threshold(
24
30
  ctx: AnyContext,
25
- history_summarization_threshold_attr: IntAttr | None,
26
- render_history_summarization_threshold: bool,
31
+ history_summarization_token_threshold_attr: IntAttr | None,
32
+ render_history_summarization_token_threshold: bool,
27
33
  ) -> int:
28
- """Gets the history summarization threshold, handling defaults and errors."""
34
+ """Gets the history summarization token threshold, handling defaults and errors."""
29
35
  try:
30
36
  return get_int_attr(
31
37
  ctx,
32
- history_summarization_threshold_attr,
33
- llm_config.default_history_summarization_threshold,
34
- auto_render=render_history_summarization_threshold,
38
+ history_summarization_token_threshold_attr,
39
+ llm_config.default_history_summarization_token_threshold,
40
+ auto_render=render_history_summarization_token_threshold,
35
41
  )
36
42
  except ValueError as e:
37
43
  ctx.log_warning(
38
- f"Could not convert history_summarization_threshold to int: {e}. "
44
+ f"Could not convert history_summarization_token_threshold to int: {e}. "
39
45
  "Defaulting to -1 (no threshold)."
40
46
  )
41
47
  return -1
@@ -46,19 +52,23 @@ def should_summarize_history(
46
52
  history_list: ListOfDict,
47
53
  should_summarize_history_attr: BoolAttr | None,
48
54
  render_summarize_history: bool,
49
- history_summarization_threshold_attr: IntAttr | None,
50
- render_history_summarization_threshold: bool,
55
+ history_summarization_token_threshold_attr: IntAttr | None,
56
+ render_history_summarization_token_threshold: bool,
51
57
  ) -> bool:
52
- """Determines if history summarization should occur based on length and config."""
58
+ """Determines if history summarization should occur based on token length and config."""
53
59
  history_part_count = count_part_in_history_list(history_list)
54
60
  if history_part_count == 0:
55
61
  return False
56
- summarization_threshold = get_history_summarization_threshold(
62
+ summarization_token_threshold = get_history_summarization_token_threshold(
57
63
  ctx,
58
- history_summarization_threshold_attr,
59
- render_history_summarization_threshold,
64
+ history_summarization_token_threshold_attr,
65
+ render_history_summarization_token_threshold,
60
66
  )
61
- if summarization_threshold == -1 or summarization_threshold > history_part_count:
67
+ history_token_count = _count_token_in_history(history_list)
68
+ if (
69
+ summarization_token_threshold == -1
70
+ or summarization_token_threshold > history_token_count
71
+ ):
62
72
  return False
63
73
  return get_bool_attr(
64
74
  ctx,
@@ -102,7 +112,7 @@ async def summarize_history(
102
112
  history_list=[],
103
113
  rate_limitter=rate_limitter,
104
114
  )
105
- if summary_run and summary_run.result.output:
115
+ if summary_run and summary_run.result and summary_run.result.output:
106
116
  new_summary = str(summary_run.result.output)
107
117
  usage = summary_run.result.usage()
108
118
  ctx.print(stylize_faint(f"📝 Summarization Token: {usage}"), plain=True)
@@ -126,8 +136,8 @@ async def maybe_summarize_history(
126
136
  conversation_summary: str,
127
137
  should_summarize_history_attr: BoolAttr | None,
128
138
  render_summarize_history: bool,
129
- history_summarization_threshold_attr: IntAttr | None,
130
- render_history_summarization_threshold: bool,
139
+ history_summarization_token_threshold_attr: IntAttr | None,
140
+ render_history_summarization_token_threshold: bool,
131
141
  model: "str | Model | None",
132
142
  model_settings: "ModelSettings | None",
133
143
  summarization_prompt: str,
@@ -140,8 +150,8 @@ async def maybe_summarize_history(
140
150
  shorten_history_list,
141
151
  should_summarize_history_attr,
142
152
  render_summarize_history,
143
- history_summarization_threshold_attr,
144
- render_history_summarization_threshold,
153
+ history_summarization_token_threshold_attr,
154
+ render_history_summarization_token_threshold,
145
155
  ):
146
156
  new_summary = await summarize_history(
147
157
  ctx=ctx,