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.
- {zrb-1.9.0 → zrb-1.9.1}/PKG-INFO +1 -1
- {zrb-1.9.0 → zrb-1.9.1}/pyproject.toml +1 -1
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/llm_ask.py +4 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/code.py +2 -2
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/file.py +105 -2
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/web.py +1 -1
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/config.py +14 -8
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/llm_config.py +24 -20
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/context_enrichment.py +31 -21
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/history_summarization.py +31 -21
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm_task.py +155 -18
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/file.py +3 -2
- {zrb-1.9.0 → zrb-1.9.1}/README.md +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/__main__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/attr/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/attr/type.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/base64.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/git.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/git_subtree.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/group.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/http.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/jwt.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/chat_session.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/history.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/input.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/previous-session.js +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/api.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/cli.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/rag.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/llm/tool/sub_agent.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/md5.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
- {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
- {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
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
- {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
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
- {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
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
- {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
- {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
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
- {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
- {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
- {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
- {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
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/create/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/create/project-template/README.md +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/project/create/project_task.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/python.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/random.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/common_input.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/ubuntu.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/shell/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/todo.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/builtin/uuid.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/callback/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/callback/any_callback.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/callback/callback.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/cmd/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/cmd/cmd_result.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/cmd/cmd_val.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/content_transformer/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/content_transformer/any_content_transformer.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/content_transformer/content_transformer.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/context/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/context/any_context.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/context/any_shared_context.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/context/context.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/context/shared_context.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/dot_dict/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/dot_dict/dot_dict.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/env/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/env/any_env.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/env/env.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/env/env_file.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/env/env_map.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/group/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/group/any_group.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/group/group.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/any_input.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/base_input.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/bool_input.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/float_input.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/int_input.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/option_input.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/password_input.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/str_input.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/input/text_input.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/llm_rate_limitter.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/cli.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/common_util.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_app.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_auth_config.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/docs_route.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/error_page/view.html +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/home_page/view.html +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/login_api_route.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/login_page/view.html +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/logout_api_route.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/logout_page/view.html +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/global_template.html +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/common.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/common.js +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.amber.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.blue.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.cyan.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.fuchsia.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.green.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.grey.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.indigo.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.jade.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.lime.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.orange.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.pink.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.pumpkin.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.purple.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.red.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.sand.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.slate.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.violet.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.yellow.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.zinc.min.css +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/static/static_route.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_schema/session.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_schema/token.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_schema/user.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_util/cookie.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_util/html.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_util/token.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/runner/web_util/user.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session/any_session.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session/session.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session_state_log/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session_state_log/session_state_log.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session_state_logger/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/any_task.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base/context.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base/execution.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base/lifecycle.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base/monitoring.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base/operators.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base_task.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/base_trigger.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/cmd_task.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/http_check.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/agent.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/config.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/context.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/error.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/history.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/print_node.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/prompt.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/tool_wrapper.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/llm/typing.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/make_task.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/rsync_task.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/scaffolder.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/scheduler.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/task.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task/tcp_check.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task_status/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/task_status/task_status.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/attr.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/cli/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/cli/style.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/cli/subcommand.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/cmd/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/cmd/command.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/cmd/remote.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modification_mode.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_class.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_class_parent.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_class_property.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_dict.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_function.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_function_call.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_method.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/codemod/modify_module.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/cron.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/git.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/git_subtree.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/group.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/init_path.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/load.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/run.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/string/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/string/conversion.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/string/format.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/string/name.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/todo.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/util/todo_model.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/xcom/__init__.py +0 -0
- {zrb-1.9.0 → zrb-1.9.1}/src/zrb/xcom/xcom.py +0 -0
{zrb-1.9.0 → zrb-1.9.1}/PKG-INFO
RENAMED
@@ -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 =
|
86
|
-
summarization_token_limit: int =
|
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 =
|
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
|
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
|
-
"""
|
247
|
-
|
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
|
-
"""
|
252
|
-
|
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
|
274
|
-
return int(os.getenv("
|
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
|
282
|
-
return int(os.getenv("
|
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
|
-
|
181
|
+
default_history_summarization_token_threshold: int | None = None,
|
182
182
|
default_enrich_context: bool | None = None,
|
183
|
-
|
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.
|
199
|
-
|
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.
|
203
|
-
|
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
|
320
|
-
if self.
|
321
|
-
return self.
|
322
|
-
return CFG.
|
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
|
332
|
-
if self.
|
333
|
-
return self.
|
334
|
-
return CFG.
|
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
|
373
|
-
self,
|
372
|
+
def set_default_history_summarization_token_threshold(
|
373
|
+
self, history_summarization_token_threshold: int
|
374
374
|
):
|
375
|
-
self.
|
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
|
381
|
-
self,
|
382
|
+
def set_default_context_enrichment_token_threshold(
|
383
|
+
self, context_enrichment_token_threshold: int
|
382
384
|
):
|
383
|
-
self.
|
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
|
86
|
+
def get_context_enrichment_token_threshold(
|
81
87
|
ctx: AnyContext,
|
82
|
-
|
83
|
-
|
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
|
-
|
90
|
-
llm_config.
|
91
|
-
auto_render=
|
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
|
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
|
-
|
107
|
-
|
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
|
-
|
121
|
+
enrichment_token_threshold = get_context_enrichment_token_threshold(
|
116
122
|
ctx,
|
117
|
-
|
118
|
-
|
123
|
+
context_enrichment_token_threshold_attr,
|
124
|
+
render_context_enrichment_token_threshold,
|
119
125
|
)
|
120
|
-
|
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
|
-
|
137
|
-
|
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
|
-
|
151
|
-
|
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
|
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
|
-
|
26
|
-
|
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
|
-
|
33
|
-
llm_config.
|
34
|
-
auto_render=
|
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
|
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
|
-
|
50
|
-
|
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
|
-
|
62
|
+
summarization_token_threshold = get_history_summarization_token_threshold(
|
57
63
|
ctx,
|
58
|
-
|
59
|
-
|
64
|
+
history_summarization_token_threshold_attr,
|
65
|
+
render_history_summarization_token_threshold,
|
60
66
|
)
|
61
|
-
|
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
|
-
|
130
|
-
|
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
|
-
|
144
|
-
|
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,
|