rasa-pro 3.11.5__py3-none-any.whl → 3.12.0__py3-none-any.whl
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.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- README.md +10 -13
- rasa/__main__.py +7 -7
- rasa/anonymization/anonymisation_rule_yaml_reader.py +1 -1
- rasa/anonymization/anonymization_pipeline.py +3 -3
- rasa/anonymization/anonymization_rule_executor.py +17 -11
- rasa/anonymization/anonymization_rule_orchestrator.py +2 -3
- rasa/cli/arguments/data.py +2 -2
- rasa/cli/arguments/default_arguments.py +1 -1
- rasa/cli/arguments/evaluate.py +2 -1
- rasa/cli/arguments/interactive.py +1 -1
- rasa/cli/arguments/run.py +1 -1
- rasa/cli/arguments/test.py +7 -5
- rasa/cli/arguments/train.py +3 -3
- rasa/cli/arguments/visualize.py +2 -2
- rasa/cli/arguments/x.py +1 -0
- rasa/cli/data.py +20 -3
- rasa/cli/dialogue_understanding_test.py +386 -0
- rasa/cli/evaluate.py +1 -1
- rasa/cli/export.py +6 -6
- rasa/cli/inspect.py +20 -1
- rasa/cli/interactive.py +4 -5
- rasa/cli/llm_fine_tuning.py +51 -16
- rasa/cli/markers.py +1 -2
- rasa/cli/project_templates/calm/actions/add_contact.py +1 -1
- rasa/cli/project_templates/calm/config.yml +2 -2
- rasa/cli/project_templates/calm/domain/list_contacts.yml +1 -2
- rasa/cli/project_templates/calm/domain/remove_contact.yml +1 -2
- rasa/cli/project_templates/calm/domain/shared.yml +1 -4
- rasa/cli/project_templates/calm/endpoints.yml +2 -2
- rasa/cli/project_templates/tutorial/actions/actions.py +3 -2
- rasa/cli/shell.py +5 -6
- rasa/cli/studio/download.py +1 -2
- rasa/cli/studio/studio.py +2 -3
- rasa/cli/studio/train.py +0 -1
- rasa/cli/telemetry.py +2 -2
- rasa/cli/test.py +11 -11
- rasa/cli/train.py +3 -0
- rasa/cli/utils.py +25 -5
- rasa/constants.py +0 -1
- rasa/core/__init__.py +0 -1
- rasa/core/actions/action.py +135 -208
- rasa/core/actions/action_handle_digressions.py +164 -0
- rasa/core/actions/action_hangup.py +1 -1
- rasa/core/actions/action_repeat_bot_messages.py +2 -2
- rasa/core/actions/action_run_slot_rejections.py +18 -6
- rasa/core/actions/action_trigger_chitchat.py +1 -1
- rasa/core/actions/action_trigger_flow.py +5 -5
- rasa/core/actions/action_trigger_search.py +1 -1
- rasa/core/actions/custom_action_executor.py +1 -1
- rasa/core/actions/direct_custom_actions_executor.py +1 -0
- rasa/core/actions/forms.py +22 -15
- rasa/core/actions/http_custom_action_executor.py +8 -1
- rasa/core/actions/loops.py +3 -3
- rasa/core/actions/two_stage_fallback.py +13 -13
- rasa/core/auth_retry_tracker_store.py +1 -2
- rasa/core/brokers/broker.py +2 -1
- rasa/core/brokers/file.py +1 -1
- rasa/core/brokers/kafka.py +8 -8
- rasa/core/brokers/pika.py +8 -9
- rasa/core/brokers/sql.py +4 -3
- rasa/core/channels/__init__.py +7 -0
- rasa/core/channels/botframework.py +2 -2
- rasa/core/channels/callback.py +4 -4
- rasa/core/channels/channel.py +11 -11
- rasa/core/channels/console.py +0 -1
- rasa/core/channels/development_inspector.py +80 -24
- rasa/core/channels/facebook.py +5 -5
- rasa/core/channels/hangouts.py +7 -8
- rasa/core/channels/inspector/dist/assets/{arc-f0f8bd46.js → arc-9f1365dc.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-7162c77d.js → blockDiagram-38ab4fdb-e0f81b12.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-b1d0d098.js → c4Diagram-3d4e48cf-9deaee1c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-44956714.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-807a1b27.js → classDiagram-70f12bd4-20450a96.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-5238dcdb.js → classDiagram-v2-f2320105-749d2abf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-a9475142.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-75dfaa67.js → createText-2e5e7dd3-bef0b38c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-df20501d.js → edges-e0da2a9e-943801a7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-13cf4797.js → erDiagram-9861fffd-d523a948.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-a4991264.js → flowDb-956e92f1-54e4cf19.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-ccecf773.js → flowDiagram-66a62f08-48bfbbe8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-43fa749a.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-b5801783.js → flowchart-elk-definition-4a651766-17c30827.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-161e079a.js → ganttDiagram-c361ad54-43086f2d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-f38e86a4.js → gitGraphDiagram-72cf32ee-5c8b693e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-be6ef5d8.js → graph-41a90d26.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-d9ce8994.js → index-3862675e-b43eeae9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-7794b245.js → index-e8affe45.js} +155 -155
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-5000a3dc.js → infoDiagram-f8f76790-0b20676b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-8ef0a17a.js → journeyDiagram-49397b02-39bce7b5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-d649bc98.js → layout-dc8eeea4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-95add810.js → line-c4d2e756.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-f6025094.js → linear-86f6f2d9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-2e8531c4.js → mindmap-definition-fc14e90a-4216f771.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-918adfdb.js → pieDiagram-8a3498a8-1a0cfa96.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-cbd01797.js → quadrantDiagram-120e2f19-f91e67cf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-6a8b877b.js → requirementDiagram-deff3bca-d4046bed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-c377c3fe.js → sankeyDiagram-04a897e0-2cf6d1d7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-ab9e9b7f.js → sequenceDiagram-704730f1-751ac4f5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-5e6ae67d.js → stateDiagram-587899a1-f734f4d4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-40643476.js → stateDiagram-v2-d93cdb3a-91c65710.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-afb8d108.js → styles-6aaf32cf-e0cff7be.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-7edc9423.js → styles-9a916d00-c8029e5d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-c1d8f7e9.js → styles-c10674c1-114f312a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-f494b2ef.js → svgDrawCommon-08f97a94-b7b9dc00.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-11c7cdd0.js → timeline-definition-85554ec2-9536d189.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-3f191ec1.js → xychartDiagram-e933f94c-bf3b0f36.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +1 -0
- rasa/core/channels/inspector/src/App.tsx +15 -2
- rasa/core/channels/inspector/src/components/RasaLogo.tsx +31 -0
- rasa/core/channels/inspector/src/components/RecruitmentPanel.tsx +68 -0
- rasa/core/channels/inspector/src/components/Welcome.tsx +19 -13
- rasa/core/channels/inspector/yarn.lock +5 -0
- rasa/core/channels/mattermost.py +4 -4
- rasa/core/channels/rasa_chat.py +4 -4
- rasa/core/channels/rest.py +11 -12
- rasa/core/channels/rocketchat.py +4 -3
- rasa/core/channels/slack.py +6 -5
- rasa/core/channels/socketio.py +8 -28
- rasa/core/channels/studio_chat.py +212 -0
- rasa/core/channels/telegram.py +105 -55
- rasa/core/channels/twilio.py +3 -3
- rasa/core/channels/vier_cvg.py +2 -2
- rasa/core/channels/voice_ready/audiocodes.py +9 -9
- rasa/core/channels/voice_ready/jambonz.py +5 -5
- rasa/core/channels/voice_ready/jambonz_protocol.py +3 -4
- rasa/core/channels/voice_ready/twilio_voice.py +9 -8
- rasa/core/channels/voice_ready/utils.py +2 -2
- rasa/core/channels/voice_stream/asr/asr_engine.py +12 -6
- rasa/core/channels/voice_stream/asr/asr_event.py +5 -0
- rasa/core/channels/voice_stream/asr/azure.py +16 -3
- rasa/core/channels/voice_stream/asr/deepgram.py +76 -19
- rasa/core/channels/voice_stream/audiocodes.py +292 -0
- rasa/core/channels/voice_stream/browser_audio.py +14 -7
- rasa/core/channels/voice_stream/call_state.py +6 -2
- rasa/core/channels/voice_stream/genesys.py +320 -0
- rasa/core/channels/voice_stream/tts/azure.py +13 -5
- rasa/core/channels/voice_stream/tts/cartesia.py +34 -14
- rasa/core/channels/voice_stream/tts/tts_cache.py +3 -2
- rasa/core/channels/voice_stream/tts/tts_engine.py +1 -1
- rasa/core/channels/voice_stream/twilio_media_streams.py +12 -8
- rasa/core/channels/voice_stream/util.py +1 -1
- rasa/core/channels/voice_stream/voice_channel.py +100 -56
- rasa/core/channels/webexteams.py +3 -4
- rasa/core/constants.py +2 -0
- rasa/core/evaluation/marker.py +7 -6
- rasa/core/evaluation/marker_base.py +15 -16
- rasa/core/evaluation/marker_stats.py +3 -4
- rasa/core/evaluation/marker_tracker_loader.py +5 -4
- rasa/core/exporter.py +4 -4
- rasa/core/featurizers/precomputation.py +8 -8
- rasa/core/featurizers/single_state_featurizer.py +7 -7
- rasa/core/featurizers/tracker_featurizers.py +13 -13
- rasa/core/http_interpreter.py +3 -4
- rasa/core/information_retrieval/__init__.py +1 -1
- rasa/core/information_retrieval/faiss.py +4 -4
- rasa/core/information_retrieval/information_retrieval.py +2 -2
- rasa/core/information_retrieval/milvus.py +3 -3
- rasa/core/information_retrieval/qdrant.py +3 -3
- rasa/core/jobs.py +1 -0
- rasa/core/lock.py +2 -3
- rasa/core/lock_store.py +3 -3
- rasa/core/migrate.py +12 -9
- rasa/core/nlg/__init__.py +1 -1
- rasa/core/nlg/callback.py +2 -3
- rasa/core/nlg/contextual_response_rephraser.py +82 -14
- rasa/core/nlg/generator.py +85 -17
- rasa/core/nlg/interpolator.py +4 -3
- rasa/core/nlg/response.py +9 -7
- rasa/core/nlg/summarize.py +1 -0
- rasa/core/nlg/translate.py +55 -0
- rasa/core/persistor.py +3 -3
- rasa/core/policies/ensemble.py +10 -9
- rasa/core/policies/enterprise_search_policy.py +87 -21
- rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2 +1 -1
- rasa/core/policies/flow_policy.py +13 -14
- rasa/core/policies/flows/flow_executor.py +85 -55
- rasa/core/policies/intentless_policy.py +6 -7
- rasa/core/policies/memoization.py +22 -20
- rasa/core/policies/policy.py +24 -22
- rasa/core/policies/rule_policy.py +37 -36
- rasa/core/policies/ted_policy.py +87 -85
- rasa/core/policies/unexpected_intent_policy.py +77 -75
- rasa/core/processor.py +167 -74
- rasa/core/run.py +5 -4
- rasa/core/secrets_manager/endpoints.py +2 -3
- rasa/core/secrets_manager/factory.py +2 -3
- rasa/core/secrets_manager/secret_manager.py +2 -3
- rasa/core/secrets_manager/vault.py +2 -2
- rasa/core/test.py +30 -30
- rasa/core/tracker_store.py +138 -49
- rasa/core/train.py +1 -1
- rasa/core/training/__init__.py +2 -2
- rasa/core/training/converters/responses_prefix_converter.py +1 -2
- rasa/core/training/interactive.py +13 -13
- rasa/core/training/story_conflict.py +4 -5
- rasa/core/training/training.py +3 -5
- rasa/core/utils.py +5 -5
- rasa/core/visualize.py +1 -1
- rasa/dialogue_understanding/coexistence/intent_based_router.py +2 -2
- rasa/dialogue_understanding/coexistence/llm_based_router.py +5 -5
- rasa/dialogue_understanding/commands/__init__.py +22 -22
- rasa/dialogue_understanding/commands/can_not_handle_command.py +38 -1
- rasa/dialogue_understanding/commands/cancel_flow_command.py +96 -9
- rasa/dialogue_understanding/commands/change_flow_command.py +36 -2
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +36 -4
- rasa/dialogue_understanding/commands/clarify_command.py +46 -4
- rasa/dialogue_understanding/commands/command.py +3 -2
- rasa/dialogue_understanding/commands/command_syntax_manager.py +55 -0
- rasa/dialogue_understanding/commands/correct_slots_command.py +14 -5
- rasa/dialogue_understanding/commands/error_command.py +1 -1
- rasa/dialogue_understanding/commands/free_form_answer_command.py +2 -1
- rasa/dialogue_understanding/commands/handle_code_change_command.py +2 -2
- rasa/dialogue_understanding/commands/handle_digressions_command.py +144 -0
- rasa/dialogue_understanding/commands/human_handoff_command.py +34 -4
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +36 -4
- rasa/dialogue_understanding/commands/noop_command.py +2 -1
- rasa/dialogue_understanding/commands/prompt_command.py +94 -0
- rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +34 -4
- rasa/dialogue_understanding/commands/restart_command.py +2 -5
- rasa/dialogue_understanding/commands/session_end_command.py +3 -5
- rasa/dialogue_understanding/commands/session_start_command.py +3 -5
- rasa/dialogue_understanding/commands/set_slot_command.py +55 -16
- rasa/dialogue_understanding/commands/skip_question_command.py +34 -4
- rasa/dialogue_understanding/commands/start_flow_command.py +78 -2
- rasa/dialogue_understanding/commands/user_silence_command.py +3 -5
- rasa/dialogue_understanding/commands/utils.py +126 -43
- rasa/dialogue_understanding/constants.py +2 -0
- rasa/dialogue_understanding/generator/__init__.py +2 -0
- rasa/dialogue_understanding/generator/command_generator.py +120 -79
- rasa/dialogue_understanding/generator/command_parser.py +245 -0
- rasa/dialogue_understanding/generator/constants.py +12 -4
- rasa/dialogue_understanding/generator/flow_retrieval.py +7 -7
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +187 -59
- rasa/dialogue_understanding/generator/llm_command_generator.py +6 -3
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +106 -110
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +53 -11
- rasa/dialogue_understanding/generator/prompt_templates/__init__.py +0 -0
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +58 -0
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +57 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +574 -0
- rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +41 -386
- rasa/dialogue_understanding/generator/utils.py +76 -0
- rasa/dialogue_understanding/patterns/cancel.py +2 -1
- rasa/dialogue_understanding/patterns/cannot_handle.py +1 -0
- rasa/dialogue_understanding/patterns/chitchat.py +1 -1
- rasa/dialogue_understanding/patterns/clarify.py +2 -1
- rasa/dialogue_understanding/patterns/code_change.py +2 -0
- rasa/dialogue_understanding/patterns/collect_information.py +7 -4
- rasa/dialogue_understanding/patterns/completed.py +1 -1
- rasa/dialogue_understanding/patterns/continue_interrupted.py +1 -1
- rasa/dialogue_understanding/patterns/correction.py +17 -3
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +78 -2
- rasa/dialogue_understanding/patterns/handle_digressions.py +81 -0
- rasa/dialogue_understanding/patterns/human_handoff.py +1 -1
- rasa/dialogue_understanding/patterns/internal_error.py +1 -0
- rasa/dialogue_understanding/patterns/search.py +1 -1
- rasa/dialogue_understanding/patterns/session_start.py +1 -1
- rasa/dialogue_understanding/patterns/skip_question.py +1 -0
- rasa/dialogue_understanding/patterns/user_silence.py +1 -1
- rasa/dialogue_understanding/patterns/validate_slot.py +65 -0
- rasa/dialogue_understanding/processor/command_processor.py +193 -43
- rasa/dialogue_understanding/processor/command_processor_component.py +1 -1
- rasa/dialogue_understanding/stack/dialogue_stack.py +4 -3
- rasa/dialogue_understanding/stack/frames/__init__.py +2 -2
- rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +4 -1
- rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +2 -3
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +5 -2
- rasa/dialogue_understanding/stack/frames/search_frame.py +4 -1
- rasa/dialogue_understanding/stack/utils.py +56 -10
- rasa/dialogue_understanding/utils.py +164 -0
- rasa/dialogue_understanding_test/README.md +429 -0
- rasa/dialogue_understanding_test/__init__.py +0 -0
- rasa/dialogue_understanding_test/command_comparison.py +60 -0
- rasa/dialogue_understanding_test/command_metric_calculation.py +122 -0
- rasa/dialogue_understanding_test/constants.py +22 -0
- rasa/dialogue_understanding_test/du_test_case.py +448 -0
- rasa/dialogue_understanding_test/du_test_result.py +390 -0
- rasa/dialogue_understanding_test/du_test_runner.py +322 -0
- rasa/dialogue_understanding_test/du_test_schema.yml +161 -0
- rasa/dialogue_understanding_test/io.py +443 -0
- rasa/dialogue_understanding_test/test_case_simulation/__init__.py +0 -0
- rasa/dialogue_understanding_test/test_case_simulation/exception.py +28 -0
- rasa/dialogue_understanding_test/test_case_simulation/test_case_tracker_simulator.py +336 -0
- rasa/dialogue_understanding_test/utils.py +70 -0
- rasa/dialogue_understanding_test/validation.py +77 -0
- rasa/e2e_test/aggregate_test_stats_calculator.py +1 -1
- rasa/e2e_test/assertions.py +202 -175
- rasa/e2e_test/assertions_schema.yml +6 -0
- rasa/e2e_test/constants.py +16 -1
- rasa/e2e_test/e2e_config.py +102 -41
- rasa/e2e_test/e2e_config_schema.yml +28 -10
- rasa/e2e_test/e2e_test_case.py +5 -5
- rasa/e2e_test/e2e_test_converter.py +2 -3
- rasa/e2e_test/e2e_test_coverage_report.py +6 -6
- rasa/e2e_test/e2e_test_result.py +1 -1
- rasa/e2e_test/e2e_test_runner.py +143 -38
- rasa/e2e_test/llm_judge_prompts/answer_relevance_prompt_template.jinja2 +93 -0
- rasa/e2e_test/llm_judge_prompts/groundedness_prompt_template.jinja2 +169 -0
- rasa/e2e_test/stub_custom_action.py +1 -1
- rasa/e2e_test/utils/generative_assertions.py +243 -0
- rasa/e2e_test/utils/io.py +123 -93
- rasa/e2e_test/utils/validation.py +101 -3
- rasa/engine/caching.py +5 -7
- rasa/engine/constants.py +1 -1
- rasa/engine/graph.py +3 -2
- rasa/engine/language.py +182 -0
- rasa/engine/recipes/config_files/default_config.yml +4 -0
- rasa/engine/recipes/default_components.py +13 -15
- rasa/engine/recipes/default_recipe.py +65 -49
- rasa/engine/recipes/graph_recipe.py +10 -7
- rasa/engine/recipes/recipe.py +2 -2
- rasa/engine/runner/dask.py +2 -2
- rasa/engine/runner/interface.py +1 -0
- rasa/engine/storage/local_model_storage.py +6 -4
- rasa/engine/storage/resource.py +2 -1
- rasa/engine/storage/storage.py +8 -3
- rasa/engine/training/components.py +2 -1
- rasa/engine/training/fingerprinting.py +4 -2
- rasa/engine/training/graph_trainer.py +4 -4
- rasa/engine/training/hooks.py +2 -2
- rasa/engine/validation.py +36 -33
- rasa/exceptions.py +3 -2
- rasa/graph_components/converters/nlu_message_converter.py +3 -3
- rasa/graph_components/providers/domain_for_core_training_provider.py +3 -3
- rasa/graph_components/providers/domain_provider.py +3 -2
- rasa/graph_components/providers/flows_provider.py +2 -3
- rasa/graph_components/providers/forms_provider.py +4 -4
- rasa/graph_components/providers/nlu_training_data_provider.py +5 -3
- rasa/graph_components/providers/responses_provider.py +4 -4
- rasa/graph_components/providers/rule_only_provider.py +3 -2
- rasa/graph_components/providers/story_graph_provider.py +8 -8
- rasa/graph_components/providers/training_tracker_provider.py +3 -2
- rasa/graph_components/validators/default_recipe_validator.py +16 -16
- rasa/graph_components/validators/finetuning_validator.py +10 -8
- rasa/hooks.py +19 -14
- rasa/jupyter.py +2 -2
- rasa/llm_fine_tuning/annotation_module.py +4 -4
- rasa/llm_fine_tuning/conversations.py +5 -33
- rasa/llm_fine_tuning/llm_data_preparation_module.py +6 -4
- rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +4 -4
- rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +18 -13
- rasa/llm_fine_tuning/paraphrasing_module.py +6 -2
- rasa/llm_fine_tuning/storage.py +3 -3
- rasa/llm_fine_tuning/train_test_split_module.py +27 -27
- rasa/llm_fine_tuning/utils.py +7 -0
- rasa/markers/marker.py +2 -3
- rasa/markers/marker_base.py +1 -2
- rasa/markers/upload.py +2 -2
- rasa/markers/validate.py +2 -3
- rasa/model.py +3 -5
- rasa/model_manager/config.py +1 -1
- rasa/model_manager/model_api.py +5 -4
- rasa/model_manager/runner_service.py +13 -10
- rasa/model_manager/socket_bridge.py +15 -9
- rasa/model_manager/studio_jwt_auth.py +1 -0
- rasa/model_manager/trainer_service.py +9 -7
- rasa/model_manager/utils.py +1 -1
- rasa/model_manager/warm_rasa_process.py +14 -9
- rasa/model_service.py +5 -6
- rasa/model_testing.py +13 -15
- rasa/model_training.py +29 -29
- rasa/nlu/classifiers/diet_classifier.py +72 -73
- rasa/nlu/classifiers/fallback_classifier.py +9 -8
- rasa/nlu/classifiers/keyword_intent_classifier.py +7 -6
- rasa/nlu/classifiers/logistic_regression_classifier.py +3 -3
- rasa/nlu/classifiers/mitie_intent_classifier.py +5 -4
- rasa/nlu/classifiers/regex_message_handler.py +3 -2
- rasa/nlu/classifiers/sklearn_intent_classifier.py +2 -2
- rasa/nlu/convert.py +2 -2
- rasa/nlu/emulators/dialogflow.py +3 -3
- rasa/nlu/emulators/luis.py +5 -5
- rasa/nlu/emulators/no_emulator.py +1 -0
- rasa/nlu/emulators/wit.py +4 -4
- rasa/nlu/extractors/crf_entity_extractor.py +11 -11
- rasa/nlu/extractors/duckling_entity_extractor.py +7 -6
- rasa/nlu/extractors/entity_synonyms.py +10 -9
- rasa/nlu/extractors/extractor.py +16 -16
- rasa/nlu/extractors/mitie_entity_extractor.py +10 -9
- rasa/nlu/extractors/regex_entity_extractor.py +11 -10
- rasa/nlu/extractors/spacy_entity_extractor.py +2 -2
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +15 -14
- rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +2 -1
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +10 -9
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +9 -7
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +13 -12
- rasa/nlu/featurizers/featurizer.py +5 -4
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +6 -6
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -4
- rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +4 -4
- rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +2 -0
- rasa/nlu/model.py +0 -1
- rasa/nlu/selectors/response_selector.py +67 -68
- rasa/nlu/test.py +38 -38
- rasa/nlu/tokenizers/jieba_tokenizer.py +1 -2
- rasa/nlu/tokenizers/mitie_tokenizer.py +2 -2
- rasa/nlu/tokenizers/spacy_tokenizer.py +3 -3
- rasa/nlu/tokenizers/tokenizer.py +6 -7
- rasa/nlu/tokenizers/whitespace_tokenizer.py +1 -1
- rasa/nlu/utils/bilou_utils.py +7 -7
- rasa/nlu/utils/hugging_face/registry.py +22 -22
- rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +2 -1
- rasa/nlu/utils/mitie_utils.py +2 -1
- rasa/nlu/utils/pattern_utils.py +1 -1
- rasa/nlu/utils/spacy_utils.py +3 -3
- rasa/plugin.py +12 -1
- rasa/server.py +3 -2
- rasa/shared/constants.py +45 -18
- rasa/shared/core/command_payload_reader.py +15 -7
- rasa/shared/core/constants.py +34 -4
- rasa/shared/core/conversation.py +1 -2
- rasa/shared/core/domain.py +19 -20
- rasa/shared/core/events.py +60 -39
- rasa/shared/core/flows/__init__.py +0 -1
- rasa/shared/core/flows/constants.py +11 -0
- rasa/shared/core/flows/flow.py +107 -26
- rasa/shared/core/flows/flow_step.py +4 -3
- rasa/shared/core/flows/flow_step_links.py +1 -2
- rasa/shared/core/flows/flow_step_sequence.py +1 -1
- rasa/shared/core/flows/flows_list.py +3 -3
- rasa/shared/core/flows/flows_yaml_schema.json +69 -3
- rasa/shared/core/flows/nlu_trigger.py +1 -1
- rasa/shared/core/flows/steps/__init__.py +2 -2
- rasa/shared/core/flows/steps/action.py +1 -1
- rasa/shared/core/flows/steps/call.py +1 -1
- rasa/shared/core/flows/steps/collect.py +22 -40
- rasa/shared/core/flows/steps/internal.py +1 -1
- rasa/shared/core/flows/steps/link.py +1 -1
- rasa/shared/core/flows/steps/no_operation.py +2 -2
- rasa/shared/core/flows/steps/set_slots.py +1 -1
- rasa/shared/core/flows/utils.py +44 -4
- rasa/shared/core/flows/validation.py +4 -6
- rasa/shared/core/generator.py +20 -21
- rasa/shared/core/slot_mappings.py +360 -121
- rasa/shared/core/slots.py +163 -6
- rasa/shared/core/trackers.py +108 -33
- rasa/shared/core/training_data/loading.py +1 -1
- rasa/shared/core/training_data/story_reader/story_reader.py +3 -3
- rasa/shared/core/training_data/story_reader/story_step_builder.py +4 -4
- rasa/shared/core/training_data/story_reader/yaml_story_reader.py +29 -31
- rasa/shared/core/training_data/story_writer/yaml_story_writer.py +22 -24
- rasa/shared/core/training_data/structures.py +11 -12
- rasa/shared/core/training_data/visualization.py +10 -10
- rasa/shared/data.py +6 -6
- rasa/shared/engine/caching.py +0 -1
- rasa/shared/exceptions.py +2 -2
- rasa/shared/importers/importer.py +58 -2
- rasa/shared/importers/rasa.py +5 -6
- rasa/shared/importers/utils.py +1 -1
- rasa/shared/nlu/constants.py +9 -0
- rasa/shared/nlu/training_data/entities_parser.py +6 -6
- rasa/shared/nlu/training_data/features.py +3 -3
- rasa/shared/nlu/training_data/formats/__init__.py +1 -1
- rasa/shared/nlu/training_data/formats/dialogflow.py +4 -5
- rasa/shared/nlu/training_data/formats/luis.py +7 -8
- rasa/shared/nlu/training_data/formats/rasa.py +4 -5
- rasa/shared/nlu/training_data/formats/rasa_yaml.py +17 -16
- rasa/shared/nlu/training_data/formats/readerwriter.py +8 -11
- rasa/shared/nlu/training_data/formats/wit.py +3 -4
- rasa/shared/nlu/training_data/loading.py +4 -4
- rasa/shared/nlu/training_data/lookup_tables_parser.py +1 -1
- rasa/shared/nlu/training_data/message.py +13 -14
- rasa/shared/nlu/training_data/schemas/data_schema.py +1 -1
- rasa/shared/nlu/training_data/schemas/responses.yml +19 -11
- rasa/shared/nlu/training_data/synonyms_parser.py +3 -3
- rasa/shared/nlu/training_data/training_data.py +12 -13
- rasa/shared/nlu/training_data/util.py +11 -10
- rasa/shared/providers/_configs/azure_entra_id_config.py +541 -0
- rasa/shared/providers/_configs/azure_openai_client_config.py +150 -15
- rasa/shared/providers/_configs/client_config.py +3 -1
- rasa/shared/providers/_configs/default_litellm_client_config.py +9 -7
- rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +13 -11
- rasa/shared/providers/_configs/litellm_router_client_config.py +12 -10
- rasa/shared/providers/_configs/model_group_config.py +8 -5
- rasa/shared/providers/_configs/oauth_config.py +33 -0
- rasa/shared/providers/_configs/openai_client_config.py +14 -12
- rasa/shared/providers/_configs/rasa_llm_client_config.py +5 -3
- rasa/shared/providers/_configs/self_hosted_llm_client_config.py +12 -11
- rasa/shared/providers/_configs/utils.py +1 -0
- rasa/shared/providers/_ssl_verification_utils.py +5 -6
- rasa/shared/providers/_utils.py +5 -5
- rasa/shared/providers/constants.py +6 -0
- rasa/shared/providers/embedding/_base_litellm_embedding_client.py +1 -1
- rasa/shared/providers/embedding/azure_openai_embedding_client.py +32 -7
- rasa/shared/providers/embedding/embedding_client.py +1 -1
- rasa/shared/providers/embedding/litellm_router_embedding_client.py +5 -2
- rasa/shared/providers/llm/_base_litellm_client.py +43 -18
- rasa/shared/providers/llm/azure_openai_llm_client.py +90 -34
- rasa/shared/providers/llm/default_litellm_llm_client.py +4 -2
- rasa/shared/providers/llm/litellm_router_llm_client.py +32 -9
- rasa/shared/providers/llm/llm_client.py +24 -8
- rasa/shared/providers/llm/llm_response.py +61 -2
- rasa/shared/providers/llm/openai_llm_client.py +11 -5
- rasa/shared/providers/llm/rasa_llm_client.py +17 -14
- rasa/shared/providers/llm/self_hosted_llm_client.py +35 -15
- rasa/shared/providers/mappings.py +18 -19
- rasa/shared/providers/router/_base_litellm_router_client.py +48 -15
- rasa/shared/providers/router/router_client.py +3 -1
- rasa/shared/utils/cli.py +1 -1
- rasa/shared/utils/common.py +15 -1
- rasa/shared/utils/constants.py +3 -0
- rasa/shared/utils/health_check/embeddings_health_check_mixin.py +1 -1
- rasa/shared/utils/health_check/health_check.py +3 -3
- rasa/shared/utils/health_check/llm_health_check_mixin.py +1 -1
- rasa/shared/utils/io.py +1 -1
- rasa/shared/utils/llm.py +100 -18
- rasa/shared/utils/pykwalify_extensions.py +25 -1
- rasa/shared/utils/schemas/domain.yml +26 -1
- rasa/shared/utils/schemas/events.py +1 -1
- rasa/shared/utils/yaml.py +24 -20
- rasa/studio/auth.py +3 -3
- rasa/studio/config.py +1 -2
- rasa/studio/data_handler.py +3 -3
- rasa/studio/download.py +1 -1
- rasa/studio/results_logger.py +3 -3
- rasa/studio/upload.py +21 -5
- rasa/telemetry.py +127 -48
- rasa/tracing/config.py +5 -3
- rasa/tracing/constants.py +12 -0
- rasa/tracing/instrumentation/attribute_extractors.py +92 -14
- rasa/tracing/instrumentation/instrumentation.py +61 -5
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +1 -1
- rasa/tracing/instrumentation/metrics.py +52 -11
- rasa/tracing/metric_instrument_provider.py +54 -14
- rasa/utils/common.py +12 -24
- rasa/utils/endpoints.py +1 -1
- rasa/utils/io.py +7 -7
- rasa/utils/licensing.py +3 -4
- rasa/utils/log_utils.py +7 -6
- rasa/utils/ml_utils.py +1 -0
- rasa/utils/plotting.py +3 -3
- rasa/utils/sanic_error_handler.py +1 -1
- rasa/utils/tensorflow/callback.py +2 -2
- rasa/utils/tensorflow/crf.py +2 -2
- rasa/utils/tensorflow/data_generator.py +5 -5
- rasa/utils/tensorflow/environment.py +3 -3
- rasa/utils/tensorflow/feature_array.py +2 -3
- rasa/utils/tensorflow/layers.py +18 -12
- rasa/utils/tensorflow/layers_utils.py +2 -1
- rasa/utils/tensorflow/metrics.py +2 -2
- rasa/utils/tensorflow/model_data.py +7 -7
- rasa/utils/tensorflow/model_data_utils.py +10 -9
- rasa/utils/tensorflow/models.py +31 -32
- rasa/utils/tensorflow/rasa_layers.py +20 -19
- rasa/utils/tensorflow/types.py +2 -1
- rasa/utils/train_utils.py +23 -21
- rasa/utils/url_tools.py +1 -1
- rasa/validator.py +594 -115
- rasa/version.py +1 -1
- {rasa_pro-3.11.5.dist-info → rasa_pro-3.12.0.dist-info}/METADATA +23 -26
- rasa_pro-3.12.0.dist-info/RECORD +829 -0
- rasa/core/channels/inspector/dist/assets/channel-e265ea59.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-21f8a43d.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-5c8ce12d.js +0 -1
- rasa_pro-3.11.5.dist-info/RECORD +0 -785
- /rasa/dialogue_understanding/generator/{single_step → prompt_templates}/command_prompt_template.jinja2 +0 -0
- {rasa_pro-3.11.5.dist-info → rasa_pro-3.12.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.11.5.dist-info → rasa_pro-3.12.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.11.5.dist-info → rasa_pro-3.12.0.dist-info}/entry_points.txt +0 -0
|
@@ -13,6 +13,7 @@ import { DialogueStack } from "./components/DialogueStack";
|
|
|
13
13
|
import { DialougeInformation } from "./components/DialogueInformation";
|
|
14
14
|
import { LoadingSpinner } from "./components/LoadingSpinner";
|
|
15
15
|
import { DiagramFlow } from "./components/DiagramFlow";
|
|
16
|
+
import { RecruitmentPanel } from "./components/RecruitmentPanel";
|
|
16
17
|
import { formatSlots } from "./helpers/formatters";
|
|
17
18
|
import { Slot, Stack, Event, Flow, SelectedStack, Tracker } from "./types";
|
|
18
19
|
import {
|
|
@@ -35,6 +36,9 @@ export function App() {
|
|
|
35
36
|
const [stack, setStack] = useState<Stack[]>([]);
|
|
36
37
|
const [frame, setFrame] = useState<SelectedStack | undefined>(undefined);
|
|
37
38
|
|
|
39
|
+
// State to control the visibility of the RecruitmentPanel
|
|
40
|
+
const [showRecruitmentPanel, setShowRecruitmentPanel] = useState(true);
|
|
41
|
+
|
|
38
42
|
// we only show the transcript if we are not on the socket io channel
|
|
39
43
|
// on the socketio channel, we show the chat component instead
|
|
40
44
|
const shouldShowTranscript = !window.location.href.includes("socketio");
|
|
@@ -165,7 +169,9 @@ export function App() {
|
|
|
165
169
|
height: "100%",
|
|
166
170
|
overflow: "hidden",
|
|
167
171
|
gridTemplateColumns: "1fr",
|
|
168
|
-
gridTemplateRows:
|
|
172
|
+
gridTemplateRows: showRecruitmentPanel
|
|
173
|
+
? "max-content max-content minmax(10rem, auto)"
|
|
174
|
+
: "max-content minmax(10rem, 17.5rem) minmax(10rem, auto)",
|
|
169
175
|
gridRowGap: rasaSpace[1],
|
|
170
176
|
};
|
|
171
177
|
|
|
@@ -177,13 +183,20 @@ export function App() {
|
|
|
177
183
|
});
|
|
178
184
|
};
|
|
179
185
|
|
|
186
|
+
const handleCloseRecruitmentPanel = () => {
|
|
187
|
+
setShowRecruitmentPanel(false);
|
|
188
|
+
};
|
|
189
|
+
|
|
180
190
|
if (!rasaChatSessionId && !window.location.href.includes("socketio")) return <LoadingSpinner />;
|
|
181
191
|
|
|
182
192
|
return (
|
|
183
193
|
<Grid sx={gridSx}>
|
|
184
194
|
<GridItem overflow="hidden">
|
|
185
195
|
<Grid sx={leftColumnSx}>
|
|
186
|
-
<Welcome sx={boxSx} />
|
|
196
|
+
<Welcome sx={boxSx} isRecruitmentVisible={showRecruitmentPanel} />
|
|
197
|
+
{showRecruitmentPanel && (
|
|
198
|
+
<RecruitmentPanel onClose={handleCloseRecruitmentPanel} />
|
|
199
|
+
)}
|
|
187
200
|
<DialogueStack
|
|
188
201
|
sx={boxSx}
|
|
189
202
|
stack={stack}
|
|
@@ -30,3 +30,34 @@ export const RasaLogo = (props: BoxProps) => {
|
|
|
30
30
|
</Box>
|
|
31
31
|
);
|
|
32
32
|
};
|
|
33
|
+
|
|
34
|
+
export const RasaLogoDark = (props: BoxProps) => {
|
|
35
|
+
return (
|
|
36
|
+
<Box
|
|
37
|
+
as="svg"
|
|
38
|
+
{...props}
|
|
39
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
40
|
+
width="41"
|
|
41
|
+
height="51"
|
|
42
|
+
fill="none"
|
|
43
|
+
viewBox="0 0 41 51"
|
|
44
|
+
>
|
|
45
|
+
<path
|
|
46
|
+
fill="#7622D2"
|
|
47
|
+
fillRule="evenodd"
|
|
48
|
+
d="M34.041 10.59V7.508H21.385v12.847h3.037v-3.867h6.582v3.854h3.037v-9.763.013zm-3.037 2.827h-6.582V10.59h6.582v2.826zM19.36 29.74V35.52H6.956v-3.083h9.366V30.64H6.956v-7.965H19.36v3.083H9.994v1.798h9.366v2.184zM34.041 25.75v-3.084H21.385v12.847h3.037v-3.867h6.582V35.5h3.037v-9.764.013zm-3.037 2.826h-6.582v-2.827h6.582v2.827z"
|
|
49
|
+
clipRule="evenodd"
|
|
50
|
+
></path>
|
|
51
|
+
<path
|
|
52
|
+
fill="#7622D2"
|
|
53
|
+
d="M36.826 4.689v33.578h-5.248v5.724l-9.487-5.318-.744-.417H4.179V4.69h32.654-.007zm3.298-3.34H.881v40.258h19.618l14.368 8.054v-8.054h5.25V1.349h.007z"
|
|
54
|
+
></path>
|
|
55
|
+
<path
|
|
56
|
+
fill="#7622D2"
|
|
57
|
+
fillRule="evenodd"
|
|
58
|
+
d="M15.287 15.464l3.888-1.436.185-.074V7.515H6.956v.257l-.028 12.59h3.038V17.43l2.278-.838 3.417 3.77h3.752l-4.126-4.897zM9.97 14.15v-3.55h6.351V11.8l-6.351 2.348z"
|
|
59
|
+
clipRule="evenodd"
|
|
60
|
+
></path>
|
|
61
|
+
</Box>
|
|
62
|
+
);
|
|
63
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// RecruitmentPanel.tsx
|
|
2
|
+
import {
|
|
3
|
+
Box,
|
|
4
|
+
Flex,
|
|
5
|
+
Heading,
|
|
6
|
+
IconButton,
|
|
7
|
+
Text,
|
|
8
|
+
Button,
|
|
9
|
+
} from "@chakra-ui/react";
|
|
10
|
+
import { CloseIcon } from "@chakra-ui/icons";
|
|
11
|
+
import { useOurTheme } from "../theme";
|
|
12
|
+
|
|
13
|
+
interface RecruitmentPanelProps {
|
|
14
|
+
onClose: () => void;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const RecruitmentPanel: React.FC<RecruitmentPanelProps> = ({ onClose }) => {
|
|
18
|
+
const { rasaRadii } = useOurTheme();
|
|
19
|
+
|
|
20
|
+
const textColor = "white";
|
|
21
|
+
const iconColor = "white";
|
|
22
|
+
|
|
23
|
+
const boxSx = {
|
|
24
|
+
borderRadius: rasaRadii.normal,
|
|
25
|
+
padding: "1rem",
|
|
26
|
+
bgGradient: "linear(to-b, #4E61E1, #7622D2)",
|
|
27
|
+
color: textColor,
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<Box sx={boxSx}>
|
|
32
|
+
<Flex justify="space-between" align="center">
|
|
33
|
+
<Flex align="center">
|
|
34
|
+
<Heading as="h3" size="lg" fontWeight="bold" color={textColor}>
|
|
35
|
+
Help us Improve Rasa Pro!
|
|
36
|
+
</Heading>
|
|
37
|
+
</Flex>
|
|
38
|
+
<IconButton
|
|
39
|
+
aria-label="Close"
|
|
40
|
+
icon={<CloseIcon color={iconColor} />}
|
|
41
|
+
size="sm"
|
|
42
|
+
onClick={onClose}
|
|
43
|
+
bg="transparent"
|
|
44
|
+
_hover={{ bg: "rgba(255, 255, 255, 0.2)" }}
|
|
45
|
+
/>
|
|
46
|
+
</Flex>
|
|
47
|
+
<Flex align="center" mt="0.5rem" justify="space-between">
|
|
48
|
+
<Text fontSize="sm" color={textColor}>
|
|
49
|
+
We're looking for users to share their feedback.
|
|
50
|
+
</Text>
|
|
51
|
+
<Button
|
|
52
|
+
as="a"
|
|
53
|
+
href="https://calendly.com/alvaro-rasa/rasa-pro-installation"
|
|
54
|
+
target="_blank"
|
|
55
|
+
rel="noopener noreferrer"
|
|
56
|
+
color="#7622D2"
|
|
57
|
+
bg="white"
|
|
58
|
+
fontWeight="bold"
|
|
59
|
+
ml="1rem"
|
|
60
|
+
size="sm"
|
|
61
|
+
_hover={{ bg: "whiteAlpha.800" }}
|
|
62
|
+
>
|
|
63
|
+
Sign up
|
|
64
|
+
</Button>
|
|
65
|
+
</Flex>
|
|
66
|
+
</Box>
|
|
67
|
+
);
|
|
68
|
+
};
|
|
@@ -5,33 +5,35 @@ import {
|
|
|
5
5
|
Heading,
|
|
6
6
|
Link,
|
|
7
7
|
Text,
|
|
8
|
-
useColorModeValue,
|
|
9
8
|
} from "@chakra-ui/react";
|
|
10
|
-
import { RasaLogo } from "./RasaLogo";
|
|
9
|
+
import { RasaLogo, RasaLogoDark } from "./RasaLogo";
|
|
11
10
|
import { useOurTheme } from "../theme";
|
|
12
11
|
|
|
13
|
-
|
|
12
|
+
interface WelcomeProps extends FlexProps {
|
|
13
|
+
isRecruitmentVisible?: boolean;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const Welcome = ({ sx, isRecruitmentVisible, ...props }: WelcomeProps) => {
|
|
14
17
|
const { rasaSpace } = useOurTheme();
|
|
15
18
|
|
|
16
19
|
const containerSx = {
|
|
17
20
|
...sx,
|
|
18
|
-
color:
|
|
19
|
-
|
|
21
|
+
color: isRecruitmentVisible ? "black" : "neutral.50",
|
|
22
|
+
bg: isRecruitmentVisible ? "white" : undefined,
|
|
23
|
+
bgGradient: isRecruitmentVisible ? undefined : "linear(to-b, #4E61E1, #7622D2)",
|
|
20
24
|
};
|
|
21
25
|
|
|
22
26
|
const linkSx = {
|
|
23
27
|
flexGrow: 0,
|
|
24
|
-
color:
|
|
28
|
+
color: isRecruitmentVisible ? "#0000EE" : "neutral.50",
|
|
29
|
+
textDecoration: "underline",
|
|
25
30
|
_hover: {
|
|
26
|
-
color:
|
|
31
|
+
color: isRecruitmentVisible
|
|
32
|
+
? "link.visited"
|
|
33
|
+
: "neutral.400",
|
|
27
34
|
},
|
|
28
35
|
};
|
|
29
36
|
|
|
30
|
-
const logoSx = {
|
|
31
|
-
flexShrink:0,
|
|
32
|
-
marginLeft: "auto"
|
|
33
|
-
};
|
|
34
|
-
|
|
35
37
|
return (
|
|
36
38
|
<Flex sx={containerSx} {...props}>
|
|
37
39
|
<Box>
|
|
@@ -48,7 +50,11 @@ export const Welcome = ({ sx, ...props }: FlexProps) => {
|
|
|
48
50
|
ml={rasaSpace[0.25]}
|
|
49
51
|
>Browse the docs</Link>
|
|
50
52
|
</Box>
|
|
51
|
-
|
|
53
|
+
{isRecruitmentVisible ? (
|
|
54
|
+
<RasaLogoDark sx={{ flexShrink: 0, marginLeft: "auto" }}/>
|
|
55
|
+
) : (
|
|
56
|
+
<RasaLogo sx={{ flexShrink: 0, marginLeft: "auto" }}/>
|
|
57
|
+
)}
|
|
52
58
|
</Flex>
|
|
53
59
|
);
|
|
54
60
|
};
|
|
@@ -531,6 +531,11 @@
|
|
|
531
531
|
dependencies:
|
|
532
532
|
"@chakra-ui/shared-utils" "2.0.5"
|
|
533
533
|
|
|
534
|
+
"@chakra-ui/icons@^2.2.4":
|
|
535
|
+
version "2.2.4"
|
|
536
|
+
resolved "https://registry.yarnpkg.com/@chakra-ui/icons/-/icons-2.2.4.tgz#fc3f59a7e377d6e4efdbe8ee0a3aec7f29a4ab32"
|
|
537
|
+
integrity sha512-l5QdBgwrAg3Sc2BRqtNkJpfuLw/pWRDwwT58J6c4PqQT6wzXxyNa8Q0PForu1ltB5qEiFb1kxr/F/HO1EwNa6g==
|
|
538
|
+
|
|
534
539
|
"@chakra-ui/image@2.1.0":
|
|
535
540
|
version "2.1.0"
|
|
536
541
|
resolved "https://registry.yarnpkg.com/@chakra-ui/image/-/image-2.1.0.tgz#6c205f1ca148e3bf58345b0b5d4eb3d959eb9f87"
|
rasa/core/channels/mattermost.py
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import json
|
|
2
|
-
|
|
3
2
|
import logging
|
|
3
|
+
from typing import Any, Awaitable, Callable, Dict, List, Optional, Text
|
|
4
|
+
|
|
4
5
|
import requests
|
|
5
6
|
from requests import Response
|
|
6
7
|
from sanic import Blueprint, response
|
|
7
8
|
from sanic.request import Request
|
|
8
|
-
from typing import Text, Dict, Any, List, Callable, Awaitable, Optional
|
|
9
|
-
|
|
10
|
-
from rasa.core.channels.channel import UserMessage, OutputChannel, InputChannel
|
|
11
9
|
from sanic.response import HTTPResponse
|
|
12
10
|
|
|
11
|
+
from rasa.core.channels.channel import InputChannel, OutputChannel, UserMessage
|
|
12
|
+
|
|
13
13
|
logger = logging.getLogger(__name__)
|
|
14
14
|
|
|
15
15
|
|
rasa/core/channels/rasa_chat.py
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import json
|
|
2
|
-
|
|
2
|
+
import logging
|
|
3
|
+
from typing import Any, Dict, Optional, Text
|
|
3
4
|
|
|
4
5
|
import aiohttp
|
|
5
|
-
import logging
|
|
6
|
-
from sanic.exceptions import SanicException
|
|
7
6
|
import jwt
|
|
8
7
|
import jwt.exceptions
|
|
8
|
+
from sanic.exceptions import SanicException
|
|
9
|
+
from sanic.request import Request
|
|
9
10
|
|
|
10
11
|
import rasa.core.channels.channel
|
|
11
12
|
from rasa.core.channels.channel import InputChannel
|
|
12
13
|
from rasa.core.channels.rest import RestInput
|
|
13
14
|
from rasa.core.constants import DEFAULT_REQUEST_TIMEOUT
|
|
14
|
-
from sanic.request import Request
|
|
15
15
|
|
|
16
16
|
logger = logging.getLogger(__name__)
|
|
17
17
|
|
rasa/core/channels/rest.py
CHANGED
|
@@ -3,32 +3,31 @@ import copy
|
|
|
3
3
|
import inspect
|
|
4
4
|
import json
|
|
5
5
|
import logging
|
|
6
|
+
from asyncio import CancelledError, Queue
|
|
6
7
|
from functools import partial
|
|
7
|
-
|
|
8
|
-
import structlog
|
|
9
|
-
from asyncio import Queue, CancelledError
|
|
10
|
-
from sanic import Blueprint, response
|
|
11
|
-
from sanic.request import Request
|
|
12
8
|
from typing import (
|
|
13
|
-
Text,
|
|
14
|
-
Dict,
|
|
15
9
|
Any,
|
|
16
|
-
Optional,
|
|
17
|
-
Callable,
|
|
18
10
|
Awaitable,
|
|
11
|
+
Callable,
|
|
12
|
+
Dict,
|
|
19
13
|
NoReturn,
|
|
14
|
+
Optional,
|
|
15
|
+
Text,
|
|
20
16
|
Union,
|
|
21
17
|
)
|
|
22
|
-
|
|
18
|
+
|
|
19
|
+
import structlog
|
|
20
|
+
from sanic import Blueprint, response
|
|
21
|
+
from sanic.request import Request
|
|
22
|
+
from sanic.response import BaseHTTPResponse, HTTPResponse, ResponseStream
|
|
23
23
|
|
|
24
24
|
import rasa.utils.endpoints
|
|
25
25
|
from rasa.core.channels.channel import (
|
|
26
|
-
InputChannel,
|
|
27
26
|
CollectingOutputChannel,
|
|
27
|
+
InputChannel,
|
|
28
28
|
UserMessage,
|
|
29
29
|
)
|
|
30
30
|
|
|
31
|
-
|
|
32
31
|
logger = logging.getLogger(__name__)
|
|
33
32
|
structlogger = structlog.get_logger()
|
|
34
33
|
|
rasa/core/channels/rocketchat.py
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import logging
|
|
2
|
+
from typing import Any, Awaitable, Callable, Dict, Iterable, List, Optional, Text
|
|
3
|
+
|
|
2
4
|
from sanic import Blueprint, response
|
|
3
5
|
from sanic.request import Request
|
|
4
|
-
from typing import Text, Dict, Any, List, Iterable, Optional, Callable, Awaitable
|
|
5
|
-
|
|
6
|
-
from rasa.core.channels.channel import UserMessage, OutputChannel, InputChannel
|
|
7
6
|
from sanic.response import HTTPResponse
|
|
8
7
|
|
|
8
|
+
from rasa.core.channels.channel import InputChannel, OutputChannel, UserMessage
|
|
9
|
+
|
|
9
10
|
logger = logging.getLogger(__name__)
|
|
10
11
|
|
|
11
12
|
|
rasa/core/channels/slack.py
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import hashlib
|
|
3
3
|
import hmac
|
|
4
|
-
from http import HTTPStatus
|
|
5
4
|
import json
|
|
6
5
|
import logging
|
|
7
6
|
import re
|
|
8
7
|
import time
|
|
8
|
+
from http import HTTPStatus
|
|
9
9
|
from typing import Any, Awaitable, Callable, Dict, List, Optional, Set, Text
|
|
10
10
|
|
|
11
|
-
from rasa.core.channels.channel import InputChannel, OutputChannel, UserMessage
|
|
12
|
-
from rasa.shared.constants import DOCS_URL_CONNECTORS_SLACK
|
|
13
|
-
from rasa.shared.exceptions import InvalidConfigException
|
|
14
|
-
import rasa.shared.utils.io
|
|
15
11
|
from sanic import Blueprint, response
|
|
16
12
|
from sanic.request import Request
|
|
17
13
|
from sanic.response import HTTPResponse
|
|
18
14
|
from slack_sdk.web.async_client import AsyncWebClient
|
|
19
15
|
|
|
16
|
+
import rasa.shared.utils.io
|
|
17
|
+
from rasa.core.channels.channel import InputChannel, OutputChannel, UserMessage
|
|
18
|
+
from rasa.shared.constants import DOCS_URL_CONNECTORS_SLACK
|
|
19
|
+
from rasa.shared.exceptions import InvalidConfigException
|
|
20
|
+
|
|
20
21
|
logger = logging.getLogger(__name__)
|
|
21
22
|
|
|
22
23
|
|
rasa/core/channels/socketio.py
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import inspect
|
|
2
|
+
import json
|
|
2
3
|
import logging
|
|
3
4
|
import uuid
|
|
4
|
-
import json
|
|
5
5
|
from typing import Any, Awaitable, Callable, Dict, Iterable, List, Optional, Text
|
|
6
6
|
|
|
7
|
-
import
|
|
8
|
-
from rasa.core.channels.channel import InputChannel, OutputChannel, UserMessage
|
|
9
|
-
import rasa.shared.utils.io
|
|
10
|
-
from sanic import Blueprint, response, Sanic
|
|
7
|
+
from sanic import Blueprint, Sanic, response
|
|
11
8
|
from sanic.request import Request
|
|
12
9
|
from sanic.response import HTTPResponse
|
|
13
10
|
from socketio import AsyncServer
|
|
14
11
|
|
|
12
|
+
import rasa.core.channels.channel
|
|
13
|
+
import rasa.shared.utils.io
|
|
14
|
+
from rasa.core.channels.channel import InputChannel, OutputChannel, UserMessage
|
|
15
|
+
|
|
15
16
|
logger = logging.getLogger(__name__)
|
|
16
17
|
|
|
17
18
|
|
|
@@ -54,31 +55,9 @@ class SocketIOOutput(OutputChannel):
|
|
|
54
55
|
super().__init__()
|
|
55
56
|
self.sio = sio
|
|
56
57
|
self.bot_message_evt = bot_message_evt
|
|
57
|
-
self.last_event_timestamp = (
|
|
58
|
-
-1
|
|
59
|
-
) # Initialize with -1 to send all events on first message
|
|
60
|
-
|
|
61
|
-
def _get_new_events(self) -> List[Dict[Text, Any]]:
|
|
62
|
-
"""Get events that are newer than the last sent event."""
|
|
63
|
-
events = self.tracker_state.get("events", []) if self.tracker_state else []
|
|
64
|
-
new_events = [
|
|
65
|
-
event for event in events if event["timestamp"] > self.last_event_timestamp
|
|
66
|
-
]
|
|
67
|
-
if new_events:
|
|
68
|
-
self.last_event_timestamp = new_events[-1]["timestamp"]
|
|
69
|
-
return new_events
|
|
70
58
|
|
|
71
59
|
async def _send_message(self, socket_id: Text, response: Any) -> None:
|
|
72
60
|
"""Sends a message to the recipient using the bot event."""
|
|
73
|
-
# send tracker state (contains stack, slots and more)
|
|
74
|
-
await self.sio.emit("tracker_state", self.tracker_state, room=socket_id)
|
|
75
|
-
|
|
76
|
-
# send new events
|
|
77
|
-
new_events = self._get_new_events()
|
|
78
|
-
if new_events:
|
|
79
|
-
await self.sio.emit("rasa_events", new_events, room=socket_id)
|
|
80
|
-
|
|
81
|
-
# send bot response
|
|
82
61
|
await self.sio.emit(self.bot_message_evt, response, room=socket_id)
|
|
83
62
|
|
|
84
63
|
async def send_text_message(
|
|
@@ -214,7 +193,7 @@ class SocketIOInput(InputChannel):
|
|
|
214
193
|
|
|
215
194
|
def blueprint(
|
|
216
195
|
self, on_new_message: Callable[[UserMessage], Awaitable[Any]]
|
|
217
|
-
) ->
|
|
196
|
+
) -> SocketBlueprint:
|
|
218
197
|
"""Defines a Sanic blueprint."""
|
|
219
198
|
# Workaround so that socketio works with requests from other origins.
|
|
220
199
|
# https://github.com/miguelgrinberg/python-socketio/issues/205#issuecomment-493769183
|
|
@@ -289,6 +268,7 @@ class SocketIOInput(InputChannel):
|
|
|
289
268
|
metadata = data.get(self.metadata_key, {})
|
|
290
269
|
if isinstance(metadata, Text):
|
|
291
270
|
metadata = json.loads(metadata)
|
|
271
|
+
|
|
292
272
|
message = UserMessage(
|
|
293
273
|
data.get("message", ""),
|
|
294
274
|
output_channel,
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import json
|
|
3
|
+
from functools import partial
|
|
4
|
+
from typing import (
|
|
5
|
+
TYPE_CHECKING,
|
|
6
|
+
Any,
|
|
7
|
+
Awaitable,
|
|
8
|
+
Callable,
|
|
9
|
+
Dict,
|
|
10
|
+
List,
|
|
11
|
+
Optional,
|
|
12
|
+
Text,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
import structlog
|
|
16
|
+
from sanic import Sanic
|
|
17
|
+
|
|
18
|
+
from rasa.core.channels.socketio import SocketBlueprint, SocketIOInput
|
|
19
|
+
from rasa.hooks import hookimpl
|
|
20
|
+
from rasa.plugin import plugin_manager
|
|
21
|
+
from rasa.shared.core.constants import ACTION_LISTEN_NAME
|
|
22
|
+
from rasa.shared.core.events import ActionExecuted
|
|
23
|
+
from rasa.shared.core.trackers import EventVerbosity
|
|
24
|
+
|
|
25
|
+
if TYPE_CHECKING:
|
|
26
|
+
from rasa.core.channels.channel import UserMessage
|
|
27
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
structlogger = structlog.get_logger()
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def tracker_as_dump(tracker: "DialogueStateTracker") -> str:
|
|
34
|
+
"""Create a dump of the tracker state."""
|
|
35
|
+
from rasa.shared.core.trackers import get_trackers_for_conversation_sessions
|
|
36
|
+
|
|
37
|
+
multiple_tracker_sessions = get_trackers_for_conversation_sessions(tracker)
|
|
38
|
+
|
|
39
|
+
if 0 <= len(multiple_tracker_sessions) <= 1:
|
|
40
|
+
last_tracker = tracker
|
|
41
|
+
else:
|
|
42
|
+
last_tracker = multiple_tracker_sessions[-1]
|
|
43
|
+
|
|
44
|
+
state = last_tracker.current_state(EventVerbosity.AFTER_RESTART)
|
|
45
|
+
return json.dumps(state)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def does_need_action_prediction(tracker: "DialogueStateTracker") -> bool:
|
|
49
|
+
"""Check if the tracker needs an action prediction."""
|
|
50
|
+
return (
|
|
51
|
+
len(tracker.events) == 0
|
|
52
|
+
or not isinstance(tracker.events[-1], ActionExecuted)
|
|
53
|
+
or tracker.events[-1].action_name != ACTION_LISTEN_NAME
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class StudioTrackerUpdatePlugin:
|
|
58
|
+
"""Plugin for publishing tracker updates a socketio channel."""
|
|
59
|
+
|
|
60
|
+
def __init__(self, socket_channel: "StudioChatInput") -> None:
|
|
61
|
+
self.socket_channel = socket_channel
|
|
62
|
+
self.tasks: List[asyncio.Task] = []
|
|
63
|
+
|
|
64
|
+
def _cancel_tasks(self) -> None:
|
|
65
|
+
"""Cancel all remaining tasks."""
|
|
66
|
+
for task in self.tasks:
|
|
67
|
+
task.cancel()
|
|
68
|
+
self.tasks = []
|
|
69
|
+
|
|
70
|
+
def _cleanup_tasks(self) -> None:
|
|
71
|
+
"""Remove tasks that have already completed."""
|
|
72
|
+
self.tasks = [task for task in self.tasks if not task.done()]
|
|
73
|
+
|
|
74
|
+
@hookimpl # type: ignore[misc]
|
|
75
|
+
def after_new_user_message(self, tracker: "DialogueStateTracker") -> None:
|
|
76
|
+
"""Triggers a tracker update notification after a new user message."""
|
|
77
|
+
self.handle_tracker_update(tracker)
|
|
78
|
+
|
|
79
|
+
@hookimpl # type: ignore[misc]
|
|
80
|
+
def after_action_executed(self, tracker: "DialogueStateTracker") -> None:
|
|
81
|
+
"""Triggers a tracker update notification after an action is executed."""
|
|
82
|
+
self.handle_tracker_update(tracker)
|
|
83
|
+
|
|
84
|
+
def handle_tracker_update(self, tracker: "DialogueStateTracker") -> None:
|
|
85
|
+
"""Handles a tracker update when triggered by a hook."""
|
|
86
|
+
structlogger.info("studio_chat.after_tracker_update", tracker=tracker)
|
|
87
|
+
# directly create a dump to avoid the tracker getting modified by another
|
|
88
|
+
# function before it gets published (since the publishing is scheduled
|
|
89
|
+
# as an async task)
|
|
90
|
+
tracker_dump = tracker_as_dump(tracker)
|
|
91
|
+
task = asyncio.create_task(
|
|
92
|
+
self.socket_channel.publish_tracker_update(tracker.sender_id, tracker_dump)
|
|
93
|
+
)
|
|
94
|
+
self.tasks.append(task)
|
|
95
|
+
self._cleanup_tasks()
|
|
96
|
+
|
|
97
|
+
@hookimpl # type: ignore[misc]
|
|
98
|
+
def after_server_stop(self) -> None:
|
|
99
|
+
"""Cancels all remaining tasks when the server stops."""
|
|
100
|
+
self._cancel_tasks()
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class StudioChatInput(SocketIOInput):
|
|
104
|
+
"""Input channel for the communication between Rasa Studio and Rasa Pro."""
|
|
105
|
+
|
|
106
|
+
@classmethod
|
|
107
|
+
def name(cls) -> Text:
|
|
108
|
+
return "studio_chat"
|
|
109
|
+
|
|
110
|
+
def __init__(
|
|
111
|
+
self,
|
|
112
|
+
*args: Any,
|
|
113
|
+
**kwargs: Any,
|
|
114
|
+
) -> None:
|
|
115
|
+
"""Creates a ``SocketIOInput`` object."""
|
|
116
|
+
from rasa.core.agent import Agent
|
|
117
|
+
|
|
118
|
+
super().__init__(*args, **kwargs)
|
|
119
|
+
self.agent: Optional[Agent] = None
|
|
120
|
+
|
|
121
|
+
self._register_tracker_update_hook()
|
|
122
|
+
|
|
123
|
+
def _register_tracker_update_hook(self) -> None:
|
|
124
|
+
plugin_manager().register(StudioTrackerUpdatePlugin(self))
|
|
125
|
+
|
|
126
|
+
async def on_tracker_updated(self, tracker: "DialogueStateTracker") -> None:
|
|
127
|
+
"""Triggers a tracker update notification after a change to the tracker."""
|
|
128
|
+
await self.publish_tracker_update(tracker.sender_id, tracker_as_dump(tracker))
|
|
129
|
+
|
|
130
|
+
async def publish_tracker_update(self, sender_id: str, tracker_dump: Dict) -> None:
|
|
131
|
+
"""Publishes a tracker update notification to the websocket."""
|
|
132
|
+
if not self.sio:
|
|
133
|
+
structlogger.error("studio_chat.on_tracker_updated.sio_not_initialized")
|
|
134
|
+
return
|
|
135
|
+
await self.sio.emit("tracker", tracker_dump, room=sender_id)
|
|
136
|
+
|
|
137
|
+
async def on_message_proxy(
|
|
138
|
+
self,
|
|
139
|
+
on_new_message: Callable[["UserMessage"], Awaitable[Any]],
|
|
140
|
+
message: "UserMessage",
|
|
141
|
+
) -> None:
|
|
142
|
+
"""Proxies the on_new_message call to the underlying channel.
|
|
143
|
+
|
|
144
|
+
Triggers a tracker update notification after processing the message.
|
|
145
|
+
"""
|
|
146
|
+
await on_new_message(message)
|
|
147
|
+
|
|
148
|
+
if not self.agent:
|
|
149
|
+
structlogger.error("studio_chat.on_message_proxy.agent_not_initialized")
|
|
150
|
+
return
|
|
151
|
+
|
|
152
|
+
tracker = await self.agent.tracker_store.retrieve(message.sender_id)
|
|
153
|
+
if tracker is None:
|
|
154
|
+
structlogger.error("studio_chat.on_message_proxy.tracker_not_found")
|
|
155
|
+
return
|
|
156
|
+
|
|
157
|
+
await self.on_tracker_updated(tracker)
|
|
158
|
+
|
|
159
|
+
async def handle_tracker_update(self, sid: str, data: Dict) -> None:
|
|
160
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
161
|
+
|
|
162
|
+
structlogger.debug(
|
|
163
|
+
"studio_chat.sio.handle_tracker_update",
|
|
164
|
+
sid=sid,
|
|
165
|
+
sender_id=data["sender_id"],
|
|
166
|
+
)
|
|
167
|
+
if self.agent is None:
|
|
168
|
+
structlogger.error("studio_chat.sio.agent_not_initialized")
|
|
169
|
+
return None
|
|
170
|
+
|
|
171
|
+
if not (domain := self.agent.domain):
|
|
172
|
+
structlogger.error("studio_chat.sio.domain_not_initialized")
|
|
173
|
+
return None
|
|
174
|
+
|
|
175
|
+
async with self.agent.lock_store.lock(data["sender_id"]):
|
|
176
|
+
tracker = DialogueStateTracker.from_dict(
|
|
177
|
+
data["sender_id"], data["events"], domain.slots
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
# will override an existing tracker with the same id!
|
|
181
|
+
await self.agent.tracker_store.save(tracker)
|
|
182
|
+
|
|
183
|
+
processor = self.agent.processor
|
|
184
|
+
if processor and does_need_action_prediction(tracker):
|
|
185
|
+
output_channel = self.get_output_channel()
|
|
186
|
+
|
|
187
|
+
await processor._run_prediction_loop(output_channel, tracker)
|
|
188
|
+
await processor.run_anonymization_pipeline(tracker)
|
|
189
|
+
await self.agent.tracker_store.save(tracker)
|
|
190
|
+
|
|
191
|
+
await self.on_tracker_updated(tracker)
|
|
192
|
+
|
|
193
|
+
def blueprint(
|
|
194
|
+
self, on_new_message: Callable[["UserMessage"], Awaitable[Any]]
|
|
195
|
+
) -> SocketBlueprint:
|
|
196
|
+
socket_blueprint = super().blueprint(
|
|
197
|
+
partial(self.on_message_proxy, on_new_message)
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
if not self.sio:
|
|
201
|
+
structlogger.error("studio_chat.blueprint.sio_not_initialized")
|
|
202
|
+
return socket_blueprint
|
|
203
|
+
|
|
204
|
+
@socket_blueprint.listener("after_server_start") # type: ignore[misc]
|
|
205
|
+
async def after_server_start(app: Sanic, _: asyncio.AbstractEventLoop) -> None:
|
|
206
|
+
self.agent = app.ctx.agent
|
|
207
|
+
|
|
208
|
+
@self.sio.on("update_tracker", namespace=self.namespace)
|
|
209
|
+
async def on_update_tracker(sid: Text, data: Dict) -> None:
|
|
210
|
+
await self.handle_tracker_update(sid, data)
|
|
211
|
+
|
|
212
|
+
return socket_blueprint
|