rasa-pro 3.10.16__py3-none-any.whl → 3.11.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.
- rasa/__main__.py +31 -15
- rasa/api.py +12 -2
- rasa/cli/arguments/default_arguments.py +24 -4
- rasa/cli/arguments/run.py +15 -0
- rasa/cli/arguments/shell.py +5 -1
- rasa/cli/arguments/train.py +17 -9
- rasa/cli/evaluate.py +7 -7
- rasa/cli/inspect.py +19 -7
- rasa/cli/interactive.py +1 -0
- rasa/cli/llm_fine_tuning.py +11 -14
- rasa/cli/project_templates/calm/config.yml +5 -7
- rasa/cli/project_templates/calm/endpoints.yml +15 -2
- rasa/cli/project_templates/tutorial/config.yml +8 -5
- rasa/cli/project_templates/tutorial/data/flows.yml +1 -1
- rasa/cli/project_templates/tutorial/data/patterns.yml +5 -0
- rasa/cli/project_templates/tutorial/domain.yml +14 -0
- rasa/cli/project_templates/tutorial/endpoints.yml +5 -0
- rasa/cli/run.py +7 -0
- rasa/cli/scaffold.py +4 -2
- rasa/cli/studio/upload.py +0 -15
- rasa/cli/train.py +14 -53
- rasa/cli/utils.py +14 -11
- rasa/cli/x.py +7 -7
- rasa/constants.py +3 -1
- rasa/core/actions/action.py +77 -33
- rasa/core/actions/action_hangup.py +29 -0
- rasa/core/actions/action_repeat_bot_messages.py +89 -0
- rasa/core/actions/e2e_stub_custom_action_executor.py +5 -1
- rasa/core/actions/http_custom_action_executor.py +4 -0
- rasa/core/agent.py +2 -2
- rasa/core/brokers/kafka.py +3 -1
- rasa/core/brokers/pika.py +3 -1
- rasa/core/channels/__init__.py +10 -6
- rasa/core/channels/channel.py +41 -4
- rasa/core/channels/development_inspector.py +150 -46
- rasa/core/channels/inspector/README.md +1 -1
- rasa/core/channels/inspector/dist/assets/{arc-b6e548fe.js → arc-bc141fb2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-d0fbc5ce-fa03ac9e.js → c4Diagram-d0fbc5ce-be2db283.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-936ed81e-ee67392a.js → classDiagram-936ed81e-55366915.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-c3cb15f1-9b283fae.js → classDiagram-v2-c3cb15f1-bb529518.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{createText-62fc7601-8b6fcc2a.js → createText-62fc7601-b0ec81d6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-f2ad444c-22e77f4f.js → edges-f2ad444c-6166330c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9d236eb7-60ffc87f.js → erDiagram-9d236eb7-5ccc6a8e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-1972c806-9dd802e4.js → flowDb-1972c806-fca3bfe4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-7ea5b25a-5fa1912f.js → flowDiagram-7ea5b25a-4739080f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-736177bf.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-abe16c3d-622a1fd2.js → flowchart-elk-definition-abe16c3d-7c1b0e0f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-9b5ea136-e285a63a.js → ganttDiagram-9b5ea136-772fd050.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-99d0ae7c-f237bdca.js → gitGraphDiagram-99d0ae7c-8eae1dc9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-2c4b9a3b-4b03d70e.js → index-2c4b9a3b-f55afcdf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-e7cef9de.js +1317 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-736b4530-72a0fa5f.js → infoDiagram-736b4530-124d4a14.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-df861f2b-82218c41.js → journeyDiagram-df861f2b-7c4fae44.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-78cff630.js → layout-b9885fb6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-5038b469.js → line-7c59abb6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-c4fc4098.js → linear-4776f780.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-beec6740-c33c8ea6.js → mindmap-definition-beec6740-2332c46c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-dbbf0591-a8d03059.js → pieDiagram-dbbf0591-8fb39303.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-4d7f4fd6-6a0e56b2.js → quadrantDiagram-4d7f4fd6-3c7180a2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-6fc4c22a-2dc7c7bd.js → requirementDiagram-6fc4c22a-e910bcb8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-8f13d901-2360fe39.js → sankeyDiagram-8f13d901-ead16c89.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-b655622a-41b9f9ad.js → sequenceDiagram-b655622a-29a02a19.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-59f0c015-0aad326f.js → stateDiagram-59f0c015-042b3137.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-2b26beab-9847d984.js → stateDiagram-v2-2b26beab-2178c0f3.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-080da4f6-564d890e.js → styles-080da4f6-23ffa4fc.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-3dcbcfbf-38957613.js → styles-3dcbcfbf-94f59763.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9c745c82-f0fc6921.js → styles-9c745c82-78a6bebc.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-4835440b-ef3c5a77.js → svgDrawCommon-4835440b-eae2a6f6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-5b62e21b-bf3e91c1.js → timeline-definition-5b62e21b-5c968d92.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-2b33534f-4d4026c0.js → xychartDiagram-2b33534f-fd3db0d5.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +18 -17
- rasa/core/channels/inspector/index.html +17 -16
- rasa/core/channels/inspector/package.json +5 -1
- rasa/core/channels/inspector/src/App.tsx +118 -68
- rasa/core/channels/inspector/src/components/Chat.tsx +95 -0
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +11 -10
- rasa/core/channels/inspector/src/components/DialogueStack.tsx +10 -25
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -3
- rasa/core/channels/inspector/src/helpers/audiostream.ts +165 -0
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +10 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +107 -41
- rasa/core/channels/inspector/src/helpers/utils.ts +92 -7
- rasa/core/channels/inspector/src/types.ts +21 -1
- rasa/core/channels/inspector/yarn.lock +94 -1
- rasa/core/channels/rest.py +51 -46
- rasa/core/channels/socketio.py +28 -1
- rasa/core/channels/telegram.py +1 -1
- rasa/core/channels/twilio.py +1 -1
- rasa/core/channels/{audiocodes.py → voice_ready/audiocodes.py} +122 -69
- rasa/core/channels/{voice_aware → voice_ready}/jambonz.py +26 -8
- rasa/core/channels/{voice_aware → voice_ready}/jambonz_protocol.py +57 -5
- rasa/core/channels/{twilio_voice.py → voice_ready/twilio_voice.py} +64 -28
- rasa/core/channels/voice_ready/utils.py +37 -0
- rasa/core/channels/voice_stream/asr/__init__.py +0 -0
- rasa/core/channels/voice_stream/asr/asr_engine.py +89 -0
- rasa/core/channels/voice_stream/asr/asr_event.py +18 -0
- rasa/core/channels/voice_stream/asr/azure.py +129 -0
- rasa/core/channels/voice_stream/asr/deepgram.py +90 -0
- rasa/core/channels/voice_stream/audio_bytes.py +8 -0
- rasa/core/channels/voice_stream/browser_audio.py +107 -0
- rasa/core/channels/voice_stream/call_state.py +23 -0
- rasa/core/channels/voice_stream/tts/__init__.py +0 -0
- rasa/core/channels/voice_stream/tts/azure.py +106 -0
- rasa/core/channels/voice_stream/tts/cartesia.py +118 -0
- rasa/core/channels/voice_stream/tts/tts_cache.py +27 -0
- rasa/core/channels/voice_stream/tts/tts_engine.py +58 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +173 -0
- rasa/core/channels/voice_stream/util.py +57 -0
- rasa/core/channels/voice_stream/voice_channel.py +427 -0
- rasa/core/information_retrieval/qdrant.py +1 -0
- rasa/core/nlg/contextual_response_rephraser.py +45 -17
- rasa/{nlu → core}/persistor.py +203 -68
- rasa/core/policies/enterprise_search_policy.py +119 -63
- rasa/core/policies/flows/flow_executor.py +15 -22
- rasa/core/policies/intentless_policy.py +83 -28
- rasa/core/processor.py +25 -0
- rasa/core/run.py +12 -2
- rasa/core/secrets_manager/constants.py +4 -0
- rasa/core/secrets_manager/factory.py +8 -0
- rasa/core/secrets_manager/vault.py +11 -1
- rasa/core/training/interactive.py +33 -34
- rasa/core/utils.py +47 -21
- rasa/dialogue_understanding/coexistence/llm_based_router.py +41 -14
- rasa/dialogue_understanding/commands/__init__.py +6 -0
- rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +60 -0
- rasa/dialogue_understanding/commands/session_end_command.py +61 -0
- rasa/dialogue_understanding/commands/user_silence_command.py +59 -0
- rasa/dialogue_understanding/commands/utils.py +5 -0
- rasa/dialogue_understanding/generator/constants.py +2 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +47 -9
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +38 -15
- rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +35 -13
- rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2 +3 -0
- rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +60 -13
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +53 -0
- rasa/dialogue_understanding/patterns/repeat.py +37 -0
- rasa/dialogue_understanding/patterns/user_silence.py +37 -0
- rasa/dialogue_understanding/processor/command_processor.py +21 -1
- rasa/e2e_test/aggregate_test_stats_calculator.py +1 -11
- rasa/e2e_test/assertions.py +136 -61
- rasa/e2e_test/assertions_schema.yml +23 -0
- rasa/e2e_test/e2e_test_case.py +85 -6
- rasa/e2e_test/e2e_test_runner.py +2 -3
- rasa/e2e_test/utils/e2e_yaml_utils.py +1 -1
- rasa/engine/graph.py +3 -10
- rasa/engine/loader.py +12 -0
- rasa/engine/recipes/config_files/default_config.yml +0 -3
- rasa/engine/recipes/default_recipe.py +0 -1
- rasa/engine/recipes/graph_recipe.py +0 -1
- rasa/engine/runner/dask.py +2 -2
- rasa/engine/storage/local_model_storage.py +12 -42
- rasa/engine/storage/storage.py +1 -5
- rasa/engine/validation.py +527 -74
- rasa/model_manager/__init__.py +0 -0
- rasa/model_manager/config.py +40 -0
- rasa/model_manager/model_api.py +559 -0
- rasa/model_manager/runner_service.py +286 -0
- rasa/model_manager/socket_bridge.py +146 -0
- rasa/model_manager/studio_jwt_auth.py +86 -0
- rasa/model_manager/trainer_service.py +325 -0
- rasa/model_manager/utils.py +87 -0
- rasa/model_manager/warm_rasa_process.py +187 -0
- rasa/model_service.py +112 -0
- rasa/model_training.py +42 -23
- rasa/nlu/tokenizers/whitespace_tokenizer.py +3 -14
- rasa/server.py +4 -2
- rasa/shared/constants.py +60 -8
- rasa/shared/core/constants.py +13 -0
- rasa/shared/core/domain.py +107 -50
- rasa/shared/core/events.py +29 -0
- rasa/shared/core/flows/flow.py +5 -0
- rasa/shared/core/flows/flows_list.py +19 -6
- rasa/shared/core/flows/flows_yaml_schema.json +10 -0
- rasa/shared/core/flows/utils.py +39 -0
- rasa/shared/core/flows/validation.py +121 -0
- rasa/shared/core/flows/yaml_flows_io.py +15 -27
- rasa/shared/core/slots.py +5 -0
- rasa/shared/importers/importer.py +59 -41
- rasa/shared/importers/multi_project.py +23 -11
- rasa/shared/importers/rasa.py +12 -3
- rasa/shared/importers/remote_importer.py +196 -0
- rasa/shared/importers/utils.py +3 -1
- rasa/shared/nlu/training_data/formats/rasa_yaml.py +18 -3
- rasa/shared/nlu/training_data/training_data.py +18 -19
- rasa/shared/providers/_configs/litellm_router_client_config.py +220 -0
- rasa/shared/providers/_configs/model_group_config.py +167 -0
- rasa/shared/providers/_configs/openai_client_config.py +1 -1
- rasa/shared/providers/_configs/rasa_llm_client_config.py +73 -0
- rasa/shared/providers/_configs/self_hosted_llm_client_config.py +1 -0
- rasa/shared/providers/_configs/utils.py +16 -0
- rasa/shared/providers/_utils.py +79 -0
- rasa/shared/providers/embedding/_base_litellm_embedding_client.py +13 -29
- rasa/shared/providers/embedding/azure_openai_embedding_client.py +54 -21
- rasa/shared/providers/embedding/default_litellm_embedding_client.py +24 -0
- rasa/shared/providers/embedding/litellm_router_embedding_client.py +135 -0
- rasa/shared/providers/llm/_base_litellm_client.py +34 -22
- rasa/shared/providers/llm/azure_openai_llm_client.py +50 -29
- rasa/shared/providers/llm/default_litellm_llm_client.py +24 -0
- rasa/shared/providers/llm/litellm_router_llm_client.py +182 -0
- rasa/shared/providers/llm/rasa_llm_client.py +112 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +5 -29
- rasa/shared/providers/mappings.py +19 -0
- rasa/shared/providers/router/__init__.py +0 -0
- rasa/shared/providers/router/_base_litellm_router_client.py +183 -0
- rasa/shared/providers/router/router_client.py +73 -0
- rasa/shared/utils/common.py +40 -24
- rasa/shared/utils/health_check/__init__.py +0 -0
- rasa/shared/utils/health_check/embeddings_health_check_mixin.py +31 -0
- rasa/shared/utils/health_check/health_check.py +258 -0
- rasa/shared/utils/health_check/llm_health_check_mixin.py +31 -0
- rasa/shared/utils/io.py +27 -6
- rasa/shared/utils/llm.py +354 -44
- rasa/shared/utils/schemas/events.py +2 -0
- rasa/shared/utils/schemas/model_config.yml +0 -10
- rasa/shared/utils/yaml.py +181 -38
- rasa/studio/data_handler.py +3 -1
- rasa/studio/upload.py +160 -74
- rasa/telemetry.py +94 -17
- rasa/tracing/config.py +3 -1
- rasa/tracing/instrumentation/attribute_extractors.py +95 -18
- rasa/tracing/instrumentation/instrumentation.py +121 -0
- rasa/utils/common.py +5 -0
- rasa/utils/endpoints.py +27 -1
- rasa/utils/io.py +8 -16
- rasa/utils/log_utils.py +9 -2
- rasa/utils/sanic_error_handler.py +32 -0
- rasa/validator.py +110 -16
- rasa/version.py +1 -1
- {rasa_pro-3.10.16.dist-info → rasa_pro-3.11.0.dist-info}/METADATA +16 -14
- {rasa_pro-3.10.16.dist-info → rasa_pro-3.11.0.dist-info}/RECORD +236 -185
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-1844e5a5.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-a5d3e69d.js +0 -1040
- rasa/core/channels/voice_aware/utils.py +0 -20
- rasa/llm_fine_tuning/notebooks/unsloth_finetuning.ipynb +0 -407
- /rasa/core/channels/{voice_aware → voice_ready}/__init__.py +0 -0
- /rasa/core/channels/{voice_native → voice_stream}/__init__.py +0 -0
- {rasa_pro-3.10.16.dist-info → rasa_pro-3.11.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.10.16.dist-info → rasa_pro-3.11.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.10.16.dist-info → rasa_pro-3.11.0.dist-info}/entry_points.txt +0 -0
|
@@ -5,13 +5,24 @@ export interface Slot {
|
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
export interface Event {
|
|
8
|
-
event: "user" | "bot";
|
|
8
|
+
event: "user" | "bot" | "flow_completed" | "flow_started" | "stack" | "restart";
|
|
9
9
|
text?: string;
|
|
10
|
+
timestamp: string;
|
|
11
|
+
update?: string;
|
|
12
|
+
parse_data?: { commands: Command[] };
|
|
10
13
|
metadata?: { utter_action?: string };
|
|
11
14
|
}
|
|
12
15
|
|
|
16
|
+
export interface Command {
|
|
17
|
+
command: string;
|
|
18
|
+
flow?: string;
|
|
19
|
+
name?: string;
|
|
20
|
+
value?: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
13
23
|
export interface SelectedStack {
|
|
14
24
|
stack: Stack;
|
|
25
|
+
activatedSteps: string[];
|
|
15
26
|
isUserSelected: boolean;
|
|
16
27
|
}
|
|
17
28
|
|
|
@@ -21,8 +32,17 @@ export interface Stack {
|
|
|
21
32
|
step_id: string;
|
|
22
33
|
collect?: string;
|
|
23
34
|
utter?: string;
|
|
35
|
+
ended: boolean;
|
|
24
36
|
}
|
|
25
37
|
|
|
38
|
+
export interface Tracker {
|
|
39
|
+
sender_id: string;
|
|
40
|
+
slots: { [key: string]: unknown };
|
|
41
|
+
events: Event[];
|
|
42
|
+
stack: Stack[];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
26
46
|
export interface Flow {
|
|
27
47
|
id: string;
|
|
28
48
|
description: string;
|
|
@@ -1674,6 +1674,23 @@
|
|
|
1674
1674
|
"@jridgewell/resolve-uri" "^3.1.0"
|
|
1675
1675
|
"@jridgewell/sourcemap-codec" "^1.4.14"
|
|
1676
1676
|
|
|
1677
|
+
"@lit-labs/react@^2.1.3":
|
|
1678
|
+
version "2.1.3"
|
|
1679
|
+
resolved "https://registry.yarnpkg.com/@lit-labs/react/-/react-2.1.3.tgz#5fca408c435f0b6297fc1314471dc2426206d413"
|
|
1680
|
+
integrity sha512-OD9h2JynerBQUMNzb563jiVpxfvPF0HjQkKY2mx0lpVYvD7F+rtJpOGz6ek+6ufMidV3i+MPT9SX62OKWHFrQg==
|
|
1681
|
+
dependencies:
|
|
1682
|
+
"@lit/react" "^1.0.3"
|
|
1683
|
+
|
|
1684
|
+
"@lit/react@^1.0.3":
|
|
1685
|
+
version "1.0.5"
|
|
1686
|
+
resolved "https://registry.yarnpkg.com/@lit/react/-/react-1.0.5.tgz#9c53a8d719f91ef7edca0bdd68f5589ea579ffc1"
|
|
1687
|
+
integrity sha512-RSHhrcuSMa4vzhqiTenzXvtQ6QDq3hSPsnHHO3jaPmmvVFeoNNm4DHoQ0zLdKAUvY3wP3tTENSUf7xpyVfrDEA==
|
|
1688
|
+
|
|
1689
|
+
"@microsoft/fetch-event-source@^2.0.1":
|
|
1690
|
+
version "2.0.1"
|
|
1691
|
+
resolved "https://registry.yarnpkg.com/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz#9ceecc94b49fbaa15666e38ae8587f64acce007d"
|
|
1692
|
+
integrity sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==
|
|
1693
|
+
|
|
1677
1694
|
"@nodelib/fs.scandir@2.1.5":
|
|
1678
1695
|
version "2.1.5"
|
|
1679
1696
|
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
|
|
@@ -2215,7 +2232,7 @@ arg@^4.1.0:
|
|
|
2215
2232
|
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
|
|
2216
2233
|
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
|
|
2217
2234
|
|
|
2218
|
-
argparse@^1.0.7:
|
|
2235
|
+
argparse@^1.0.10, argparse@^1.0.7:
|
|
2219
2236
|
version "1.0.10"
|
|
2220
2237
|
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
|
|
2221
2238
|
integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
|
|
@@ -2266,6 +2283,13 @@ asynckit@^0.4.0:
|
|
|
2266
2283
|
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
|
2267
2284
|
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
|
2268
2285
|
|
|
2286
|
+
autolinker@^3.11.0:
|
|
2287
|
+
version "3.16.2"
|
|
2288
|
+
resolved "https://registry.yarnpkg.com/autolinker/-/autolinker-3.16.2.tgz#6bb4f32432fc111b65659336863e653973bfbcc9"
|
|
2289
|
+
integrity sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==
|
|
2290
|
+
dependencies:
|
|
2291
|
+
tslib "^2.3.0"
|
|
2292
|
+
|
|
2269
2293
|
available-typed-arrays@^1.0.5:
|
|
2270
2294
|
version "1.0.5"
|
|
2271
2295
|
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
|
|
@@ -2999,11 +3023,33 @@ decode-named-character-reference@^1.0.0:
|
|
|
2999
3023
|
dependencies:
|
|
3000
3024
|
character-entities "^2.0.0"
|
|
3001
3025
|
|
|
3026
|
+
decode-uri-component@^0.4.1:
|
|
3027
|
+
version "0.4.1"
|
|
3028
|
+
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.4.1.tgz#2ac4859663c704be22bf7db760a1494a49ab2cc5"
|
|
3029
|
+
integrity sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==
|
|
3030
|
+
|
|
3002
3031
|
dedent@^1.0.0:
|
|
3003
3032
|
version "1.5.1"
|
|
3004
3033
|
resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff"
|
|
3005
3034
|
integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==
|
|
3006
3035
|
|
|
3036
|
+
deep-chat-react@2.0.1:
|
|
3037
|
+
version "2.0.1"
|
|
3038
|
+
resolved "https://registry.yarnpkg.com/deep-chat-react/-/deep-chat-react-2.0.1.tgz#a8590a708787c478ab0bd469f1afddca3b65a62e"
|
|
3039
|
+
integrity sha512-oq3ztyhwgPemvJ+LAP2Zbb8rBFty41TlxtCE6bpzGx60mv3tEXd9DvmcI+CQWPDcYRonJLu0tMNxKVwTlY3Ybg==
|
|
3040
|
+
dependencies:
|
|
3041
|
+
"@lit-labs/react" "^2.1.3"
|
|
3042
|
+
deep-chat "2.0.1"
|
|
3043
|
+
|
|
3044
|
+
deep-chat@2.0.1:
|
|
3045
|
+
version "2.0.1"
|
|
3046
|
+
resolved "https://registry.yarnpkg.com/deep-chat/-/deep-chat-2.0.1.tgz#a3892a994e312f60f6fea38d8b63818a93e32dc2"
|
|
3047
|
+
integrity sha512-dLzEvRah+lr+Z6MZq/XSkuIJu2jyd38QVdqMeXGy2WKJQGmBnFZOK/m+F+hsLm9nz2MSfnMYXxGitQI4SNzBcQ==
|
|
3048
|
+
dependencies:
|
|
3049
|
+
"@microsoft/fetch-event-source" "^2.0.1"
|
|
3050
|
+
remarkable "^2.0.1"
|
|
3051
|
+
speech-to-element "^0.1.66"
|
|
3052
|
+
|
|
3007
3053
|
deep-equal@^2.0.5:
|
|
3008
3054
|
version "2.2.2"
|
|
3009
3055
|
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.2.tgz#9b2635da569a13ba8e1cc159c2f744071b115daa"
|
|
@@ -3444,6 +3490,11 @@ fill-range@^7.0.1:
|
|
|
3444
3490
|
dependencies:
|
|
3445
3491
|
to-regex-range "^5.0.1"
|
|
3446
3492
|
|
|
3493
|
+
filter-obj@^5.1.0:
|
|
3494
|
+
version "5.1.0"
|
|
3495
|
+
resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-5.1.0.tgz#5bd89676000a713d7db2e197f660274428e524ed"
|
|
3496
|
+
integrity sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==
|
|
3497
|
+
|
|
3447
3498
|
find-root@^1.1.0:
|
|
3448
3499
|
version "1.1.0"
|
|
3449
3500
|
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
|
|
@@ -3780,6 +3831,11 @@ ignore@^5.2.0, ignore@^5.2.4:
|
|
|
3780
3831
|
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
|
|
3781
3832
|
integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
|
|
3782
3833
|
|
|
3834
|
+
immutable-json-patch@^6.0.1:
|
|
3835
|
+
version "6.0.1"
|
|
3836
|
+
resolved "https://registry.yarnpkg.com/immutable-json-patch/-/immutable-json-patch-6.0.1.tgz#b60b609633e97bb2bc7c74726ff607729e61fd5b"
|
|
3837
|
+
integrity sha512-BHL/cXMjwFZlTOffiWNdY8ZTvNyYLrutCnWxrcKPHr5FqpAb6vsO6WWSPnVSys3+DruFN6lhHJJPHi8uELQL5g==
|
|
3838
|
+
|
|
3783
3839
|
import-fresh@^3.2.1:
|
|
3784
3840
|
version "3.3.0"
|
|
3785
3841
|
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
|
|
@@ -5301,6 +5357,15 @@ pure-rand@^6.0.0:
|
|
|
5301
5357
|
resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7"
|
|
5302
5358
|
integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==
|
|
5303
5359
|
|
|
5360
|
+
query-string@^9.0.0:
|
|
5361
|
+
version "9.0.0"
|
|
5362
|
+
resolved "https://registry.yarnpkg.com/query-string/-/query-string-9.0.0.tgz#1fe177cd95545600f0deab93f5fb02fd4e3e7273"
|
|
5363
|
+
integrity sha512-4EWwcRGsO2H+yzq6ddHcVqkCQ2EFUSfDMEjF8ryp8ReymyZhIuaFRGLomeOQLkrzacMHoyky2HW0Qe30UbzkKw==
|
|
5364
|
+
dependencies:
|
|
5365
|
+
decode-uri-component "^0.4.1"
|
|
5366
|
+
filter-obj "^5.1.0"
|
|
5367
|
+
split-on-first "^3.0.0"
|
|
5368
|
+
|
|
5304
5369
|
querystringify@^2.1.1:
|
|
5305
5370
|
version "2.2.0"
|
|
5306
5371
|
resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
|
|
@@ -5402,6 +5467,11 @@ react-syntax-highlighter@15.5.0:
|
|
|
5402
5467
|
prismjs "^1.27.0"
|
|
5403
5468
|
refractor "^3.6.0"
|
|
5404
5469
|
|
|
5470
|
+
react-use-websocket@^4.8.1:
|
|
5471
|
+
version "4.8.1"
|
|
5472
|
+
resolved "https://registry.yarnpkg.com/react-use-websocket/-/react-use-websocket-4.8.1.tgz#be06a0bc956c6d56391a29cbe2caa6ae8edb5615"
|
|
5473
|
+
integrity sha512-FTXuG5O+LFozmu1BRfrzl7UIQngECvGJmL7BHsK4TYXuVt+mCizVA8lT0hGSIF0Z0TedF7bOo1nRzOUdginhDw==
|
|
5474
|
+
|
|
5405
5475
|
react@18.2.0:
|
|
5406
5476
|
version "18.2.0"
|
|
5407
5477
|
resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
|
|
@@ -5440,6 +5510,14 @@ regexp.prototype.flags@^1.5.0:
|
|
|
5440
5510
|
define-properties "^1.2.0"
|
|
5441
5511
|
set-function-name "^2.0.0"
|
|
5442
5512
|
|
|
5513
|
+
remarkable@^2.0.1:
|
|
5514
|
+
version "2.0.1"
|
|
5515
|
+
resolved "https://registry.yarnpkg.com/remarkable/-/remarkable-2.0.1.tgz#280ae6627384dfb13d98ee3995627ca550a12f31"
|
|
5516
|
+
integrity sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==
|
|
5517
|
+
dependencies:
|
|
5518
|
+
argparse "^1.0.10"
|
|
5519
|
+
autolinker "^3.11.0"
|
|
5520
|
+
|
|
5443
5521
|
require-directory@^2.1.1:
|
|
5444
5522
|
version "2.1.1"
|
|
5445
5523
|
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
|
@@ -5638,6 +5716,16 @@ space-separated-tokens@^1.0.0:
|
|
|
5638
5716
|
resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899"
|
|
5639
5717
|
integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==
|
|
5640
5718
|
|
|
5719
|
+
speech-to-element@^0.1.66:
|
|
5720
|
+
version "0.1.66"
|
|
5721
|
+
resolved "https://registry.yarnpkg.com/speech-to-element/-/speech-to-element-0.1.66.tgz#911279115fa72bd997a92fab428ed857062e4ba0"
|
|
5722
|
+
integrity sha512-tHDZ8ttFCsXtQLgWHDDVVTGuiCGWqkxRoIGLygBbU0DUsod2Ho89fws7OeCHpGOeDL9s5rBVpEqj45BsEIKy+Q==
|
|
5723
|
+
|
|
5724
|
+
split-on-first@^3.0.0:
|
|
5725
|
+
version "3.0.0"
|
|
5726
|
+
resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-3.0.0.tgz#f04959c9ea8101b9b0bbf35a61b9ebea784a23e7"
|
|
5727
|
+
integrity sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==
|
|
5728
|
+
|
|
5641
5729
|
sprintf-js@~1.0.2:
|
|
5642
5730
|
version "1.0.3"
|
|
5643
5731
|
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
|
@@ -5855,6 +5943,11 @@ tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0:
|
|
|
5855
5943
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
|
|
5856
5944
|
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
|
|
5857
5945
|
|
|
5946
|
+
tslib@^2.3.0:
|
|
5947
|
+
version "2.6.3"
|
|
5948
|
+
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0"
|
|
5949
|
+
integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==
|
|
5950
|
+
|
|
5858
5951
|
type-check@^0.4.0, type-check@~0.4.0:
|
|
5859
5952
|
version "0.4.0"
|
|
5860
5953
|
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
|
rasa/core/channels/rest.py
CHANGED
|
@@ -9,7 +9,6 @@ import structlog
|
|
|
9
9
|
from asyncio import Queue, CancelledError
|
|
10
10
|
from sanic import Blueprint, response
|
|
11
11
|
from sanic.request import Request
|
|
12
|
-
from sanic.response import HTTPResponse, ResponseStream
|
|
13
12
|
from typing import (
|
|
14
13
|
Text,
|
|
15
14
|
Dict,
|
|
@@ -20,6 +19,7 @@ from typing import (
|
|
|
20
19
|
NoReturn,
|
|
21
20
|
Union,
|
|
22
21
|
)
|
|
22
|
+
from sanic.response import HTTPResponse, ResponseStream, BaseHTTPResponse
|
|
23
23
|
|
|
24
24
|
import rasa.utils.endpoints
|
|
25
25
|
from rasa.core.channels.channel import (
|
|
@@ -128,6 +128,54 @@ class RestInput(InputChannel):
|
|
|
128
128
|
|
|
129
129
|
await task
|
|
130
130
|
|
|
131
|
+
async def receive_messages(
|
|
132
|
+
self, request: Request, on_new_message: Callable[[UserMessage], Awaitable[None]]
|
|
133
|
+
) -> Union[BaseHTTPResponse, ResponseStream]:
|
|
134
|
+
sender_id = await self._extract_sender(request)
|
|
135
|
+
text = self._extract_message(request)
|
|
136
|
+
should_use_stream = rasa.utils.endpoints.bool_arg(
|
|
137
|
+
request, "stream", default=False
|
|
138
|
+
)
|
|
139
|
+
input_channel = self._extract_input_channel(request)
|
|
140
|
+
metadata = self.get_metadata(request)
|
|
141
|
+
|
|
142
|
+
if should_use_stream:
|
|
143
|
+
return ResponseStream(
|
|
144
|
+
partial(
|
|
145
|
+
self.stream_response,
|
|
146
|
+
on_new_message,
|
|
147
|
+
text,
|
|
148
|
+
sender_id,
|
|
149
|
+
input_channel,
|
|
150
|
+
metadata,
|
|
151
|
+
),
|
|
152
|
+
content_type="text/event-stream",
|
|
153
|
+
)
|
|
154
|
+
else:
|
|
155
|
+
collector = CollectingOutputChannel()
|
|
156
|
+
# noinspection PyBroadException
|
|
157
|
+
try:
|
|
158
|
+
await on_new_message(
|
|
159
|
+
UserMessage(
|
|
160
|
+
text,
|
|
161
|
+
collector,
|
|
162
|
+
sender_id,
|
|
163
|
+
input_channel=input_channel,
|
|
164
|
+
metadata=metadata,
|
|
165
|
+
headers=request.headers,
|
|
166
|
+
)
|
|
167
|
+
)
|
|
168
|
+
except CancelledError:
|
|
169
|
+
structlogger.error(
|
|
170
|
+
"rest.message.received.timeout", text=copy.deepcopy(text)
|
|
171
|
+
)
|
|
172
|
+
except Exception:
|
|
173
|
+
structlogger.exception(
|
|
174
|
+
"rest.message.received.failure", text=copy.deepcopy(text)
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
return response.json(collector.messages)
|
|
178
|
+
|
|
131
179
|
def blueprint(
|
|
132
180
|
self, on_new_message: Callable[[UserMessage], Awaitable[None]]
|
|
133
181
|
) -> Blueprint:
|
|
@@ -149,51 +197,8 @@ class RestInput(InputChannel):
|
|
|
149
197
|
return response.json({"status": "ok"})
|
|
150
198
|
|
|
151
199
|
@custom_webhook.route("/webhook", methods=["POST"])
|
|
152
|
-
async def receive(request: Request) -> Union[ResponseStream,
|
|
153
|
-
|
|
154
|
-
text = self._extract_message(request)
|
|
155
|
-
should_use_stream = rasa.utils.endpoints.bool_arg(
|
|
156
|
-
request, "stream", default=False
|
|
157
|
-
)
|
|
158
|
-
input_channel = self._extract_input_channel(request)
|
|
159
|
-
metadata = self.get_metadata(request)
|
|
160
|
-
|
|
161
|
-
if should_use_stream:
|
|
162
|
-
return ResponseStream(
|
|
163
|
-
partial(
|
|
164
|
-
self.stream_response,
|
|
165
|
-
on_new_message,
|
|
166
|
-
text,
|
|
167
|
-
sender_id,
|
|
168
|
-
input_channel,
|
|
169
|
-
metadata,
|
|
170
|
-
),
|
|
171
|
-
content_type="text/event-stream",
|
|
172
|
-
)
|
|
173
|
-
else:
|
|
174
|
-
collector = CollectingOutputChannel()
|
|
175
|
-
# noinspection PyBroadException
|
|
176
|
-
try:
|
|
177
|
-
await on_new_message(
|
|
178
|
-
UserMessage(
|
|
179
|
-
text,
|
|
180
|
-
collector,
|
|
181
|
-
sender_id,
|
|
182
|
-
input_channel=input_channel,
|
|
183
|
-
metadata=metadata,
|
|
184
|
-
headers=request.headers,
|
|
185
|
-
)
|
|
186
|
-
)
|
|
187
|
-
except CancelledError:
|
|
188
|
-
structlogger.error(
|
|
189
|
-
"rest.message.received.timeout", text=copy.deepcopy(text)
|
|
190
|
-
)
|
|
191
|
-
except Exception:
|
|
192
|
-
structlogger.exception(
|
|
193
|
-
"rest.message.received.failure", text=copy.deepcopy(text)
|
|
194
|
-
)
|
|
195
|
-
|
|
196
|
-
return response.json(collector.messages)
|
|
200
|
+
async def receive(request: Request) -> Union[ResponseStream, BaseHTTPResponse]:
|
|
201
|
+
return await self.receive_messages(request, on_new_message)
|
|
197
202
|
|
|
198
203
|
return custom_webhook
|
|
199
204
|
|
rasa/core/channels/socketio.py
CHANGED
|
@@ -37,7 +37,11 @@ class SocketBlueprint(Blueprint):
|
|
|
37
37
|
:param options: Options to be used while registering the
|
|
38
38
|
blueprint into the app.
|
|
39
39
|
"""
|
|
40
|
-
|
|
40
|
+
if self.ctx.socketio_path:
|
|
41
|
+
path = self.ctx.socketio_path
|
|
42
|
+
else:
|
|
43
|
+
path = options.get("url_prefix", "/socket.io")
|
|
44
|
+
self.ctx.sio.attach(app, path)
|
|
41
45
|
super().register(app, options)
|
|
42
46
|
|
|
43
47
|
|
|
@@ -47,11 +51,34 @@ class SocketIOOutput(OutputChannel):
|
|
|
47
51
|
return "socketio"
|
|
48
52
|
|
|
49
53
|
def __init__(self, sio: AsyncServer, bot_message_evt: Text) -> None:
|
|
54
|
+
super().__init__()
|
|
50
55
|
self.sio = sio
|
|
51
56
|
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
|
|
52
70
|
|
|
53
71
|
async def _send_message(self, socket_id: Text, response: Any) -> None:
|
|
54
72
|
"""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
|
|
55
82
|
await self.sio.emit(self.bot_message_evt, response, room=socket_id)
|
|
56
83
|
|
|
57
84
|
async def send_text_message(
|
rasa/core/channels/telegram.py
CHANGED
|
@@ -34,7 +34,7 @@ class TelegramOutput(Bot, OutputChannel):
|
|
|
34
34
|
return "telegram"
|
|
35
35
|
|
|
36
36
|
def __init__(self, access_token: Optional[Text]) -> None:
|
|
37
|
-
|
|
37
|
+
Bot.__init__(self, access_token)
|
|
38
38
|
|
|
39
39
|
async def send_text_message(
|
|
40
40
|
self, recipient_id: Text, text: Text, **kwargs: Any
|
rasa/core/channels/twilio.py
CHANGED
|
@@ -28,7 +28,7 @@ class TwilioOutput(Client, OutputChannel):
|
|
|
28
28
|
auth_token: Optional[Text],
|
|
29
29
|
twilio_number: Optional[Text],
|
|
30
30
|
) -> None:
|
|
31
|
-
|
|
31
|
+
Client.__init__(self, account_sid, auth_token)
|
|
32
32
|
self.twilio_number = twilio_number
|
|
33
33
|
self.send_retry = 0
|
|
34
34
|
self.max_retry = 5
|