zrb 1.4.2__tar.gz → 1.4.3__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 (346) hide show
  1. {zrb-1.4.2 → zrb-1.4.3}/PKG-INFO +64 -40
  2. {zrb-1.4.2 → zrb-1.4.3}/README.md +57 -37
  3. {zrb-1.4.2 → zrb-1.4.3}/pyproject.toml +6 -2
  4. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/llm/tool/api.py +1 -1
  5. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/llm/tool/file.py +2 -0
  6. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/llm/tool/rag.py +28 -10
  7. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/llm/tool/web.py +55 -15
  8. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/config.py +4 -4
  9. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/llm_config.py +12 -5
  10. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/task/llm_task.py +29 -14
  11. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/__init__.py +0 -0
  12. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/__main__.py +0 -0
  13. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/attr/__init__.py +0 -0
  14. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/attr/type.py +0 -0
  15. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/__init__.py +0 -0
  16. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/base64.py +0 -0
  17. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/git.py +0 -0
  18. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/git_subtree.py +0 -0
  19. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/group.py +0 -0
  20. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/llm/llm_chat.py +0 -0
  21. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/llm/previous-session.js +0 -0
  22. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/llm/tool/cli.py +0 -0
  23. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/md5.py +0 -0
  24. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/__init__.py +0 -0
  25. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
  26. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
  27. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
  28. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
  29. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
  30. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
  31. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
  32. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
  33. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_util.py +0 -0
  34. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
  35. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +0 -0
  36. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
  37. {zrb-1.4.2 → zrb-1.4.3}/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
  38. {zrb-1.4.2 → zrb-1.4.3}/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
  39. {zrb-1.4.2 → zrb-1.4.3}/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
  40. {zrb-1.4.2 → zrb-1.4.3}/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
  41. {zrb-1.4.2 → zrb-1.4.3}/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
  42. {zrb-1.4.2 → zrb-1.4.3}/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
  43. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -0
  44. {zrb-1.4.2 → zrb-1.4.3}/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
  45. {zrb-1.4.2 → zrb-1.4.3}/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
  46. {zrb-1.4.2 → zrb-1.4.3}/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
  47. {zrb-1.4.2 → zrb-1.4.3}/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
  48. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
  49. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
  50. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/navigation_config_file.py +0 -0
  51. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
  52. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
  53. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
  54. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
  55. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
  56. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +0 -0
  57. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
  58. {zrb-1.4.2 → zrb-1.4.3}/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
  59. {zrb-1.4.2 → zrb-1.4.3}/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
  60. {zrb-1.4.2 → zrb-1.4.3}/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
  61. {zrb-1.4.2 → zrb-1.4.3}/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
  62. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
  63. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
  64. {zrb-1.4.2 → zrb-1.4.3}/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
  65. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
  66. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
  67. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +0 -0
  68. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
  69. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
  70. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/navigation_config_file.py +0 -0
  71. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
  72. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +0 -0
  73. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
  74. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
  75. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
  76. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
  77. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
  78. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
  79. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
  80. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
  81. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
  82. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
  83. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
  84. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
  85. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
  86. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
  87. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
  88. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
  89. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
  90. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
  91. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
  92. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
  93. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
  94. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
  95. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
  96. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
  97. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
  98. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
  99. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -0
  100. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/8ed025bcc845_create_permissions.py +0 -0
  101. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
  102. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
  103. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
  104. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
  105. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +0 -0
  106. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
  107. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
  108. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
  109. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
  110. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
  111. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +0 -0
  112. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
  113. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
  114. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +0 -0
  115. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
  116. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
  117. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -0
  118. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
  119. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
  120. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +0 -0
  121. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
  122. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
  123. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/config/navigation.py +0 -0
  124. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
  125. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
  126. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
  127. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
  128. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
  129. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
  130. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/schema/navigation.py +0 -0
  131. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
  132. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/auth.py +0 -0
  133. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
  134. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +0 -0
  135. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +0 -0
  136. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +0 -0
  137. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
  138. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
  139. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/login.html +0 -0
  140. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/logout.html +0 -0
  141. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/common/util.js +0 -0
  142. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/style.css +0 -0
  143. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +0 -0
  144. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/pico-style.css +0 -0
  145. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/script.js +0 -0
  146. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/style.css +0 -0
  147. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
  148. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
  149. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
  150. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +0 -0
  151. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +0 -0
  152. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +0 -0
  153. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +0 -0
  154. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +0 -0
  155. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +0 -0
  156. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +0 -0
  157. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +0 -0
  158. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +0 -0
  159. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
  160. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +0 -0
  161. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +0 -0
  162. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +0 -0
  163. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +0 -0
  164. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +0 -0
  165. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +0 -0
  166. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +0 -0
  167. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +0 -0
  168. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +0 -0
  169. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +0 -0
  170. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
  171. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
  172. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
  173. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
  174. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
  175. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
  176. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
  177. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/_util/access_token.py +0 -0
  178. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_create_permission.py +0 -0
  179. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_delete_permission.py +0 -0
  180. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_read_permission.py +0 -0
  181. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_update_permission.py +0 -0
  182. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/test_user_session.py +0 -0
  183. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_health_and_readiness.py +0 -0
  184. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_homepage.py +0 -0
  185. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_not_found_error.py +0 -0
  186. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
  187. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
  188. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/create/__init__.py +0 -0
  189. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  190. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  191. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/project/create/project_task.py +0 -0
  192. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/python.py +0 -0
  193. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/random.py +0 -0
  194. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
  195. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
  196. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/setup/common_input.py +0 -0
  197. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
  198. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
  199. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
  200. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
  201. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/setup/ubuntu.py +0 -0
  202. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
  203. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
  204. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
  205. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/shell/__init__.py +0 -0
  206. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
  207. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  208. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  209. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  210. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/builtin/todo.py +0 -0
  211. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/callback/__init__.py +0 -0
  212. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/callback/any_callback.py +0 -0
  213. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/callback/callback.py +0 -0
  214. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/cmd/__init__.py +0 -0
  215. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/cmd/cmd_result.py +0 -0
  216. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/cmd/cmd_val.py +0 -0
  217. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/content_transformer/__init__.py +0 -0
  218. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/content_transformer/any_content_transformer.py +0 -0
  219. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/content_transformer/content_transformer.py +0 -0
  220. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/context/__init__.py +0 -0
  221. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/context/any_context.py +0 -0
  222. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/context/any_shared_context.py +0 -0
  223. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/context/context.py +0 -0
  224. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/context/shared_context.py +0 -0
  225. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/dot_dict/__init__.py +0 -0
  226. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/dot_dict/dot_dict.py +0 -0
  227. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/env/__init__.py +0 -0
  228. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/env/any_env.py +0 -0
  229. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/env/env.py +0 -0
  230. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/env/env_file.py +0 -0
  231. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/env/env_map.py +0 -0
  232. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/group/__init__.py +0 -0
  233. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/group/any_group.py +0 -0
  234. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/group/group.py +0 -0
  235. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/input/__init__.py +0 -0
  236. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/input/any_input.py +0 -0
  237. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/input/base_input.py +0 -0
  238. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/input/bool_input.py +0 -0
  239. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/input/float_input.py +0 -0
  240. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/input/int_input.py +0 -0
  241. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/input/option_input.py +0 -0
  242. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/input/password_input.py +0 -0
  243. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/input/str_input.py +0 -0
  244. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/input/text_input.py +0 -0
  245. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/__init__.py +0 -0
  246. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/cli.py +0 -0
  247. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/common_util.py +0 -0
  248. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_app.py +0 -0
  249. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_config/config.py +0 -0
  250. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_config/config_factory.py +0 -0
  251. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/__init__.py +0 -0
  252. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/docs_route.py +0 -0
  253. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
  254. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
  255. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/error_page/view.html +0 -0
  256. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
  257. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
  258. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/home_page/view.html +0 -0
  259. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/login_api_route.py +0 -0
  260. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
  261. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/login_page/view.html +0 -0
  262. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/logout_api_route.py +0 -0
  263. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
  264. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/logout_page/view.html +0 -0
  265. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
  266. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
  267. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
  268. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
  269. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
  270. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
  271. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
  272. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
  273. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/static/resources/common.css +0 -0
  274. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
  275. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
  276. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
  277. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/static/resources/pico.min.css +0 -0
  278. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
  279. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
  280. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
  281. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
  282. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/static/static_route.py +0 -0
  283. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
  284. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
  285. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_schema/session.py +0 -0
  286. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_schema/token.py +0 -0
  287. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_schema/user.py +0 -0
  288. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_util/cookie.py +0 -0
  289. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_util/html.py +0 -0
  290. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_util/token.py +0 -0
  291. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/runner/web_util/user.py +0 -0
  292. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/session/__init__.py +0 -0
  293. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/session/any_session.py +0 -0
  294. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/session/session.py +0 -0
  295. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/session_state_log/__init__.py +0 -0
  296. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/session_state_log/session_state_log.py +0 -0
  297. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/session_state_logger/__init__.py +0 -0
  298. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  299. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  300. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
  301. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/task/__init__.py +0 -0
  302. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/task/any_task.py +0 -0
  303. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/task/base_task.py +0 -0
  304. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/task/base_trigger.py +0 -0
  305. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/task/cmd_task.py +0 -0
  306. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/task/http_check.py +0 -0
  307. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/task/make_task.py +0 -0
  308. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/task/rsync_task.py +0 -0
  309. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/task/scaffolder.py +0 -0
  310. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/task/scheduler.py +0 -0
  311. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/task/task.py +0 -0
  312. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/task/tcp_check.py +0 -0
  313. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/task_status/__init__.py +0 -0
  314. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/task_status/task_status.py +0 -0
  315. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/__init__.py +0 -0
  316. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/attr.py +0 -0
  317. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/cli/__init__.py +0 -0
  318. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/cli/style.py +0 -0
  319. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/cli/subcommand.py +0 -0
  320. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/cmd/__init__.py +0 -0
  321. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/cmd/command.py +0 -0
  322. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/cmd/remote.py +0 -0
  323. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/codemod/__init__.py +0 -0
  324. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/codemod/modification_mode.py +0 -0
  325. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/codemod/modify_class.py +0 -0
  326. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/codemod/modify_class_parent.py +0 -0
  327. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/codemod/modify_class_property.py +0 -0
  328. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/codemod/modify_dict.py +0 -0
  329. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/codemod/modify_function.py +0 -0
  330. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/codemod/modify_function_call.py +0 -0
  331. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/codemod/modify_method.py +0 -0
  332. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/codemod/modify_module.py +0 -0
  333. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/cron.py +0 -0
  334. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/file.py +0 -0
  335. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/git.py +0 -0
  336. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/git_subtree.py +0 -0
  337. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/group.py +0 -0
  338. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/load.py +0 -0
  339. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/run.py +0 -0
  340. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/string/__init__.py +0 -0
  341. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/string/conversion.py +0 -0
  342. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/string/format.py +0 -0
  343. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/string/name.py +0 -0
  344. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/util/todo.py +0 -0
  345. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/xcom/__init__.py +0 -0
  346. {zrb-1.4.2 → zrb-1.4.3}/src/zrb/xcom/xcom.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zrb
3
- Version: 1.4.2
3
+ Version: 1.4.3
4
4
  Summary: Your Automation Powerhouse
5
5
  Home-page: https://github.com/state-alchemists/zrb
6
6
  License: AGPL-3.0-or-later
@@ -13,16 +13,20 @@ Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Programming Language :: Python :: 3.10
14
14
  Classifier: Programming Language :: Python :: 3.11
15
15
  Classifier: Programming Language :: Python :: 3.12
16
+ Provides-Extra: all
17
+ Provides-Extra: playwright
16
18
  Provides-Extra: rag
17
19
  Requires-Dist: autopep8 (>=2.0.4,<3.0.0)
18
20
  Requires-Dist: beautifulsoup4 (>=4.12.3,<5.0.0)
19
21
  Requires-Dist: black (>=24.10.0,<24.11.0)
20
- Requires-Dist: chromadb (>=0.5.20,<0.6.0) ; extra == "rag"
22
+ Requires-Dist: chromadb (>=0.5.20,<0.6.0) ; extra == "rag" or extra == "all"
21
23
  Requires-Dist: fastapi[standard] (>=0.115.6,<0.116.0)
22
24
  Requires-Dist: fastembed (>=0.5.1,<0.6.0)
23
25
  Requires-Dist: isort (>=5.13.2,<5.14.0)
24
26
  Requires-Dist: libcst (>=1.5.0,<2.0.0)
25
- Requires-Dist: pdfplumber (>=0.11.4,<0.12.0) ; extra == "rag"
27
+ Requires-Dist: openai (>=1.10.0,<2.0.0) ; extra == "rag" or extra == "all"
28
+ Requires-Dist: pdfplumber (>=0.11.4,<0.12.0) ; extra == "rag" or extra == "all"
29
+ Requires-Dist: playwright (>=1.43.0,<2.0.0) ; extra == "playwright" or extra == "all"
26
30
  Requires-Dist: psutil (>=6.1.1,<7.0.0)
27
31
  Requires-Dist: pydantic-ai (>=0.0.42,<0.0.43)
28
32
  Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
@@ -79,40 +83,48 @@ bash -c "$(curl -fsSL https://raw.githubusercontent.com/state-alchemists/zrb/mai
79
83
 
80
84
  ```
81
85
 
82
- # 🍲 Quick Start
86
+ # 🍲 Quick Start: Build Your First Automation Workflow
83
87
 
84
- Create a file at `/home/<your-user-name>/zrb_init.py` with the following content:
88
+ Zrb empowers you to create custom automation tasks using Python. This guide shows you how to define two simple tasks: one to generate a PlantUML script from your source code and another to convert that script into a PNG image.
85
89
 
90
+ ## 1. Create Your Task Definition File
91
+
92
+ Place a file named `zrb_init.py` in a directory that's accessible from your projects. Zrb will automatically search for this file by starting in your current directory and then moving upward (i.e., checking parent directories) until it finds one. This means if you place your `zrb_init.py` in your home directory (e.g., `/home/<your-user-name>/zrb_init.py`), the tasks defined there will be available for any project.
93
+
94
+ Add the following content to your zrb_init.py:
86
95
 
87
96
  ```python
88
97
  import os
89
- from zrb import cli, llm_config, LLMTask, CmdTask, StrInput, Group
90
- from zrb.builtin.llm.tool.file import read_all_files, write_text_file
98
+ from zrb import cli, LLMTask, CmdTask, StrInput, Group
99
+ from zrb.builtin.llm.tool.file import (
100
+ read_text_file, list_files, write_text_file
101
+ )
91
102
 
92
103
  CURRENT_DIR = os.getcwd()
93
104
 
94
- # Make UML group
105
+ # Create a group for UML-related tasks
95
106
  uml_group = cli.add_group(Group(name="uml", description="UML related tasks"))
96
107
 
97
- # Generate UML script
108
+ # Task 1: Generate a PlantUML script from your source code
98
109
  make_uml_script = uml_group.add_task(
99
110
  LLMTask(
100
111
  name="make-script",
101
112
  description="Creating plantuml diagram based on source code in current directory",
102
113
  input=StrInput(name="diagram", default="state diagram"),
103
114
  message=(
104
- f"Read source code in {CURRENT_DIR}, "
115
+ f"Read all necessary files in {CURRENT_DIR}, "
105
116
  "make a {ctx.input.diagram} in plantuml format. "
106
117
  f"Write the script into {CURRENT_DIR}/{{ctx.input.diagram}}.uml"
107
118
  ),
108
119
  tools=[
109
- read_all_files,
120
+ list_files,
121
+ read_text_file,
110
122
  write_text_file,
111
123
  ],
112
124
  )
113
125
  )
114
126
 
115
- # Defining a Cmd Task to transform Plantuml script into a png image.
127
+ # Task 2: Convert the PlantUML script into a PNG image
116
128
  make_uml_image = uml_group.add_task(
117
129
  CmdTask(
118
130
  name="make-image",
@@ -123,63 +135,75 @@ make_uml_image = uml_group.add_task(
123
135
  )
124
136
  )
125
137
 
126
- # Making sure that make_png has make_uml as its dependency.
138
+ # Set up the dependency: the image task runs after the script is created
127
139
  make_uml_script >> make_uml_image
128
140
  ```
129
141
 
130
- You have just define two automation tasks.
142
+ **What This Does**
131
143
 
132
- The first one use LLM to read files in your current directory and create a `PlantUML script` on that directory.
144
+ - **Task 1 make-script**:
133
145
 
134
- The second task turn the PlantUML script into a `*.png` file. The second task depends on the first task and both of them are located under the same group.
146
+ Uses an LLM to read all files in your current directory and generate a PlantUML script (e.g., `state diagram.uml`).
135
147
 
136
- You can run the tasks by invoking `zrb uml make-script` or `zrb uml make-image` respectively.
148
+ - **Task 2 make-image**:
137
149
 
138
- When you run zrb, it automatically searches for a file named `zrb_init.py` starting from your current directory and moving upward through its parent directories. This design lets you set up common automation tasks in a central location—like placing a `zrb_init.py` in your home directory (`/home/<your-user>/zrb_init.py`)—so that your tasks are available across all your projects.
150
+ Executes a command that converts the PlantUML script into a PNG image (e.g., `state diagram.png`). This task will run only after the script has been generated.
139
151
 
140
- Now, go to your project and create a state diagram:
141
152
 
142
- ```bash
143
- git clone git@github.com:jjinux/gotetris.git
144
- cd gotetris
145
- zrb uml make-image --diagram "state diagram"
146
- ```
153
+ ## 2. Run Your Tasks
147
154
 
148
- You can also invoke the task without specifying parameter.
155
+ After setting up your tasks, you can execute them from any project. For example:
149
156
 
150
- ```bash
151
- zrb uml make-image
152
- ```
157
+ - Clone/Create a Project:
153
158
 
154
- Once you do so, Zrb will ask you to provide the diagram type.
159
+ ```bash
160
+ git clone git@github.com:jjinux/gotetris.git
161
+ cd gotetris
162
+ ```
155
163
 
156
- ```
157
- diagram [state diagram]:
158
- ```
164
+ - Create a state diagram:
165
+
166
+ ```bash
167
+ zrb uml make-image --diagram "state diagram"
168
+ ```
169
+
170
+ - Or use the interactive mode:
159
171
 
160
- You can just press enter if you want to use the default value (i.e., in this case `state diagram`).
172
+ ```bash
173
+ zrb uml make-image
174
+ ```
161
175
 
162
- Finally, you can also serve the tasks via a Web UI interface by invoking the following command:
176
+ Zrb will prompt:
177
+
178
+ ```bash
179
+ diagram [state diagram]:
180
+ ```
181
+
182
+ Press **Enter** to use the default value
183
+
184
+ ![State Diagram](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/state-diagram.png)
185
+
186
+
187
+ ## 3. Try Out the Web UI
188
+
189
+ You can also serve your tasks through a user-friendly web interface:
163
190
 
164
191
  ```bash
165
192
  zrb server start
166
193
  ```
167
194
 
168
- You will have a nice web interface running on `http://localhost:12123`
195
+ Then open your browser and visit `http://localhost:21213`
169
196
 
170
197
  ![Zrb Web UI](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/zrb-web-ui.png)
171
198
 
172
- Now, let's see how things work in detail. First, Zrb generates a `state diagram.uml` in your current directory, it then transform the UML script into a PNG image `state diagram.png`.
173
-
174
- ![State Diagram](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/state-diagram.png)
175
-
176
199
 
177
200
  # 🎥 Demo & Documentation
178
201
 
179
202
  - **Step by step guide:** [Getting started with Zrb](https://github.com/state-alchemists/zrb/blob/main/docs/recipes/getting-started/README.md).
180
203
  - **Full documentation:** [Zrb Documentation](https://github.com/state-alchemists/zrb/blob/main/docs/README.md)
181
204
  - **Video demo:**
182
- [![Video Title](https://img.youtube.com/vi/W7dgk96l__o/0.jpg)](https://www.youtube.com/watch?v=W7dgk96l__o)
205
+
206
+ [![Video Title](https://img.youtube.com/vi/W7dgk96l__o/0.jpg)](https://www.youtube.com/watch?v=W7dgk96l__o)
183
207
 
184
208
 
185
209
  # 🤝 Join the Community
@@ -44,40 +44,48 @@ bash -c "$(curl -fsSL https://raw.githubusercontent.com/state-alchemists/zrb/mai
44
44
 
45
45
  ```
46
46
 
47
- # 🍲 Quick Start
47
+ # 🍲 Quick Start: Build Your First Automation Workflow
48
48
 
49
- Create a file at `/home/<your-user-name>/zrb_init.py` with the following content:
49
+ Zrb empowers you to create custom automation tasks using Python. This guide shows you how to define two simple tasks: one to generate a PlantUML script from your source code and another to convert that script into a PNG image.
50
50
 
51
+ ## 1. Create Your Task Definition File
52
+
53
+ Place a file named `zrb_init.py` in a directory that's accessible from your projects. Zrb will automatically search for this file by starting in your current directory and then moving upward (i.e., checking parent directories) until it finds one. This means if you place your `zrb_init.py` in your home directory (e.g., `/home/<your-user-name>/zrb_init.py`), the tasks defined there will be available for any project.
54
+
55
+ Add the following content to your zrb_init.py:
51
56
 
52
57
  ```python
53
58
  import os
54
- from zrb import cli, llm_config, LLMTask, CmdTask, StrInput, Group
55
- from zrb.builtin.llm.tool.file import read_all_files, write_text_file
59
+ from zrb import cli, LLMTask, CmdTask, StrInput, Group
60
+ from zrb.builtin.llm.tool.file import (
61
+ read_text_file, list_files, write_text_file
62
+ )
56
63
 
57
64
  CURRENT_DIR = os.getcwd()
58
65
 
59
- # Make UML group
66
+ # Create a group for UML-related tasks
60
67
  uml_group = cli.add_group(Group(name="uml", description="UML related tasks"))
61
68
 
62
- # Generate UML script
69
+ # Task 1: Generate a PlantUML script from your source code
63
70
  make_uml_script = uml_group.add_task(
64
71
  LLMTask(
65
72
  name="make-script",
66
73
  description="Creating plantuml diagram based on source code in current directory",
67
74
  input=StrInput(name="diagram", default="state diagram"),
68
75
  message=(
69
- f"Read source code in {CURRENT_DIR}, "
76
+ f"Read all necessary files in {CURRENT_DIR}, "
70
77
  "make a {ctx.input.diagram} in plantuml format. "
71
78
  f"Write the script into {CURRENT_DIR}/{{ctx.input.diagram}}.uml"
72
79
  ),
73
80
  tools=[
74
- read_all_files,
81
+ list_files,
82
+ read_text_file,
75
83
  write_text_file,
76
84
  ],
77
85
  )
78
86
  )
79
87
 
80
- # Defining a Cmd Task to transform Plantuml script into a png image.
88
+ # Task 2: Convert the PlantUML script into a PNG image
81
89
  make_uml_image = uml_group.add_task(
82
90
  CmdTask(
83
91
  name="make-image",
@@ -88,63 +96,75 @@ make_uml_image = uml_group.add_task(
88
96
  )
89
97
  )
90
98
 
91
- # Making sure that make_png has make_uml as its dependency.
99
+ # Set up the dependency: the image task runs after the script is created
92
100
  make_uml_script >> make_uml_image
93
101
  ```
94
102
 
95
- You have just define two automation tasks.
103
+ **What This Does**
96
104
 
97
- The first one use LLM to read files in your current directory and create a `PlantUML script` on that directory.
105
+ - **Task 1 make-script**:
98
106
 
99
- The second task turn the PlantUML script into a `*.png` file. The second task depends on the first task and both of them are located under the same group.
107
+ Uses an LLM to read all files in your current directory and generate a PlantUML script (e.g., `state diagram.uml`).
100
108
 
101
- You can run the tasks by invoking `zrb uml make-script` or `zrb uml make-image` respectively.
109
+ - **Task 2 make-image**:
102
110
 
103
- When you run zrb, it automatically searches for a file named `zrb_init.py` starting from your current directory and moving upward through its parent directories. This design lets you set up common automation tasks in a central location—like placing a `zrb_init.py` in your home directory (`/home/<your-user>/zrb_init.py`)—so that your tasks are available across all your projects.
111
+ Executes a command that converts the PlantUML script into a PNG image (e.g., `state diagram.png`). This task will run only after the script has been generated.
104
112
 
105
- Now, go to your project and create a state diagram:
106
113
 
107
- ```bash
108
- git clone git@github.com:jjinux/gotetris.git
109
- cd gotetris
110
- zrb uml make-image --diagram "state diagram"
111
- ```
114
+ ## 2. Run Your Tasks
112
115
 
113
- You can also invoke the task without specifying parameter.
116
+ After setting up your tasks, you can execute them from any project. For example:
114
117
 
115
- ```bash
116
- zrb uml make-image
117
- ```
118
+ - Clone/Create a Project:
118
119
 
119
- Once you do so, Zrb will ask you to provide the diagram type.
120
+ ```bash
121
+ git clone git@github.com:jjinux/gotetris.git
122
+ cd gotetris
123
+ ```
120
124
 
121
- ```
122
- diagram [state diagram]:
123
- ```
125
+ - Create a state diagram:
126
+
127
+ ```bash
128
+ zrb uml make-image --diagram "state diagram"
129
+ ```
130
+
131
+ - Or use the interactive mode:
124
132
 
125
- You can just press enter if you want to use the default value (i.e., in this case `state diagram`).
133
+ ```bash
134
+ zrb uml make-image
135
+ ```
126
136
 
127
- Finally, you can also serve the tasks via a Web UI interface by invoking the following command:
137
+ Zrb will prompt:
138
+
139
+ ```bash
140
+ diagram [state diagram]:
141
+ ```
142
+
143
+ Press **Enter** to use the default value
144
+
145
+ ![State Diagram](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/state-diagram.png)
146
+
147
+
148
+ ## 3. Try Out the Web UI
149
+
150
+ You can also serve your tasks through a user-friendly web interface:
128
151
 
129
152
  ```bash
130
153
  zrb server start
131
154
  ```
132
155
 
133
- You will have a nice web interface running on `http://localhost:12123`
156
+ Then open your browser and visit `http://localhost:21213`
134
157
 
135
158
  ![Zrb Web UI](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/zrb-web-ui.png)
136
159
 
137
- Now, let's see how things work in detail. First, Zrb generates a `state diagram.uml` in your current directory, it then transform the UML script into a PNG image `state diagram.png`.
138
-
139
- ![State Diagram](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/state-diagram.png)
140
-
141
160
 
142
161
  # 🎥 Demo & Documentation
143
162
 
144
163
  - **Step by step guide:** [Getting started with Zrb](https://github.com/state-alchemists/zrb/blob/main/docs/recipes/getting-started/README.md).
145
164
  - **Full documentation:** [Zrb Documentation](https://github.com/state-alchemists/zrb/blob/main/docs/README.md)
146
165
  - **Video demo:**
147
- [![Video Title](https://img.youtube.com/vi/W7dgk96l__o/0.jpg)](https://www.youtube.com/watch?v=W7dgk96l__o)
166
+
167
+ [![Video Title](https://img.youtube.com/vi/W7dgk96l__o/0.jpg)](https://www.youtube.com/watch?v=W7dgk96l__o)
148
168
 
149
169
 
150
170
  # 🤝 Join the Community
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zrb"
3
- version = "1.4.2"
3
+ version = "1.4.3"
4
4
  description = "Your Automation Powerhouse"
5
5
  authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
6
6
  license = "AGPL-3.0-or-later"
@@ -52,11 +52,15 @@ python-jose = {extras = ["cryptography"], version = "^3.4.0"}
52
52
  ulid-py = "^1.1.0"
53
53
  pydantic-ai = "^0.0.42"
54
54
  fastembed = "^0.5.1"
55
+ openai = {version = "^1.10.0", optional = true}
56
+ playwright = {version = "^1.43.0", optional = true}
55
57
  psutil = "^6.1.1"
56
58
 
57
59
  [tool.poetry.extras]
58
60
  # poetry install -E rag
59
- rag = ["chromadb", "pdfplumber"]
61
+ rag = ["chromadb", "pdfplumber", "openai"]
62
+ playwright = ["playwright"]
63
+ all = ["chromadb", "pdfplumber", "openai", "playwright"]
60
64
 
61
65
  [tool.poetry.group.dev.dependencies]
62
66
  alembic = "^1.14.0" # FastApp dependencies
@@ -5,7 +5,7 @@ from typing import Annotated, Literal
5
5
  def get_current_location() -> (
6
6
  Annotated[str, "JSON string representing latitude and longitude"]
7
7
  ): # noqa
8
- """Get the user's current location."""
8
+ """Get the user's current location. This function take no argument."""
9
9
  import requests
10
10
 
11
11
  return json.dumps(requests.get("http://ip-api.com/json?fields=lat,lon").json())
@@ -93,6 +93,7 @@ def list_files(
93
93
  """List all files in a directory that match any of the included glob patterns
94
94
  and do not reside in any directory matching an excluded pattern.
95
95
  Patterns are evaluated using glob-style matching.
96
+ included_patterns and excluded_patterns already has sane default values.
96
97
  """
97
98
  all_files: list[str] = []
98
99
  for root, dirs, files in os.walk(directory):
@@ -144,6 +145,7 @@ def read_all_files(
144
145
  """Read all files in a directory that match any of the included glob patterns
145
146
  and do not match any of the excluded glob patterns.
146
147
  Patterns are evaluated using glob-style matching.
148
+ included_patterns and excluded_patterns already has sane default values.
147
149
  """
148
150
  files = list_files(directory, included_patterns, excluded_patterns)
149
151
  for index, file in enumerate(files):
@@ -9,6 +9,8 @@ import ulid
9
9
 
10
10
  from zrb.config import (
11
11
  RAG_CHUNK_SIZE,
12
+ RAG_EMBEDDING_API_KEY,
13
+ RAG_EMBEDDING_BASE_URL,
12
14
  RAG_EMBEDDING_MODEL,
13
15
  RAG_MAX_RESULT_COUNT,
14
16
  RAG_OVERLAP,
@@ -35,24 +37,34 @@ def create_rag_from_directory(
35
37
  tool_name: str,
36
38
  tool_description: str,
37
39
  document_dir_path: str = "./documents",
38
- model: str = RAG_EMBEDDING_MODEL,
39
40
  vector_db_path: str = "./chroma",
40
41
  vector_db_collection: str = "documents",
41
42
  chunk_size: int = RAG_CHUNK_SIZE,
42
43
  overlap: int = RAG_OVERLAP,
43
44
  max_result_count: int = RAG_MAX_RESULT_COUNT,
44
45
  file_reader: list[RAGFileReader] = [],
46
+ openai_api_key: str = RAG_EMBEDDING_API_KEY,
47
+ openai_base_url: str = RAG_EMBEDDING_BASE_URL,
48
+ openai_embedding_model: str = RAG_EMBEDDING_MODEL,
45
49
  ):
46
50
  async def retrieve(query: str) -> str:
47
51
  from chromadb import PersistentClient
48
52
  from chromadb.config import Settings
49
- from fastembed import TextEmbedding
50
-
51
- embedding_model = TextEmbedding(model_name=model)
52
- client = PersistentClient(
53
+ from openai import OpenAI
54
+
55
+ # Initialize OpenAI client with custom URL if provided
56
+ client_args = {}
57
+ if openai_api_key:
58
+ client_args["api_key"] = openai_api_key
59
+ if openai_base_url:
60
+ client_args["base_url"] = openai_base_url
61
+ # Initialize OpenAI client for embeddings
62
+ openai_client = OpenAI(**client_args)
63
+ # Initialize ChromaDB client
64
+ chroma_client = PersistentClient(
53
65
  path=vector_db_path, settings=Settings(allow_reset=True)
54
66
  )
55
- collection = client.get_or_create_collection(vector_db_collection)
67
+ collection = chroma_client.get_or_create_collection(vector_db_collection)
56
68
  # Track file changes using a hash-based approach
57
69
  hash_file_path = os.path.join(vector_db_path, "file_hashes.json")
58
70
  previous_hashes = _load_hashes(hash_file_path)
@@ -89,8 +101,11 @@ def create_rag_from_directory(
89
101
  ),
90
102
  file=sys.stderr,
91
103
  )
92
- embedding_result = list(embedding_model.embed([chunk]))
93
- vector = embedding_result[0]
104
+ # Get embeddings using OpenAI
105
+ embedding_response = openai_client.embeddings.create(
106
+ input=chunk, model=openai_embedding_model
107
+ )
108
+ vector = embedding_response.data[0].embedding
94
109
  collection.upsert(
95
110
  ids=[chunk_id],
96
111
  embeddings=[vector],
@@ -113,8 +128,11 @@ def create_rag_from_directory(
113
128
  )
114
129
  # Vectorize query and get related document chunks
115
130
  print(stylize_faint("Vectorizing query"), file=sys.stderr)
116
- embedding_result = list(embedding_model.embed([query]))
117
- query_vector = embedding_result[0]
131
+ # Get embeddings using OpenAI
132
+ embedding_response = openai_client.embeddings.create(
133
+ input=query, model=openai_embedding_model
134
+ )
135
+ query_vector = embedding_response.data[0].embedding
118
136
  print(stylize_faint("Searching documents"), file=sys.stderr)
119
137
  results = collection.query(
120
138
  query_embeddings=query_vector,
@@ -3,21 +3,61 @@ from collections.abc import Callable
3
3
  from typing import Annotated
4
4
 
5
5
 
6
- def open_web_page(url: str) -> str:
7
- """Get content from a web page."""
8
- import requests
9
-
10
- response = requests.get(
11
- url,
12
- headers={
13
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" # noqa
14
- },
15
- )
16
- if response.status_code != 200:
17
- raise Exception(
18
- f"Error: Unable to retrieve search results (status code: {response.status_code})" # noqa
19
- )
20
- return json.dumps(parse_html_text(response.text))
6
+ async def open_web_page(url: str) -> str:
7
+ """Get content from a web page using a headless browser."""
8
+
9
+ async def get_page_content(page_url: str):
10
+ try:
11
+ from playwright.async_api import async_playwright
12
+
13
+ async with async_playwright() as p:
14
+ browser = await p.chromium.launch(headless=True)
15
+ page = await browser.new_page()
16
+ # Set user agent to mimic a regular browser
17
+ user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
18
+ user_agent += "AppleWebKit/537.36 (KHTML, like Gecko) "
19
+ user_agent += "Chrome/91.0.4472.124 Safari/537.36"
20
+ await page.set_extra_http_headers({"User-Agent": user_agent})
21
+ try:
22
+ # Navigate to the URL with a timeout of 30 seconds
23
+ await page.goto(page_url, wait_until="networkidle", timeout=30000)
24
+ # Wait for the content to load
25
+ await page.wait_for_load_state("domcontentloaded")
26
+ # Get the page content
27
+ content = await page.content()
28
+ # Extract all links from the page
29
+ links = await page.eval_on_selector_all(
30
+ "a[href]",
31
+ """
32
+ (elements) => elements.map(el => {
33
+ const href = el.getAttribute('href');
34
+ if (href && !href.startsWith('#') && !href.startsWith('/')) {
35
+ return href;
36
+ }
37
+ return null;
38
+ }).filter(href => href !== null)
39
+ """,
40
+ )
41
+ return {"content": content, "links_on_page": links}
42
+ finally:
43
+ await browser.close()
44
+ except ImportError:
45
+ import requests
46
+
47
+ response = requests.get(
48
+ url,
49
+ headers={
50
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" # noqa
51
+ },
52
+ )
53
+ if response.status_code != 200:
54
+ msg = f"Unable to retrieve search results. Status code: {response.status_code}"
55
+ raise Exception(msg)
56
+ return {"content": response.text, "links_on_page": []}
57
+
58
+ result = await get_page_content(url)
59
+ # Parse the HTML content
60
+ return json.dumps(parse_html_text(result["content"]))
21
61
 
22
62
 
23
63
  def create_search_internet_tool(serp_api_key: str) -> Callable[[str, int], str]:
@@ -85,10 +85,10 @@ LLM_HISTORY_FILE = os.getenv(
85
85
  LLM_ALLOW_ACCESS_LOCAL_FILE = to_boolean(os.getenv("ZRB_LLM_ACCESS_LOCAL_FILE", "1"))
86
86
  LLM_ALLOW_ACCESS_SHELL = to_boolean(os.getenv("ZRB_LLM_ACCESS_SHELL", "1"))
87
87
  LLM_ALLOW_ACCESS_INTERNET = to_boolean(os.getenv("ZRB_LLM_ACCESS_INTERNET", "1"))
88
- # noqa See: https://qdrant.github.io/fastembed/examples/Supported_Models/#supported-text-embedding-models
89
- RAG_EMBEDDING_MODEL = os.getenv(
90
- "ZRB_RAG_EMBEDDING_MODEL", "nomic-ai/nomic-embed-text-v1.5-Q"
91
- )
88
+ # RAG Configuration
89
+ RAG_EMBEDDING_API_KEY = os.getenv("ZRB_RAG_EMBEDDING_API_KEY", None)
90
+ RAG_EMBEDDING_BASE_URL = os.getenv("ZRB_RAG_EMBEDDING_BASE_URL", None)
91
+ RAG_EMBEDDING_MODEL = os.getenv("ZRB_RAG_EMBEDDING_MODEL", "text-embedding-ada-002")
92
92
  RAG_CHUNK_SIZE = int(os.getenv("ZRB_RAG_CHUNK_SIZE", "1024"))
93
93
  RAG_OVERLAP = int(os.getenv("ZRB_RAG_OVERLAP", "128"))
94
94
  RAG_MAX_RESULT_COUNT = int(os.getenv("ZRB_RAG_MAX_RESULT_COUNT", "5"))
@@ -2,18 +2,19 @@ import os
2
2
 
3
3
  from pydantic_ai.models import Model
4
4
  from pydantic_ai.models.openai import OpenAIModel
5
+ from pydantic_ai.providers import Provider
5
6
  from pydantic_ai.providers.openai import OpenAIProvider
6
7
 
7
8
  DEFAULT_SYSTEM_PROMPT = """
8
9
  You have access to tools.
9
- Your goal to to answer user queries accurately.
10
+ Your goal is to answer user queries accurately.
10
11
  Follow these instructions precisely:
11
12
  1. ALWAYS use available tools to gather information BEFORE asking the user questions
12
13
  2. For tools that require arguments: provide arguments in valid JSON format
13
- 3. For tools that require NO arguments: call with empty JSON object ({}) NOT empty string ('')
14
+ 3. For tools with no args: call the tool without args. Do NOT pass "" or {}.
14
15
  4. NEVER pass arguments to tools that don't accept parameters
15
16
  5. NEVER ask users for information obtainable through tools
16
- 6. Use tools in logical sequence until you have sufficient information
17
+ 6. Use tools in a logical sequence until you have sufficient information
17
18
  7. If a tool call fails, check if you're passing arguments in the correct format
18
19
  8. Only after exhausting relevant tools should you request clarification
19
20
  """.strip()
@@ -48,12 +49,15 @@ class LLMConfig:
48
49
  if default_system_prompt is not None
49
50
  else os.getenv("ZRB_LLM_SYSTEM_PROMPT", None)
50
51
  )
52
+ self._default_provider = None
51
53
  self._default_model = None
52
54
 
53
55
  def _get_model_name(self) -> str | None:
54
56
  return self._model_name if self._model_name is not None else None
55
57
 
56
- def _get_model_provider(self) -> OpenAIProvider:
58
+ def get_default_model_provider(self) -> Provider | str:
59
+ if self._default_provider is not None:
60
+ return self._default_provider
57
61
  if self._model_base_url is None and self._model_api_key is None:
58
62
  return "openai"
59
63
  return OpenAIProvider(
@@ -73,7 +77,7 @@ class LLMConfig:
73
77
  return None
74
78
  return OpenAIModel(
75
79
  model_name=model_name,
76
- provider=self._get_model_provider(),
80
+ provider=self.get_default_model_provider(),
77
81
  )
78
82
 
79
83
  def set_default_system_prompt(self, system_prompt: str):
@@ -88,6 +92,9 @@ class LLMConfig:
88
92
  def set_default_model_base_url(self, model_base_url: str):
89
93
  self._model_base_url = model_base_url
90
94
 
95
+ def set_default_provider(self, provider: Provider | str):
96
+ self._default_provider = provider
97
+
91
98
  def set_default_model(self, model: Model | str | None):
92
99
  self._default_model = model
93
100