rasa-pro 3.9.18__py3-none-any.whl β†’ 3.10.4__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 (190) hide show
  1. README.md +26 -57
  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/inspector/dist/index.html +0 -2
  32. rasa/core/channels/inspector/index.html +0 -2
  33. rasa/core/channels/voice_aware/__init__.py +0 -0
  34. rasa/core/channels/voice_aware/jambonz.py +103 -0
  35. rasa/core/channels/voice_aware/jambonz_protocol.py +344 -0
  36. rasa/core/channels/voice_aware/utils.py +20 -0
  37. rasa/core/channels/voice_native/__init__.py +0 -0
  38. rasa/core/constants.py +6 -1
  39. rasa/core/featurizers/single_state_featurizer.py +1 -22
  40. rasa/core/featurizers/tracker_featurizers.py +18 -115
  41. rasa/core/information_retrieval/faiss.py +7 -4
  42. rasa/core/information_retrieval/information_retrieval.py +8 -0
  43. rasa/core/information_retrieval/milvus.py +9 -2
  44. rasa/core/information_retrieval/qdrant.py +1 -1
  45. rasa/core/nlg/contextual_response_rephraser.py +32 -10
  46. rasa/core/nlg/summarize.py +4 -3
  47. rasa/core/policies/enterprise_search_policy.py +100 -44
  48. rasa/core/policies/flows/flow_executor.py +130 -94
  49. rasa/core/policies/intentless_policy.py +52 -28
  50. rasa/core/policies/ted_policy.py +33 -58
  51. rasa/core/policies/unexpected_intent_policy.py +7 -15
  52. rasa/core/processor.py +20 -53
  53. rasa/core/run.py +5 -4
  54. rasa/core/tracker_store.py +8 -4
  55. rasa/core/utils.py +45 -56
  56. rasa/dialogue_understanding/coexistence/llm_based_router.py +45 -12
  57. rasa/dialogue_understanding/commands/__init__.py +4 -0
  58. rasa/dialogue_understanding/commands/change_flow_command.py +0 -6
  59. rasa/dialogue_understanding/commands/session_start_command.py +59 -0
  60. rasa/dialogue_understanding/commands/set_slot_command.py +1 -5
  61. rasa/dialogue_understanding/commands/utils.py +38 -0
  62. rasa/dialogue_understanding/generator/constants.py +10 -3
  63. rasa/dialogue_understanding/generator/flow_retrieval.py +14 -5
  64. rasa/dialogue_understanding/generator/llm_based_command_generator.py +12 -2
  65. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +106 -87
  66. rasa/dialogue_understanding/generator/nlu_command_adapter.py +28 -6
  67. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +90 -37
  68. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +15 -15
  69. rasa/dialogue_understanding/patterns/session_start.py +37 -0
  70. rasa/dialogue_understanding/processor/command_processor.py +13 -14
  71. rasa/e2e_test/aggregate_test_stats_calculator.py +124 -0
  72. rasa/e2e_test/assertions.py +1181 -0
  73. rasa/e2e_test/assertions_schema.yml +106 -0
  74. rasa/e2e_test/constants.py +20 -0
  75. rasa/e2e_test/e2e_config.py +220 -0
  76. rasa/e2e_test/e2e_config_schema.yml +26 -0
  77. rasa/e2e_test/e2e_test_case.py +131 -8
  78. rasa/e2e_test/e2e_test_converter.py +363 -0
  79. rasa/e2e_test/e2e_test_converter_prompt.jinja2 +70 -0
  80. rasa/e2e_test/e2e_test_coverage_report.py +364 -0
  81. rasa/e2e_test/e2e_test_result.py +26 -6
  82. rasa/e2e_test/e2e_test_runner.py +491 -72
  83. rasa/e2e_test/e2e_test_schema.yml +96 -0
  84. rasa/e2e_test/pykwalify_extensions.py +39 -0
  85. rasa/e2e_test/stub_custom_action.py +70 -0
  86. rasa/e2e_test/utils/__init__.py +0 -0
  87. rasa/e2e_test/utils/e2e_yaml_utils.py +55 -0
  88. rasa/e2e_test/utils/io.py +596 -0
  89. rasa/e2e_test/utils/validation.py +80 -0
  90. rasa/engine/recipes/default_components.py +0 -2
  91. rasa/engine/storage/local_model_storage.py +0 -1
  92. rasa/env.py +9 -0
  93. rasa/keys +1 -0
  94. rasa/llm_fine_tuning/__init__.py +0 -0
  95. rasa/llm_fine_tuning/annotation_module.py +241 -0
  96. rasa/llm_fine_tuning/conversations.py +144 -0
  97. rasa/llm_fine_tuning/llm_data_preparation_module.py +178 -0
  98. rasa/llm_fine_tuning/notebooks/unsloth_finetuning.ipynb +407 -0
  99. rasa/llm_fine_tuning/paraphrasing/__init__.py +0 -0
  100. rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +281 -0
  101. rasa/llm_fine_tuning/paraphrasing/default_rephrase_prompt_template.jina2 +44 -0
  102. rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +121 -0
  103. rasa/llm_fine_tuning/paraphrasing/rephrased_user_message.py +10 -0
  104. rasa/llm_fine_tuning/paraphrasing_module.py +128 -0
  105. rasa/llm_fine_tuning/storage.py +174 -0
  106. rasa/llm_fine_tuning/train_test_split_module.py +441 -0
  107. rasa/model_training.py +48 -16
  108. rasa/nlu/classifiers/diet_classifier.py +25 -38
  109. rasa/nlu/classifiers/logistic_regression_classifier.py +9 -44
  110. rasa/nlu/classifiers/sklearn_intent_classifier.py +16 -37
  111. rasa/nlu/extractors/crf_entity_extractor.py +50 -93
  112. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +45 -78
  113. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +17 -52
  114. rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +3 -5
  115. rasa/nlu/persistor.py +129 -32
  116. rasa/server.py +45 -10
  117. rasa/shared/constants.py +63 -15
  118. rasa/shared/core/domain.py +15 -12
  119. rasa/shared/core/events.py +28 -2
  120. rasa/shared/core/flows/flow.py +208 -13
  121. rasa/shared/core/flows/flow_path.py +84 -0
  122. rasa/shared/core/flows/flows_list.py +28 -10
  123. rasa/shared/core/flows/flows_yaml_schema.json +269 -193
  124. rasa/shared/core/flows/validation.py +112 -25
  125. rasa/shared/core/flows/yaml_flows_io.py +149 -10
  126. rasa/shared/core/trackers.py +6 -0
  127. rasa/shared/core/training_data/visualization.html +2 -2
  128. rasa/shared/exceptions.py +4 -0
  129. rasa/shared/importers/importer.py +60 -11
  130. rasa/shared/importers/remote_importer.py +196 -0
  131. rasa/shared/nlu/constants.py +2 -0
  132. rasa/shared/nlu/training_data/features.py +2 -120
  133. rasa/shared/providers/_configs/__init__.py +0 -0
  134. rasa/shared/providers/_configs/azure_openai_client_config.py +181 -0
  135. rasa/shared/providers/_configs/client_config.py +57 -0
  136. rasa/shared/providers/_configs/default_litellm_client_config.py +130 -0
  137. rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +234 -0
  138. rasa/shared/providers/_configs/openai_client_config.py +175 -0
  139. rasa/shared/providers/_configs/self_hosted_llm_client_config.py +171 -0
  140. rasa/shared/providers/_configs/utils.py +101 -0
  141. rasa/shared/providers/_ssl_verification_utils.py +124 -0
  142. rasa/shared/providers/embedding/__init__.py +0 -0
  143. rasa/shared/providers/embedding/_base_litellm_embedding_client.py +254 -0
  144. rasa/shared/providers/embedding/_langchain_embedding_client_adapter.py +74 -0
  145. rasa/shared/providers/embedding/azure_openai_embedding_client.py +277 -0
  146. rasa/shared/providers/embedding/default_litellm_embedding_client.py +102 -0
  147. rasa/shared/providers/embedding/embedding_client.py +90 -0
  148. rasa/shared/providers/embedding/embedding_response.py +41 -0
  149. rasa/shared/providers/embedding/huggingface_local_embedding_client.py +191 -0
  150. rasa/shared/providers/embedding/openai_embedding_client.py +172 -0
  151. rasa/shared/providers/llm/__init__.py +0 -0
  152. rasa/shared/providers/llm/_base_litellm_client.py +227 -0
  153. rasa/shared/providers/llm/azure_openai_llm_client.py +338 -0
  154. rasa/shared/providers/llm/default_litellm_llm_client.py +84 -0
  155. rasa/shared/providers/llm/llm_client.py +76 -0
  156. rasa/shared/providers/llm/llm_response.py +50 -0
  157. rasa/shared/providers/llm/openai_llm_client.py +155 -0
  158. rasa/shared/providers/llm/self_hosted_llm_client.py +169 -0
  159. rasa/shared/providers/mappings.py +75 -0
  160. rasa/shared/utils/cli.py +30 -0
  161. rasa/shared/utils/io.py +65 -3
  162. rasa/shared/utils/llm.py +223 -200
  163. rasa/shared/utils/yaml.py +122 -7
  164. rasa/studio/download.py +19 -13
  165. rasa/studio/train.py +2 -3
  166. rasa/studio/upload.py +2 -3
  167. rasa/telemetry.py +113 -58
  168. rasa/tracing/config.py +2 -3
  169. rasa/tracing/instrumentation/attribute_extractors.py +29 -17
  170. rasa/tracing/instrumentation/instrumentation.py +4 -47
  171. rasa/utils/common.py +18 -19
  172. rasa/utils/endpoints.py +7 -4
  173. rasa/utils/io.py +66 -0
  174. rasa/utils/json_utils.py +60 -0
  175. rasa/utils/licensing.py +9 -1
  176. rasa/utils/ml_utils.py +4 -2
  177. rasa/utils/tensorflow/model_data.py +193 -2
  178. rasa/validator.py +196 -1
  179. rasa/version.py +1 -1
  180. {rasa_pro-3.9.18.dist-info β†’ rasa_pro-3.10.4.dist-info}/METADATA +47 -72
  181. {rasa_pro-3.9.18.dist-info β†’ rasa_pro-3.10.4.dist-info}/RECORD +186 -121
  182. rasa/nlu/classifiers/llm_intent_classifier.py +0 -519
  183. rasa/shared/providers/openai/clients.py +0 -43
  184. rasa/shared/providers/openai/session_handler.py +0 -110
  185. rasa/utils/tensorflow/feature_array.py +0 -366
  186. /rasa/{shared/providers/openai β†’ cli/project_templates/tutorial/actions}/__init__.py +0 -0
  187. /rasa/cli/project_templates/tutorial/{actions.py β†’ actions/actions.py} +0 -0
  188. {rasa_pro-3.9.18.dist-info β†’ rasa_pro-3.10.4.dist-info}/NOTICE +0 -0
  189. {rasa_pro-3.9.18.dist-info β†’ rasa_pro-3.10.4.dist-info}/WHEEL +0 -0
  190. {rasa_pro-3.9.18.dist-info β†’ rasa_pro-3.10.4.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,191 @@ 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
969
+ or re.sub(r'^[\'"](.+)[\'"]$', r"\1", sv.value) in valid_slot_values
970
+ for sv in slot_value
971
+ ]
972
+ if not all(slot_values_validity):
973
+ invalid_slot_values = [
974
+ sv
975
+ for (sv, slot_value_valid) in zip(slot_value, slot_values_validity)
976
+ if not slot_value_valid
977
+ ]
978
+ structlogger.error(
979
+ "validator.verify_predicates.link.invalid_condition",
980
+ step=step_id,
981
+ link=link_condition,
982
+ flow=flow_id,
983
+ event_info=(
984
+ f"Detected invalid condition '{link_condition}' "
985
+ f"at step '{step_id}' for flow id '{flow_id}'. "
986
+ f"Values {invalid_slot_values} are not valid values "
987
+ f"for slot {slot_name}. "
988
+ f"Please make sure that all conditions are valid."
989
+ ),
990
+ )
991
+ return False
992
+ return all_good
993
+
994
+ def _validate_categorical_and_boolean_values_check(
995
+ self,
996
+ predicate: Predicate,
997
+ all_good: bool,
998
+ step_id: str,
999
+ link_condition: str,
1000
+ flow_id: str,
1001
+ ) -> bool:
1002
+ """Validates the categorical and boolean slot checks.
1003
+
1004
+ Validates that the categorical and boolean slots
1005
+ are checked against valid values.
1006
+
1007
+ Args:
1008
+ predicate: condition that is supposed to be validated
1009
+ all_good: flag whether all the validations have passed so far
1010
+ step_id: id of the step in which the values are being checked
1011
+ link_condition: condition where the values are being checked
1012
+ flow_id: id of the flow where the values are being checked
1013
+
1014
+ Returns:
1015
+ False, if validation failed, previous value of all_good, otherwise
1016
+ """
1017
+ predicate_syntax_tree = self._extract_predicate_syntax_tree(predicate)
1018
+ slot_name, slot_value = self._extract_slot_name_and_slot_value(
1019
+ predicate_syntax_tree
1020
+ )
1021
+
1022
+ if slot_name is None:
1023
+ return all_good
1024
+
1025
+ if slot_name[0] == "slots":
1026
+ slot_name = slot_name[1]
1027
+ # slots.{{context.variable}} gets evaluated to `slots.None`,
1028
+ # these predicates can only be validated during runtime
1029
+ if slot_name == "None":
1030
+ return all_good
1031
+ else:
1032
+ return all_good
1033
+
1034
+ try:
1035
+ slot = next(slot for slot in self.domain.slots if slot.name == slot_name)
1036
+ except StopIteration:
1037
+ structlogger.error(
1038
+ "validator.verify_predicates.link.invalid_condition",
1039
+ step=step_id,
1040
+ link=link_condition,
1041
+ flow=flow_id,
1042
+ event_info=(
1043
+ f"Detected invalid condition '{link_condition}' "
1044
+ f"at step '{step_id}' for flow id '{flow_id}'. "
1045
+ f"Slot {slot_name} is not defined in the domain file. "
1046
+ f"Please make sure that all conditions are valid."
1047
+ ),
1048
+ )
1049
+ return False
1050
+ if isinstance(slot, CategoricalSlot):
1051
+ return self._validate_categorical_value_check(
1052
+ slot_name,
1053
+ slot_value,
1054
+ slot.values,
1055
+ all_good,
1056
+ step_id,
1057
+ link_condition,
1058
+ flow_id,
1059
+ )
1060
+
1061
+ if (
1062
+ isinstance(slot, BooleanSlot)
1063
+ and isinstance(predicate_syntax_tree, CompareOperator)
1064
+ and not isinstance(predicate_syntax_tree.right.value, bool)
1065
+ ):
1066
+ structlogger.error(
1067
+ "validator.verify_predicates.link.invalid_condition",
1068
+ step=step_id,
1069
+ link=link_condition,
1070
+ flow=flow_id,
1071
+ event_info=(
1072
+ f"Detected invalid condition '{link_condition}' "
1073
+ f"at step '{step_id}' for flow id '{flow_id}'. "
1074
+ f"Boolean slots can only be compared to "
1075
+ f"boolean values (true, false). "
1076
+ f"Please make sure that all conditions are valid."
1077
+ ),
1078
+ )
1079
+ return False
1080
+ return all_good
1081
+
896
1082
  def verify_predicates(self) -> bool:
897
1083
  """Validate predicates used in flow step links and slot rejections."""
898
1084
  all_good = True
@@ -946,6 +1132,15 @@ class Validator:
946
1132
  ),
947
1133
  )
948
1134
  all_good = False
1135
+
1136
+ all_good = self._validate_categorical_and_boolean_values_check(
1137
+ predicate,
1138
+ all_good=all_good,
1139
+ step_id=step.id,
1140
+ link_condition=link.condition,
1141
+ flow_id=flow.id,
1142
+ )
1143
+
949
1144
  if isinstance(step, CollectInformationFlowStep):
950
1145
  predicates = [predicate.if_ for predicate in step.rejections]
951
1146
  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.18"
3
+ __version__ = "3.10.4"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rasa-pro
3
- Version: 3.9.18
3
+ Version: 3.10.4
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
- Requires-Dist: jsonpickle (>=3.3.0,<3.4)
58
- Requires-Dist: jsonschema (>=4.20,<4.21)
61
+ Requires-Dist: jsonpickle (>=3.0,<3.1)
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)
@@ -157,35 +163,39 @@ Description-Content-Type: text/markdown
157
163
 
158
164
  <hr />
159
165
 
166
+ <img align="right" height="255" src="https://www.rasa.com/assets/img/sara/sara-open-source-2.0.png" alt="An image of Sara, the Rasa mascot bird, holding a flag that reads Open Source with one wing, and a wrench in the other" title="Rasa Pro">
160
167
 
161
- Rasa Pro is a framework for building scalable, dynamic conversational AI assistants that integrate large language models (LLMs) to enable more contextually aware and agentic interactions. Whether you’re new to conversational AI or an experienced developer, Rasa Pro offers enhanced flexibility, control, and performance for mission-critical applications.
168
+ Rasa Pro is an open core product that extends Rasa Open Source. With over 50 million downloads, Rasa Open Source is the most popular open source framework for building chat and voice-based AI assistants.
162
169
 
163
- Building on the foundation of Rasa Open Source, Rasa Pro adds advanced features like CALM (Conversational AI with Language Models) and Dialogue Understanding (DU), which enable developers to shift from traditional intent-driven systems to LLM-based agents. This allows for more robust, responsive interactions that adhere strictly to business logic, while reducing risks like prompt injection and minimizing hallucinations.
170
+ Rasa Pro introduces CALM, a generative AI-native approach to developing assistants, combined with enterprise-ready analytics, security, and observability capabilities. A paid license is required to run Rasa Pro, but all Rasa Pro code is visible to end users and can be customized as needed.
164
171
 
165
- **Key Features:**
172
+ Rasa Pro is the pro-code component of our enterprise solution, Rasa Platform, for implementing resilient and trustworthy AI assistants at scale. Rasa Studio complements Rasa Pro with a low-code user interface, enabling anyone on your team to create and improve your assistant.
166
173
 
167
- - **Flows for Business Logic:** Easily define business logic through Flows, a simplified way to describe how your AI assistant should handle conversations. Flows help streamline the development process, focusing on key tasks and reducing the complexity involved in managing conversations.
168
- - **Automatic Conversation Repair:** Ensure seamless interactions by automatically handling interruptions or unexpected inputs. Developers have full control to customize these repairs based on specific use cases.
169
- - **Customizable and Open:** Fully customizable code that allows developers to modify Rasa Pro to meet specific requirements, ensuring flexibility and adaptability to various conversational AI needs.
170
- - **Robustness and Control:** Maintain strict adherence to business logic, preventing unwanted behaviors like prompt injection and hallucinations, leading to more reliable responses and secure interactions.
171
- - **Built-in Security:** Safeguard sensitive data, control access, and ensure secure deployment, essential for production environments that demand high levels of security and compliance.
174
+ ---
175
+ - πŸ€“ [Read The Docs](https://rasa.com/docs/rasa-pro/)
172
176
 
177
+ - 😁 [Install Rasa Pro](https://rasa.com/docs/rasa-pro/installation/python/installation)
173
178
 
179
+ ---
174
180
 
175
- A [free developer license](https://rasa.com/docs/rasa-pro/developer-edition/) is available so you can explore and get to know Rasa Pro. For small production deployments, the Extended Developer License allows you to take your assistant live in a limited capacity. A paid license is required for larger-scale production use, but all code is visible and can be customized as needed.
181
+ ## README Contents:
182
+ - [Development Internals](#development-internals)
183
+ - [Releases](#releases)
184
+ - [Troubleshooting](#troubleshooting)
176
185
 
177
- To get started right now, you can
186
+ ## Development Internals
178
187
 
179
- `pip install rasa-pro`
188
+ ### Installing Poetry
180
189
 
181
- Check out our
190
+ Rasa uses Poetry for packaging and dependency management. If you want to build it from source,
191
+ you have to install Poetry first. Please follow
192
+ [the official guide](https://python-poetry.org/docs/#installation) to see all possible options.
182
193
 
183
- - [Rasa-pro Quickstart](https://rasa.com/docs/rasa-pro/installation/quickstart/),
184
- - [Conversational AI with Language Models (CALM) conceptual rundown](https://rasa.com/docs/rasa-pro/calm/),
185
- - [Rasa Pro / CALM tutorial](https://rasa.com/docs/rasa-pro/tutorial), and
186
- - [Rasa pro changelog](https://rasa.com/docs/rasa/rasa-pro-changelog/)
194
+ To update an existing poetry version to the [version](.github/poetry_version.txt), currently used in rasa, run:
195
+ ```shell
196
+ poetry self update <version>
197
+ ```
187
198
 
188
- <<<<<<< HEAD
189
199
  ### Managing environments
190
200
 
191
201
  The official [Poetry guide](https://python-poetry.org/docs/managing-environments/) suggests to use
@@ -379,39 +389,6 @@ To check the types execute
379
389
  make types
380
390
  ```
381
391
 
382
- ### Backporting
383
-
384
- In order to port changes to `main` and across release branches, we use the `backport` workflow located at
385
- the `.github/workflows/backport.yml` path.
386
- This workflow is triggered by the `backport-to-<release-branch>` label applied to a PR, for example `backport-to-3.8.x`.
387
- Current available target branches are `main` and maintained release branches.
388
-
389
- When a PR gets labelled `backport-to-<release-branch>`, a PR is opened by the `backport-github-action` as soon as the
390
- 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.
391
-
392
- The PR author which the action assigns to the backporting PR has to resolve any conflicts before approving and merging.
393
- Release PRs should also be labelled with `backport-to-main` to backport the `CHANGELOG.md` updates to `main`.
394
- Backporting version updates should be accepted to the `main` branch from the latest release branch only.
395
-
396
- Here are some guidelines to follow when backporting changes and resolving conflicts:
397
-
398
- a) for conflicts in `version.py`: accept only the version from the latest release branch. Do not merge version changes
399
- from earlier release branches into `main` because this could cause issues when trying to make the next minor release.
400
-
401
- b) for conflicts in `pyproject.toml`: if related to the `rasa-pro` version, accept only the latest release branch;
402
- if related to other dependencies, accept `main` or whichever is the higher upgrade (main usually has the updated
403
- dependencies because we only do housekeeping on `main`, apart from vulnerability updates). Be mindful of dependencies that
404
- are removed from `main` but still exist in former release branches (for example `langchain`).
405
-
406
- c) for conflicts in `poetry.lock`: accept changes which were already present on the target branch, then run
407
- `poetry lock --no-update` so that the lock file contains your changes from `pyproject.toml` too.
408
-
409
- d) for conflicts in `CHANGELOG.md`: Manually place the changelog in their allocated section (e.g. 3.8.10 will go under the
410
- 3.8 section with the other releases, rather than go at the top of the file)
411
-
412
- If the backporting workflow fails, you are encouraged to cherry-pick the commits manually and create a PR to
413
- the target branch. Alternatively, you can install the backporting CLI tool as described [here](https://github.com/sorenlouv/backport?tab=readme-ov-file#install).
414
-
415
392
  ## Releases
416
393
  Rasa has implemented robust policies governing version naming, as well as release pace for major, minor, and patch releases.
417
394
 
@@ -494,12 +471,9 @@ Releasing a new version is quite simple, as the packages are build and distribut
494
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)
495
472
  (In this case do the following checks):
496
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))
497
- - 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
498
475
  - If the problem persists, check also the log files and try to find the root cause of the issue
499
476
  - If you still cannot resolve the error, contact the infrastructure team by providing any helpful information from your investigation
500
- 10. If the release is successful, add the newly created release branch to the backporting configuration in the `.backportrc.json` file to
501
- the `targetBranchesChoices` list. This is necessary for the backporting workflow to work correctly with new release branches.
502
-
503
477
 
504
478
  ### Cutting a Patch release
505
479
 
@@ -548,6 +522,10 @@ steps.
548
522
 
549
523
  Please refer to the [Rasa Product Release and Maintenance Policy](https://rasa.com/rasa-product-release-and-maintenance-policy/) page.
550
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
+
551
529
  ## Troubleshooting
552
530
 
553
531
  - When running docker commands, if you encounter this error: `OSError No space left on device`, consider running:
@@ -557,7 +535,4 @@ Please refer to the [Rasa Product Release and Maintenance Policy](https://rasa.c
557
535
  ```
558
536
 
559
537
  For more information on this command, please see the [Official Docker Documentation](https://docs.docker.com/engine/reference/commandline/system_prune/).
560
- =======
561
- for more. Also feel free to reach out to us on the [Rasa forum](https://forum.rasa.com/).
562
- >>>>>>> 2c5cd7bc639 (update readme.md from main branch on 3.10.x (#1597))
563
538