AstrBot 4.0.0b3__tar.gz → 4.0.0b5__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.
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/workflows/docker-image.yml +29 -2
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/PKG-INFO +2 -2
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/utils/basic.py +12 -3
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/astrbot_config_mgr.py +16 -9
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/config/default.py +12 -4
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/process_stage/method/llm_request.py +6 -2
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py +26 -14
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/entities.py +17 -15
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/gemini_source.py +57 -18
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/openai_source.py +3 -3
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/updator.py +7 -5
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/io.py +1 -1
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/zip_updator.py +26 -4
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/config.py +14 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/update.py +3 -5
- astrbot-4.0.0b5/changelogs/v3.5.27.md +5 -0
- astrbot-4.0.0b5/changelogs/v4.0.0-beta.4.md +8 -0
- astrbot-4.0.0b5/changelogs/v4.0.0-beta.5.md +15 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/MigrationDialog.vue +25 -3
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/core/header.json +1 -1
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/migration.json +3 -1
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/core/header.json +1 -1
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/migration.json +3 -1
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/layouts/full/vertical-header/VerticalHeader.vue +0 -4
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ConfigPage.vue +1 -1
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/main.py +3 -3
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/astrbot/main.py +5 -5
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/python_interpreter/main.py +4 -4
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/pyproject.toml +2 -2
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.dockerignore +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/FUNDING.yml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/ISSUE_TEMPLATE/PLUGIN_PUBLISH.yml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/copilot-instructions.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/dependabot.yml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/workflows/auto_release.yml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/workflows/codeql.yml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/workflows/coverage_test.yml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/workflows/dashboard_ci.yml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.github/workflows/stale.yml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.gitignore +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.pre-commit-config.yaml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/.python-version +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/CODE_OF_CONDUCT.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/Dockerfile +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/Dockerfile_with_node +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/LICENSE +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/README.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/README_en.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/README_ja.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/all.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/event/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/event/filter/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/message_components.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/platform/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/provider/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/star/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/api/util/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/__main__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/commands/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/commands/cmd_conf.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/commands/cmd_init.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/commands/cmd_plug.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/commands/cmd_run.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/utils/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/utils/plugin.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/cli/utils/version_comparator.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/agent.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/handoff.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/hooks.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/mcp_client.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/response.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/run_context.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/runners/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/runners/base.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/runners/tool_loop_agent_runner.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/tool.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/agent/tool_executor.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/astr_agent_context.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/config/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/config/astrbot_config.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/conversation_mgr.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/core_lifecycle.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/migration/helper.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/migration/migra_3_to_4.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/migration/shared_preferences_v3.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/migration/sqlite_v3.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/po.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/sqlite.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/vec_db/base.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/vec_db/faiss_impl/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/vec_db/faiss_impl/document_storage.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/vec_db/faiss_impl/embedding_storage.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/vec_db/faiss_impl/sqlite_init.sql +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/db/vec_db/faiss_impl/vec_db.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/event_bus.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/file_token_service.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/initial_loader.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/log.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/message/components.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/message/message_event_result.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/persona_mgr.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/content_safety_check/stage.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/content_safety_check/strategies/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/content_safety_check/strategies/baidu_aip.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/content_safety_check/strategies/keywords.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/content_safety_check/strategies/strategy.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/context.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/context_utils.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/preprocess_stage/stage.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/process_stage/method/star_request.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/process_stage/stage.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/rate_limit_check/stage.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/respond/stage.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/result_decorate/stage.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/scheduler.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/session_status_check/stage.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/stage.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/waking_check/stage.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/whitelist_check/stage.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/astr_message_event.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/astrbot_message.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/manager.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/message_session.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/message_type.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/platform.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/platform_metadata.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/register.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/dingtalk/dingtalk_event.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/discord/client.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/discord/components.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/discord/discord_platform_adapter.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/discord/discord_platform_event.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/lark/lark_adapter.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/lark/lark_event.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_adapter.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_event.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/slack/client.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/slack/slack_adapter.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/slack/slack_event.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/telegram/tg_adapter.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/telegram/tg_event.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/webchat/webchat_adapter.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/webchat/webchat_event.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/webchat/webchat_queue_mgr.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/wechatpadpro/wechatpadpro_adapter.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/wechatpadpro/wechatpadpro_message_event.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/wechatpadpro/xml_data_parser.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/wecom/wecom_adapter.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/wecom/wecom_event.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/wecom/wecom_kf.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/wecom/wecom_kf_message.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_adapter.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform/sources/weixin_official_account/weixin_offacc_event.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/platform_message_history_mgr.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/entites.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/func_tool_manager.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/manager.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/provider.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/register.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/anthropic_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/azure_tts_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/dashscope_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/dashscope_tts.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/dify_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/edge_tts_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/fishaudio_tts_api_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/gemini_embedding_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/gemini_tts_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/gsv_selfhosted_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/gsvi_tts_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/minimax_tts_api_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/openai_embedding_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/openai_tts_api_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/sensevoice_selfhosted_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/vllm_rerank_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/volcengine_tts.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/whisper_api_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/whisper_selfhosted_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/provider/sources/zhipu_source.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/README.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/config.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/context.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/command.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/command_group.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/custom_filter.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/event_message_type.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/permission.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/platform_adapter_type.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/filter/regex.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/register/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/register/star.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/register/star_handler.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/session_llm_manager.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/session_plugin_manager.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/star.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/star_handler.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/star_manager.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/star_tools.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/star/updator.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/astrbot_path.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/command_parser.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/dify_api_client.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/log_pipe.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/metrics.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/path_util.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/pip_installer.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/session_lock.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/session_waiter.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/shared_preferences.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/t2i/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/t2i/local_strategy.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/t2i/network_strategy.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/t2i/renderer.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/t2i/template/base.html +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/tencent_record_helper.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/utils/version_comparator.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/auth.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/chat.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/conversation.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/file.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/log.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/persona.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/plugin.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/route.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/session_management.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/stat.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/static_file.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/routes/tools.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/dashboard/server.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.0.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.1.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.10.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.11.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.12.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.13.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.14.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.15.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.16.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.17.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.18.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.19.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.20.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.21.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.22.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.23.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.24.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.25.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.26.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.27.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.28.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.29.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.3.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.30.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.31.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.32.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.33.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.35.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.36.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.37.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.38.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.39.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.4.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.5.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.6.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.7.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.8.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.4.9.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.0.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.1.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.10.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.11.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.12.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.13.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.14.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.15.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.16.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.17.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.18.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.19.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.2.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.20.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.21.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.22.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.23.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.24.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.25.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.26.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.3.1.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.3.2.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.3.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.4.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.5.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.6.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.7.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.8.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v3.5.9.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/changelogs/v4.0.0-beta.3.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/compose.yml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/.gitignore +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/LICENSE +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/README.md +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/env.d.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/index.html +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/public/_redirects +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/public/favicon.svg +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/App.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/astrbot_banner.png +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/astrbot_logo_mini.webp +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/dingtalk.svg +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/discord.svg +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/kook.png +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/lark.png +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/qq.png +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/slack.svg +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/telegram.svg +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/vocechat.png +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/wechat.png +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/assets/images/platform_logos/wecom.png +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/ConfirmDialog.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/chat/ProviderModelSelector.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/AstrBotConfig.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/AstrBotConfigV4.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ConsoleDisplayer.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ExtensionCard.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ItemCard.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ItemCardGrid.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/KnowledgeBaseSelector.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/LanguageSwitcher.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ListConfigItem.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/Logo.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/PersonaSelector.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/PluginSetSelector.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ProviderSelector.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ProxySelector.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/ReadmeDialog.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/T2ITemplateEditor.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/UiParentCard.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/components/shared/WaitingForRestart.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/config.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/composables.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/loader.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/core/actions.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/core/common.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/core/navigation.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/core/status.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/about.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/alkaid/index.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/alkaid/knowledge-base.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/alkaid/memory.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/auth.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/chart.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/chat.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/config.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/console.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/conversation.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/dashboard.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/extension.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/persona.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/platform.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/provider.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/session-management.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/settings.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/features/tool-use.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/messages/errors.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/messages/success.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/en-US/messages/validation.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/core/actions.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/core/common.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/core/navigation.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/core/status.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/about.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/alkaid/index.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/alkaid/knowledge-base.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/alkaid/memory.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/auth.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/chart.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/chat.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/config.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/console.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/conversation.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/dashboard.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/extension.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/persona.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/platform.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/provider.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/session-management.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/settings.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/features/tool-use.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/messages/errors.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/messages/success.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/locales/zh-CN/messages/validation.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/tools/index.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/translations.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/types.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/i18n/validator.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/layouts/blank/BlankLayout.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/layouts/full/FullLayout.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/layouts/full/vertical-sidebar/NavItem.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/layouts/full/vertical-sidebar/VerticalSidebar.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/layouts/full/vertical-sidebar/sidebarItem.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/main.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/plugins/confirmPlugin.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/plugins/vuetify.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/router/AuthRoutes.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/router/ChatBoxRoutes.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/router/MainRoutes.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/router/index.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/_override.scss +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/_variables.scss +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VButtons.scss +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VCard.scss +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VField.scss +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VInput.scss +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VNavigationDrawer.scss +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VScrollbar.scss +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VShadow.scss +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VTabs.scss +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/components/_VTextField.scss +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/layout/_container.scss +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/layout/_sidebar.scss +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/pages/_dashboards.scss +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/scss/style.scss +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/stores/auth.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/stores/common.js +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/stores/customizer.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/theme/DarkTheme.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/theme/LightTheme.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/types/themeTypes/ThemeType.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/types/vue3-print-nb.d.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/types/vue_tabler_icon.d.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/AboutPage.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/AlkaidPage.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ChatBoxPage.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ChatPage.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ConsolePage.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ConversationPage.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ExtensionPage.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/PersonaPage.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/PlatformPage.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ProviderPage.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/SessionManagementPage.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/Settings.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/ToolUsePage.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/alkaid/KnowledgeBase.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/alkaid/LongTermMemory.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/alkaid/Other.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/authentication/auth/LoginPage.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/authentication/authForms/AuthLogin.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/DefaultDashboard.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/components/MemoryUsage.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/components/MessageStat.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/components/OnlinePlatform.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/components/OnlineTime.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/components/PlatformStat.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/components/RunningTime.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/src/views/dashboards/default/components/TotalMessage.vue +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/tsconfig.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/tsconfig.vite-config.json +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/dashboard/vite.config.ts +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/astrbot/long_term_memory.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/astrbot/metadata.yaml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/python_interpreter/metadata.yaml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/python_interpreter/requirements.txt +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/python_interpreter/shared/api.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/reminder/main.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/reminder/metadata.yaml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/session_controller/main.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/session_controller/metadata.yaml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/thinking_filter/main.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/thinking_filter/metadata.yaml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/web_searcher/engines/__init__.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/web_searcher/engines/bing.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/web_searcher/engines/google.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/web_searcher/engines/sogo.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/web_searcher/main.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/packages/web_searcher/metadata.yaml +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/requirements.txt +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/samples/stt_health_check.wav +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/tests/test_dashboard.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/tests/test_main.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/tests/test_pipeline.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/tests/test_plugin_manager.py +0 -0
- {astrbot-4.0.0b3 → astrbot-4.0.0b5}/uv.lock +0 -0
|
@@ -27,6 +27,33 @@ jobs:
|
|
|
27
27
|
if: github.event_name == 'workflow_dispatch'
|
|
28
28
|
run: git checkout ${{ steps.get-latest-tag.outputs.latest_tag }}
|
|
29
29
|
|
|
30
|
+
- name: Check if version is pre-release
|
|
31
|
+
id: check-prerelease
|
|
32
|
+
run: |
|
|
33
|
+
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
|
|
34
|
+
version="${{ steps.get-latest-tag.outputs.latest_tag }}"
|
|
35
|
+
else
|
|
36
|
+
version="${{ github.ref_name }}"
|
|
37
|
+
fi
|
|
38
|
+
if [[ "$version" == *"beta"* ]] || [[ "$version" == *"alpha"* ]]; then
|
|
39
|
+
echo "is_prerelease=true" >> $GITHUB_OUTPUT
|
|
40
|
+
echo "Version $version is a pre-release, will not push latest tag"
|
|
41
|
+
else
|
|
42
|
+
echo "is_prerelease=false" >> $GITHUB_OUTPUT
|
|
43
|
+
echo "Version $version is a stable release, will push latest tag"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
- name: Build Dashboard
|
|
47
|
+
run: |
|
|
48
|
+
cd dashboard
|
|
49
|
+
npm install
|
|
50
|
+
npm run build
|
|
51
|
+
mkdir -p dist/assets
|
|
52
|
+
echo $(git rev-parse HEAD) > dist/assets/version
|
|
53
|
+
cd ..
|
|
54
|
+
mkdir -p data
|
|
55
|
+
cp -r dashboard/dist data/
|
|
56
|
+
|
|
30
57
|
- name: Set QEMU
|
|
31
58
|
uses: docker/setup-qemu-action@v3
|
|
32
59
|
|
|
@@ -53,9 +80,9 @@ jobs:
|
|
|
53
80
|
platforms: linux/amd64,linux/arm64
|
|
54
81
|
push: true
|
|
55
82
|
tags: |
|
|
56
|
-
${{
|
|
83
|
+
${{ steps.check-prerelease.outputs.is_prerelease == 'false' && format('{0}/astrbot:latest', secrets.DOCKER_HUB_USERNAME) || '' }}
|
|
57
84
|
${{ secrets.DOCKER_HUB_USERNAME }}/astrbot:${{ github.event_name == 'workflow_dispatch' && steps.get-latest-tag.outputs.latest_tag || github.ref_name }}
|
|
58
|
-
ghcr.io/soulter/astrbot:latest
|
|
85
|
+
${{ steps.check-prerelease.outputs.is_prerelease == 'false' && 'ghcr.io/soulter/astrbot:latest' || '' }}
|
|
59
86
|
ghcr.io/soulter/astrbot:${{ github.event_name == 'workflow_dispatch' && steps.get-latest-tag.outputs.latest_tag || github.ref_name }}
|
|
60
87
|
|
|
61
88
|
- name: Post build notifications
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: AstrBot
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.0b5
|
|
4
4
|
Summary: 易上手的多平台 LLM 聊天机器人及开发框架
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Requires-Python: >=3.10
|
|
@@ -20,7 +20,7 @@ Requires-Dist: defusedxml>=0.7.1
|
|
|
20
20
|
Requires-Dist: deprecated>=1.2.18
|
|
21
21
|
Requires-Dist: dingtalk-stream>=0.22.1
|
|
22
22
|
Requires-Dist: docstring-parser>=0.16
|
|
23
|
-
Requires-Dist: faiss-cpu
|
|
23
|
+
Requires-Dist: faiss-cpu==1.10.0
|
|
24
24
|
Requires-Dist: filelock>=3.18.0
|
|
25
25
|
Requires-Dist: google-genai>=1.14.0
|
|
26
26
|
Requires-Dist: googlesearch-python>=1.3.0
|
|
@@ -37,7 +37,10 @@ async def check_dashboard(astrbot_root: Path) -> None:
|
|
|
37
37
|
):
|
|
38
38
|
click.echo("正在安装管理面板...")
|
|
39
39
|
await download_dashboard(
|
|
40
|
-
path="data/dashboard.zip",
|
|
40
|
+
path="data/dashboard.zip",
|
|
41
|
+
extract_path=str(astrbot_root),
|
|
42
|
+
version=f"v{VERSION}",
|
|
43
|
+
latest=False,
|
|
41
44
|
)
|
|
42
45
|
click.echo("管理面板安装完成")
|
|
43
46
|
|
|
@@ -50,7 +53,10 @@ async def check_dashboard(astrbot_root: Path) -> None:
|
|
|
50
53
|
version = dashboard_version.split("v")[1]
|
|
51
54
|
click.echo(f"管理面板版本: {version}")
|
|
52
55
|
await download_dashboard(
|
|
53
|
-
path="data/dashboard.zip",
|
|
56
|
+
path="data/dashboard.zip",
|
|
57
|
+
extract_path=str(astrbot_root),
|
|
58
|
+
version=f"v{VERSION}",
|
|
59
|
+
latest=False,
|
|
54
60
|
)
|
|
55
61
|
except Exception as e:
|
|
56
62
|
click.echo(f"下载管理面板失败: {e}")
|
|
@@ -59,7 +65,10 @@ async def check_dashboard(astrbot_root: Path) -> None:
|
|
|
59
65
|
click.echo("初始化管理面板目录...")
|
|
60
66
|
try:
|
|
61
67
|
await download_dashboard(
|
|
62
|
-
path=str(astrbot_root / "dashboard.zip"),
|
|
68
|
+
path=str(astrbot_root / "dashboard.zip"),
|
|
69
|
+
extract_path=str(astrbot_root),
|
|
70
|
+
version=f"v{VERSION}",
|
|
71
|
+
latest=False,
|
|
63
72
|
)
|
|
64
73
|
click.echo("管理面板初始化完成")
|
|
65
74
|
except Exception as e:
|
|
@@ -36,13 +36,21 @@ class AstrBotConfigManager:
|
|
|
36
36
|
self.confs: dict[str, AstrBotConfig] = {}
|
|
37
37
|
"""uuid / "default" -> AstrBotConfig"""
|
|
38
38
|
self.confs["default"] = default_config
|
|
39
|
+
self.abconf_data = None
|
|
39
40
|
self._load_all_configs()
|
|
40
41
|
|
|
42
|
+
def _get_abconf_data(self) -> dict:
|
|
43
|
+
"""获取所有的 abconf 数据"""
|
|
44
|
+
if self.abconf_data is None:
|
|
45
|
+
self.abconf_data = self.sp.get(
|
|
46
|
+
"abconf_mapping", {}, scope="global", scope_id="global"
|
|
47
|
+
)
|
|
48
|
+
return self.abconf_data
|
|
49
|
+
|
|
41
50
|
def _load_all_configs(self):
|
|
42
51
|
"""Load all configurations from the shared preferences."""
|
|
43
|
-
abconf_data = self.
|
|
44
|
-
|
|
45
|
-
)
|
|
52
|
+
abconf_data = self._get_abconf_data()
|
|
53
|
+
self.abconf_data = abconf_data
|
|
46
54
|
for uuid_, meta in abconf_data.items():
|
|
47
55
|
filename = meta["path"]
|
|
48
56
|
conf_path = os.path.join(get_astrbot_config_path(), filename)
|
|
@@ -72,9 +80,7 @@ class AstrBotConfigManager:
|
|
|
72
80
|
ConfInfo: 包含配置文件的 uuid, 路径和名称等信息, 是一个 dict 类型
|
|
73
81
|
"""
|
|
74
82
|
# uuid -> { "umop": list, "path": str, "name": str }
|
|
75
|
-
abconf_data = self.
|
|
76
|
-
"abconf_mapping", {}, scope="global", scope_id="global"
|
|
77
|
-
)
|
|
83
|
+
abconf_data = self._get_abconf_data()
|
|
78
84
|
if isinstance(umo, MessageSession):
|
|
79
85
|
umo = str(umo)
|
|
80
86
|
else:
|
|
@@ -115,6 +121,7 @@ class AstrBotConfigManager:
|
|
|
115
121
|
"name": random_word,
|
|
116
122
|
}
|
|
117
123
|
self.sp.put("abconf_mapping", abconf_data, scope="global", scope_id="global")
|
|
124
|
+
self.abconf_data = abconf_data
|
|
118
125
|
|
|
119
126
|
def get_conf(self, umo: str | MessageSession | None) -> AstrBotConfig:
|
|
120
127
|
"""获取指定 umo 的配置文件。如果不存在,则 fallback 到默认配置文件。"""
|
|
@@ -147,9 +154,7 @@ class AstrBotConfigManager:
|
|
|
147
154
|
"""获取所有配置文件的元数据列表"""
|
|
148
155
|
conf_list = []
|
|
149
156
|
conf_list.append(DEFAULT_CONFIG_CONF_INFO)
|
|
150
|
-
abconf_mapping = self.
|
|
151
|
-
"abconf_mapping", {}, scope="global", scope_id="global"
|
|
152
|
-
)
|
|
157
|
+
abconf_mapping = self._get_abconf_data()
|
|
153
158
|
for uuid_, meta in abconf_mapping.items():
|
|
154
159
|
conf_list.append(ConfInfo(**meta, id=uuid_))
|
|
155
160
|
return conf_list
|
|
@@ -218,6 +223,7 @@ class AstrBotConfigManager:
|
|
|
218
223
|
# 从映射中移除
|
|
219
224
|
del abconf_data[conf_id]
|
|
220
225
|
self.sp.put("abconf_mapping", abconf_data, scope="global", scope_id="global")
|
|
226
|
+
self.abconf_data = abconf_data
|
|
221
227
|
|
|
222
228
|
logger.info(f"成功删除配置文件 {conf_id}")
|
|
223
229
|
return True
|
|
@@ -263,6 +269,7 @@ class AstrBotConfigManager:
|
|
|
263
269
|
|
|
264
270
|
# 保存更新
|
|
265
271
|
self.sp.put("abconf_mapping", abconf_data, scope="global", scope_id="global")
|
|
272
|
+
self.abconf_data = abconf_data
|
|
266
273
|
logger.info(f"成功更新配置文件 {conf_id} 的信息")
|
|
267
274
|
return True
|
|
268
275
|
|
|
@@ -6,7 +6,7 @@ import os
|
|
|
6
6
|
|
|
7
7
|
from astrbot.core.utils.astrbot_path import get_astrbot_data_path
|
|
8
8
|
|
|
9
|
-
VERSION = "4.0.0-beta.
|
|
9
|
+
VERSION = "4.0.0-beta.5"
|
|
10
10
|
DB_PATH = os.path.join(get_astrbot_data_path(), "data_v4.db")
|
|
11
11
|
|
|
12
12
|
# 默认配置
|
|
@@ -866,6 +866,9 @@ CONFIG_METADATA_2 = {
|
|
|
866
866
|
"provider_type": "text_to_speech",
|
|
867
867
|
"enable": False,
|
|
868
868
|
"edge-tts-voice": "zh-CN-XiaoxiaoNeural",
|
|
869
|
+
"rate": "+0%",
|
|
870
|
+
"volume": "+0%",
|
|
871
|
+
"pitch": "+0Hz",
|
|
869
872
|
"timeout": 20,
|
|
870
873
|
},
|
|
871
874
|
"GSV TTS(本地加载)": {
|
|
@@ -1913,7 +1916,7 @@ CONFIG_METADATA_3 = {
|
|
|
1913
1916
|
"type": "bool",
|
|
1914
1917
|
},
|
|
1915
1918
|
"provider_settings.identifier": {
|
|
1916
|
-
"description": "
|
|
1919
|
+
"description": "用户识别",
|
|
1917
1920
|
"type": "bool",
|
|
1918
1921
|
},
|
|
1919
1922
|
"provider_settings.datetime_system_prompt": {
|
|
@@ -1926,7 +1929,7 @@ CONFIG_METADATA_3 = {
|
|
|
1926
1929
|
},
|
|
1927
1930
|
"provider_settings.max_agent_step": {
|
|
1928
1931
|
"description": "工具调用轮数上限",
|
|
1929
|
-
"type": "
|
|
1932
|
+
"type": "int",
|
|
1930
1933
|
},
|
|
1931
1934
|
"provider_settings.streaming_response": {
|
|
1932
1935
|
"description": "流式回复",
|
|
@@ -2288,7 +2291,7 @@ CONFIG_METADATA_3_SYSTEM = {
|
|
|
2288
2291
|
"condition": {
|
|
2289
2292
|
"t2i_strategy": "remote",
|
|
2290
2293
|
},
|
|
2291
|
-
"_special": "t2i_template"
|
|
2294
|
+
"_special": "t2i_template",
|
|
2292
2295
|
},
|
|
2293
2296
|
"log_level": {
|
|
2294
2297
|
"description": "控制台日志级别",
|
|
@@ -2321,6 +2324,11 @@ CONFIG_METADATA_3_SYSTEM = {
|
|
|
2321
2324
|
"type": "string",
|
|
2322
2325
|
"hint": "启用后,会以添加环境变量的方式设置代理。格式为 `http://ip:port`",
|
|
2323
2326
|
},
|
|
2327
|
+
"no_proxy": {
|
|
2328
|
+
"description": "直连地址列表",
|
|
2329
|
+
"type": "list",
|
|
2330
|
+
"items": {"type": "string"},
|
|
2331
|
+
},
|
|
2324
2332
|
},
|
|
2325
2333
|
}
|
|
2326
2334
|
},
|
{astrbot-4.0.0b3 → astrbot-4.0.0b5}/astrbot/core/pipeline/process_stage/method/llm_request.py
RENAMED
|
@@ -299,7 +299,9 @@ class LLMRequestSubStage(Stage):
|
|
|
299
299
|
self.max_context_length - 1,
|
|
300
300
|
)
|
|
301
301
|
self.streaming_response: bool = settings["streaming_response"]
|
|
302
|
-
self.max_step: int = settings.get("max_agent_step",
|
|
302
|
+
self.max_step: int = settings.get("max_agent_step", 30)
|
|
303
|
+
if isinstance(self.max_step, bool): # workaround: #2622
|
|
304
|
+
self.max_step = 30
|
|
303
305
|
self.show_tool_use: bool = settings.get("show_tool_use_status", True)
|
|
304
306
|
|
|
305
307
|
for bwp in self.bot_wake_prefixs:
|
|
@@ -434,7 +436,9 @@ class LLMRequestSubStage(Stage):
|
|
|
434
436
|
provider_cfg = provider.provider_config.get("modalities", ["tool_use"])
|
|
435
437
|
# 如果模型不支持工具使用,但请求中包含工具列表,则清空。
|
|
436
438
|
if "tool_use" not in provider_cfg:
|
|
437
|
-
logger.debug(
|
|
439
|
+
logger.debug(
|
|
440
|
+
f"用户设置提供商 {provider} 不支持工具使用,清空工具列表。"
|
|
441
|
+
)
|
|
438
442
|
req.func_tool = None
|
|
439
443
|
# 插件可用性设置
|
|
440
444
|
if event.plugins_name is not None and req.func_tool:
|
|
@@ -67,12 +67,19 @@ class AiocqhttpMessageEvent(AstrMessageEvent):
|
|
|
67
67
|
session_id: str,
|
|
68
68
|
messages: list[dict],
|
|
69
69
|
):
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
# session_id 必须是纯数字字符串
|
|
71
|
+
session_id = int(session_id) if session_id.isdigit() else None
|
|
72
|
+
|
|
73
|
+
if is_group and isinstance(session_id, int):
|
|
73
74
|
await bot.send_group_msg(group_id=session_id, message=messages)
|
|
74
|
-
|
|
75
|
+
elif not is_group and isinstance(session_id, int):
|
|
75
76
|
await bot.send_private_msg(user_id=session_id, message=messages)
|
|
77
|
+
elif isinstance(event, Event): # 最后兜底
|
|
78
|
+
await bot.send(event=event, message=messages)
|
|
79
|
+
else:
|
|
80
|
+
raise ValueError(
|
|
81
|
+
f"无法发送消息:缺少有效的数字 session_id({session_id}) 或 event({event})"
|
|
82
|
+
)
|
|
76
83
|
|
|
77
84
|
@classmethod
|
|
78
85
|
async def send_message(
|
|
@@ -83,7 +90,15 @@ class AiocqhttpMessageEvent(AstrMessageEvent):
|
|
|
83
90
|
is_group: bool = False,
|
|
84
91
|
session_id: str = None,
|
|
85
92
|
):
|
|
86
|
-
"""
|
|
93
|
+
"""发送消息至 QQ 协议端(aiocqhttp)。
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
bot (CQHttp): aiocqhttp 机器人实例
|
|
97
|
+
message_chain (MessageChain): 要发送的消息链
|
|
98
|
+
event (Event | None, optional): aiocqhttp 事件对象.
|
|
99
|
+
is_group (bool, optional): 是否为群消息.
|
|
100
|
+
session_id (str | None, optional): 会话 ID(群号或 QQ 号
|
|
101
|
+
"""
|
|
87
102
|
|
|
88
103
|
# 转发消息、文件消息不能和普通消息混在一起发送
|
|
89
104
|
send_one_by_one = any(
|
|
@@ -122,18 +137,15 @@ class AiocqhttpMessageEvent(AstrMessageEvent):
|
|
|
122
137
|
|
|
123
138
|
async def send(self, message: MessageChain):
|
|
124
139
|
"""发送消息"""
|
|
125
|
-
event = self.message_obj
|
|
126
|
-
|
|
127
|
-
is_group =
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
session_id = self.get_group_id()
|
|
131
|
-
else:
|
|
132
|
-
session_id = self.get_sender_id()
|
|
140
|
+
event = getattr(self.message_obj, "raw_message", None)
|
|
141
|
+
|
|
142
|
+
is_group = bool(self.get_group_id())
|
|
143
|
+
session_id = self.get_group_id() if is_group else self.get_sender_id()
|
|
144
|
+
|
|
133
145
|
await self.send_message(
|
|
134
146
|
bot=self.bot,
|
|
135
147
|
message_chain=message,
|
|
136
|
-
event=event,
|
|
148
|
+
event=event, # 不强制要求一定是 Event
|
|
137
149
|
is_group=is_group,
|
|
138
150
|
session_id=session_id,
|
|
139
151
|
)
|
|
@@ -4,9 +4,11 @@ import json
|
|
|
4
4
|
from astrbot.core.utils.io import download_image_by_url
|
|
5
5
|
from astrbot import logger
|
|
6
6
|
from dataclasses import dataclass, field
|
|
7
|
-
from typing import List, Dict, Type
|
|
7
|
+
from typing import List, Dict, Type, Any
|
|
8
8
|
from astrbot.core.agent.tool import ToolSet
|
|
9
9
|
from openai.types.chat.chat_completion import ChatCompletion
|
|
10
|
+
from google.genai.types import GenerateContentResponse
|
|
11
|
+
from anthropic.types import Message
|
|
10
12
|
from openai.types.chat.chat_completion_message_tool_call import (
|
|
11
13
|
ChatCompletionMessageToolCall,
|
|
12
14
|
)
|
|
@@ -30,11 +32,11 @@ class ProviderMetaData:
|
|
|
30
32
|
desc: str = ""
|
|
31
33
|
"""提供商适配器描述."""
|
|
32
34
|
provider_type: ProviderType = ProviderType.CHAT_COMPLETION
|
|
33
|
-
cls_type: Type = None
|
|
35
|
+
cls_type: Type | None = None
|
|
34
36
|
|
|
35
|
-
default_config_tmpl: dict = None
|
|
37
|
+
default_config_tmpl: dict | None = None
|
|
36
38
|
"""平台的默认配置模板"""
|
|
37
|
-
provider_display_name: str = None
|
|
39
|
+
provider_display_name: str | None = None
|
|
38
40
|
"""显示在 WebUI 配置页中的提供商名称,如空则是 type"""
|
|
39
41
|
|
|
40
42
|
|
|
@@ -58,7 +60,7 @@ class ToolCallMessageSegment:
|
|
|
58
60
|
class AssistantMessageSegment:
|
|
59
61
|
"""OpenAI 格式的上下文中 role 为 assistant 的消息段。参考: https://platform.openai.com/docs/guides/function-calling"""
|
|
60
62
|
|
|
61
|
-
content: str = None
|
|
63
|
+
content: str | None = None
|
|
62
64
|
tool_calls: List[ChatCompletionMessageToolCall | Dict] = field(default_factory=list)
|
|
63
65
|
role: str = "assistant"
|
|
64
66
|
|
|
@@ -205,17 +207,17 @@ class ProviderRequest:
|
|
|
205
207
|
class LLMResponse:
|
|
206
208
|
role: str
|
|
207
209
|
"""角色, assistant, tool, err"""
|
|
208
|
-
result_chain: MessageChain = None
|
|
210
|
+
result_chain: MessageChain | None = None
|
|
209
211
|
"""返回的消息链"""
|
|
210
|
-
tools_call_args: List[Dict[str,
|
|
212
|
+
tools_call_args: List[Dict[str, Any]] = field(default_factory=list)
|
|
211
213
|
"""工具调用参数"""
|
|
212
214
|
tools_call_name: List[str] = field(default_factory=list)
|
|
213
215
|
"""工具调用名称"""
|
|
214
216
|
tools_call_ids: List[str] = field(default_factory=list)
|
|
215
217
|
"""工具调用 ID"""
|
|
216
218
|
|
|
217
|
-
raw_completion: ChatCompletion = None
|
|
218
|
-
_new_record: Dict[str,
|
|
219
|
+
raw_completion: ChatCompletion | GenerateContentResponse | Message | None = None
|
|
220
|
+
_new_record: Dict[str, Any] | None = None
|
|
219
221
|
|
|
220
222
|
_completion_text: str = ""
|
|
221
223
|
|
|
@@ -226,12 +228,12 @@ class LLMResponse:
|
|
|
226
228
|
self,
|
|
227
229
|
role: str,
|
|
228
230
|
completion_text: str = "",
|
|
229
|
-
result_chain: MessageChain = None,
|
|
230
|
-
tools_call_args: List[Dict[str,
|
|
231
|
-
tools_call_name: List[str] = None,
|
|
232
|
-
tools_call_ids: List[str] = None,
|
|
233
|
-
raw_completion: ChatCompletion = None,
|
|
234
|
-
_new_record: Dict[str,
|
|
231
|
+
result_chain: MessageChain | None = None,
|
|
232
|
+
tools_call_args: List[Dict[str, Any]] | None = None,
|
|
233
|
+
tools_call_name: List[str] | None = None,
|
|
234
|
+
tools_call_ids: List[str] | None = None,
|
|
235
|
+
raw_completion: ChatCompletion | None = None,
|
|
236
|
+
_new_record: Dict[str, Any] | None = None,
|
|
235
237
|
is_chunk: bool = False,
|
|
236
238
|
):
|
|
237
239
|
"""初始化 LLMResponse
|
|
@@ -15,7 +15,7 @@ from astrbot import logger
|
|
|
15
15
|
from astrbot.api.provider import Provider
|
|
16
16
|
from astrbot.core.message.message_event_result import MessageChain
|
|
17
17
|
from astrbot.core.provider.entities import LLMResponse
|
|
18
|
-
from astrbot.core.provider.func_tool_manager import
|
|
18
|
+
from astrbot.core.provider.func_tool_manager import ToolSet
|
|
19
19
|
from astrbot.core.utils.io import download_image_by_url
|
|
20
20
|
|
|
21
21
|
from ..register import register_provider_adapter
|
|
@@ -61,7 +61,7 @@ class ProviderGoogleGenAI(Provider):
|
|
|
61
61
|
default_persona,
|
|
62
62
|
)
|
|
63
63
|
self.api_keys: list = provider_config.get("key", [])
|
|
64
|
-
self.chosen_api_key: str = self.api_keys[0] if len(self.api_keys) > 0 else
|
|
64
|
+
self.chosen_api_key: str = self.api_keys[0] if len(self.api_keys) > 0 else ""
|
|
65
65
|
self.timeout: int = int(provider_config.get("timeout", 180))
|
|
66
66
|
|
|
67
67
|
self.api_base: Optional[str] = provider_config.get("api_base", None)
|
|
@@ -96,6 +96,9 @@ class ProviderGoogleGenAI(Provider):
|
|
|
96
96
|
|
|
97
97
|
async def _handle_api_error(self, e: APIError, keys: list[str]) -> bool:
|
|
98
98
|
"""处理API错误,返回是否需要重试"""
|
|
99
|
+
if e.message is None:
|
|
100
|
+
e.message = ""
|
|
101
|
+
|
|
99
102
|
if e.code == 429 or "API key not valid" in e.message:
|
|
100
103
|
keys.remove(self.chosen_api_key)
|
|
101
104
|
if len(keys) > 0:
|
|
@@ -119,7 +122,7 @@ class ProviderGoogleGenAI(Provider):
|
|
|
119
122
|
async def _prepare_query_config(
|
|
120
123
|
self,
|
|
121
124
|
payloads: dict,
|
|
122
|
-
tools: Optional[
|
|
125
|
+
tools: Optional[ToolSet] = None,
|
|
123
126
|
system_instruction: Optional[str] = None,
|
|
124
127
|
modalities: Optional[list[str]] = None,
|
|
125
128
|
temperature: float = 0.7,
|
|
@@ -321,11 +324,15 @@ class ProviderGoogleGenAI(Provider):
|
|
|
321
324
|
|
|
322
325
|
@staticmethod
|
|
323
326
|
def _process_content_parts(
|
|
324
|
-
|
|
327
|
+
candidate: types.Candidate, llm_response: LLMResponse
|
|
325
328
|
) -> MessageChain:
|
|
326
329
|
"""处理内容部分并构建消息链"""
|
|
327
|
-
|
|
328
|
-
|
|
330
|
+
if not candidate.content:
|
|
331
|
+
logger.warning(f"收到的 candidate.content 为空: {candidate}")
|
|
332
|
+
raise Exception("API 返回的 candidate.content 为空。")
|
|
333
|
+
|
|
334
|
+
finish_reason = candidate.finish_reason
|
|
335
|
+
result_parts: list[types.Part] | None = candidate.content.parts
|
|
329
336
|
|
|
330
337
|
if finish_reason == types.FinishReason.SAFETY:
|
|
331
338
|
raise Exception("模型生成内容未通过 Gemini 平台的安全检查")
|
|
@@ -343,22 +350,28 @@ class ProviderGoogleGenAI(Provider):
|
|
|
343
350
|
raise Exception("模型生成内容违反 Gemini 平台政策")
|
|
344
351
|
|
|
345
352
|
if not result_parts:
|
|
346
|
-
logger.
|
|
347
|
-
raise Exception("API
|
|
353
|
+
logger.warning(f"收到的 candidate.content.parts 为空: {candidate}")
|
|
354
|
+
raise Exception("API 返回的 candidate.content.parts 为空。")
|
|
348
355
|
|
|
349
356
|
chain = []
|
|
350
357
|
part: types.Part
|
|
351
358
|
|
|
352
359
|
# 暂时这样Fallback
|
|
353
360
|
if all(
|
|
354
|
-
part.inline_data
|
|
361
|
+
part.inline_data
|
|
362
|
+
and part.inline_data.mime_type
|
|
363
|
+
and part.inline_data.mime_type.startswith("image/")
|
|
355
364
|
for part in result_parts
|
|
356
365
|
):
|
|
357
366
|
chain.append(Comp.Plain("这是图片"))
|
|
358
367
|
for part in result_parts:
|
|
359
368
|
if part.text:
|
|
360
369
|
chain.append(Comp.Plain(part.text))
|
|
361
|
-
elif
|
|
370
|
+
elif (
|
|
371
|
+
part.function_call
|
|
372
|
+
and part.function_call.name is not None
|
|
373
|
+
and part.function_call.args is not None
|
|
374
|
+
):
|
|
362
375
|
llm_response.role = "tool"
|
|
363
376
|
llm_response.tools_call_name.append(part.function_call.name)
|
|
364
377
|
llm_response.tools_call_args.append(part.function_call.args)
|
|
@@ -366,11 +379,16 @@ class ProviderGoogleGenAI(Provider):
|
|
|
366
379
|
llm_response.tools_call_ids.append(
|
|
367
380
|
part.function_call.id or part.function_call.name
|
|
368
381
|
)
|
|
369
|
-
elif
|
|
382
|
+
elif (
|
|
383
|
+
part.inline_data
|
|
384
|
+
and part.inline_data.mime_type
|
|
385
|
+
and part.inline_data.mime_type.startswith("image/")
|
|
386
|
+
and part.inline_data.data
|
|
387
|
+
):
|
|
370
388
|
chain.append(Comp.Image.fromBytes(part.inline_data.data))
|
|
371
389
|
return MessageChain(chain=chain)
|
|
372
390
|
|
|
373
|
-
async def _query(self, payloads: dict, tools:
|
|
391
|
+
async def _query(self, payloads: dict, tools: ToolSet | None) -> LLMResponse:
|
|
374
392
|
"""非流式请求 Gemini API"""
|
|
375
393
|
system_instruction = next(
|
|
376
394
|
(msg["content"] for msg in payloads["messages"] if msg["role"] == "system"),
|
|
@@ -396,6 +414,10 @@ class ProviderGoogleGenAI(Provider):
|
|
|
396
414
|
config=config,
|
|
397
415
|
)
|
|
398
416
|
|
|
417
|
+
if not result.candidates:
|
|
418
|
+
logger.error(f"请求失败, 返回的 candidates 为空: {result}")
|
|
419
|
+
raise Exception("请求失败, 返回的 candidates 为空。")
|
|
420
|
+
|
|
399
421
|
if result.candidates[0].finish_reason == types.FinishReason.RECITATION:
|
|
400
422
|
if temperature > 2:
|
|
401
423
|
raise Exception("温度参数已超过最大值2,仍然发生recitation")
|
|
@@ -408,6 +430,8 @@ class ProviderGoogleGenAI(Provider):
|
|
|
408
430
|
break
|
|
409
431
|
|
|
410
432
|
except APIError as e:
|
|
433
|
+
if e.message is None:
|
|
434
|
+
e.message = ""
|
|
411
435
|
if "Developer instruction is not enabled" in e.message:
|
|
412
436
|
logger.warning(
|
|
413
437
|
f"{self.get_model()} 不支持 system prompt,已自动去除(影响人格设置)"
|
|
@@ -432,11 +456,13 @@ class ProviderGoogleGenAI(Provider):
|
|
|
432
456
|
|
|
433
457
|
llm_response = LLMResponse("assistant")
|
|
434
458
|
llm_response.raw_completion = result
|
|
435
|
-
llm_response.result_chain = self._process_content_parts(
|
|
459
|
+
llm_response.result_chain = self._process_content_parts(
|
|
460
|
+
result.candidates[0], llm_response
|
|
461
|
+
)
|
|
436
462
|
return llm_response
|
|
437
463
|
|
|
438
464
|
async def _query_stream(
|
|
439
|
-
self, payloads: dict, tools:
|
|
465
|
+
self, payloads: dict, tools: ToolSet | None
|
|
440
466
|
) -> AsyncGenerator[LLMResponse, None]:
|
|
441
467
|
"""流式请求 Gemini API"""
|
|
442
468
|
system_instruction = next(
|
|
@@ -459,6 +485,8 @@ class ProviderGoogleGenAI(Provider):
|
|
|
459
485
|
)
|
|
460
486
|
break
|
|
461
487
|
except APIError as e:
|
|
488
|
+
if e.message is None:
|
|
489
|
+
e.message = ""
|
|
462
490
|
if "Developer instruction is not enabled" in e.message:
|
|
463
491
|
logger.warning(
|
|
464
492
|
f"{self.get_model()} 不支持 system prompt,已自动去除(影响人格设置)"
|
|
@@ -478,13 +506,20 @@ class ProviderGoogleGenAI(Provider):
|
|
|
478
506
|
async for chunk in result:
|
|
479
507
|
llm_response = LLMResponse("assistant", is_chunk=True)
|
|
480
508
|
|
|
509
|
+
if not chunk.candidates:
|
|
510
|
+
logger.warning(f"收到的 chunk 中 candidates 为空: {chunk}")
|
|
511
|
+
continue
|
|
512
|
+
if not chunk.candidates[0].content:
|
|
513
|
+
logger.warning(f"收到的 chunk 中 content 为空: {chunk}")
|
|
514
|
+
continue
|
|
515
|
+
|
|
481
516
|
if chunk.candidates[0].content.parts and any(
|
|
482
517
|
part.function_call for part in chunk.candidates[0].content.parts
|
|
483
518
|
):
|
|
484
519
|
llm_response = LLMResponse("assistant", is_chunk=False)
|
|
485
520
|
llm_response.raw_completion = chunk
|
|
486
521
|
llm_response.result_chain = self._process_content_parts(
|
|
487
|
-
chunk, llm_response
|
|
522
|
+
chunk.candidates[0], llm_response
|
|
488
523
|
)
|
|
489
524
|
yield llm_response
|
|
490
525
|
return
|
|
@@ -500,7 +535,7 @@ class ProviderGoogleGenAI(Provider):
|
|
|
500
535
|
final_response = LLMResponse("assistant", is_chunk=False)
|
|
501
536
|
final_response.raw_completion = chunk
|
|
502
537
|
final_response.result_chain = self._process_content_parts(
|
|
503
|
-
chunk, final_response
|
|
538
|
+
chunk.candidates[0], final_response
|
|
504
539
|
)
|
|
505
540
|
break
|
|
506
541
|
|
|
@@ -566,6 +601,8 @@ class ProviderGoogleGenAI(Provider):
|
|
|
566
601
|
continue
|
|
567
602
|
break
|
|
568
603
|
|
|
604
|
+
raise Exception("请求失败。")
|
|
605
|
+
|
|
569
606
|
async def text_chat_stream(
|
|
570
607
|
self,
|
|
571
608
|
prompt,
|
|
@@ -621,7 +658,9 @@ class ProviderGoogleGenAI(Provider):
|
|
|
621
658
|
return [
|
|
622
659
|
m.name.replace("models/", "")
|
|
623
660
|
for m in models
|
|
624
|
-
if
|
|
661
|
+
if m.supported_actions
|
|
662
|
+
and "generateContent" in m.supported_actions
|
|
663
|
+
and m.name
|
|
625
664
|
]
|
|
626
665
|
except APIError as e:
|
|
627
666
|
raise Exception(f"获取模型列表失败: {e.message}")
|
|
@@ -636,7 +675,7 @@ class ProviderGoogleGenAI(Provider):
|
|
|
636
675
|
self.chosen_api_key = key
|
|
637
676
|
self._init_client()
|
|
638
677
|
|
|
639
|
-
async def assemble_context(self, text: str, image_urls: list[str] = None):
|
|
678
|
+
async def assemble_context(self, text: str, image_urls: list[str] | None = None):
|
|
640
679
|
"""
|
|
641
680
|
组装上下文。
|
|
642
681
|
"""
|
|
@@ -100,9 +100,9 @@ class ProviderOpenAIOfficial(Provider):
|
|
|
100
100
|
del payloads[key]
|
|
101
101
|
|
|
102
102
|
model = payloads.get("model", "")
|
|
103
|
-
# 针对 qwen3 模型的特殊处理:非流式调用必须设置 enable_thinking=false
|
|
104
|
-
if "qwen3" in model.lower():
|
|
105
|
-
extra_body["enable_thinking"] = False
|
|
103
|
+
# 针对 qwen3 非 thinking 模型的特殊处理:非流式调用必须设置 enable_thinking=false
|
|
104
|
+
if "qwen3" in model.lower() and "thinking" not in model.lower():
|
|
105
|
+
extra_body["enable_thinking"] = False
|
|
106
106
|
# 针对 deepseek 模型的特殊处理:deepseek-reasoner调用必须移除 tools ,否则将被切换至 deepseek-chat
|
|
107
107
|
elif model == "deepseek-reasoner" and "tools" in payloads:
|
|
108
108
|
del payloads["tools"]
|
|
@@ -56,9 +56,7 @@ class AstrBotUpdator(RepoZipUpdator):
|
|
|
56
56
|
try:
|
|
57
57
|
if "astrbot" in os.path.basename(sys.argv[0]): # 兼容cli
|
|
58
58
|
if os.name == "nt":
|
|
59
|
-
args = [
|
|
60
|
-
f'"{arg}"' if " " in arg else arg for arg in sys.argv[1:]
|
|
61
|
-
]
|
|
59
|
+
args = [f'"{arg}"' if " " in arg else arg for arg in sys.argv[1:]]
|
|
62
60
|
else:
|
|
63
61
|
args = sys.argv[1:]
|
|
64
62
|
os.execl(sys.executable, py, "-m", "astrbot.cli.__main__", *args)
|
|
@@ -68,9 +66,13 @@ class AstrBotUpdator(RepoZipUpdator):
|
|
|
68
66
|
logger.error(f"重启失败({py}, {e}),请尝试手动重启。")
|
|
69
67
|
raise e
|
|
70
68
|
|
|
71
|
-
async def check_update(
|
|
69
|
+
async def check_update(
|
|
70
|
+
self, url: str, current_version: str, consider_prerelease: bool = True
|
|
71
|
+
) -> ReleaseInfo:
|
|
72
72
|
"""检查更新"""
|
|
73
|
-
return await super().check_update(
|
|
73
|
+
return await super().check_update(
|
|
74
|
+
self.ASTRBOT_RELEASE_API, VERSION, consider_prerelease
|
|
75
|
+
)
|
|
74
76
|
|
|
75
77
|
async def get_releases(self) -> list:
|
|
76
78
|
return await self.fetch_release_info(self.ASTRBOT_RELEASE_API)
|
|
@@ -227,7 +227,7 @@ async def download_dashboard(
|
|
|
227
227
|
path = os.path.join(get_astrbot_data_path(), "dashboard.zip")
|
|
228
228
|
|
|
229
229
|
if latest or len(str(version)) != 40:
|
|
230
|
-
logger.info("
|
|
230
|
+
logger.info(f"准备下载 {version} 发行版本的 AstrBot WebUI 文件")
|
|
231
231
|
ver_name = "latest" if latest else version
|
|
232
232
|
dashboard_release_url = f"https://astrbot-registry.soulter.top/download/astrbot-dashboard/{ver_name}/dist.zip"
|
|
233
233
|
try:
|