rasa-pro 3.9.17__py3-none-any.whl → 3.10.3__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.

Files changed (187) hide show
  1. README.md +5 -37
  2. rasa/__init__.py +1 -2
  3. rasa/__main__.py +5 -0
  4. rasa/anonymization/anonymization_rule_executor.py +2 -2
  5. rasa/api.py +26 -22
  6. rasa/cli/arguments/data.py +27 -2
  7. rasa/cli/arguments/default_arguments.py +25 -3
  8. rasa/cli/arguments/run.py +9 -9
  9. rasa/cli/arguments/train.py +2 -0
  10. rasa/cli/data.py +70 -8
  11. rasa/cli/e2e_test.py +108 -433
  12. rasa/cli/interactive.py +1 -0
  13. rasa/cli/llm_fine_tuning.py +395 -0
  14. rasa/cli/project_templates/calm/endpoints.yml +1 -1
  15. rasa/cli/project_templates/tutorial/endpoints.yml +1 -1
  16. rasa/cli/run.py +14 -13
  17. rasa/cli/scaffold.py +10 -8
  18. rasa/cli/train.py +8 -7
  19. rasa/cli/utils.py +15 -0
  20. rasa/constants.py +7 -1
  21. rasa/core/actions/action.py +98 -49
  22. rasa/core/actions/action_run_slot_rejections.py +4 -1
  23. rasa/core/actions/custom_action_executor.py +9 -6
  24. rasa/core/actions/direct_custom_actions_executor.py +80 -0
  25. rasa/core/actions/e2e_stub_custom_action_executor.py +68 -0
  26. rasa/core/actions/grpc_custom_action_executor.py +2 -2
  27. rasa/core/actions/http_custom_action_executor.py +6 -5
  28. rasa/core/agent.py +21 -17
  29. rasa/core/channels/__init__.py +2 -0
  30. rasa/core/channels/audiocodes.py +1 -16
  31. rasa/core/channels/voice_aware/__init__.py +0 -0
  32. rasa/core/channels/voice_aware/jambonz.py +103 -0
  33. rasa/core/channels/voice_aware/jambonz_protocol.py +344 -0
  34. rasa/core/channels/voice_aware/utils.py +20 -0
  35. rasa/core/channels/voice_native/__init__.py +0 -0
  36. rasa/core/constants.py +6 -1
  37. rasa/core/featurizers/single_state_featurizer.py +1 -22
  38. rasa/core/featurizers/tracker_featurizers.py +18 -115
  39. rasa/core/information_retrieval/faiss.py +7 -4
  40. rasa/core/information_retrieval/information_retrieval.py +8 -0
  41. rasa/core/information_retrieval/milvus.py +9 -2
  42. rasa/core/information_retrieval/qdrant.py +1 -1
  43. rasa/core/nlg/contextual_response_rephraser.py +32 -10
  44. rasa/core/nlg/summarize.py +4 -3
  45. rasa/core/policies/enterprise_search_policy.py +100 -44
  46. rasa/core/policies/flows/flow_executor.py +155 -98
  47. rasa/core/policies/intentless_policy.py +52 -28
  48. rasa/core/policies/ted_policy.py +33 -58
  49. rasa/core/policies/unexpected_intent_policy.py +7 -15
  50. rasa/core/processor.py +15 -46
  51. rasa/core/run.py +5 -4
  52. rasa/core/tracker_store.py +8 -4
  53. rasa/core/utils.py +45 -56
  54. rasa/dialogue_understanding/coexistence/llm_based_router.py +45 -12
  55. rasa/dialogue_understanding/commands/__init__.py +4 -0
  56. rasa/dialogue_understanding/commands/change_flow_command.py +0 -6
  57. rasa/dialogue_understanding/commands/session_start_command.py +59 -0
  58. rasa/dialogue_understanding/commands/set_slot_command.py +1 -5
  59. rasa/dialogue_understanding/commands/utils.py +38 -0
  60. rasa/dialogue_understanding/generator/constants.py +10 -3
  61. rasa/dialogue_understanding/generator/flow_retrieval.py +14 -5
  62. rasa/dialogue_understanding/generator/llm_based_command_generator.py +12 -2
  63. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +106 -87
  64. rasa/dialogue_understanding/generator/nlu_command_adapter.py +28 -6
  65. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +90 -37
  66. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +15 -15
  67. rasa/dialogue_understanding/patterns/session_start.py +37 -0
  68. rasa/dialogue_understanding/processor/command_processor.py +13 -14
  69. rasa/e2e_test/aggregate_test_stats_calculator.py +124 -0
  70. rasa/e2e_test/assertions.py +1181 -0
  71. rasa/e2e_test/assertions_schema.yml +106 -0
  72. rasa/e2e_test/constants.py +20 -0
  73. rasa/e2e_test/e2e_config.py +220 -0
  74. rasa/e2e_test/e2e_config_schema.yml +26 -0
  75. rasa/e2e_test/e2e_test_case.py +131 -8
  76. rasa/e2e_test/e2e_test_converter.py +363 -0
  77. rasa/e2e_test/e2e_test_converter_prompt.jinja2 +70 -0
  78. rasa/e2e_test/e2e_test_coverage_report.py +364 -0
  79. rasa/e2e_test/e2e_test_result.py +26 -6
  80. rasa/e2e_test/e2e_test_runner.py +498 -73
  81. rasa/e2e_test/e2e_test_schema.yml +96 -0
  82. rasa/e2e_test/pykwalify_extensions.py +39 -0
  83. rasa/e2e_test/stub_custom_action.py +70 -0
  84. rasa/e2e_test/utils/__init__.py +0 -0
  85. rasa/e2e_test/utils/e2e_yaml_utils.py +55 -0
  86. rasa/e2e_test/utils/io.py +596 -0
  87. rasa/e2e_test/utils/validation.py +80 -0
  88. rasa/engine/recipes/default_components.py +0 -2
  89. rasa/engine/storage/local_model_storage.py +0 -1
  90. rasa/env.py +9 -0
  91. rasa/llm_fine_tuning/__init__.py +0 -0
  92. rasa/llm_fine_tuning/annotation_module.py +241 -0
  93. rasa/llm_fine_tuning/conversations.py +144 -0
  94. rasa/llm_fine_tuning/llm_data_preparation_module.py +178 -0
  95. rasa/llm_fine_tuning/notebooks/unsloth_finetuning.ipynb +407 -0
  96. rasa/llm_fine_tuning/paraphrasing/__init__.py +0 -0
  97. rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +281 -0
  98. rasa/llm_fine_tuning/paraphrasing/default_rephrase_prompt_template.jina2 +44 -0
  99. rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +121 -0
  100. rasa/llm_fine_tuning/paraphrasing/rephrased_user_message.py +10 -0
  101. rasa/llm_fine_tuning/paraphrasing_module.py +128 -0
  102. rasa/llm_fine_tuning/storage.py +174 -0
  103. rasa/llm_fine_tuning/train_test_split_module.py +441 -0
  104. rasa/model_training.py +48 -16
  105. rasa/nlu/classifiers/diet_classifier.py +25 -38
  106. rasa/nlu/classifiers/logistic_regression_classifier.py +9 -44
  107. rasa/nlu/classifiers/sklearn_intent_classifier.py +16 -37
  108. rasa/nlu/extractors/crf_entity_extractor.py +50 -93
  109. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +45 -78
  110. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +17 -52
  111. rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +3 -5
  112. rasa/nlu/persistor.py +129 -32
  113. rasa/server.py +45 -10
  114. rasa/shared/constants.py +63 -15
  115. rasa/shared/core/domain.py +15 -12
  116. rasa/shared/core/events.py +28 -2
  117. rasa/shared/core/flows/flow.py +208 -13
  118. rasa/shared/core/flows/flow_path.py +84 -0
  119. rasa/shared/core/flows/flows_list.py +28 -10
  120. rasa/shared/core/flows/flows_yaml_schema.json +269 -193
  121. rasa/shared/core/flows/validation.py +112 -25
  122. rasa/shared/core/flows/yaml_flows_io.py +149 -10
  123. rasa/shared/core/trackers.py +6 -0
  124. rasa/shared/core/training_data/visualization.html +2 -2
  125. rasa/shared/exceptions.py +4 -0
  126. rasa/shared/importers/importer.py +60 -11
  127. rasa/shared/importers/remote_importer.py +196 -0
  128. rasa/shared/nlu/constants.py +2 -0
  129. rasa/shared/nlu/training_data/features.py +2 -120
  130. rasa/shared/providers/_configs/__init__.py +0 -0
  131. rasa/shared/providers/_configs/azure_openai_client_config.py +181 -0
  132. rasa/shared/providers/_configs/client_config.py +57 -0
  133. rasa/shared/providers/_configs/default_litellm_client_config.py +130 -0
  134. rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +234 -0
  135. rasa/shared/providers/_configs/openai_client_config.py +175 -0
  136. rasa/shared/providers/_configs/self_hosted_llm_client_config.py +171 -0
  137. rasa/shared/providers/_configs/utils.py +101 -0
  138. rasa/shared/providers/_ssl_verification_utils.py +124 -0
  139. rasa/shared/providers/embedding/__init__.py +0 -0
  140. rasa/shared/providers/embedding/_base_litellm_embedding_client.py +254 -0
  141. rasa/shared/providers/embedding/_langchain_embedding_client_adapter.py +74 -0
  142. rasa/shared/providers/embedding/azure_openai_embedding_client.py +277 -0
  143. rasa/shared/providers/embedding/default_litellm_embedding_client.py +102 -0
  144. rasa/shared/providers/embedding/embedding_client.py +90 -0
  145. rasa/shared/providers/embedding/embedding_response.py +41 -0
  146. rasa/shared/providers/embedding/huggingface_local_embedding_client.py +191 -0
  147. rasa/shared/providers/embedding/openai_embedding_client.py +172 -0
  148. rasa/shared/providers/llm/__init__.py +0 -0
  149. rasa/shared/providers/llm/_base_litellm_client.py +227 -0
  150. rasa/shared/providers/llm/azure_openai_llm_client.py +338 -0
  151. rasa/shared/providers/llm/default_litellm_llm_client.py +84 -0
  152. rasa/shared/providers/llm/llm_client.py +76 -0
  153. rasa/shared/providers/llm/llm_response.py +50 -0
  154. rasa/shared/providers/llm/openai_llm_client.py +155 -0
  155. rasa/shared/providers/llm/self_hosted_llm_client.py +169 -0
  156. rasa/shared/providers/mappings.py +75 -0
  157. rasa/shared/utils/cli.py +30 -0
  158. rasa/shared/utils/io.py +65 -3
  159. rasa/shared/utils/llm.py +223 -200
  160. rasa/shared/utils/yaml.py +122 -7
  161. rasa/studio/download.py +19 -13
  162. rasa/studio/train.py +2 -3
  163. rasa/studio/upload.py +2 -3
  164. rasa/telemetry.py +113 -58
  165. rasa/tracing/config.py +2 -3
  166. rasa/tracing/instrumentation/attribute_extractors.py +29 -17
  167. rasa/tracing/instrumentation/instrumentation.py +4 -47
  168. rasa/utils/common.py +18 -19
  169. rasa/utils/endpoints.py +7 -4
  170. rasa/utils/io.py +66 -0
  171. rasa/utils/json_utils.py +60 -0
  172. rasa/utils/licensing.py +9 -1
  173. rasa/utils/ml_utils.py +4 -2
  174. rasa/utils/tensorflow/model_data.py +193 -2
  175. rasa/validator.py +195 -1
  176. rasa/version.py +1 -1
  177. {rasa_pro-3.9.17.dist-info → rasa_pro-3.10.3.dist-info}/METADATA +25 -51
  178. {rasa_pro-3.9.17.dist-info → rasa_pro-3.10.3.dist-info}/RECORD +183 -119
  179. rasa/nlu/classifiers/llm_intent_classifier.py +0 -519
  180. rasa/shared/providers/openai/clients.py +0 -43
  181. rasa/shared/providers/openai/session_handler.py +0 -110
  182. rasa/utils/tensorflow/feature_array.py +0 -366
  183. /rasa/{shared/providers/openai → cli/project_templates/tutorial/actions}/__init__.py +0 -0
  184. /rasa/cli/project_templates/tutorial/{actions.py → actions/actions.py} +0 -0
  185. {rasa_pro-3.9.17.dist-info → rasa_pro-3.10.3.dist-info}/NOTICE +0 -0
  186. {rasa_pro-3.9.17.dist-info → rasa_pro-3.10.3.dist-info}/WHEEL +0 -0
  187. {rasa_pro-3.9.17.dist-info → rasa_pro-3.10.3.dist-info}/entry_points.txt +0 -0
rasa/validator.py CHANGED
@@ -7,6 +7,7 @@ from typing import Set, Text, Optional, Dict, Any, List, Tuple
7
7
 
8
8
  from jinja2 import Template
9
9
  from pypred import Predicate
10
+ from pypred.ast import Literal, CompareOperator, NegateOperator
10
11
 
11
12
  import rasa.core.training.story_conflict
12
13
  from rasa.core.channels import UserMessage
@@ -44,7 +45,7 @@ from rasa.shared.core.domain import (
44
45
  )
45
46
  from rasa.shared.core.generator import TrainingDataGenerator
46
47
  from rasa.shared.core.constants import SlotMappingType, MAPPING_TYPE
47
- from rasa.shared.core.slots import ListSlot, Slot
48
+ from rasa.shared.core.slots import BooleanSlot, CategoricalSlot, ListSlot, Slot
48
49
  from rasa.shared.core.training_data.story_reader.yaml_story_reader import (
49
50
  YAMLStoryReader,
50
51
  )
@@ -893,6 +894,190 @@ class Validator:
893
894
 
894
895
  return pred, all_good
895
896
 
897
+ def _extract_predicate_syntax_tree(self, predicate: Predicate) -> Any:
898
+ """Extract the predicate syntax tree from the given predicate.
899
+
900
+ Args:
901
+ predicate: The predicate from which to extract the syntax tree.
902
+
903
+ Returns:
904
+ The extracted syntax tree.
905
+ """
906
+ if isinstance(predicate.ast, NegateOperator):
907
+ return predicate.ast.left
908
+ return predicate.ast
909
+
910
+ def _extract_slot_name_and_slot_value(
911
+ self,
912
+ predicate_syntax_tree: Any,
913
+ ) -> tuple:
914
+ """Extract the slot name and slot value from the predicate syntax tree.
915
+
916
+ Args:
917
+ predicate_syntax_tree: The predicate syntax tree.
918
+
919
+ Returns:
920
+ A tuple containing the slot name and slot value.
921
+ """
922
+ try:
923
+ if isinstance(predicate_syntax_tree.left, Literal):
924
+ slot_name = predicate_syntax_tree.left.value.split(".")
925
+ slot_value = predicate_syntax_tree.right.value
926
+ else:
927
+ slot_name = predicate_syntax_tree.right.value.split(".")
928
+ slot_value = predicate_syntax_tree.left.value
929
+ except AttributeError:
930
+ # predicate only has negation and doesn't need to be checked further
931
+ return None, None
932
+ return slot_name, slot_value
933
+
934
+ def _validate_categorical_value_check(
935
+ self,
936
+ slot_name: str,
937
+ slot_value: Any,
938
+ valid_slot_values: List[str],
939
+ all_good: bool,
940
+ step_id: str,
941
+ link_condition: str,
942
+ flow_id: str,
943
+ ) -> bool:
944
+ """Validates the categorical slot check.
945
+
946
+ Validates that the categorical slot is checked against valid values.
947
+
948
+ Args:
949
+ slot_name: name of the slot to be checked
950
+ slot_value: value of the slot to be checked
951
+ valid_slot_values: valid values for the given slot
952
+ all_good: flag whether all the validations have passed so far
953
+ step_id: id of the step in which the values are being checked
954
+ link_condition: condition where the values are being checked
955
+ flow_id: id of the flow where the values are being checked
956
+
957
+ Returns:
958
+ False, if validation failed, previous value of all_good, otherwise
959
+ """
960
+ valid_slot_values.append(None)
961
+ # slot_value can either be None, a string or a list of Literal objects
962
+ if slot_value is None:
963
+ slot_value = [None]
964
+ if isinstance(slot_value, str):
965
+ slot_value = [Literal(slot_value)]
966
+
967
+ slot_values_validity = [
968
+ sv is None or re.sub(r"\'|\"", "", sv.value) in valid_slot_values
969
+ for sv in slot_value
970
+ ]
971
+ if not all(slot_values_validity):
972
+ invalid_slot_values = [
973
+ sv
974
+ for (sv, slot_value_valid) in zip(slot_value, slot_values_validity)
975
+ if not slot_value_valid
976
+ ]
977
+ structlogger.error(
978
+ "validator.verify_predicates.link.invalid_condition",
979
+ step=step_id,
980
+ link=link_condition,
981
+ flow=flow_id,
982
+ event_info=(
983
+ f"Detected invalid condition '{link_condition}' "
984
+ f"at step '{step_id}' for flow id '{flow_id}'. "
985
+ f"Values {invalid_slot_values} are not valid values "
986
+ f"for slot {slot_name}. "
987
+ f"Please make sure that all conditions are valid."
988
+ ),
989
+ )
990
+ return False
991
+ return all_good
992
+
993
+ def _validate_categorical_and_boolean_values_check(
994
+ self,
995
+ predicate: Predicate,
996
+ all_good: bool,
997
+ step_id: str,
998
+ link_condition: str,
999
+ flow_id: str,
1000
+ ) -> bool:
1001
+ """Validates the categorical and boolean slot checks.
1002
+
1003
+ Validates that the categorical and boolean slots
1004
+ are checked against valid values.
1005
+
1006
+ Args:
1007
+ predicate: condition that is supposed to be validated
1008
+ all_good: flag whether all the validations have passed so far
1009
+ step_id: id of the step in which the values are being checked
1010
+ link_condition: condition where the values are being checked
1011
+ flow_id: id of the flow where the values are being checked
1012
+
1013
+ Returns:
1014
+ False, if validation failed, previous value of all_good, otherwise
1015
+ """
1016
+ predicate_syntax_tree = self._extract_predicate_syntax_tree(predicate)
1017
+ slot_name, slot_value = self._extract_slot_name_and_slot_value(
1018
+ predicate_syntax_tree
1019
+ )
1020
+
1021
+ if slot_name is None:
1022
+ return all_good
1023
+
1024
+ if slot_name[0] == "slots":
1025
+ slot_name = slot_name[1]
1026
+ # slots.{{context.variable}} gets evaluated to `slots.None`,
1027
+ # these predicates can only be validated during runtime
1028
+ if slot_name == "None":
1029
+ return all_good
1030
+ else:
1031
+ return all_good
1032
+
1033
+ try:
1034
+ slot = next(slot for slot in self.domain.slots if slot.name == slot_name)
1035
+ except StopIteration:
1036
+ structlogger.error(
1037
+ "validator.verify_predicates.link.invalid_condition",
1038
+ step=step_id,
1039
+ link=link_condition,
1040
+ flow=flow_id,
1041
+ event_info=(
1042
+ f"Detected invalid condition '{link_condition}' "
1043
+ f"at step '{step_id}' for flow id '{flow_id}'. "
1044
+ f"Slot {slot_name} is not defined in the domain file. "
1045
+ f"Please make sure that all conditions are valid."
1046
+ ),
1047
+ )
1048
+ return False
1049
+ if isinstance(slot, CategoricalSlot):
1050
+ return self._validate_categorical_value_check(
1051
+ slot_name,
1052
+ slot_value,
1053
+ slot.values,
1054
+ all_good,
1055
+ step_id,
1056
+ link_condition,
1057
+ flow_id,
1058
+ )
1059
+
1060
+ if (
1061
+ isinstance(slot, BooleanSlot)
1062
+ and isinstance(predicate_syntax_tree, CompareOperator)
1063
+ and not isinstance(predicate_syntax_tree.right.value, bool)
1064
+ ):
1065
+ structlogger.error(
1066
+ "validator.verify_predicates.link.invalid_condition",
1067
+ step=step_id,
1068
+ link=link_condition,
1069
+ flow=flow_id,
1070
+ event_info=(
1071
+ f"Detected invalid condition '{link_condition}' "
1072
+ f"at step '{step_id}' for flow id '{flow_id}'. "
1073
+ f"Boolean slots can only be compared to "
1074
+ f"boolean values (true, false). "
1075
+ f"Please make sure that all conditions are valid."
1076
+ ),
1077
+ )
1078
+ return False
1079
+ return all_good
1080
+
896
1081
  def verify_predicates(self) -> bool:
897
1082
  """Validate predicates used in flow step links and slot rejections."""
898
1083
  all_good = True
@@ -946,6 +1131,15 @@ class Validator:
946
1131
  ),
947
1132
  )
948
1133
  all_good = False
1134
+
1135
+ all_good = self._validate_categorical_and_boolean_values_check(
1136
+ predicate,
1137
+ all_good=all_good,
1138
+ step_id=step.id,
1139
+ link_condition=link.condition,
1140
+ flow_id=flow.id,
1141
+ )
1142
+
949
1143
  if isinstance(step, CollectInformationFlowStep):
950
1144
  predicates = [predicate.if_ for predicate in step.rejections]
951
1145
  for predicate in predicates:
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.9.17"
3
+ __version__ = "3.10.3"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rasa-pro
3
- Version: 3.9.17
3
+ Version: 3.10.3
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
  Home-page: https://rasa.com
6
6
  Keywords: nlp,machine-learning,machine-learning-library,bot,bots,botkit,rasa conversational-agents,conversational-ai,chatbot,chatbot-framework,bot-framework
@@ -19,6 +19,7 @@ Provides-Extra: full
19
19
  Provides-Extra: gh-release-notes
20
20
  Provides-Extra: jieba
21
21
  Provides-Extra: metal
22
+ Provides-Extra: mlflow
22
23
  Provides-Extra: spacy
23
24
  Provides-Extra: transformers
24
25
  Requires-Dist: CacheControl (>=0.12.14,<0.13.0)
@@ -31,8 +32,9 @@ Requires-Dist: aiohttp (>=3.9.4,<3.10)
31
32
  Requires-Dist: apscheduler (>=3.10,<3.11)
32
33
  Requires-Dist: attrs (>=23.1,<23.2)
33
34
  Requires-Dist: azure-storage-blob (>=12.16.0,<12.17.0)
34
- Requires-Dist: boto3 (>=1.27.1,<2.0.0)
35
+ Requires-Dist: boto3 (>=1.35.5,<1.36.0)
35
36
  Requires-Dist: certifi (>=2024.2.2)
37
+ Requires-Dist: cloudpickle (>=2.2.1,<3.1)
36
38
  Requires-Dist: colorama (>=0.4.6,<0.5.0) ; sys_platform == "win32"
37
39
  Requires-Dist: colorclass (>=2.2,<2.3)
38
40
  Requires-Dist: coloredlogs (>=15,<16)
@@ -41,9 +43,10 @@ Requires-Dist: confluent-kafka (>=2.3.0,<3.0.0)
41
43
  Requires-Dist: cryptography (>=42.0.5)
42
44
  Requires-Dist: cvg-python-sdk (>=0.5.1,<0.6.0)
43
45
  Requires-Dist: dask (==2022.10.2) ; python_version >= "3.9" and python_version < "3.11"
46
+ Requires-Dist: diskcache (>=5.6.3,<5.7.0)
44
47
  Requires-Dist: dnspython (==2.6.1)
45
48
  Requires-Dist: faiss-cpu (>=1.7.4,<2.0.0)
46
- Requires-Dist: faker (>=19.13.0,<20.0.0)
49
+ Requires-Dist: faker (>=26.0.0,<27.0.0)
47
50
  Requires-Dist: fbmessenger (>=6.0.0,<6.1.0)
48
51
  Requires-Dist: github3.py (>=3.2.0,<3.3.0) ; extra == "gh-release-notes"
49
52
  Requires-Dist: google-auth (>=2.23.4,<3)
@@ -53,26 +56,31 @@ Requires-Dist: importlib-metadata (>=6.8.0,<7.0.0)
53
56
  Requires-Dist: importlib-resources (>=6.1.1,<7.0.0)
54
57
  Requires-Dist: jieba (>=0.42.1,<0.43) ; extra == "jieba" or extra == "full"
55
58
  Requires-Dist: jinja2 (>=3.1.4,<4.0.0)
59
+ Requires-Dist: joblib (>=1.2.0,<1.3.0)
56
60
  Requires-Dist: jsonpatch (>=1.33,<2.0)
57
61
  Requires-Dist: jsonpickle (>=3.0,<3.1)
58
- Requires-Dist: jsonschema (>=4.20,<4.21)
62
+ Requires-Dist: jsonschema (>=4.22)
59
63
  Requires-Dist: keras (==2.14.0)
60
- Requires-Dist: langchain (>=0.0.329,<0.0.330)
64
+ Requires-Dist: langchain (>=0.2.0,<0.3.0)
65
+ Requires-Dist: langchain-community (>=0.2.0,<0.3.0)
66
+ Requires-Dist: litellm (>=1.44.7,<1.45.0)
61
67
  Requires-Dist: matplotlib (>=3.7,<3.8)
62
68
  Requires-Dist: mattermostwrapper (>=2.2,<2.3)
69
+ Requires-Dist: mlflow (>=2.15.1,<3.0.0) ; extra == "mlflow"
63
70
  Requires-Dist: networkx (>=3.1,<3.2)
64
71
  Requires-Dist: numpy (>=1.23.5,<1.25.0) ; python_version >= "3.9" and python_version < "3.11"
65
- Requires-Dist: openai (>=0.28.1,<0.29.0)
72
+ Requires-Dist: openai (>=1.40.0,<1.41.0)
73
+ Requires-Dist: openpyxl (>=3.1.5,<4.0.0)
66
74
  Requires-Dist: opentelemetry-api (>=1.16.0,<1.17.0)
67
75
  Requires-Dist: opentelemetry-exporter-jaeger (>=1.16.0,<1.17.0)
68
76
  Requires-Dist: opentelemetry-exporter-otlp (>=1.16.0,<1.17.0)
69
77
  Requires-Dist: opentelemetry-sdk (>=1.16.0,<1.17.0)
70
- Requires-Dist: packaging (>=21.3,<21.4)
78
+ Requires-Dist: packaging (>=23.2,<23.3)
71
79
  Requires-Dist: pep440-version-utils (>=1.1.0,<1.2.0)
72
80
  Requires-Dist: pluggy (>=1.2.0,<2.0.0)
73
81
  Requires-Dist: portalocker (>=2.7.0,<3.0.0)
74
82
  Requires-Dist: presidio-analyzer (>=2.2.33,<2.2.34)
75
- Requires-Dist: presidio-anonymizer (>=2.2.33,<2.2.34)
83
+ Requires-Dist: presidio-anonymizer (>=2.2.354,<3.0.0)
76
84
  Requires-Dist: prompt-toolkit (>=3.0.28,<3.0.29)
77
85
  Requires-Dist: protobuf (>=4.23.3,<4.25.4)
78
86
  Requires-Dist: psutil (>=5.9.5,<6.0.0)
@@ -81,27 +89,26 @@ Requires-Dist: pycountry (>=22.3.5,<23.0.0)
81
89
  Requires-Dist: pydantic (>=2.0,<3.0)
82
90
  Requires-Dist: pydot (>=1.4,<1.5)
83
91
  Requires-Dist: pykwalify (>=1.8,<1.9)
84
- Requires-Dist: pymilvus (>=2.3.6,<3.0.0)
92
+ Requires-Dist: pymilvus (<2.4.2)
85
93
  Requires-Dist: pymongo[srv,tls] (>=4.6.3,<4.7)
86
94
  Requires-Dist: pypred (>=0.4.0,<0.5.0)
87
95
  Requires-Dist: python-dateutil (>=2.8.2,<2.9.0)
88
96
  Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
89
97
  Requires-Dist: python-engineio (>=4.5.1,<6,!=5.0.0)
90
- Requires-Dist: python-keycloak (>=3.7.0,<4.0.0)
98
+ Requires-Dist: python-keycloak (>=3.12.0,<4.0.0)
91
99
  Requires-Dist: python-socketio (>=5.8,<6)
92
100
  Requires-Dist: pytz (>=2022.7.1,<2023.0)
93
101
  Requires-Dist: pyyaml (>=6.0)
94
102
  Requires-Dist: qdrant-client (>=1.9.0,<2.0.0)
95
103
  Requires-Dist: questionary (>=1.10.0,<2.1.0)
96
104
  Requires-Dist: randomname (>=0.2.1,<0.3.0)
97
- Requires-Dist: rasa-sdk (==3.9.1)
105
+ Requires-Dist: rasa-sdk (==3.10.0)
98
106
  Requires-Dist: redis (>=4.6.0,<6.0)
99
107
  Requires-Dist: regex (>=2022.10.31,<2022.11)
100
108
  Requires-Dist: requests (>=2.31.0,<2.32.0)
101
109
  Requires-Dist: rich (>=13.4.2,<14.0.0)
102
110
  Requires-Dist: rocketchat_API (>=1.30.0,<1.31.0)
103
111
  Requires-Dist: ruamel.yaml (>=0.17.21,<0.17.22)
104
- Requires-Dist: safetensors (>=0.4.5,<0.5.0)
105
112
  Requires-Dist: sanic (>=22.12,<22.13)
106
113
  Requires-Dist: sanic-cors (>=2.2.0,<2.3.0)
107
114
  Requires-Dist: sanic-jwt (>=1.8.0,<2.0.0)
@@ -112,7 +119,6 @@ Requires-Dist: sentencepiece[sentencepiece] (>=0.1.99,<0.2.0) ; extra == "transf
112
119
  Requires-Dist: sentry-sdk (>=1.14.0,<1.15.0)
113
120
  Requires-Dist: setuptools (>=70.0.0,<70.1.0)
114
121
  Requires-Dist: sklearn-crfsuite (>=0.3.6,<0.4.0)
115
- Requires-Dist: skops (>=0.10.0,<0.11.0)
116
122
  Requires-Dist: slack-sdk (>=3.27.1,<4.0.0)
117
123
  Requires-Dist: spacy (>=3.5.4,<4.0.0) ; extra == "spacy" or extra == "full"
118
124
  Requires-Dist: structlog (>=23.1.0,<23.2.0)
@@ -130,7 +136,7 @@ Requires-Dist: tensorflow-metal (==1.1.0) ; (sys_platform == "darwin" and platfo
130
136
  Requires-Dist: tensorflow-text (==2.14.0) ; sys_platform != "win32" and (platform_machine != "arm64" and platform_machine != "aarch64")
131
137
  Requires-Dist: tensorflow_hub (>=0.13.0,<0.14.0)
132
138
  Requires-Dist: terminaltables (>=3.1.10,<3.2.0)
133
- Requires-Dist: tiktoken (>=0.4.0,<0.5.0)
139
+ Requires-Dist: tiktoken (>=0.7.0,<0.8.0)
134
140
  Requires-Dist: tqdm (>=4.66.2,<5.0.0)
135
141
  Requires-Dist: transformers (>=4.36.2,<4.37.0) ; extra == "transformers" or extra == "full"
136
142
  Requires-Dist: twilio (>=8.4,<8.5)
@@ -383,39 +389,6 @@ To check the types execute
383
389
  make types
384
390
  ```
385
391
 
386
- ### Backporting
387
-
388
- In order to port changes to `main` and across release branches, we use the `backport` workflow located at
389
- the `.github/workflows/backport.yml` path.
390
- This workflow is triggered by the `backport-to-<release-branch>` label applied to a PR, for example `backport-to-3.8.x`.
391
- Current available target branches are `main` and maintained release branches.
392
-
393
- When a PR gets labelled `backport-to-<release-branch>`, a PR is opened by the `backport-github-action` as soon as the
394
- source PR gets closed (by merging). If you want to close the PR without merging changes, make sure to remove the `backport-to-<release-branch>` label.
395
-
396
- The PR author which the action assigns to the backporting PR has to resolve any conflicts before approving and merging.
397
- Release PRs should also be labelled with `backport-to-main` to backport the `CHANGELOG.md` updates to `main`.
398
- Backporting version updates should be accepted to the `main` branch from the latest release branch only.
399
-
400
- Here are some guidelines to follow when backporting changes and resolving conflicts:
401
-
402
- a) for conflicts in `version.py`: accept only the version from the latest release branch. Do not merge version changes
403
- from earlier release branches into `main` because this could cause issues when trying to make the next minor release.
404
-
405
- b) for conflicts in `pyproject.toml`: if related to the `rasa-pro` version, accept only the latest release branch;
406
- if related to other dependencies, accept `main` or whichever is the higher upgrade (main usually has the updated
407
- dependencies because we only do housekeeping on `main`, apart from vulnerability updates). Be mindful of dependencies that
408
- are removed from `main` but still exist in former release branches (for example `langchain`).
409
-
410
- c) for conflicts in `poetry.lock`: accept changes which were already present on the target branch, then run
411
- `poetry lock --no-update` so that the lock file contains your changes from `pyproject.toml` too.
412
-
413
- d) for conflicts in `CHANGELOG.md`: Manually place the changelog in their allocated section (e.g. 3.8.10 will go under the
414
- 3.8 section with the other releases, rather than go at the top of the file)
415
-
416
- If the backporting workflow fails, you are encouraged to cherry-pick the commits manually and create a PR to
417
- the target branch. Alternatively, you can install the backporting CLI tool as described [here](https://github.com/sorenlouv/backport?tab=readme-ov-file#install).
418
-
419
392
  ## Releases
420
393
  Rasa has implemented robust policies governing version naming, as well as release pace for major, minor, and patch releases.
421
394
 
@@ -498,12 +471,9 @@ Releasing a new version is quite simple, as the packages are build and distribut
498
471
  9. If however an error occurs in the build, then we should see a failure message automatically posted in the company's Slack (`dev-tribe` channel) like this [one](https://rasa-hq.slack.com/archives/C01M5TAHDHA/p1701444735622919)
499
472
  (In this case do the following checks):
500
473
  - Check the workflows in [Github Actions](https://github.com/RasaHQ/rasa-private/actions) and make sure that the merged PR of the current release is completed successfully. To easily find your PR you can use the filters `event: push` and `branch: <version number>` (example on release 2.4 you can see [here](https://github.com/RasaHQ/rasa/actions/runs/643344876))
501
- - If the workflow is not completed, then try to re-run the workflow in case that solves the problem
474
+ - If the workflow is not completed, then try to re run the workflow in case that solves the problem
502
475
  - If the problem persists, check also the log files and try to find the root cause of the issue
503
476
  - If you still cannot resolve the error, contact the infrastructure team by providing any helpful information from your investigation
504
- 10. If the release is successful, add the newly created release branch to the backporting configuration in the `.backportrc.json` file to
505
- the `targetBranchesChoices` list. This is necessary for the backporting workflow to work correctly with new release branches.
506
-
507
477
 
508
478
  ### Cutting a Patch release
509
479
 
@@ -552,6 +522,10 @@ steps.
552
522
 
553
523
  Please refer to the [Rasa Product Release and Maintenance Policy](https://rasa.com/rasa-product-release-and-maintenance-policy/) page.
554
524
 
525
+ ### Active workflows on the CI
526
+
527
+ Please refer to the [WORKFLOW_README FILE](https://github.com/RasaHQ/rasa-private/blob/main/WORKFLOW_README.md)
528
+
555
529
  ## Troubleshooting
556
530
 
557
531
  - When running docker commands, if you encounter this error: `OSError No space left on device`, consider running: