rasa-pro 3.12.6.dev2__py3-none-any.whl → 3.12.7.dev2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- rasa/__init__.py +0 -6
- rasa/cli/run.py +10 -6
- rasa/cli/utils.py +7 -0
- rasa/core/actions/action.py +0 -6
- rasa/core/channels/voice_ready/audiocodes.py +46 -17
- rasa/core/nlg/contextual_response_rephraser.py +4 -21
- rasa/core/nlg/summarize.py +1 -15
- rasa/core/policies/enterprise_search_policy.py +3 -16
- rasa/core/policies/flows/flow_executor.py +3 -38
- rasa/core/policies/intentless_policy.py +4 -17
- rasa/core/policies/policy.py +0 -2
- rasa/core/processor.py +19 -5
- rasa/core/utils.py +53 -0
- rasa/dialogue_understanding/coexistence/llm_based_router.py +4 -18
- rasa/dialogue_understanding/commands/cancel_flow_command.py +4 -59
- rasa/dialogue_understanding/commands/start_flow_command.py +0 -41
- rasa/dialogue_understanding/generator/command_generator.py +67 -0
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +4 -20
- rasa/dialogue_understanding/generator/llm_command_generator.py +1 -3
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +1 -12
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +0 -61
- rasa/dialogue_understanding/processor/command_processor.py +7 -65
- rasa/dialogue_understanding/stack/utils.py +0 -38
- rasa/e2e_test/utils/validation.py +3 -3
- rasa/hooks.py +0 -55
- rasa/shared/constants.py +0 -5
- rasa/shared/core/constants.py +0 -8
- rasa/shared/core/domain.py +12 -3
- rasa/shared/core/flows/flow.py +0 -17
- rasa/shared/core/flows/flows_yaml_schema.json +3 -38
- rasa/shared/core/flows/steps/collect.py +5 -18
- rasa/shared/core/flows/utils.py +1 -16
- rasa/shared/core/slot_mappings.py +11 -5
- rasa/shared/nlu/constants.py +0 -1
- rasa/shared/providers/constants.py +0 -9
- rasa/shared/providers/llm/_base_litellm_client.py +4 -14
- rasa/shared/providers/llm/litellm_router_llm_client.py +7 -17
- rasa/shared/providers/llm/llm_client.py +15 -24
- rasa/shared/providers/llm/self_hosted_llm_client.py +2 -10
- rasa/shared/utils/common.py +11 -1
- rasa/shared/utils/health_check/health_check.py +1 -7
- rasa/tracing/instrumentation/attribute_extractors.py +4 -4
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +1 -2
- rasa/utils/licensing.py +0 -15
- rasa/validator.py +1 -123
- rasa/version.py +1 -1
- {rasa_pro-3.12.6.dev2.dist-info → rasa_pro-3.12.7.dev2.dist-info}/METADATA +3 -4
- {rasa_pro-3.12.6.dev2.dist-info → rasa_pro-3.12.7.dev2.dist-info}/RECORD +51 -55
- rasa/core/actions/action_handle_digressions.py +0 -164
- rasa/dialogue_understanding/commands/handle_digressions_command.py +0 -144
- rasa/dialogue_understanding/patterns/handle_digressions.py +0 -81
- rasa/monkey_patches.py +0 -91
- {rasa_pro-3.12.6.dev2.dist-info → rasa_pro-3.12.7.dev2.dist-info}/NOTICE +0 -0
- {rasa_pro-3.12.6.dev2.dist-info → rasa_pro-3.12.7.dev2.dist-info}/WHEEL +0 -0
- {rasa_pro-3.12.6.dev2.dist-info → rasa_pro-3.12.7.dev2.dist-info}/entry_points.txt +0 -0
|
@@ -237,9 +237,7 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
|
|
|
237
237
|
raise ProviderClientAPIException(e)
|
|
238
238
|
|
|
239
239
|
async def acompletion(
|
|
240
|
-
self,
|
|
241
|
-
messages: Union[List[dict], List[str], str],
|
|
242
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
240
|
+
self, messages: Union[List[dict], List[str], str]
|
|
243
241
|
) -> LLMResponse:
|
|
244
242
|
"""Asynchronous completion of the model with the given messages.
|
|
245
243
|
|
|
@@ -257,7 +255,6 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
|
|
|
257
255
|
- a list of messages. Each message is a string and will be formatted
|
|
258
256
|
as a user message.
|
|
259
257
|
- a single message as a string which will be formatted as user message.
|
|
260
|
-
metadata: Optional metadata to be passed to the LLM call.
|
|
261
258
|
|
|
262
259
|
Returns:
|
|
263
260
|
The completion response.
|
|
@@ -266,11 +263,7 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
|
|
|
266
263
|
return await super().acompletion(messages)
|
|
267
264
|
return await self._atext_completion(messages)
|
|
268
265
|
|
|
269
|
-
def completion(
|
|
270
|
-
self,
|
|
271
|
-
messages: Union[List[dict], List[str], str],
|
|
272
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
273
|
-
) -> LLMResponse:
|
|
266
|
+
def completion(self, messages: Union[List[dict], List[str], str]) -> LLMResponse:
|
|
274
267
|
"""Completion of the model with the given messages.
|
|
275
268
|
|
|
276
269
|
Method overrides the base class method to call the appropriate
|
|
@@ -280,7 +273,6 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
|
|
|
280
273
|
|
|
281
274
|
Args:
|
|
282
275
|
messages: The messages to be used for completion.
|
|
283
|
-
metadata: Optional metadata to be passed to the LLM call.
|
|
284
276
|
|
|
285
277
|
Returns:
|
|
286
278
|
The completion response.
|
rasa/shared/utils/common.py
CHANGED
|
@@ -7,7 +7,17 @@ import os
|
|
|
7
7
|
import pkgutil
|
|
8
8
|
import sys
|
|
9
9
|
from types import ModuleType
|
|
10
|
-
from typing import
|
|
10
|
+
from typing import (
|
|
11
|
+
Any,
|
|
12
|
+
Callable,
|
|
13
|
+
Collection,
|
|
14
|
+
Dict,
|
|
15
|
+
List,
|
|
16
|
+
Optional,
|
|
17
|
+
Sequence,
|
|
18
|
+
Text,
|
|
19
|
+
Type,
|
|
20
|
+
)
|
|
11
21
|
|
|
12
22
|
import rasa.shared.utils.io
|
|
13
23
|
from rasa.exceptions import MissingDependencyException
|
|
@@ -3,7 +3,6 @@ import sys
|
|
|
3
3
|
from typing import Any, Dict, Optional
|
|
4
4
|
|
|
5
5
|
from rasa.shared.constants import (
|
|
6
|
-
LANGFUSE_CUSTOM_METADATA_DICT,
|
|
7
6
|
LLM_API_HEALTH_CHECK_DEFAULT_VALUE,
|
|
8
7
|
LLM_API_HEALTH_CHECK_ENV_VAR,
|
|
9
8
|
MODELS_CONFIG_KEY,
|
|
@@ -199,12 +198,7 @@ def send_test_llm_api_request(
|
|
|
199
198
|
config=llm_client.config,
|
|
200
199
|
)
|
|
201
200
|
try:
|
|
202
|
-
llm_client.completion(
|
|
203
|
-
"hello",
|
|
204
|
-
metadata={
|
|
205
|
-
LANGFUSE_CUSTOM_METADATA_DICT: {"component": log_source_component}
|
|
206
|
-
},
|
|
207
|
-
)
|
|
201
|
+
llm_client.completion("hello")
|
|
208
202
|
except Exception as e:
|
|
209
203
|
structlogger.error(
|
|
210
204
|
f"{log_source_function}.send_test_llm_api_request_failed",
|
|
@@ -372,7 +372,6 @@ def extract_llm_config(
|
|
|
372
372
|
def extract_attrs_for_llm_based_command_generator(
|
|
373
373
|
self: "LLMBasedCommandGenerator",
|
|
374
374
|
prompt: str,
|
|
375
|
-
metadata: Optional[Dict[str, Any]] = None,
|
|
376
375
|
) -> Dict[str, Any]:
|
|
377
376
|
from rasa.dialogue_understanding.generator.flow_retrieval import (
|
|
378
377
|
DEFAULT_EMBEDDINGS_CONFIG,
|
|
@@ -388,7 +387,8 @@ def extract_attrs_for_llm_based_command_generator(
|
|
|
388
387
|
|
|
389
388
|
|
|
390
389
|
def extract_attrs_for_contextual_response_rephraser(
|
|
391
|
-
self: Any,
|
|
390
|
+
self: Any,
|
|
391
|
+
prompt: str,
|
|
392
392
|
) -> Dict[str, Any]:
|
|
393
393
|
from rasa.core.nlg.contextual_response_rephraser import DEFAULT_LLM_CONFIG
|
|
394
394
|
|
|
@@ -721,7 +721,7 @@ def extract_attrs_for_intentless_policy_find_closest_response(
|
|
|
721
721
|
|
|
722
722
|
|
|
723
723
|
def extract_attrs_for_intentless_policy_generate_llm_answer(
|
|
724
|
-
self: "IntentlessPolicy", llm: "BaseLLM", prompt: str
|
|
724
|
+
self: "IntentlessPolicy", llm: "BaseLLM", prompt: str
|
|
725
725
|
) -> Dict[str, Any]:
|
|
726
726
|
from rasa.core.policies.intentless_policy import (
|
|
727
727
|
DEFAULT_EMBEDDINGS_CONFIG,
|
|
@@ -738,7 +738,7 @@ def extract_attrs_for_intentless_policy_generate_llm_answer(
|
|
|
738
738
|
|
|
739
739
|
|
|
740
740
|
def extract_attrs_for_enterprise_search_generate_llm_answer(
|
|
741
|
-
self: "EnterpriseSearchPolicy", llm: "BaseLLM", prompt: str
|
|
741
|
+
self: "EnterpriseSearchPolicy", llm: "BaseLLM", prompt: str
|
|
742
742
|
) -> Dict[str, Any]:
|
|
743
743
|
from rasa.core.policies.enterprise_search_policy import (
|
|
744
744
|
DEFAULT_EMBEDDINGS_CONFIG,
|
|
@@ -121,13 +121,12 @@ def _instrument_generate_answer(
|
|
|
121
121
|
response_examples: List[str],
|
|
122
122
|
conversation_samples: List[str],
|
|
123
123
|
history: str,
|
|
124
|
-
sender_id: str,
|
|
125
124
|
) -> Optional[str]:
|
|
126
125
|
with tracer.start_as_current_span(
|
|
127
126
|
f"{self.__class__.__name__}.{fn.__name__}"
|
|
128
127
|
) as span:
|
|
129
128
|
llm_response = await fn(
|
|
130
|
-
self, response_examples, conversation_samples, history
|
|
129
|
+
self, response_examples, conversation_samples, history
|
|
131
130
|
)
|
|
132
131
|
span.set_attributes(
|
|
133
132
|
{
|
rasa/utils/licensing.py
CHANGED
|
@@ -539,18 +539,3 @@ async def _count_conversations_after(
|
|
|
539
539
|
return 0
|
|
540
540
|
|
|
541
541
|
return await tracker_store.count_conversations(after_timestamp=after_timestamp)
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
def get_human_readable_licence_owner() -> str:
|
|
545
|
-
user_id = "unknown"
|
|
546
|
-
|
|
547
|
-
try:
|
|
548
|
-
retrieved_license = retrieve_license_from_env()
|
|
549
|
-
if retrieved_license:
|
|
550
|
-
decoded = License.decode(retrieved_license)
|
|
551
|
-
if decoded:
|
|
552
|
-
user_id = (
|
|
553
|
-
f"{decoded.company or ''}_{decoded.email or ''}_{decoded.jti or ''}"
|
|
554
|
-
)
|
|
555
|
-
finally:
|
|
556
|
-
return user_id
|
rasa/validator.py
CHANGED
|
@@ -48,7 +48,7 @@ from rasa.shared.core.domain import (
|
|
|
48
48
|
Domain,
|
|
49
49
|
)
|
|
50
50
|
from rasa.shared.core.events import ActionExecuted, ActiveLoop, UserUttered
|
|
51
|
-
from rasa.shared.core.flows import
|
|
51
|
+
from rasa.shared.core.flows import FlowsList
|
|
52
52
|
from rasa.shared.core.flows.constants import KEY_NAME, KEY_TRANSLATION
|
|
53
53
|
from rasa.shared.core.flows.flow_step_links import IfFlowStepLink
|
|
54
54
|
from rasa.shared.core.flows.steps.action import ActionFlowStep
|
|
@@ -56,7 +56,6 @@ from rasa.shared.core.flows.steps.collect import CollectInformationFlowStep
|
|
|
56
56
|
from rasa.shared.core.flows.steps.link import LinkFlowStep
|
|
57
57
|
from rasa.shared.core.flows.steps.set_slots import SetSlotsFlowStep
|
|
58
58
|
from rasa.shared.core.flows.utils import (
|
|
59
|
-
ALL_LABEL,
|
|
60
59
|
get_duplicate_slot_persistence_config_error_message,
|
|
61
60
|
get_invalid_slot_persistence_config_error_message,
|
|
62
61
|
warn_deprecated_collect_step_config,
|
|
@@ -1281,7 +1280,6 @@ class Validator:
|
|
|
1281
1280
|
self.verify_unique_flows(),
|
|
1282
1281
|
self.verify_predicates(),
|
|
1283
1282
|
self.verify_slot_persistence_configuration(),
|
|
1284
|
-
self.verify_digression_configuration(),
|
|
1285
1283
|
]
|
|
1286
1284
|
|
|
1287
1285
|
all_good = all(flow_validation_conditions)
|
|
@@ -1830,126 +1828,6 @@ class Validator:
|
|
|
1830
1828
|
|
|
1831
1829
|
return all_good
|
|
1832
1830
|
|
|
1833
|
-
def verify_digression_configuration(self) -> bool:
|
|
1834
|
-
"""Validates the digression configuration in flows."""
|
|
1835
|
-
all_good = True
|
|
1836
|
-
|
|
1837
|
-
for flow in self.flows.underlying_flows:
|
|
1838
|
-
all_good = self._validate_ask_confirm_digressions(flow, all_good)
|
|
1839
|
-
all_good = self._validate_block_digressions(flow, all_good)
|
|
1840
|
-
|
|
1841
|
-
return all_good
|
|
1842
|
-
|
|
1843
|
-
def _validate_ask_confirm_digressions(self, flow: Flow, all_good: bool) -> bool:
|
|
1844
|
-
"""Validates the ask_confirm_digressions configuration in a flow."""
|
|
1845
|
-
for flow_id in flow.ask_confirm_digressions:
|
|
1846
|
-
if flow_id == ALL_LABEL:
|
|
1847
|
-
continue
|
|
1848
|
-
if flow_id not in self.flows.flow_ids:
|
|
1849
|
-
structlogger.error(
|
|
1850
|
-
"validator.verify_digression_configuration.ask_confirm_digressions",
|
|
1851
|
-
flow=flow.id,
|
|
1852
|
-
event_info=(
|
|
1853
|
-
f"The flow '{flow_id}' is listed in the "
|
|
1854
|
-
f"`ask_confirm_digressions` configuration of flow "
|
|
1855
|
-
f"'{flow.id}', but it is not found in the "
|
|
1856
|
-
f"flows file. Please make sure that the flow id is correct."
|
|
1857
|
-
),
|
|
1858
|
-
)
|
|
1859
|
-
all_good = False
|
|
1860
|
-
|
|
1861
|
-
if flow_id in flow.block_digressions:
|
|
1862
|
-
structlogger.error(
|
|
1863
|
-
"validator.verify_digression_configuration.overlap_digressions",
|
|
1864
|
-
flow=flow.id,
|
|
1865
|
-
event_info=(
|
|
1866
|
-
f"The flow '{flow_id}' is listed in both the "
|
|
1867
|
-
f"`ask_confirm_digressions` and `block_digressions` "
|
|
1868
|
-
f"configuration of flow '{flow.id}'. "
|
|
1869
|
-
f"Please make sure that the flow id is not listed in both "
|
|
1870
|
-
f"configurations."
|
|
1871
|
-
),
|
|
1872
|
-
)
|
|
1873
|
-
all_good = False
|
|
1874
|
-
|
|
1875
|
-
for step in flow.get_collect_steps():
|
|
1876
|
-
for flow_id in step.ask_confirm_digressions:
|
|
1877
|
-
if flow_id == ALL_LABEL:
|
|
1878
|
-
continue
|
|
1879
|
-
|
|
1880
|
-
if flow_id not in self.flows.flow_ids:
|
|
1881
|
-
structlogger.error(
|
|
1882
|
-
"validator.verify_digression_configuration.ask_confirm_digressions",
|
|
1883
|
-
flow=flow.id,
|
|
1884
|
-
step_id=step.id,
|
|
1885
|
-
event_info=(
|
|
1886
|
-
f"The flow '{flow_id}' is listed in the "
|
|
1887
|
-
f"`ask_confirm_digressions` configuration of step "
|
|
1888
|
-
f"'{step.id}' in flow '{flow.id}', but it is "
|
|
1889
|
-
f"not found in the flows file. "
|
|
1890
|
-
f"Please make sure that the flow id is correct."
|
|
1891
|
-
),
|
|
1892
|
-
)
|
|
1893
|
-
all_good = False
|
|
1894
|
-
|
|
1895
|
-
if flow_id in step.block_digressions:
|
|
1896
|
-
structlogger.error(
|
|
1897
|
-
"validator.verify_digression_configuration.overlap_digressions",
|
|
1898
|
-
flow=flow.id,
|
|
1899
|
-
step_id=step.id,
|
|
1900
|
-
event_info=(
|
|
1901
|
-
f"The flow '{flow_id}' is listed in both the "
|
|
1902
|
-
f"`ask_confirm_digressions` and `block_digressions` "
|
|
1903
|
-
f"configuration of step '{step.id}' in flow '{flow.id}'. "
|
|
1904
|
-
f"Please make sure that the flow id is not listed in both "
|
|
1905
|
-
f"configurations."
|
|
1906
|
-
),
|
|
1907
|
-
)
|
|
1908
|
-
all_good = False
|
|
1909
|
-
|
|
1910
|
-
return all_good
|
|
1911
|
-
|
|
1912
|
-
def _validate_block_digressions(self, flow: Flow, all_good: bool) -> bool:
|
|
1913
|
-
"""Validates the block_digressions configuration in a flow."""
|
|
1914
|
-
for flow_id in flow.block_digressions:
|
|
1915
|
-
if flow_id == ALL_LABEL:
|
|
1916
|
-
continue
|
|
1917
|
-
|
|
1918
|
-
if flow_id not in self.flows.flow_ids:
|
|
1919
|
-
structlogger.error(
|
|
1920
|
-
"validator.verify_digression_configuration.block_digressions",
|
|
1921
|
-
flow=flow.id,
|
|
1922
|
-
event_info=(
|
|
1923
|
-
f"The flow '{flow_id}' is listed in the `block_digressions` "
|
|
1924
|
-
f"configuration of flow '{flow.id}', but it is not found "
|
|
1925
|
-
f"in the flows file. Please make sure that the flow id "
|
|
1926
|
-
f"is correct."
|
|
1927
|
-
),
|
|
1928
|
-
)
|
|
1929
|
-
all_good = False
|
|
1930
|
-
|
|
1931
|
-
for step in flow.get_collect_steps():
|
|
1932
|
-
for flow_id in step.block_digressions:
|
|
1933
|
-
if flow_id == ALL_LABEL:
|
|
1934
|
-
continue
|
|
1935
|
-
|
|
1936
|
-
if flow_id not in self.flows.flow_ids:
|
|
1937
|
-
structlogger.error(
|
|
1938
|
-
"validator.verify_digression_configuration.block_digressions",
|
|
1939
|
-
flow=flow.id,
|
|
1940
|
-
step_id=step.id,
|
|
1941
|
-
event_info=(
|
|
1942
|
-
f"The flow '{flow_id}' is listed in the "
|
|
1943
|
-
f"`block_digressions` configuration of step "
|
|
1944
|
-
f"'{step.id}' in flow '{flow.id}', but it is "
|
|
1945
|
-
f"not found in the flows file. "
|
|
1946
|
-
f"Please make sure that the flow id is correct."
|
|
1947
|
-
),
|
|
1948
|
-
)
|
|
1949
|
-
all_good = False
|
|
1950
|
-
|
|
1951
|
-
return all_good
|
|
1952
|
-
|
|
1953
1831
|
def verify_slot_validation(self) -> bool:
|
|
1954
1832
|
"""Validates the slot validation configuration in the domain file."""
|
|
1955
1833
|
all_good = True
|
rasa/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: rasa-pro
|
|
3
|
-
Version: 3.12.
|
|
3
|
+
Version: 3.12.7.dev2
|
|
4
4
|
Summary: State-of-the-art open-core Conversational AI framework for Enterprises that natively leverages generative AI for effortless assistant development.
|
|
5
5
|
Keywords: nlp,machine-learning,machine-learning-library,bot,bots,botkit,rasa conversational-agents,conversational-ai,chatbot,chatbot-framework,bot-framework
|
|
6
6
|
Author: Rasa Technologies GmbH
|
|
@@ -63,7 +63,6 @@ Requires-Dist: keras (==2.14.0)
|
|
|
63
63
|
Requires-Dist: langchain (>=0.2.17,<0.3.0)
|
|
64
64
|
Requires-Dist: langchain-community (>=0.2.19,<0.3.0)
|
|
65
65
|
Requires-Dist: langcodes (>=3.5.0,<4.0.0)
|
|
66
|
-
Requires-Dist: langfuse (>=2.60.2,<2.61.0)
|
|
67
66
|
Requires-Dist: litellm (>=1.52.6,<1.53.0)
|
|
68
67
|
Requires-Dist: matplotlib (>=3.7,<3.8)
|
|
69
68
|
Requires-Dist: mattermostwrapper (>=2.2,<2.3)
|
|
@@ -117,7 +116,7 @@ Requires-Dist: scikit-learn (>=1.5.1,<1.6.0)
|
|
|
117
116
|
Requires-Dist: scipy (>=1.13.1,<1.14.0)
|
|
118
117
|
Requires-Dist: sentencepiece[sentencepiece] (>=0.1.99,<0.2.0) ; extra == "transformers" or extra == "full"
|
|
119
118
|
Requires-Dist: sentry-sdk (>=1.14.0,<1.15.0)
|
|
120
|
-
Requires-Dist: setuptools (>=
|
|
119
|
+
Requires-Dist: setuptools (>=78.1.0,<78.2.0)
|
|
121
120
|
Requires-Dist: sklearn-crfsuite (>=0.3.6,<0.4.0)
|
|
122
121
|
Requires-Dist: skops (>=0.10.0,<0.11.0)
|
|
123
122
|
Requires-Dist: slack-sdk (>=3.27.1,<3.28.0)
|
|
@@ -147,7 +146,7 @@ Requires-Dist: typing-utils (>=0.1.0,<0.2.0)
|
|
|
147
146
|
Requires-Dist: ujson (>=5.8,<6.0)
|
|
148
147
|
Requires-Dist: webexteamssdk (>=1.6.1,<1.7.0)
|
|
149
148
|
Requires-Dist: websockets (>=10.4,<11.0)
|
|
150
|
-
Requires-Dist: wheel (>=0.
|
|
149
|
+
Requires-Dist: wheel (>=0.45.1)
|
|
151
150
|
Project-URL: Documentation, https://rasa.com/docs
|
|
152
151
|
Project-URL: Homepage, https://rasa.com
|
|
153
152
|
Project-URL: Repository, https://github.com/rasahq/rasa
|