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.
- README.md +5 -37
- rasa/__init__.py +1 -2
- rasa/__main__.py +5 -0
- rasa/anonymization/anonymization_rule_executor.py +2 -2
- rasa/api.py +26 -22
- rasa/cli/arguments/data.py +27 -2
- rasa/cli/arguments/default_arguments.py +25 -3
- rasa/cli/arguments/run.py +9 -9
- rasa/cli/arguments/train.py +2 -0
- rasa/cli/data.py +70 -8
- rasa/cli/e2e_test.py +108 -433
- rasa/cli/interactive.py +1 -0
- rasa/cli/llm_fine_tuning.py +395 -0
- rasa/cli/project_templates/calm/endpoints.yml +1 -1
- rasa/cli/project_templates/tutorial/endpoints.yml +1 -1
- rasa/cli/run.py +14 -13
- rasa/cli/scaffold.py +10 -8
- rasa/cli/train.py +8 -7
- rasa/cli/utils.py +15 -0
- rasa/constants.py +7 -1
- rasa/core/actions/action.py +98 -49
- rasa/core/actions/action_run_slot_rejections.py +4 -1
- rasa/core/actions/custom_action_executor.py +9 -6
- rasa/core/actions/direct_custom_actions_executor.py +80 -0
- rasa/core/actions/e2e_stub_custom_action_executor.py +68 -0
- rasa/core/actions/grpc_custom_action_executor.py +2 -2
- rasa/core/actions/http_custom_action_executor.py +6 -5
- rasa/core/agent.py +21 -17
- rasa/core/channels/__init__.py +2 -0
- rasa/core/channels/audiocodes.py +1 -16
- rasa/core/channels/voice_aware/__init__.py +0 -0
- rasa/core/channels/voice_aware/jambonz.py +103 -0
- rasa/core/channels/voice_aware/jambonz_protocol.py +344 -0
- rasa/core/channels/voice_aware/utils.py +20 -0
- rasa/core/channels/voice_native/__init__.py +0 -0
- rasa/core/constants.py +6 -1
- rasa/core/featurizers/single_state_featurizer.py +1 -22
- rasa/core/featurizers/tracker_featurizers.py +18 -115
- rasa/core/information_retrieval/faiss.py +7 -4
- rasa/core/information_retrieval/information_retrieval.py +8 -0
- rasa/core/information_retrieval/milvus.py +9 -2
- rasa/core/information_retrieval/qdrant.py +1 -1
- rasa/core/nlg/contextual_response_rephraser.py +32 -10
- rasa/core/nlg/summarize.py +4 -3
- rasa/core/policies/enterprise_search_policy.py +100 -44
- rasa/core/policies/flows/flow_executor.py +155 -98
- rasa/core/policies/intentless_policy.py +52 -28
- rasa/core/policies/ted_policy.py +33 -58
- rasa/core/policies/unexpected_intent_policy.py +7 -15
- rasa/core/processor.py +15 -46
- rasa/core/run.py +5 -4
- rasa/core/tracker_store.py +8 -4
- rasa/core/utils.py +45 -56
- rasa/dialogue_understanding/coexistence/llm_based_router.py +45 -12
- rasa/dialogue_understanding/commands/__init__.py +4 -0
- rasa/dialogue_understanding/commands/change_flow_command.py +0 -6
- rasa/dialogue_understanding/commands/session_start_command.py +59 -0
- rasa/dialogue_understanding/commands/set_slot_command.py +1 -5
- rasa/dialogue_understanding/commands/utils.py +38 -0
- rasa/dialogue_understanding/generator/constants.py +10 -3
- rasa/dialogue_understanding/generator/flow_retrieval.py +14 -5
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +12 -2
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +106 -87
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +28 -6
- rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +90 -37
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +15 -15
- rasa/dialogue_understanding/patterns/session_start.py +37 -0
- rasa/dialogue_understanding/processor/command_processor.py +13 -14
- rasa/e2e_test/aggregate_test_stats_calculator.py +124 -0
- rasa/e2e_test/assertions.py +1181 -0
- rasa/e2e_test/assertions_schema.yml +106 -0
- rasa/e2e_test/constants.py +20 -0
- rasa/e2e_test/e2e_config.py +220 -0
- rasa/e2e_test/e2e_config_schema.yml +26 -0
- rasa/e2e_test/e2e_test_case.py +131 -8
- rasa/e2e_test/e2e_test_converter.py +363 -0
- rasa/e2e_test/e2e_test_converter_prompt.jinja2 +70 -0
- rasa/e2e_test/e2e_test_coverage_report.py +364 -0
- rasa/e2e_test/e2e_test_result.py +26 -6
- rasa/e2e_test/e2e_test_runner.py +498 -73
- rasa/e2e_test/e2e_test_schema.yml +96 -0
- rasa/e2e_test/pykwalify_extensions.py +39 -0
- rasa/e2e_test/stub_custom_action.py +70 -0
- rasa/e2e_test/utils/__init__.py +0 -0
- rasa/e2e_test/utils/e2e_yaml_utils.py +55 -0
- rasa/e2e_test/utils/io.py +596 -0
- rasa/e2e_test/utils/validation.py +80 -0
- rasa/engine/recipes/default_components.py +0 -2
- rasa/engine/storage/local_model_storage.py +0 -1
- rasa/env.py +9 -0
- rasa/llm_fine_tuning/__init__.py +0 -0
- rasa/llm_fine_tuning/annotation_module.py +241 -0
- rasa/llm_fine_tuning/conversations.py +144 -0
- rasa/llm_fine_tuning/llm_data_preparation_module.py +178 -0
- rasa/llm_fine_tuning/notebooks/unsloth_finetuning.ipynb +407 -0
- rasa/llm_fine_tuning/paraphrasing/__init__.py +0 -0
- rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +281 -0
- rasa/llm_fine_tuning/paraphrasing/default_rephrase_prompt_template.jina2 +44 -0
- rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +121 -0
- rasa/llm_fine_tuning/paraphrasing/rephrased_user_message.py +10 -0
- rasa/llm_fine_tuning/paraphrasing_module.py +128 -0
- rasa/llm_fine_tuning/storage.py +174 -0
- rasa/llm_fine_tuning/train_test_split_module.py +441 -0
- rasa/model_training.py +48 -16
- rasa/nlu/classifiers/diet_classifier.py +25 -38
- rasa/nlu/classifiers/logistic_regression_classifier.py +9 -44
- rasa/nlu/classifiers/sklearn_intent_classifier.py +16 -37
- rasa/nlu/extractors/crf_entity_extractor.py +50 -93
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +45 -78
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +17 -52
- rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +3 -5
- rasa/nlu/persistor.py +129 -32
- rasa/server.py +45 -10
- rasa/shared/constants.py +63 -15
- rasa/shared/core/domain.py +15 -12
- rasa/shared/core/events.py +28 -2
- rasa/shared/core/flows/flow.py +208 -13
- rasa/shared/core/flows/flow_path.py +84 -0
- rasa/shared/core/flows/flows_list.py +28 -10
- rasa/shared/core/flows/flows_yaml_schema.json +269 -193
- rasa/shared/core/flows/validation.py +112 -25
- rasa/shared/core/flows/yaml_flows_io.py +149 -10
- rasa/shared/core/trackers.py +6 -0
- rasa/shared/core/training_data/visualization.html +2 -2
- rasa/shared/exceptions.py +4 -0
- rasa/shared/importers/importer.py +60 -11
- rasa/shared/importers/remote_importer.py +196 -0
- rasa/shared/nlu/constants.py +2 -0
- rasa/shared/nlu/training_data/features.py +2 -120
- rasa/shared/providers/_configs/__init__.py +0 -0
- rasa/shared/providers/_configs/azure_openai_client_config.py +181 -0
- rasa/shared/providers/_configs/client_config.py +57 -0
- rasa/shared/providers/_configs/default_litellm_client_config.py +130 -0
- rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +234 -0
- rasa/shared/providers/_configs/openai_client_config.py +175 -0
- rasa/shared/providers/_configs/self_hosted_llm_client_config.py +171 -0
- rasa/shared/providers/_configs/utils.py +101 -0
- rasa/shared/providers/_ssl_verification_utils.py +124 -0
- rasa/shared/providers/embedding/__init__.py +0 -0
- rasa/shared/providers/embedding/_base_litellm_embedding_client.py +254 -0
- rasa/shared/providers/embedding/_langchain_embedding_client_adapter.py +74 -0
- rasa/shared/providers/embedding/azure_openai_embedding_client.py +277 -0
- rasa/shared/providers/embedding/default_litellm_embedding_client.py +102 -0
- rasa/shared/providers/embedding/embedding_client.py +90 -0
- rasa/shared/providers/embedding/embedding_response.py +41 -0
- rasa/shared/providers/embedding/huggingface_local_embedding_client.py +191 -0
- rasa/shared/providers/embedding/openai_embedding_client.py +172 -0
- rasa/shared/providers/llm/__init__.py +0 -0
- rasa/shared/providers/llm/_base_litellm_client.py +227 -0
- rasa/shared/providers/llm/azure_openai_llm_client.py +338 -0
- rasa/shared/providers/llm/default_litellm_llm_client.py +84 -0
- rasa/shared/providers/llm/llm_client.py +76 -0
- rasa/shared/providers/llm/llm_response.py +50 -0
- rasa/shared/providers/llm/openai_llm_client.py +155 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +169 -0
- rasa/shared/providers/mappings.py +75 -0
- rasa/shared/utils/cli.py +30 -0
- rasa/shared/utils/io.py +65 -3
- rasa/shared/utils/llm.py +223 -200
- rasa/shared/utils/yaml.py +122 -7
- rasa/studio/download.py +19 -13
- rasa/studio/train.py +2 -3
- rasa/studio/upload.py +2 -3
- rasa/telemetry.py +113 -58
- rasa/tracing/config.py +2 -3
- rasa/tracing/instrumentation/attribute_extractors.py +29 -17
- rasa/tracing/instrumentation/instrumentation.py +4 -47
- rasa/utils/common.py +18 -19
- rasa/utils/endpoints.py +7 -4
- rasa/utils/io.py +66 -0
- rasa/utils/json_utils.py +60 -0
- rasa/utils/licensing.py +9 -1
- rasa/utils/ml_utils.py +4 -2
- rasa/utils/tensorflow/model_data.py +193 -2
- rasa/validator.py +195 -1
- rasa/version.py +1 -1
- {rasa_pro-3.9.17.dist-info → rasa_pro-3.10.3.dist-info}/METADATA +25 -51
- {rasa_pro-3.9.17.dist-info → rasa_pro-3.10.3.dist-info}/RECORD +183 -119
- rasa/nlu/classifiers/llm_intent_classifier.py +0 -519
- rasa/shared/providers/openai/clients.py +0 -43
- rasa/shared/providers/openai/session_handler.py +0 -110
- rasa/utils/tensorflow/feature_array.py +0 -366
- /rasa/{shared/providers/openai → cli/project_templates/tutorial/actions}/__init__.py +0 -0
- /rasa/cli/project_templates/tutorial/{actions.py → actions/actions.py} +0 -0
- {rasa_pro-3.9.17.dist-info → rasa_pro-3.10.3.dist-info}/NOTICE +0 -0
- {rasa_pro-3.9.17.dist-info → rasa_pro-3.10.3.dist-info}/WHEEL +0 -0
- {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,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: rasa-pro
|
|
3
|
-
Version: 3.
|
|
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.
|
|
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 (>=
|
|
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.
|
|
62
|
+
Requires-Dist: jsonschema (>=4.22)
|
|
59
63
|
Requires-Dist: keras (==2.14.0)
|
|
60
|
-
Requires-Dist: langchain (>=0.0
|
|
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 (>=
|
|
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 (>=
|
|
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.
|
|
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 (
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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:
|