180 lines
21 KiB
Plaintext
180 lines
21 KiB
Plaintext
test_dify_direct_text_keeps_history (test_ai_context_audit.AIContextAuditTest.test_dify_direct_text_keeps_history) ... [AI] 检测到 Dify 接口,使用 chat-messages 协议
|
|
ok
|
|
test_dify_direct_vision_keeps_history_and_image (test_ai_context_audit.AIContextAuditTest.test_dify_direct_vision_keeps_history_and_image) ... ok
|
|
test_dify_generic_completion_preserves_judge_system_and_history (test_ai_context_audit.AIContextAuditTest.test_dify_generic_completion_preserves_judge_system_and_history) ... ok
|
|
test_dify_multimodal_omits_image_bytes_but_preserves_files (test_ai_context_audit.AIContextAuditTest.test_dify_multimodal_omits_image_bytes_but_preserves_files) ... ok
|
|
test_dify_shared_payload_preserves_system_knowledge_and_turns (test_ai_context_audit.AIContextAuditTest.test_dify_shared_payload_preserves_system_knowledge_and_turns) ... ok
|
|
test_dify_single_user_query_stays_unchanged (test_ai_context_audit.AIContextAuditTest.test_dify_single_user_query_stays_unchanged) ... ok
|
|
test_disabled_context_omits_history (test_ai_context_audit.AIContextAuditTest.test_disabled_context_omits_history) ... ok
|
|
test_gateway_customer_text_does_not_contain_image_data (test_ai_context_audit.AIContextAuditTest.test_gateway_customer_text_does_not_contain_image_data) ... ok
|
|
test_history_is_limited_to_recent_rounds (test_ai_context_audit.AIContextAuditTest.test_history_is_limited_to_recent_rounds) ... ok
|
|
test_invalid_round_limits_are_bounded_and_do_not_crash (test_ai_context_audit.AIContextAuditTest.test_invalid_round_limits_are_bounded_and_do_not_crash) ... ok
|
|
test_malformed_history_rows_do_not_break_reply (test_ai_context_audit.AIContextAuditTest.test_malformed_history_rows_do_not_break_reply) ... ok
|
|
test_mcp_tool_rounds_preserve_provider_history_and_tool_result (test_ai_context_audit.AIContextAuditTest.test_mcp_tool_rounds_preserve_provider_history_and_tool_result) ... [MCP] 已加载 1 个工具(服务器: audit)
|
|
[MCP] 调用工具 audit_lookup args={}
|
|
[MCP] 工具结果: 已查询:周六开放。
|
|
ok
|
|
test_mcp_without_tools_preserves_explicit_provider (test_ai_context_audit.AIContextAuditTest.test_mcp_without_tools_preserves_explicit_provider) ... [MCP] 未加载到任何工具,使用普通文本回复
|
|
ok
|
|
test_string_round_limit_from_local_settings_is_accepted (test_ai_context_audit.AIContextAuditTest.test_string_round_limit_from_local_settings_is_accepted) ... ok
|
|
test_text_history_does_not_mutate_or_leak_between_calls (test_ai_context_audit.AIContextAuditTest.test_text_history_does_not_mutate_or_leak_between_calls) ... ok
|
|
test_text_request_preserves_roles_order_and_selected_provider (test_ai_context_audit.AIContextAuditTest.test_text_request_preserves_roles_order_and_selected_provider) ... ok
|
|
test_vision_payload_keeps_history_for_openai_claude_gateway (test_ai_context_audit.AIContextAuditTest.test_vision_payload_keeps_history_for_openai_claude_gateway) ... ok
|
|
test_authentication_failure_is_not_retried (test_ai.ManualAIIsolationTest.test_authentication_failure_is_not_retried) ... ok
|
|
test_final_timeout_keeps_a_specific_chain_error (test_ai.ManualAIIsolationTest.test_final_timeout_keeps_a_specific_chain_error) ... [编排] 未配置模型网关,本次使用本机 ai_config 里的单模型设置。后台的「角色编排」不会生效。
|
|
[AI] 使用文本模式分析聊天记录...
|
|
[AI] [!] API 请求超时(已完成一次有界重试)
|
|
ok
|
|
test_manual_entrypoint_is_import_safe (test_ai.ManualAIIsolationTest.test_manual_entrypoint_is_import_safe) ... ok
|
|
test_transient_model_failure_is_retried_once (test_ai.ManualAIIsolationTest.test_transient_model_failure_is_retried_once) ... [AI链路] 测试模型网络瞬时失败,正在执行最后一次重试(Timeout)。
|
|
ok
|
|
test_a_broken_plan_degrades_instead_of_raising (test_model_router.BotPlanTest.test_a_broken_plan_degrades_instead_of_raising) ... ok
|
|
test_a_failed_report_never_breaks_the_reply (test_model_router.BotPlanTest.test_a_failed_report_never_breaks_the_reply) ... ok
|
|
test_backend_providers_with_real_keys_are_adopted (test_model_router.BotPlanTest.test_backend_providers_with_real_keys_are_adopted) ... ok
|
|
test_masked_backend_keys_are_not_usable_so_local_stays (test_model_router.BotPlanTest.test_masked_backend_keys_are_not_usable_so_local_stays) ... ok
|
|
test_no_backend_plan_uses_the_local_provider_alone (test_model_router.BotPlanTest.test_no_backend_plan_uses_the_local_provider_alone) ... ok
|
|
test_single_provider_without_judge_keeps_the_original_call_path (test_model_router.BotPlanTest.test_single_provider_without_judge_keeps_the_original_call_path)
|
|
没配多模型也没配裁判时,一点额外开销都不该引入。 ... ok
|
|
test_the_judge_verdict_is_kept_on_the_task_for_audit (test_model_router.BotPlanTest.test_the_judge_verdict_is_kept_on_the_task_for_audit) ... ok
|
|
test_the_local_provider_can_serve_as_judge_when_enabled (test_model_router.BotPlanTest.test_the_local_provider_can_serve_as_judge_when_enabled) ... ok
|
|
test_adjacent_same_role_turns_are_merged (test_model_router.ClaudeShapeTest.test_adjacent_same_role_turns_are_merged) ... ok
|
|
test_an_empty_conversation_still_produces_a_valid_body (test_model_router.ClaudeShapeTest.test_an_empty_conversation_still_produces_a_valid_body) ... ok
|
|
test_images_become_base64_source_blocks (test_model_router.ClaudeShapeTest.test_images_become_base64_source_blocks) ... ok
|
|
test_max_tokens_is_always_sent (test_model_router.ClaudeShapeTest.test_max_tokens_is_always_sent) ... ok
|
|
test_system_is_lifted_out_of_the_message_list (test_model_router.ClaudeShapeTest.test_system_is_lifted_out_of_the_message_list) ... ok
|
|
test_the_first_turn_must_be_user (test_model_router.ClaudeShapeTest.test_the_first_turn_must_be_user) ... ok
|
|
test_a_gateway_failure_is_raised_not_swallowed (test_model_router.GatewayAsProviderTest.test_a_gateway_failure_is_raised_not_swallowed)
|
|
网关挂了必须报出来。 ... ok
|
|
test_a_gateway_provider_is_never_mistaken_for_an_openai_endpoint (test_model_router.GatewayAsProviderTest.test_a_gateway_provider_is_never_mistaken_for_an_openai_endpoint)
|
|
`detect_kind` 认不出 gateway,会按地址猜成 openai。 ... ok
|
|
test_a_normal_reply_is_tagged_as_a_customer_chat (test_model_router.GatewayAsProviderTest.test_a_normal_reply_is_tagged_as_a_customer_chat) ... ok
|
|
test_a_plain_reply_goes_through_the_gateway (test_model_router.GatewayAsProviderTest.test_a_plain_reply_goes_through_the_gateway) ... ok
|
|
test_a_reply_without_tool_calls_omits_the_field (test_model_router.GatewayAsProviderTest.test_a_reply_without_tool_calls_omits_the_field)
|
|
没有工具调用时不要塞一个空的 tool_calls。 ... ok
|
|
test_an_empty_reply_reports_the_upstream_error (test_model_router.GatewayAsProviderTest.test_an_empty_reply_reports_the_upstream_error)
|
|
网关返回空回复时,把候选里的错误原因翻出来——"没有回复"没法排查。 ... ok
|
|
test_an_http_error_surfaces_the_gateway_reason (test_model_router.GatewayAsProviderTest.test_an_http_error_surfaces_the_gateway_reason) ... ok
|
|
test_the_call_carries_a_device_id_and_a_fresh_task_id (test_model_router.GatewayAsProviderTest.test_the_call_carries_a_device_id_and_a_fresh_task_id)
|
|
网关落库的那一行要能对上桌面端后来补报的审核原因——两边靠同一个 task_id 关联。 ... ok
|
|
test_the_full_message_list_reaches_the_gateway (test_model_router.GatewayAsProviderTest.test_the_full_message_list_reaches_the_gateway)
|
|
系统提示词和历史必须一起送过去。 ... ok
|
|
test_the_orchestration_trace_rides_along (test_model_router.GatewayAsProviderTest.test_the_orchestration_trace_rides_along)
|
|
选了谁、裁判打了多少分——这些要能落进队列记录,出事时得解释得清。 ... ok
|
|
test_the_vision_classifier_is_tagged_as_an_internal_guard_call (test_model_router.GatewayAsProviderTest.test_the_vision_classifier_is_tagged_as_an_internal_guard_call)
|
|
界面识别不是"发给客户的话",必须打上 guard。 ... ok
|
|
test_tool_calls_come_back_intact_for_the_mcp_loop (test_model_router.GatewayAsProviderTest.test_tool_calls_come_back_intact_for_the_mcp_loop)
|
|
MCP 多轮靠 tool_calls 驱动。丢了它,模型说"我要查一下"就变成一句空回复。 ... ok
|
|
test_two_separate_calls_never_reuse_the_same_task_id (test_model_router.GatewayAsProviderTest.test_two_separate_calls_never_reuse_the_same_task_id) ... ok
|
|
test_vision_goes_through_the_gateway_too (test_model_router.GatewayAsProviderTest.test_vision_goes_through_the_gateway_too)
|
|
图片识别同样没有第二条路——密钥在后端。 ... ok
|
|
test_a_configured_gateway_wins_over_the_local_single_model (test_model_router.GatewayPreferenceTest.test_a_configured_gateway_wins_over_the_local_single_model) ... ok
|
|
test_a_disabled_gateway_is_ignored (test_model_router.GatewayPreferenceTest.test_a_disabled_gateway_is_ignored) ... ok
|
|
test_a_gateway_without_a_url_is_ignored (test_model_router.GatewayPreferenceTest.test_a_gateway_without_a_url_is_ignored)
|
|
开关开着但地址没填——这种半配好的状态不能当成"已启用"。 ... ok
|
|
test_falling_back_to_the_local_model_says_so_out_loud (test_model_router.GatewayPreferenceTest.test_falling_back_to_the_local_model_says_so_out_loud)
|
|
静悄悄地用一份和后台对不上的配置,比直接报错更难查。 ... ok
|
|
test_the_gateway_uses_the_desktop_login_token (test_model_router.GatewayPreferenceTest.test_the_gateway_uses_the_desktop_login_token) ... ok
|
|
test_a_referenced_model_cannot_be_deleted (test_model_router.ModelCatalogTest.test_a_referenced_model_cannot_be_deleted) ... ok
|
|
test_an_unreferenced_model_can_be_deleted (test_model_router.ModelCatalogTest.test_an_unreferenced_model_can_be_deleted) ... ok
|
|
test_an_unsupported_kind_is_rejected (test_model_router.ModelCatalogTest.test_an_unsupported_kind_is_rejected) ... ok
|
|
test_call_logging_never_raises_into_the_reply_path (test_model_router.ModelCatalogTest.test_call_logging_never_raises_into_the_reply_path) ... ok
|
|
test_keys_are_encrypted_at_rest (test_model_router.ModelCatalogTest.test_keys_are_encrypted_at_rest) ... ok
|
|
test_roles_are_versioned_so_a_rollback_is_just_an_older_version (test_model_router.ModelCatalogTest.test_roles_are_versioned_so_a_rollback_is_just_an_older_version) ... ok
|
|
test_roles_reject_an_unknown_judge_mode (test_model_router.ModelCatalogTest.test_roles_reject_an_unknown_judge_mode) ... ok
|
|
test_roles_reject_unknown_models_and_empty_answers (test_model_router.ModelCatalogTest.test_roles_reject_unknown_models_and_empty_answers) ... ok
|
|
test_saving_without_a_key_keeps_the_existing_one (test_model_router.ModelCatalogTest.test_saving_without_a_key_keeps_the_existing_one) ... ok
|
|
test_secrets_are_available_only_on_explicit_request (test_model_router.ModelCatalogTest.test_secrets_are_available_only_on_explicit_request) ... ok
|
|
test_the_catalog_rides_along_with_the_config_push (test_model_router.ModelCatalogTest.test_the_catalog_rides_along_with_the_config_push) ... ok
|
|
test_the_listing_never_returns_a_plaintext_key (test_model_router.ModelCatalogTest.test_the_listing_never_returns_a_plaintext_key) ... ok
|
|
test_a_blank_reply_counts_as_a_failure (test_model_router.OrchestrationTest.test_a_blank_reply_counts_as_a_failure) ... ok
|
|
test_a_dead_judge_falls_back_to_the_primary (test_model_router.OrchestrationTest.test_a_dead_judge_falls_back_to_the_primary) ... ok
|
|
test_all_dead_returns_empty_rather_than_a_canned_line (test_model_router.OrchestrationTest.test_all_dead_returns_empty_rather_than_a_canned_line) ... ok
|
|
test_an_unknown_mode_degrades_to_shadow (test_model_router.OrchestrationTest.test_an_unknown_mode_degrades_to_shadow) ... ok
|
|
test_arbitrate_mode_sends_the_winner (test_model_router.OrchestrationTest.test_arbitrate_mode_sends_the_winner) ... ok
|
|
test_candidates_are_asked_in_parallel_not_one_after_another (test_model_router.OrchestrationTest.test_candidates_are_asked_in_parallel_not_one_after_another) ... ok
|
|
test_every_candidate_is_recorded_for_audit (test_model_router.OrchestrationTest.test_every_candidate_is_recorded_for_audit) ... ok
|
|
test_no_provider_configured_falls_back_to_the_global_one (test_model_router.OrchestrationTest.test_no_provider_configured_falls_back_to_the_global_one) ... ok
|
|
test_one_dead_candidate_still_answers (test_model_router.OrchestrationTest.test_one_dead_candidate_still_answers) ... ok
|
|
test_score_only_mode_also_keeps_the_primary_reply (test_model_router.OrchestrationTest.test_score_only_mode_also_keeps_the_primary_reply) ... ok
|
|
test_shadow_mode_does_not_make_the_customer_wait_for_the_judge (test_model_router.OrchestrationTest.test_shadow_mode_does_not_make_the_customer_wait_for_the_judge)
|
|
影子模式下评审结果不改变任何东西,就绝不该挡在回复路径上。 ... ok
|
|
test_shadow_mode_never_changes_what_gets_sent (test_model_router.OrchestrationTest.test_shadow_mode_never_changes_what_gets_sent) ... ok
|
|
test_the_shadow_judge_never_delays_process_exit (test_model_router.OrchestrationTest.test_the_shadow_judge_never_delays_process_exit) ... ok
|
|
test_the_shadow_verdict_arrives_through_the_callback (test_model_router.OrchestrationTest.test_the_shadow_verdict_arrives_through_the_callback) ... ok
|
|
test_unparseable_judgement_falls_back_to_the_primary (test_model_router.OrchestrationTest.test_unparseable_judgement_falls_back_to_the_primary) ... ok
|
|
test_a_pinned_url_is_never_rewritten (test_model_router.PinnedServerUrlTest.test_a_pinned_url_is_never_rewritten) ... ok
|
|
test_an_unpinned_local_url_still_follows_the_discovered_port (test_model_router.PinnedServerUrlTest.test_an_unpinned_local_url_still_follows_the_discovered_port) ... ok
|
|
test_login_pins_the_url_it_was_given (test_model_router.PinnedServerUrlTest.test_login_pins_the_url_it_was_given) ... ok
|
|
test_an_explicit_provider_never_reads_globals (test_model_router.ProviderResolutionTest.test_an_explicit_provider_never_reads_globals) ... ok
|
|
test_claude_uses_its_own_auth_headers (test_model_router.ProviderResolutionTest.test_claude_uses_its_own_auth_headers) ... ok
|
|
test_each_kind_lands_on_its_own_endpoint (test_model_router.ProviderResolutionTest.test_each_kind_lands_on_its_own_endpoint) ... ok
|
|
test_kind_is_detected_from_the_url_when_not_declared (test_model_router.ProviderResolutionTest.test_kind_is_detected_from_the_url_when_not_declared) ... ok
|
|
test_none_falls_back_to_the_global_config (test_model_router.ProviderResolutionTest.test_none_falls_back_to_the_global_config) ... ok
|
|
test_other_kinds_keep_bearer_auth (test_model_router.ProviderResolutionTest.test_other_kinds_keep_bearer_auth) ... ok
|
|
test_provider_is_immutable_so_threads_cannot_corrupt_it (test_model_router.ProviderResolutionTest.test_provider_is_immutable_so_threads_cannot_corrupt_it) ... ok
|
|
test_a_disabled_model_is_skipped_not_fatal (test_model_router.RolesResolutionTest.test_a_disabled_model_is_skipped_not_fatal) ... ok
|
|
test_a_missing_model_degrades_instead_of_breaking_everything (test_model_router.RolesResolutionTest.test_a_missing_model_degrades_instead_of_breaking_everything) ... ok
|
|
test_an_unknown_judge_mode_degrades_to_shadow (test_model_router.RolesResolutionTest.test_an_unknown_judge_mode_degrades_to_shadow) ... ok
|
|
test_builds_answer_providers_and_judge (test_model_router.RolesResolutionTest.test_builds_answer_providers_and_judge) ... ok
|
|
test_comfyui_can_never_be_an_answering_candidate (test_model_router.RolesResolutionTest.test_comfyui_can_never_be_an_answering_candidate) ... ok
|
|
test_a_tampered_ciphertext_raises_instead_of_returning_garbage (test_model_router.SecretBoxTest.test_a_tampered_ciphertext_raises_instead_of_returning_garbage) ... ok
|
|
test_a_wrong_master_key_cannot_decrypt (test_model_router.SecretBoxTest.test_a_wrong_master_key_cannot_decrypt) ... ok
|
|
test_empty_stays_empty (test_model_router.SecretBoxTest.test_empty_stays_empty) ... ok
|
|
test_mask_never_shows_the_whole_key (test_model_router.SecretBoxTest.test_mask_never_shows_the_whole_key) ... ok
|
|
test_round_trip (test_model_router.SecretBoxTest.test_round_trip) ... ok
|
|
test_the_key_is_stable_across_calls (test_model_router.SecretBoxTest.test_the_key_is_stable_across_calls) ... ok
|
|
test_every_documented_key_is_declared_in_the_defaults (test_model_router.SettingsPersistenceTest.test_every_documented_key_is_declared_in_the_defaults)
|
|
新增配置项必须同时加进 default_settings(),否则读写都是空转。 ... ok
|
|
test_the_cached_model_plan_survives_a_round_trip (test_model_router.SettingsPersistenceTest.test_the_cached_model_plan_survives_a_round_trip) ... ok
|
|
test_the_device_id_is_generated_once_and_kept (test_model_router.SettingsPersistenceTest.test_the_device_id_is_generated_once_and_kept) ... ok
|
|
test_the_gateway_config_survives_a_round_trip (test_model_router.SettingsPersistenceTest.test_the_gateway_config_survives_a_round_trip) ... ok
|
|
test_a_non_json_answer_is_unusable (test_model_router.VerdictParsingTest.test_a_non_json_answer_is_unusable) ... ok
|
|
test_an_unknown_winner_is_unusable (test_model_router.VerdictParsingTest.test_an_unknown_winner_is_unusable) ... ok
|
|
test_reads_winner_score_and_risk (test_model_router.VerdictParsingTest.test_reads_winner_score_and_risk) ... ok
|
|
test_score_is_clamped_and_junk_risk_becomes_unknown (test_model_router.VerdictParsingTest.test_score_is_clamped_and_junk_risk_becomes_unknown) ... ok
|
|
test_normal_reply_is_untouched (test_agent_rules.BuiltinRepair.test_normal_reply_is_untouched) ... ok
|
|
test_pure_number_gets_a_human_answer (test_agent_rules.BuiltinRepair.test_pure_number_gets_a_human_answer) ... ok
|
|
test_untranscribed_voice_reply_is_left_alone (test_agent_rules.BuiltinRepair.test_untranscribed_voice_reply_is_left_alone)
|
|
真的没听清语音时说自己没听清是对的,这条路不能被误伤。 ... ok
|
|
test_visible_text_is_quoted_back (test_agent_rules.BuiltinRepair.test_visible_text_is_quoted_back) ... ok
|
|
test_hit_returns_the_exact_wording (test_agent_rules.CannedReplies.test_hit_returns_the_exact_wording) ... ok
|
|
test_media_turn_never_uses_a_canned_reply (test_agent_rules.CannedReplies.test_media_turn_never_uses_a_canned_reply)
|
|
媒体消息要走视觉链路,用固定话术顶掉会让归档丢掉媒体出处。 ... ok
|
|
test_broken_agent_config_does_not_break_replies (test_agent_rules.ChatIntegration.test_broken_agent_config_does_not_break_replies)
|
|
规则层抛异常时必须照常把这条回复发出去,不能整条链路停摆。 ... [智能体] [!] 规则校验失败,按原回复处理: boom
|
|
ok
|
|
test_dify_query_also_carries_the_agent_sections (test_agent_rules.ChatIntegration.test_dify_query_also_carries_the_agent_sections)
|
|
Dify 部署不发 system 消息,规则拼进 query——漏了这条角色就静默失效。 ... ok
|
|
test_finalize_reply_blocks_the_encoding_excuse (test_agent_rules.ChatIntegration.test_finalize_reply_blocks_the_encoding_excuse) ... [智能体] 回复命中「健康顾问·不许把客户的话说成乱码」禁止措辞:系统编码
|
|
ok
|
|
test_number_only_turn_gets_its_own_instruction (test_agent_rules.ChatIntegration.test_number_only_turn_gets_its_own_instruction) ... ok
|
|
test_system_prompt_appends_agent_sections (test_agent_rules.ChatIntegration.test_system_prompt_appends_agent_sections) ... ok
|
|
test_garbage_shapes_are_dropped (test_agent_rules.DirtyConfig.test_garbage_shapes_are_dropped) ... ok
|
|
test_plan_accepts_a_comma_string (test_agent_rules.DirtyConfig.test_plan_accepts_a_comma_string) ... ok
|
|
test_unknown_mode_degrades_to_single (test_agent_rules.DirtyConfig.test_unknown_mode_degrades_to_single) ... ok
|
|
test_collaborating_agents_all_enforce (test_agent_rules.ForbidRules.test_collaborating_agents_all_enforce)
|
|
协作时非主答角色的禁止措辞一样要拦得住,否则协作只是换了个提示词。 ... [智能体] 回复命中「客户经理·不许把客户的话说成乱码」禁止措辞:系统编码
|
|
ok
|
|
test_custom_fallback_wins (test_agent_rules.ForbidRules.test_custom_fallback_wins) ... [智能体] 回复命中「健康顾问·不许把客户的话说成乱码」禁止措辞:系统编码
|
|
ok
|
|
test_empty_fallback_falls_through_to_builtin (test_agent_rules.ForbidRules.test_empty_fallback_falls_through_to_builtin) ... [智能体] 回复命中「健康顾问·不许把客户的话说成乱码」禁止措辞:系统编码
|
|
ok
|
|
test_disabled_rule_is_ignored (test_agent_rules.GuideRules.test_disabled_rule_is_ignored) ... ok
|
|
test_keyworded_guide_only_on_hit (test_agent_rules.GuideRules.test_keyworded_guide_only_on_hit)
|
|
带关键词的规则不能每轮都塞——提示词越长模型越不听话。 ... ok
|
|
test_keywordless_guide_is_always_injected (test_agent_rules.GuideRules.test_keywordless_guide_is_always_injected) ... ok
|
|
test_prompt_is_untouched (test_agent_rules.NoAgentsConfigured.test_prompt_is_untouched) ... ok
|
|
test_reply_still_gets_the_builtin_guard (test_agent_rules.NoAgentsConfigured.test_reply_still_gets_the_builtin_guard)
|
|
内置兜底不依赖配置:一个智能体都没有时照样拦。 ... ok
|
|
test_disabled_agents_never_go_on_duty (test_agent_rules.Switching.test_disabled_agents_never_go_on_duty) ... ok
|
|
test_primary_is_ordered_first_in_collaboration (test_agent_rules.Switching.test_primary_is_ordered_first_in_collaboration) ... ok
|
|
test_single_mode_falls_back_when_the_choice_is_gone (test_agent_rules.Switching.test_single_mode_falls_back_when_the_choice_is_gone)
|
|
切到一个已经被删掉的角色,不能落得一个角色都不上岗。 ... ok
|
|
test_single_mode_puts_one_agent_on_duty (test_agent_rules.Switching.test_single_mode_puts_one_agent_on_duty) ... ok
|
|
test_topic_keywords_decide_who_answers (test_agent_rules.Switching.test_topic_keywords_decide_who_answers) ... ok
|
|
|
|
----------------------------------------------------------------------
|
|
Ran 137 tests in 6.859s
|
|
|
|
OK
|