rasa-pro 3.11.15__py3-none-any.whl → 3.11.16__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/core/processor.py CHANGED
@@ -17,6 +17,9 @@ from rasa.dialogue_understanding.commands import (
17
17
  NoopCommand,
18
18
  SetSlotCommand,
19
19
  CannotHandleCommand,
20
+ SessionStartCommand,
21
+ SessionEndCommand,
22
+ RestartCommand,
20
23
  )
21
24
  from rasa.engine import loader
22
25
  from rasa.engine.constants import (
@@ -855,19 +858,61 @@ class MessageProcessor:
855
858
  tracker.has_coexistence_routing_slot
856
859
  and tracker.get_slot(ROUTE_TO_CALM_SLOT) is None
857
860
  ):
858
- # if we are currently not routing to either CALM or dm1
859
- # we make a sticky routing to CALM if there are any commands
860
- # from the trigger intent parsing
861
- # or a sticky routing to dm1 if there are no commands
861
+ # If we are currently not routing to either CALM or DM1:
862
+ # - Sticky route to CALM if there are any commands
863
+ # from the trigger intent parsing
864
+ # - Sticky route to DM1 if there are no commands present
865
+ route_to_calm_slot_value = self._determine_route_to_calm_slot_value(
866
+ nlu_adapted_commands
867
+ )
862
868
  commands += [
863
869
  SetSlotCommand(
864
- ROUTE_TO_CALM_SLOT, len(nlu_adapted_commands) > 0
870
+ ROUTE_TO_CALM_SLOT, route_to_calm_slot_value
865
871
  ).as_dict()
866
872
  ]
867
873
 
868
874
  parse_data[COMMANDS] = commands
869
875
  return parse_data
870
876
 
877
+ def _determine_route_to_calm_slot_value(
878
+ self, nlu_adapted_commands: List[Dict[str, Any]]
879
+ ) -> Optional[bool]:
880
+ """Determines what value should be assigned to `ROUTE_TO_CALM_SLOT`.
881
+
882
+ Returns:
883
+ - True: If any command other than:
884
+ - SessionStartCommand
885
+ - SessionEndCommand
886
+ - RestartCommand
887
+ is present.
888
+ - None: If only ignored system commands are present.
889
+ - False If no commands at all.
890
+ """
891
+ system_commands_to_ignore = [
892
+ SessionStartCommand.command(),
893
+ SessionEndCommand.command(),
894
+ RestartCommand.command(),
895
+ ]
896
+
897
+ # Exclude the system commands, as it doesn't originate from the user's
898
+ # input intent and shouldn't influence the decision for setting
899
+ # ROUTE_TO_CALM_SLOT.
900
+ intent_triggered_commands = [
901
+ command
902
+ for command in nlu_adapted_commands
903
+ if command.get("command") not in system_commands_to_ignore
904
+ ]
905
+
906
+ if len(intent_triggered_commands) > 0:
907
+ # There are commands other than system commands present - route to CALM
908
+ return True
909
+ elif len(nlu_adapted_commands) > 0:
910
+ # Only system command is present — defer routing decision
911
+ return None
912
+ else:
913
+ # No commands at all — route to DM1
914
+ return False
915
+
871
916
  def _update_full_retrieval_intent(self, parse_data: Dict[Text, Any]) -> None:
872
917
  """Update the parse data with the full retrieval intent.
873
918
 
@@ -0,0 +1,45 @@
1
+ from typing import Dict, Type
2
+
3
+ from rasa.dialogue_understanding.commands import (
4
+ CancelFlowCommand,
5
+ CannotHandleCommand,
6
+ ChitChatAnswerCommand,
7
+ Command,
8
+ HumanHandoffCommand,
9
+ KnowledgeAnswerCommand,
10
+ SessionStartCommand,
11
+ SkipQuestionCommand,
12
+ RestartCommand,
13
+ )
14
+ from rasa.dialogue_understanding.commands.user_silence_command import UserSilenceCommand
15
+ from rasa.dialogue_understanding.patterns.cancel import CancelPatternFlowStackFrame
16
+ from rasa.dialogue_understanding.patterns.cannot_handle import (
17
+ CannotHandlePatternFlowStackFrame,
18
+ )
19
+ from rasa.dialogue_understanding.patterns.chitchat import ChitchatPatternFlowStackFrame
20
+ from rasa.dialogue_understanding.patterns.human_handoff import (
21
+ HumanHandoffPatternFlowStackFrame,
22
+ )
23
+ from rasa.dialogue_understanding.patterns.restart import RestartPatternFlowStackFrame
24
+ from rasa.dialogue_understanding.patterns.search import SearchPatternFlowStackFrame
25
+ from rasa.dialogue_understanding.patterns.session_start import (
26
+ SessionStartPatternFlowStackFrame,
27
+ )
28
+ from rasa.dialogue_understanding.patterns.skip_question import (
29
+ SkipQuestionPatternFlowStackFrame,
30
+ )
31
+ from rasa.dialogue_understanding.patterns.user_silence import (
32
+ UserSilencePatternFlowStackFrame,
33
+ )
34
+
35
+ triggerable_pattern_to_command_class: Dict[str, Type[Command]] = {
36
+ SessionStartPatternFlowStackFrame.flow_id: SessionStartCommand,
37
+ UserSilencePatternFlowStackFrame.flow_id: UserSilenceCommand,
38
+ CancelPatternFlowStackFrame.flow_id: CancelFlowCommand,
39
+ ChitchatPatternFlowStackFrame.flow_id: ChitChatAnswerCommand,
40
+ HumanHandoffPatternFlowStackFrame.flow_id: HumanHandoffCommand,
41
+ SearchPatternFlowStackFrame.flow_id: KnowledgeAnswerCommand,
42
+ SkipQuestionPatternFlowStackFrame.flow_id: SkipQuestionCommand,
43
+ CannotHandlePatternFlowStackFrame.flow_id: CannotHandleCommand,
44
+ RestartPatternFlowStackFrame.flow_id: RestartCommand,
45
+ }
@@ -6,6 +6,9 @@ from typing import Any, Dict, List
6
6
 
7
7
  import structlog
8
8
  from rasa.dialogue_understanding.commands import Command
9
+ from rasa.dialogue_understanding.commands.utils import (
10
+ find_default_flows_collecting_slot,
11
+ )
9
12
  from rasa.dialogue_understanding.patterns.collect_information import (
10
13
  CollectInformationPatternFlowStackFrame,
11
14
  )
@@ -135,6 +138,11 @@ class SetSlotCommand(Command):
135
138
  ):
136
139
  # Get the other predicted flows from the most recent message on the tracker.
137
140
  predicted_flows = get_flows_predicted_to_start_from_tracker(tracker)
141
+ if not predicted_flows:
142
+ # If no predicted flows, check for default flows collecting the slot.
143
+ predicted_flows = find_default_flows_collecting_slot(
144
+ self.name, all_flows
145
+ )
138
146
  use_slot_fill = any(
139
147
  step.collect == self.name and not step.ask_before_filling
140
148
  for flow in all_flows.underlying_flows
@@ -1,45 +1,26 @@
1
- from typing import Dict, Type
1
+ from typing import List
2
+ from rasa.shared.core.flows import FlowsList
2
3
 
3
- from rasa.dialogue_understanding.commands import (
4
- CancelFlowCommand,
5
- CannotHandleCommand,
6
- ChitChatAnswerCommand,
7
- Command,
8
- HumanHandoffCommand,
9
- KnowledgeAnswerCommand,
10
- SessionStartCommand,
11
- SkipQuestionCommand,
12
- RestartCommand,
13
- )
14
- from rasa.dialogue_understanding.commands.user_silence_command import UserSilenceCommand
15
- from rasa.dialogue_understanding.patterns.cancel import CancelPatternFlowStackFrame
16
- from rasa.dialogue_understanding.patterns.cannot_handle import (
17
- CannotHandlePatternFlowStackFrame,
18
- )
19
- from rasa.dialogue_understanding.patterns.chitchat import ChitchatPatternFlowStackFrame
20
- from rasa.dialogue_understanding.patterns.human_handoff import (
21
- HumanHandoffPatternFlowStackFrame,
22
- )
23
- from rasa.dialogue_understanding.patterns.restart import RestartPatternFlowStackFrame
24
- from rasa.dialogue_understanding.patterns.search import SearchPatternFlowStackFrame
25
- from rasa.dialogue_understanding.patterns.session_start import (
26
- SessionStartPatternFlowStackFrame,
27
- )
28
- from rasa.dialogue_understanding.patterns.skip_question import (
29
- SkipQuestionPatternFlowStackFrame,
30
- )
31
- from rasa.dialogue_understanding.patterns.user_silence import (
32
- UserSilencePatternFlowStackFrame,
33
- )
34
4
 
35
- triggerable_pattern_to_command_class: Dict[str, Type[Command]] = {
36
- SessionStartPatternFlowStackFrame.flow_id: SessionStartCommand,
37
- UserSilencePatternFlowStackFrame.flow_id: UserSilenceCommand,
38
- CancelPatternFlowStackFrame.flow_id: CancelFlowCommand,
39
- ChitchatPatternFlowStackFrame.flow_id: ChitChatAnswerCommand,
40
- HumanHandoffPatternFlowStackFrame.flow_id: HumanHandoffCommand,
41
- SearchPatternFlowStackFrame.flow_id: KnowledgeAnswerCommand,
42
- SkipQuestionPatternFlowStackFrame.flow_id: SkipQuestionCommand,
43
- CannotHandlePatternFlowStackFrame.flow_id: CannotHandleCommand,
44
- RestartPatternFlowStackFrame.flow_id: RestartCommand,
45
- }
5
+ def find_default_flows_collecting_slot(
6
+ slot_name: str, all_flows: FlowsList
7
+ ) -> List[str]:
8
+ """Find default flows that have collect steps matching the specified slot name.
9
+
10
+ Args:
11
+ slot_name: The name of the slot to search for.
12
+ all_flows: All flows in the assistant.
13
+
14
+ Returns:
15
+ List of flow IDs for default flows that collect the specified slot
16
+ without asking before filling.
17
+ """
18
+ return [
19
+ flow.id
20
+ for flow in all_flows.underlying_flows
21
+ if flow.is_rasa_default_flow
22
+ and any(
23
+ step.collect == slot_name and not step.ask_before_filling
24
+ for step in flow.get_collect_steps()
25
+ )
26
+ ]
@@ -8,7 +8,7 @@ from rasa.dialogue_understanding.commands import (
8
8
  SetSlotCommand,
9
9
  )
10
10
  from rasa.dialogue_understanding.commands.set_slot_command import SetSlotExtractor
11
- from rasa.dialogue_understanding.commands.utils import (
11
+ from rasa.dialogue_understanding.commands.pattern_to_command_mapping import (
12
12
  triggerable_pattern_to_command_class,
13
13
  )
14
14
  from rasa.dialogue_understanding.generator import CommandGenerator
@@ -50,7 +50,8 @@ class FlowStackFrameType(str, Enum):
50
50
  typ: The string to create the `FlowStackFrameType` from.
51
51
 
52
52
  Returns:
53
- The created `FlowStackFrameType`."""
53
+ The created `FlowStackFrameType`.
54
+ """
54
55
  if typ is None:
55
56
  return FlowStackFrameType.REGULAR
56
57
  elif typ == FlowStackFrameType.INTERRUPT.value:
@@ -104,7 +105,8 @@ class BaseFlowStackFrame(DialogueStackFrame):
104
105
  all_flows: All flows in the assistant.
105
106
 
106
107
  Returns:
107
- The current flow."""
108
+ The current flow.
109
+ """
108
110
  flow = all_flows.flow_by_id(self.flow_id)
109
111
  if not flow:
110
112
  # we shouldn't ever end up with a frame that belongs to a non
@@ -119,9 +121,20 @@ class BaseFlowStackFrame(DialogueStackFrame):
119
121
  all_flows: All flows in the assistant.
120
122
 
121
123
  Returns:
122
- The current flow step."""
124
+ The current flow step.
125
+ """
123
126
  flow = self.flow(all_flows)
124
- step = flow.step_by_id(self.step_id)
127
+
128
+ step_id = self.step_id
129
+ # in 3.11.4 we added the flow_id as a prefix to the step_id
130
+ # this causes issues when loading old dialogues as the prefix is missing
131
+ # (see https://rasahq.atlassian.net/jira/software/c/projects/ENG/boards/43?selectedIssue=ENG-1939)
132
+ # so we try to find the step by adding the flow prefix to old step_ids as well
133
+ # TODO: remove this in 4.0.0
134
+ alternative_step_id = f"{self.flow_id}_{self.step_id}"
135
+
136
+ step = flow.step_by_id(step_id) or flow.step_by_id(alternative_step_id)
137
+
125
138
  if not step:
126
139
  # we shouldn't ever end up with a frame that belongs to a non
127
140
  # existing step, but if we do, we should raise an error
rasa/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  # this file will automatically be changed,
2
2
  # do not add anything but the version number here!
3
- __version__ = "3.11.15"
3
+ __version__ = "3.11.16"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: rasa-pro
3
- Version: 3.11.15
3
+ Version: 3.11.16
4
4
  Summary: State-of-the-art open-core Conversational AI framework for Enterprises that natively leverages generative AI for effortless assistant development.
5
5
  Keywords: nlp,machine-learning,machine-learning-library,bot,bots,botkit,rasa conversational-agents,conversational-ai,chatbot,chatbot-framework,bot-framework
6
6
  Author: Rasa Technologies GmbH
@@ -336,7 +336,7 @@ rasa/core/policies/policy.py,sha256=HeVtIaV0dA1QcAG3vjdn-4g7-oUEJPL4u01ETJt78YA,
336
336
  rasa/core/policies/rule_policy.py,sha256=YNDPZUZkpKFCvZwKe1kSfP6LQnDL9CQ6JU69JRwdmWw,50729
337
337
  rasa/core/policies/ted_policy.py,sha256=_DHiDH5Upx1yFNzMXBA3SGdHBRfsitTLlr7howUHPoo,87750
338
338
  rasa/core/policies/unexpected_intent_policy.py,sha256=5pGe9EMS-NLHIDDhqY6KCH_Kv7_TGMzSbe_GsjuKH1w,39649
339
- rasa/core/processor.py,sha256=vB9YpzGzn74lyqPn1Y-lIAxmaJd0xfPGMHxwyqeMHkg,55571
339
+ rasa/core/processor.py,sha256=Dbr40giQRL8k039CPC9DMKMxqu8Ue6cqNskLMjMwenY,57221
340
340
  rasa/core/run.py,sha256=NxZ2iZm_nYhaxEN7jvWSVxMAMqZTHj0m2Y7dqCxb3Pw,11653
341
341
  rasa/core/secrets_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
342
342
  rasa/core/secrets_manager/constants.py,sha256=dTDHenvG1JBVi34QIR6FpdO5RDOXQwAjAxLlgJ2ZNEI,1193
@@ -375,15 +375,16 @@ rasa/dialogue_understanding/commands/handle_code_change_command.py,sha256=pKaj8E
375
375
  rasa/dialogue_understanding/commands/human_handoff_command.py,sha256=viSzL3Zmudm2WEjWmOS2s0zfOTXNsWoVU2pS-JXDFlU,1928
376
376
  rasa/dialogue_understanding/commands/knowledge_answer_command.py,sha256=JPiWQC5qWJmryE7DgApDlf9AdGVMazuU9TXx44gc78w,1773
377
377
  rasa/dialogue_understanding/commands/noop_command.py,sha256=302wi-pPXnraqclTDXug6_IYucEZCwDtP032OhPv1JY,1476
378
+ rasa/dialogue_understanding/commands/pattern_to_command_mapping.py,sha256=OiyLFGEsrfFSIJcvBY6lTIIXqDY9OxaikVGtcl4Kokk,1911
378
379
  rasa/dialogue_understanding/commands/repeat_bot_messages_command.py,sha256=9hbDrTruhe2NogR8Xtt0SVcJUAlN2sQTzmynCaB_-ns,1858
379
380
  rasa/dialogue_understanding/commands/restart_command.py,sha256=lUGO8iAyHH6esuWi7sKZQzZIfzYipx4Vo58-B9U20gg,1678
380
381
  rasa/dialogue_understanding/commands/session_end_command.py,sha256=xMVOZJv7J3WAShGzJywQPcd5w263w6K_eYSROwpHUsk,1808
381
382
  rasa/dialogue_understanding/commands/session_start_command.py,sha256=k5cGcE4Usxwfua1sE-KY-qWdwHlHZKgVx5XPDt_-RFY,1742
382
- rasa/dialogue_understanding/commands/set_slot_command.py,sha256=jsiG3K0SYqsx3bah9mxBw0DR5EliaiZ8iMsDzv2wTxw,5187
383
+ rasa/dialogue_understanding/commands/set_slot_command.py,sha256=7HLw7iSXxygLG5v1ppV-iCkEDfg4ODvSIqV30rmW3jo,5537
383
384
  rasa/dialogue_understanding/commands/skip_question_command.py,sha256=bSrUFOHUz1ozdaHma-KAaAArhP59RB3W8CEEBQaPIkA,2251
384
385
  rasa/dialogue_understanding/commands/start_flow_command.py,sha256=a0Yk8xpBpFgC3Hkh4J8kAudz4s4ZLQWuoDq_a63lQXM,3309
385
386
  rasa/dialogue_understanding/commands/user_silence_command.py,sha256=QtqsMU5mrbUp5dla2yGSpxXfIfi_h6Eu72mTDZQ_aTU,1724
386
- rasa/dialogue_understanding/commands/utils.py,sha256=OiyLFGEsrfFSIJcvBY6lTIIXqDY9OxaikVGtcl4Kokk,1911
387
+ rasa/dialogue_understanding/commands/utils.py,sha256=GA3J3K2fLhMJNtbul8Es9UdkIAmm8zT2MP9GBM9gITI,766
387
388
  rasa/dialogue_understanding/generator/__init__.py,sha256=Ykeb2wQ1DuiUWAWO0hLIPSTK1_Ktiq9DZXF6D3ugN78,764
388
389
  rasa/dialogue_understanding/generator/command_generator.py,sha256=woJ4-59Iarugyxy0fT0zM0QnF8el8m2bBSpy-9Gh8U0,11945
389
390
  rasa/dialogue_understanding/generator/constants.py,sha256=KhvcY7rP8x3oWOSqFqE6JYoHzfYIqDFT-o4KbrDUPTY,811
@@ -395,7 +396,7 @@ rasa/dialogue_understanding/generator/multi_step/__init__.py,sha256=47DEQpj8HBSa
395
396
  rasa/dialogue_understanding/generator/multi_step/fill_slots_prompt.jinja2,sha256=Y0m673tAML3cFPaLM-urMXDsBYUUcXIw9YUpkAhGUuA,2933
396
397
  rasa/dialogue_understanding/generator/multi_step/handle_flows_prompt.jinja2,sha256=8l93_QBKBYnqLICVdiTu5ejZDE8F36BU8-qwba0px44,1927
397
398
  rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py,sha256=jo3hZO2SYDgUdwYGKAqiJJC2uYTwyBrOQo9o6u1mq0c,32670
398
- rasa/dialogue_understanding/generator/nlu_command_adapter.py,sha256=wEqoSVUtr00lhbE9L9WqKfZkMKOvm7UGe_E5aqXgn6I,9210
399
+ rasa/dialogue_understanding/generator/nlu_command_adapter.py,sha256=AcmzRZZM0x3_mauIverkbKRykg7xHSh_dggVqlAVD6c,9231
399
400
  rasa/dialogue_understanding/generator/single_step/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
400
401
  rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2,sha256=nMayu-heJYH1QmcL1cFmXb8SeiJzfdDR_9Oy5IRUXsM,3937
401
402
  rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py,sha256=UqbbuFCPaNHVL6Q-8XB_bMWYbQ07awlRPjH7nIoMatk,18170
@@ -426,7 +427,7 @@ rasa/dialogue_understanding/stack/dialogue_stack.py,sha256=j8MnLCyv6cAZVpKRaUVM-
426
427
  rasa/dialogue_understanding/stack/frames/__init__.py,sha256=CXLs8I_eeJ-d2tQmS19V26OM6CHy3VN5whH5uHBodj4,656
427
428
  rasa/dialogue_understanding/stack/frames/chit_chat_frame.py,sha256=bfMCyeTK69SB3KP9TUCfdBGNDmNbblfDNWM_ll3ppPc,736
428
429
  rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py,sha256=rmG09a66PerYiuoWiG-Jlb4Oi6bct1OIHAJGTMN_F2M,4126
429
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py,sha256=W4mEmihIN5Bih2C9KDpKf-rxCHjLCzK9TcT6JslhW7g,5047
430
+ rasa/dialogue_understanding/stack/frames/flow_stack_frame.py,sha256=HRlR5YCkoOlI1DWCkgl_ak3YjFQEbmgwvzC16elkK54,5578
430
431
  rasa/dialogue_understanding/stack/frames/pattern_frame.py,sha256=EVrYWv5dCP7XTvNV-HqtOOrseP-IkF0jD2_JacAvIYw,235
431
432
  rasa/dialogue_understanding/stack/frames/search_frame.py,sha256=rJ9og28k_udUIjP-2Z5xeb_2T5HvCzwDCnxVG9K7lws,728
432
433
  rasa/dialogue_understanding/stack/utils.py,sha256=UpcxXwbneAMrvc94Fi1__r17UU2BAZQQ_RYI25Mek_c,7710
@@ -780,9 +781,9 @@ rasa/utils/train_utils.py,sha256=f1NWpp5y6al0dzoQyyio4hc4Nf73DRoRSHDzEK6-C4E,212
780
781
  rasa/utils/url_tools.py,sha256=JQcHL2aLqLHu82k7_d9imUoETCm2bmlHaDpOJ-dKqBc,1218
781
782
  rasa/utils/yaml.py,sha256=KjbZq5C94ZP7Jdsw8bYYF7HASI6K4-C_kdHfrnPLpSI,2000
782
783
  rasa/validator.py,sha256=O1wjCeV7ITJ0luvb3GCWy8x1fGgzWVbClEMlPnLBowQ,67265
783
- rasa/version.py,sha256=EsBzcOqFP6_X23ASpuMHkDkUXvmi7_xZPzmDvVKOSlM,118
784
- rasa_pro-3.11.15.dist-info/METADATA,sha256=zrSODCD6rUjW_RSBrLNkg4SkOuCTw_K5dlVIbZk7f0A,10725
785
- rasa_pro-3.11.15.dist-info/NOTICE,sha256=7HlBoMHJY9CL2GlYSfTQ-PZsVmLmVkYmMiPlTjhuCqA,218
786
- rasa_pro-3.11.15.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
787
- rasa_pro-3.11.15.dist-info/entry_points.txt,sha256=ckJ2SfEyTPgBqj_I6vm_tqY9dZF_LAPJZA335Xp0Q9U,43
788
- rasa_pro-3.11.15.dist-info/RECORD,,
784
+ rasa/version.py,sha256=1OhUrE3ydSBvU5lzZL8po4_LIKZ-ySwIUiLohg8FuUY,118
785
+ rasa_pro-3.11.16.dist-info/METADATA,sha256=kOuNIjNCxtsxyHs1Pe9w0sd2gm8VCgJdgnj5y_a38sI,10725
786
+ rasa_pro-3.11.16.dist-info/NOTICE,sha256=7HlBoMHJY9CL2GlYSfTQ-PZsVmLmVkYmMiPlTjhuCqA,218
787
+ rasa_pro-3.11.16.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
788
+ rasa_pro-3.11.16.dist-info/entry_points.txt,sha256=ckJ2SfEyTPgBqj_I6vm_tqY9dZF_LAPJZA335Xp0Q9U,43
789
+ rasa_pro-3.11.16.dist-info/RECORD,,