rasa-pro 3.13.0.dev20250612__py3-none-any.whl → 3.13.0rc1__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/__main__.py +0 -3
- rasa/api.py +1 -1
- rasa/cli/dialogue_understanding_test.py +1 -1
- rasa/cli/e2e_test.py +1 -8
- rasa/cli/evaluate.py +1 -1
- rasa/cli/export.py +3 -1
- rasa/cli/llm_fine_tuning.py +12 -11
- rasa/cli/project_templates/defaults.py +133 -0
- rasa/cli/project_templates/tutorial/config.yml +1 -1
- rasa/cli/project_templates/tutorial/endpoints.yml +1 -1
- rasa/cli/run.py +1 -1
- rasa/cli/studio/download.py +1 -23
- rasa/cli/studio/link.py +52 -0
- rasa/cli/studio/pull.py +79 -0
- rasa/cli/studio/push.py +78 -0
- rasa/cli/studio/studio.py +12 -0
- rasa/cli/studio/train.py +0 -1
- rasa/cli/studio/upload.py +8 -0
- rasa/cli/train.py +1 -1
- rasa/cli/utils.py +1 -1
- rasa/cli/x.py +1 -1
- rasa/constants.py +2 -0
- rasa/core/__init__.py +0 -16
- rasa/core/actions/action.py +5 -1
- rasa/core/actions/action_repeat_bot_messages.py +18 -22
- rasa/core/actions/action_run_slot_rejections.py +0 -1
- rasa/core/agent.py +16 -1
- rasa/core/available_endpoints.py +146 -0
- rasa/core/brokers/pika.py +1 -2
- rasa/core/channels/__init__.py +2 -0
- rasa/core/channels/botframework.py +2 -2
- rasa/core/channels/channel.py +2 -2
- rasa/core/channels/development_inspector.py +1 -1
- rasa/core/channels/facebook.py +1 -4
- rasa/core/channels/hangouts.py +8 -5
- rasa/core/channels/inspector/README.md +3 -3
- rasa/core/channels/inspector/dist/assets/{arc-c4b064fc.js → arc-371401b1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-215b5026.js → blockDiagram-38ab4fdb-3f126156.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-2b54a0a3.js → c4Diagram-3d4e48cf-12f22eb7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-f1efda17.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-daacea5f.js → classDiagram-70f12bd4-03b1d386.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-930d4dc2.js → classDiagram-v2-f2320105-84f69d63.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-fdf164e2.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-83c206ba.js → createText-2e5e7dd3-ca47fd38.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-b0eb01d0.js → edges-e0da2a9e-f837ca8a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-17586500.js → erDiagram-9861fffd-8717ac54.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-be2a1776.js → flowDb-956e92f1-94f38b83.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-c2120ebd.js → flowDiagram-66a62f08-b616f9fb.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-7d7a1629.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-a6ab5c48.js → flowchart-elk-definition-4a651766-f5d24bb8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-ef613457.js → ganttDiagram-c361ad54-b43ba8d9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-d59185b3.js → gitGraphDiagram-72cf32ee-c3aafaa5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-0f155405.js → graph-0d0a2c10.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-d5f1d1b7.js → index-3862675e-58ea0305.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-47737d3a.js → index-cce6f8a1.js} +3 -3
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-b07d141f.js → infoDiagram-f8f76790-b8f60461.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-1936d429.js → journeyDiagram-49397b02-95be5545.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-dde8d0f3.js → layout-da885b9b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-0c2c7ee0.js → line-f1c817d3.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-35dd89a4.js → linear-d42801e6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-56192851.js → mindmap-definition-fc14e90a-a38923a6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-fc21ed78.js → pieDiagram-8a3498a8-ca6e71e9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-25e98518.js → quadrantDiagram-120e2f19-b290dae9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-546ff1f5.js → requirementDiagram-deff3bca-03f02ceb.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-02d8b82d.js → sankeyDiagram-04a897e0-c49eee40.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-3ca5a92e.js → sequenceDiagram-704730f1-b2cd6a3d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-128ea07c.js → stateDiagram-587899a1-e53a2028.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-95f290af.js → stateDiagram-v2-d93cdb3a-e1982a03.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-4984898a.js → styles-6aaf32cf-d0226ca5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1bf266ba.js → styles-9a916d00-0e21dc00.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-60521c63.js → styles-c10674c1-9588494e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-a25b6e12.js → svgDrawCommon-08f97a94-be478d4f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-0fc086bf.js → timeline-definition-85554ec2-74631749.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-44ee592e.js → xychartDiagram-e933f94c-a043552f.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/src/components/RecruitmentPanel.tsx +1 -1
- rasa/core/channels/mattermost.py +1 -1
- rasa/core/channels/rasa_chat.py +2 -4
- rasa/core/channels/rest.py +5 -4
- rasa/core/channels/socketio.py +56 -41
- rasa/core/channels/studio_chat.py +314 -10
- rasa/core/channels/vier_cvg.py +1 -2
- rasa/core/channels/voice_ready/audiocodes.py +2 -9
- rasa/core/channels/voice_stream/asr/azure.py +9 -0
- rasa/core/channels/voice_stream/audiocodes.py +8 -5
- rasa/core/channels/voice_stream/browser_audio.py +1 -1
- rasa/core/channels/voice_stream/genesys.py +2 -2
- rasa/core/channels/voice_stream/jambonz.py +166 -0
- rasa/core/channels/voice_stream/tts/__init__.py +8 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +17 -5
- rasa/core/channels/voice_stream/voice_channel.py +44 -24
- rasa/core/exporter.py +36 -0
- rasa/core/http_interpreter.py +3 -7
- rasa/core/information_retrieval/faiss.py +18 -11
- rasa/core/information_retrieval/ingestion/faq_parser.py +158 -0
- rasa/core/jobs.py +2 -1
- rasa/core/nlg/contextual_response_rephraser.py +48 -12
- rasa/core/nlg/generator.py +0 -1
- rasa/core/nlg/interpolator.py +2 -3
- rasa/core/nlg/summarize.py +39 -5
- rasa/core/policies/enterprise_search_policy.py +298 -184
- rasa/core/policies/enterprise_search_policy_config.py +241 -0
- rasa/core/policies/enterprise_search_prompt_with_relevancy_check_and_citation_template.jinja2 +64 -0
- rasa/core/policies/flow_policy.py +1 -1
- rasa/core/policies/flows/flow_executor.py +96 -17
- rasa/core/policies/intentless_policy.py +71 -26
- rasa/core/processor.py +104 -51
- rasa/core/run.py +33 -11
- rasa/core/tracker_stores/tracker_store.py +1 -1
- rasa/core/training/interactive.py +1 -1
- rasa/core/utils.py +35 -99
- rasa/dialogue_understanding/coexistence/intent_based_router.py +2 -1
- rasa/dialogue_understanding/coexistence/llm_based_router.py +13 -17
- rasa/dialogue_understanding/commands/__init__.py +4 -0
- rasa/dialogue_understanding/commands/can_not_handle_command.py +2 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +6 -2
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +2 -0
- rasa/dialogue_understanding/commands/clarify_command.py +7 -3
- rasa/dialogue_understanding/commands/command_syntax_manager.py +1 -0
- rasa/dialogue_understanding/commands/correct_slots_command.py +5 -6
- rasa/dialogue_understanding/commands/error_command.py +1 -1
- rasa/dialogue_understanding/commands/human_handoff_command.py +3 -3
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +2 -0
- rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +2 -0
- rasa/dialogue_understanding/commands/set_slot_command.py +15 -5
- rasa/dialogue_understanding/commands/skip_question_command.py +3 -3
- rasa/dialogue_understanding/commands/start_flow_command.py +7 -3
- rasa/dialogue_understanding/commands/utils.py +26 -2
- rasa/dialogue_understanding/generator/__init__.py +7 -1
- rasa/dialogue_understanding/generator/command_generator.py +15 -3
- rasa/dialogue_understanding/generator/command_parser.py +2 -2
- rasa/dialogue_understanding/generator/command_parser_validator.py +63 -0
- rasa/dialogue_understanding/generator/constants.py +2 -2
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +2 -2
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_template.jinja2 +0 -2
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +1 -0
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +1 -0
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +79 -0
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +79 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +28 -463
- rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +147 -0
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +461 -0
- rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +11 -64
- rasa/dialogue_understanding/patterns/cancel.py +1 -2
- rasa/dialogue_understanding/patterns/clarify.py +1 -1
- rasa/dialogue_understanding/patterns/correction.py +2 -2
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +37 -25
- rasa/dialogue_understanding/patterns/domain_for_patterns.py +190 -0
- rasa/dialogue_understanding/processor/command_processor.py +11 -12
- rasa/dialogue_understanding/processor/command_processor_component.py +3 -3
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +17 -4
- rasa/dialogue_understanding/stack/utils.py +3 -1
- rasa/dialogue_understanding/utils.py +68 -12
- rasa/dialogue_understanding_test/du_test_case.py +1 -1
- rasa/dialogue_understanding_test/du_test_runner.py +4 -22
- rasa/dialogue_understanding_test/test_case_simulation/test_case_tracker_simulator.py +2 -6
- rasa/e2e_test/e2e_test_coverage_report.py +1 -1
- rasa/e2e_test/e2e_test_runner.py +1 -1
- rasa/engine/constants.py +1 -1
- rasa/engine/graph.py +2 -2
- rasa/engine/recipes/default_recipe.py +26 -2
- rasa/engine/validation.py +3 -2
- rasa/hooks.py +0 -28
- rasa/llm_fine_tuning/annotation_module.py +39 -9
- rasa/llm_fine_tuning/conversations.py +3 -0
- rasa/llm_fine_tuning/llm_data_preparation_module.py +66 -49
- rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +5 -7
- rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +52 -44
- rasa/llm_fine_tuning/paraphrasing_module.py +10 -12
- rasa/llm_fine_tuning/storage.py +4 -4
- rasa/llm_fine_tuning/utils.py +63 -1
- rasa/model_manager/model_api.py +88 -0
- rasa/model_manager/trainer_service.py +4 -4
- rasa/plugin.py +1 -11
- rasa/privacy/__init__.py +0 -0
- rasa/privacy/constants.py +83 -0
- rasa/privacy/event_broker_utils.py +77 -0
- rasa/privacy/privacy_config.py +281 -0
- rasa/privacy/privacy_config_schema.json +86 -0
- rasa/privacy/privacy_filter.py +340 -0
- rasa/privacy/privacy_manager.py +576 -0
- rasa/server.py +23 -2
- rasa/shared/constants.py +18 -0
- rasa/shared/core/command_payload_reader.py +1 -5
- rasa/shared/core/constants.py +4 -3
- rasa/shared/core/domain.py +7 -0
- rasa/shared/core/events.py +38 -10
- rasa/shared/core/flows/constants.py +2 -0
- rasa/shared/core/flows/flow.py +127 -14
- rasa/shared/core/flows/flows_list.py +18 -1
- rasa/shared/core/flows/flows_yaml_schema.json +3 -0
- rasa/shared/core/flows/steps/collect.py +46 -2
- rasa/shared/core/flows/steps/link.py +7 -2
- rasa/shared/core/flows/validation.py +25 -5
- rasa/shared/core/slots.py +28 -0
- rasa/shared/core/training_data/story_reader/yaml_story_reader.py +1 -4
- rasa/shared/exceptions.py +4 -0
- rasa/shared/providers/_configs/azure_openai_client_config.py +6 -2
- rasa/shared/providers/_configs/default_litellm_client_config.py +1 -1
- rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +1 -1
- rasa/shared/providers/_configs/openai_client_config.py +5 -1
- rasa/shared/providers/_configs/rasa_llm_client_config.py +1 -1
- rasa/shared/providers/_configs/self_hosted_llm_client_config.py +1 -1
- rasa/shared/providers/_configs/utils.py +0 -99
- rasa/shared/providers/embedding/_base_litellm_embedding_client.py +3 -0
- rasa/shared/providers/llm/_base_litellm_client.py +5 -2
- rasa/shared/utils/common.py +1 -1
- rasa/shared/utils/configs.py +110 -0
- rasa/shared/utils/constants.py +0 -3
- rasa/shared/utils/llm.py +195 -9
- rasa/shared/utils/pykwalify_extensions.py +0 -9
- rasa/shared/utils/yaml.py +32 -0
- rasa/studio/constants.py +1 -0
- rasa/studio/data_handler.py +11 -4
- rasa/studio/download.py +167 -0
- rasa/studio/link.py +200 -0
- rasa/studio/prompts.py +223 -0
- rasa/studio/pull/__init__.py +0 -0
- rasa/studio/{download/flows.py → pull/data.py} +23 -160
- rasa/studio/{download → pull}/domains.py +1 -1
- rasa/studio/pull/pull.py +235 -0
- rasa/studio/push.py +136 -0
- rasa/studio/train.py +1 -1
- rasa/studio/upload.py +117 -67
- rasa/telemetry.py +82 -25
- rasa/tracing/config.py +3 -4
- rasa/tracing/constants.py +19 -1
- rasa/tracing/instrumentation/attribute_extractors.py +30 -8
- rasa/tracing/instrumentation/instrumentation.py +53 -2
- rasa/tracing/instrumentation/metrics.py +98 -15
- rasa/tracing/metric_instrument_provider.py +75 -3
- rasa/utils/common.py +7 -22
- rasa/utils/log_utils.py +1 -45
- rasa/validator.py +2 -8
- rasa/version.py +1 -1
- {rasa_pro-3.13.0.dev20250612.dist-info → rasa_pro-3.13.0rc1.dist-info}/METADATA +8 -9
- {rasa_pro-3.13.0.dev20250612.dist-info → rasa_pro-3.13.0rc1.dist-info}/RECORD +241 -220
- rasa/anonymization/__init__.py +0 -2
- rasa/anonymization/anonymisation_rule_yaml_reader.py +0 -91
- rasa/anonymization/anonymization_pipeline.py +0 -286
- rasa/anonymization/anonymization_rule_executor.py +0 -266
- rasa/anonymization/anonymization_rule_orchestrator.py +0 -119
- rasa/anonymization/schemas/config.yml +0 -47
- rasa/anonymization/utils.py +0 -118
- rasa/core/channels/inspector/dist/assets/channel-3730f5fd.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-e847561e.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-efbbfe00.js +0 -1
- rasa/studio/download/download.py +0 -439
- /rasa/{studio/download → core/information_retrieval/ingestion}/__init__.py +0 -0
- {rasa_pro-3.13.0.dev20250612.dist-info → rasa_pro-3.13.0rc1.dist-info}/NOTICE +0 -0
- {rasa_pro-3.13.0.dev20250612.dist-info → rasa_pro-3.13.0rc1.dist-info}/WHEEL +0 -0
- {rasa_pro-3.13.0.dev20250612.dist-info → rasa_pro-3.13.0rc1.dist-info}/entry_points.txt +0 -0
rasa/__main__.py
CHANGED
|
@@ -143,9 +143,6 @@ def main(raw_arguments: Optional[List[str]] = None) -> None:
|
|
|
143
143
|
if not is_studio_command:
|
|
144
144
|
plugin_manager().hook.init_telemetry(endpoints_file=endpoints_file)
|
|
145
145
|
plugin_manager().hook.init_managers(endpoints_file=endpoints_file)
|
|
146
|
-
plugin_manager().hook.init_anonymization_pipeline(
|
|
147
|
-
endpoints_file=endpoints_file
|
|
148
|
-
)
|
|
149
146
|
|
|
150
147
|
cmdline_arguments.func(cmdline_arguments)
|
|
151
148
|
elif hasattr(cmdline_arguments, "version"):
|
rasa/api.py
CHANGED
|
@@ -38,7 +38,7 @@ def run(
|
|
|
38
38
|
"""
|
|
39
39
|
import rasa.core.run
|
|
40
40
|
import rasa.shared.utils.common
|
|
41
|
-
from rasa.core.
|
|
41
|
+
from rasa.core.available_endpoints import AvailableEndpoints
|
|
42
42
|
from rasa.shared.constants import DOCS_BASE_URL
|
|
43
43
|
from rasa.shared.utils.cli import print_warning
|
|
44
44
|
|
|
@@ -16,9 +16,9 @@ from rasa.cli.arguments.default_arguments import (
|
|
|
16
16
|
add_remote_storage_param,
|
|
17
17
|
)
|
|
18
18
|
from rasa.core.agent import Agent
|
|
19
|
+
from rasa.core.available_endpoints import AvailableEndpoints
|
|
19
20
|
from rasa.core.exceptions import AgentNotReady
|
|
20
21
|
from rasa.core.processor import MessageProcessor
|
|
21
|
-
from rasa.core.utils import AvailableEndpoints
|
|
22
22
|
from rasa.dialogue_understanding.commands import Command
|
|
23
23
|
from rasa.dialogue_understanding.generator import LLMBasedCommandGenerator
|
|
24
24
|
from rasa.dialogue_understanding.generator.command_parser import DEFAULT_COMMANDS
|
rasa/cli/e2e_test.py
CHANGED
|
@@ -18,8 +18,8 @@ from rasa.cli.arguments.default_arguments import (
|
|
|
18
18
|
add_model_param,
|
|
19
19
|
add_remote_storage_param,
|
|
20
20
|
)
|
|
21
|
+
from rasa.core.available_endpoints import AvailableEndpoints
|
|
21
22
|
from rasa.core.exceptions import AgentNotReady
|
|
22
|
-
from rasa.core.utils import AvailableEndpoints
|
|
23
23
|
from rasa.e2e_test.aggregate_test_stats_calculator import (
|
|
24
24
|
AggregateTestStatsCalculator,
|
|
25
25
|
)
|
|
@@ -51,7 +51,6 @@ from rasa.e2e_test.utils.io import (
|
|
|
51
51
|
from rasa.e2e_test.utils.validation import validate_model_path
|
|
52
52
|
from rasa.exceptions import RasaException
|
|
53
53
|
from rasa.shared.constants import DEFAULT_ENDPOINTS_PATH, DEFAULT_MODELS_PATH
|
|
54
|
-
from rasa.utils.beta import ensure_beta_feature_is_enabled
|
|
55
54
|
from rasa.utils.endpoints import EndpointConfig
|
|
56
55
|
|
|
57
56
|
RASA_PRO_BETA_FINE_TUNING_RECIPE_ENV_VAR_NAME = "RASA_PRO_BETA_FINE_TUNING_RECIPE"
|
|
@@ -155,12 +154,6 @@ def execute_e2e_tests(args: argparse.Namespace) -> None:
|
|
|
155
154
|
Args:
|
|
156
155
|
args: Commandline arguments.
|
|
157
156
|
"""
|
|
158
|
-
if args.coverage_report:
|
|
159
|
-
ensure_beta_feature_is_enabled(
|
|
160
|
-
"LLM fine-tuning recipe",
|
|
161
|
-
env_flag=RASA_PRO_BETA_FINE_TUNING_RECIPE_ENV_VAR_NAME,
|
|
162
|
-
)
|
|
163
|
-
|
|
164
157
|
args.endpoints = rasa.cli.utils.get_validated_path(
|
|
165
158
|
args.endpoints, "endpoints", DEFAULT_ENDPOINTS_PATH, True
|
|
166
159
|
)
|
rasa/cli/evaluate.py
CHANGED
|
@@ -6,10 +6,10 @@ import rasa.cli.arguments.evaluate as arguments
|
|
|
6
6
|
import rasa.shared.utils.cli
|
|
7
7
|
from rasa import telemetry
|
|
8
8
|
from rasa.cli import SubParsersAction
|
|
9
|
+
from rasa.core.available_endpoints import AvailableEndpoints
|
|
9
10
|
from rasa.core.evaluation.marker_base import Marker, OperatorMarker
|
|
10
11
|
from rasa.core.evaluation.marker_tracker_loader import MarkerTrackerLoader
|
|
11
12
|
from rasa.core.tracker_stores.tracker_store import TrackerStore
|
|
12
|
-
from rasa.core.utils import AvailableEndpoints
|
|
13
13
|
from rasa.shared.core.domain import Domain
|
|
14
14
|
|
|
15
15
|
STATS_OVERALL_SUFFIX = "-overall.csv"
|
rasa/cli/export.py
CHANGED
|
@@ -16,10 +16,10 @@ from rasa.shared.constants import DOCS_URL_EVENT_BROKERS, DOCS_URL_TRACKER_STORE
|
|
|
16
16
|
from rasa.shared.exceptions import RasaException
|
|
17
17
|
|
|
18
18
|
if typing.TYPE_CHECKING:
|
|
19
|
+
from rasa.core.available_endpoints import AvailableEndpoints
|
|
19
20
|
from rasa.core.brokers.broker import EventBroker
|
|
20
21
|
from rasa.core.exporter import Exporter
|
|
21
22
|
from rasa.core.tracker_stores.tracker_store import TrackerStore
|
|
22
|
-
from rasa.core.utils import AvailableEndpoints
|
|
23
23
|
|
|
24
24
|
logger = logging.getLogger(__name__)
|
|
25
25
|
|
|
@@ -184,6 +184,7 @@ async def _export_trackers(args: argparse.Namespace) -> None:
|
|
|
184
184
|
event_broker = await _get_event_broker(endpoints)
|
|
185
185
|
_prepare_event_broker(event_broker)
|
|
186
186
|
requested_conversation_ids = _get_requested_conversation_ids(args.conversation_ids)
|
|
187
|
+
is_pii_enabled = True if endpoints.privacy else False
|
|
187
188
|
|
|
188
189
|
from rasa.core.exporter import Exporter
|
|
189
190
|
|
|
@@ -191,6 +192,7 @@ async def _export_trackers(args: argparse.Namespace) -> None:
|
|
|
191
192
|
tracker_store,
|
|
192
193
|
event_broker,
|
|
193
194
|
args.endpoints,
|
|
195
|
+
is_pii_enabled,
|
|
194
196
|
requested_conversation_ids,
|
|
195
197
|
args.minimum_timestamp,
|
|
196
198
|
args.maximum_timestamp,
|
rasa/cli/llm_fine_tuning.py
CHANGED
|
@@ -20,8 +20,8 @@ from rasa.cli.e2e_test import (
|
|
|
20
20
|
read_test_cases,
|
|
21
21
|
validate_model_path,
|
|
22
22
|
)
|
|
23
|
+
from rasa.core.available_endpoints import AvailableEndpoints
|
|
23
24
|
from rasa.core.exceptions import AgentNotReady
|
|
24
|
-
from rasa.core.utils import AvailableEndpoints
|
|
25
25
|
from rasa.dialogue_understanding.generator.llm_based_command_generator import (
|
|
26
26
|
LLMBasedCommandGenerator,
|
|
27
27
|
)
|
|
@@ -208,10 +208,7 @@ def prepare_llm_fine_tuning_data(args: argparse.Namespace) -> None:
|
|
|
208
208
|
sys.exit(0)
|
|
209
209
|
|
|
210
210
|
flows = asyncio.run(e2e_test_runner.agent.processor.get_flows())
|
|
211
|
-
|
|
212
|
-
llm_command_generator: Type[LLMBasedCommandGenerator] = _get_llm_command_generator(
|
|
213
|
-
e2e_test_runner
|
|
214
|
-
)
|
|
211
|
+
_validate_llm_command_generator_present(e2e_test_runner)
|
|
215
212
|
|
|
216
213
|
# set up storage context
|
|
217
214
|
storage_context = create_storage_context(StorageType.FILE, output_dir)
|
|
@@ -242,11 +239,11 @@ def prepare_llm_fine_tuning_data(args: argparse.Namespace) -> None:
|
|
|
242
239
|
rephrase_config,
|
|
243
240
|
args.num_rephrases,
|
|
244
241
|
flows,
|
|
245
|
-
|
|
246
|
-
llm_command_generator_config,
|
|
242
|
+
e2e_test_runner.agent,
|
|
247
243
|
storage_context,
|
|
248
244
|
)
|
|
249
245
|
)
|
|
246
|
+
|
|
250
247
|
statistics["num_passing_rephrased_user_messages"] = sum(
|
|
251
248
|
[conversation.get_number_of_rephrases(True) for conversation in conversations]
|
|
252
249
|
)
|
|
@@ -257,7 +254,11 @@ def prepare_llm_fine_tuning_data(args: argparse.Namespace) -> None:
|
|
|
257
254
|
|
|
258
255
|
# 3. create fine-tuning dataset
|
|
259
256
|
log_start_of_module("LLM Data Preparation")
|
|
260
|
-
llm_fine_tuning_data =
|
|
257
|
+
llm_fine_tuning_data = asyncio.run(
|
|
258
|
+
convert_to_fine_tuning_data(
|
|
259
|
+
conversations, storage_context, e2e_test_runner.agent
|
|
260
|
+
)
|
|
261
|
+
)
|
|
261
262
|
statistics["num_ft_data_points"] = len(llm_fine_tuning_data)
|
|
262
263
|
log_end_of_module("LLM Data Preparation", statistics)
|
|
263
264
|
|
|
@@ -311,9 +312,9 @@ def _get_llm_command_generator_config(e2e_test_runner: E2ETestRunner) -> Dict[st
|
|
|
311
312
|
sys.exit(1)
|
|
312
313
|
|
|
313
314
|
|
|
314
|
-
def
|
|
315
|
+
def _validate_llm_command_generator_present(
|
|
315
316
|
e2e_test_runner: E2ETestRunner,
|
|
316
|
-
) ->
|
|
317
|
+
) -> None:
|
|
317
318
|
train_schema = e2e_test_runner.agent.processor.model_metadata.train_schema # type: ignore
|
|
318
319
|
|
|
319
320
|
for _, node in train_schema.nodes.items():
|
|
@@ -322,7 +323,7 @@ def _get_llm_command_generator(
|
|
|
322
323
|
) and not node.matches_type(
|
|
323
324
|
MultiStepLLMCommandGenerator, include_subtypes=True
|
|
324
325
|
):
|
|
325
|
-
return
|
|
326
|
+
return
|
|
326
327
|
|
|
327
328
|
rasa.shared.utils.cli.print_error(
|
|
328
329
|
"The provided model is not trained using 'SingleStepLLMCommandGenerator' or "
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import tempfile
|
|
4
|
+
from typing import Any, Dict, List, Optional, Text
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
7
|
+
|
|
8
|
+
from rasa.dialogue_understanding.patterns.domain_for_patterns import (
|
|
9
|
+
ContextField,
|
|
10
|
+
generate_domain_for_default_patterns,
|
|
11
|
+
)
|
|
12
|
+
from rasa.shared.core.domain import Domain
|
|
13
|
+
from rasa.shared.importers.importer import FlowSyncImporter, TrainingDataImporter
|
|
14
|
+
from rasa.shared.utils.llm import SystemPrompts, get_system_default_prompts
|
|
15
|
+
from rasa.shared.utils.yaml import read_yaml, write_yaml
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Response(BaseModel):
|
|
19
|
+
text: str = Field(..., description="The human-readable response string.")
|
|
20
|
+
metadata: Optional[Dict[str, Any]] = Field(
|
|
21
|
+
None, description="Optional metadata used by Rasa at runtime."
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class Slot(BaseModel):
|
|
26
|
+
name: Text = Field(..., description="Name of the slot.")
|
|
27
|
+
type: Text = Field(..., description="Type of the slot.")
|
|
28
|
+
mappings: Optional[List[Dict[str, Any]]] = Field(
|
|
29
|
+
None, description="Mappings for the slot."
|
|
30
|
+
)
|
|
31
|
+
model_config = ConfigDict(extra="allow")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class PatternFlow(BaseModel):
|
|
35
|
+
description: str = Field(..., description="Description of the flow.")
|
|
36
|
+
name: Text = Field(..., description="Name of the flow.")
|
|
37
|
+
steps: List[Any] = Field(..., description="List of steps in the flow.")
|
|
38
|
+
nlu_trigger: Optional[Any] = Field(None, description="NLU trigger for the flow.")
|
|
39
|
+
persisted_slots: Optional[List[Text]] = Field(None, description="Slots to persist.")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class PatternDefaults(BaseModel):
|
|
43
|
+
"""Content of `default_flows_for_patterns.yml` after it is loaded from disk."""
|
|
44
|
+
|
|
45
|
+
responses: Dict[Text, List[Response]] = Field(
|
|
46
|
+
default_factory=dict,
|
|
47
|
+
description="Response templates available out-of-the-box.",
|
|
48
|
+
)
|
|
49
|
+
slots: Dict[Text, Slot] = Field(
|
|
50
|
+
default_factory=dict, description="Slot definitions used by the default flows."
|
|
51
|
+
)
|
|
52
|
+
flows: Dict[Text, PatternFlow] = Field(
|
|
53
|
+
default_factory=dict, description="Default flows (conversation patterns)."
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class RasaDefaults(PatternDefaults):
|
|
58
|
+
"""Full set of defaults that Rasa injects when a project is created."""
|
|
59
|
+
|
|
60
|
+
prompts: SystemPrompts = Field(..., description="Built-in system prompts.")
|
|
61
|
+
actions: List[Text] = Field(..., description="Default actions shipped by Rasa.")
|
|
62
|
+
intents: List[Text] = Field(..., description="Default intents shipped by Rasa.")
|
|
63
|
+
contexts: Dict[Text, ContextField] = Field(
|
|
64
|
+
..., description="Context fields that can appear on the conversation stack."
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
class Config:
|
|
68
|
+
extra = "forbid"
|
|
69
|
+
validate_assignment = True
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _get_domain_from_importer(config: Dict[Text, Any]) -> Domain:
|
|
73
|
+
"""Get the domain from the TrainingDataImporter.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
config: The config.yml file data.
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
A Domain object .
|
|
80
|
+
"""
|
|
81
|
+
with tempfile.NamedTemporaryFile("w+", suffix=".yml") as tmp:
|
|
82
|
+
write_yaml(config, tmp.name)
|
|
83
|
+
importer = TrainingDataImporter.load_from_config(
|
|
84
|
+
domain_path=FlowSyncImporter.default_pattern_path(),
|
|
85
|
+
config_path=tmp.name,
|
|
86
|
+
)
|
|
87
|
+
return importer.get_domain()
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def get_pattern_defaults(config: Dict[Text, Any]) -> PatternDefaults:
|
|
91
|
+
"""Get the default flows, responses and slots for patterns.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
config: The config.yml file data.
|
|
95
|
+
|
|
96
|
+
Returns:
|
|
97
|
+
A PatternDefaults object containing the defaults.
|
|
98
|
+
"""
|
|
99
|
+
domain = _get_domain_from_importer(config)
|
|
100
|
+
domain_dict = domain.as_dict()
|
|
101
|
+
|
|
102
|
+
# Make sure all the slots are exported, including the builtin slots
|
|
103
|
+
domain_dict["slots"] = {slot.name: slot.to_dict() for slot in domain.slots}
|
|
104
|
+
|
|
105
|
+
return PatternDefaults(**domain_dict)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def get_rasa_defaults(config_yaml: Text, endpoints_yaml: Text) -> RasaDefaults:
|
|
109
|
+
"""Get the default values for a Rasa project.
|
|
110
|
+
|
|
111
|
+
Args:
|
|
112
|
+
config_yaml: The content of the config.yml file.
|
|
113
|
+
endpoints_yaml: The content of the endpoints.yml file.
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
A RasaDefaults object containing the default values for the project.
|
|
117
|
+
"""
|
|
118
|
+
config = read_yaml(config_yaml)
|
|
119
|
+
endpoints = read_yaml(endpoints_yaml)
|
|
120
|
+
|
|
121
|
+
prompts = get_system_default_prompts(config, endpoints)
|
|
122
|
+
pattern_domain = generate_domain_for_default_patterns()
|
|
123
|
+
pattern_defaults = get_pattern_defaults(config)
|
|
124
|
+
|
|
125
|
+
return RasaDefaults(
|
|
126
|
+
prompts=prompts,
|
|
127
|
+
actions=pattern_domain.actions,
|
|
128
|
+
intents=pattern_domain.intents,
|
|
129
|
+
contexts=pattern_domain.contexts,
|
|
130
|
+
responses=pattern_defaults.responses,
|
|
131
|
+
slots=pattern_defaults.slots,
|
|
132
|
+
flows=pattern_defaults.flows,
|
|
133
|
+
)
|
rasa/cli/run.py
CHANGED
|
@@ -109,7 +109,7 @@ def run(args: argparse.Namespace) -> None:
|
|
|
109
109
|
# configured
|
|
110
110
|
|
|
111
111
|
import rasa.model
|
|
112
|
-
from rasa.core.
|
|
112
|
+
from rasa.core.available_endpoints import AvailableEndpoints
|
|
113
113
|
|
|
114
114
|
# start server if remote storage is configured
|
|
115
115
|
if args.remote_storage is not None:
|
rasa/cli/studio/download.py
CHANGED
|
@@ -2,13 +2,7 @@ import argparse
|
|
|
2
2
|
from typing import List
|
|
3
3
|
|
|
4
4
|
from rasa.cli import SubParsersAction
|
|
5
|
-
from rasa.
|
|
6
|
-
add_config_param,
|
|
7
|
-
add_endpoint_param,
|
|
8
|
-
)
|
|
9
|
-
from rasa.cli.arguments.train import add_data_param, add_domain_param
|
|
10
|
-
from rasa.shared.constants import DEFAULT_CONFIG_PATH, DEFAULT_ENDPOINTS_PATH
|
|
11
|
-
from rasa.studio.download.download import handle_download
|
|
5
|
+
from rasa.studio.download import handle_download
|
|
12
6
|
|
|
13
7
|
|
|
14
8
|
def add_subparser(
|
|
@@ -37,25 +31,9 @@ def add_subparser(
|
|
|
37
31
|
|
|
38
32
|
def set_studio_download_arguments(parser: argparse.ArgumentParser) -> None:
|
|
39
33
|
"""Add arguments for running `rasa studio download`."""
|
|
40
|
-
add_domain_param(parser)
|
|
41
|
-
add_data_param(parser)
|
|
42
|
-
add_config_param(parser, default=DEFAULT_CONFIG_PATH)
|
|
43
|
-
add_endpoint_param(
|
|
44
|
-
parser,
|
|
45
|
-
"Configuration file for the model endpoints.",
|
|
46
|
-
default=DEFAULT_ENDPOINTS_PATH,
|
|
47
|
-
)
|
|
48
|
-
|
|
49
34
|
parser.add_argument(
|
|
50
35
|
"assistant_name",
|
|
51
36
|
default=None,
|
|
52
|
-
nargs=1,
|
|
53
37
|
type=str,
|
|
54
38
|
help="Name of the assistant on Rasa Studio",
|
|
55
39
|
)
|
|
56
|
-
|
|
57
|
-
parser.add_argument(
|
|
58
|
-
"--overwrite",
|
|
59
|
-
action="store_true",
|
|
60
|
-
help="Overwrite local data with data from Rasa Studio",
|
|
61
|
-
)
|
rasa/cli/studio/link.py
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
from typing import List, Text
|
|
3
|
+
|
|
4
|
+
from rasa.cli import SubParsersAction
|
|
5
|
+
from rasa.cli.arguments.default_arguments import (
|
|
6
|
+
add_config_param,
|
|
7
|
+
add_data_param,
|
|
8
|
+
add_domain_param,
|
|
9
|
+
add_endpoint_param,
|
|
10
|
+
)
|
|
11
|
+
from rasa.shared.constants import (
|
|
12
|
+
DEFAULT_DOMAIN_PATH,
|
|
13
|
+
DEFAULT_ENDPOINTS_PATH,
|
|
14
|
+
)
|
|
15
|
+
from rasa.studio.link import handle_link
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def add_subparser(
|
|
19
|
+
subparsers: SubParsersAction,
|
|
20
|
+
parents: List[argparse.ArgumentParser],
|
|
21
|
+
domain: Text = DEFAULT_DOMAIN_PATH,
|
|
22
|
+
) -> None:
|
|
23
|
+
"""Register the `rasa studio link` command with the main CLI.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
subparsers: subparser we are going to attach to
|
|
27
|
+
parents: Parent parsers, needed to ensure tree structure in argparse
|
|
28
|
+
domain: Path to the assistant's domain file.
|
|
29
|
+
"""
|
|
30
|
+
link_parser = subparsers.add_parser(
|
|
31
|
+
"link",
|
|
32
|
+
parents=parents,
|
|
33
|
+
conflict_handler="resolve",
|
|
34
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
35
|
+
help="Link the current project to an existing Rasa Studio assistant.",
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
link_parser.add_argument(
|
|
39
|
+
"assistant_name",
|
|
40
|
+
type=str,
|
|
41
|
+
help="Name of the assistant in Rasa Studio.",
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
add_domain_param(link_parser, domain)
|
|
45
|
+
add_data_param(link_parser)
|
|
46
|
+
add_config_param(link_parser)
|
|
47
|
+
add_endpoint_param(
|
|
48
|
+
link_parser,
|
|
49
|
+
"Configuration file for the model endpoints.",
|
|
50
|
+
default=DEFAULT_ENDPOINTS_PATH,
|
|
51
|
+
)
|
|
52
|
+
link_parser.set_defaults(func=handle_link)
|
rasa/cli/studio/pull.py
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
from typing import List, Text
|
|
3
|
+
|
|
4
|
+
from rasa.cli import SubParsersAction
|
|
5
|
+
from rasa.cli.arguments.default_arguments import (
|
|
6
|
+
add_config_param,
|
|
7
|
+
add_data_param,
|
|
8
|
+
add_domain_param,
|
|
9
|
+
add_endpoint_param,
|
|
10
|
+
)
|
|
11
|
+
from rasa.shared.constants import (
|
|
12
|
+
DEFAULT_CONFIG_PATH,
|
|
13
|
+
DEFAULT_DOMAIN_PATH,
|
|
14
|
+
DEFAULT_ENDPOINTS_PATH,
|
|
15
|
+
)
|
|
16
|
+
from rasa.studio.pull.pull import (
|
|
17
|
+
handle_pull,
|
|
18
|
+
handle_pull_config,
|
|
19
|
+
handle_pull_endpoints,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def add_subparser(
|
|
24
|
+
subparsers: SubParsersAction,
|
|
25
|
+
parents: List[argparse.ArgumentParser],
|
|
26
|
+
domain: Text = DEFAULT_DOMAIN_PATH,
|
|
27
|
+
) -> None:
|
|
28
|
+
"""Register `rasa studio pull` and its sub-commands.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
subparsers: subparser we are going to attach to
|
|
32
|
+
parents: Parent parsers, needed to ensure tree structure in argparse
|
|
33
|
+
domain: Path to the assistant's domain file.
|
|
34
|
+
"""
|
|
35
|
+
pull_parser = subparsers.add_parser(
|
|
36
|
+
"pull",
|
|
37
|
+
parents=parents,
|
|
38
|
+
conflict_handler="resolve",
|
|
39
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
40
|
+
help="Pull assistant data from Rasa Studio.",
|
|
41
|
+
)
|
|
42
|
+
pull_subparsers = pull_parser.add_subparsers()
|
|
43
|
+
|
|
44
|
+
# Arguments for pulling configuration only
|
|
45
|
+
config_parser = pull_subparsers.add_parser(
|
|
46
|
+
"config",
|
|
47
|
+
parents=parents,
|
|
48
|
+
conflict_handler="resolve",
|
|
49
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
50
|
+
help="Pull only the assistant configuration file.",
|
|
51
|
+
)
|
|
52
|
+
add_config_param(config_parser, default=DEFAULT_CONFIG_PATH)
|
|
53
|
+
config_parser.set_defaults(func=handle_pull_config)
|
|
54
|
+
|
|
55
|
+
# Arguments for pulling endpoints only
|
|
56
|
+
endpoints_parser = pull_subparsers.add_parser(
|
|
57
|
+
"endpoints",
|
|
58
|
+
parents=parents,
|
|
59
|
+
conflict_handler="resolve",
|
|
60
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
61
|
+
help="Pull only the endpoints configuration file.",
|
|
62
|
+
)
|
|
63
|
+
add_endpoint_param(
|
|
64
|
+
endpoints_parser,
|
|
65
|
+
"Configuration file for the model endpoints.",
|
|
66
|
+
default=DEFAULT_ENDPOINTS_PATH,
|
|
67
|
+
)
|
|
68
|
+
endpoints_parser.set_defaults(func=handle_pull_endpoints)
|
|
69
|
+
|
|
70
|
+
# Arguments for pulling the whole assistant data
|
|
71
|
+
add_domain_param(pull_parser, domain)
|
|
72
|
+
add_data_param(pull_parser)
|
|
73
|
+
add_config_param(pull_parser, default=DEFAULT_CONFIG_PATH)
|
|
74
|
+
add_endpoint_param(
|
|
75
|
+
pull_parser,
|
|
76
|
+
"Configuration file for the model endpoints.",
|
|
77
|
+
default=DEFAULT_ENDPOINTS_PATH,
|
|
78
|
+
)
|
|
79
|
+
pull_parser.set_defaults(func=handle_pull)
|
rasa/cli/studio/push.py
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
from typing import List, Text
|
|
3
|
+
|
|
4
|
+
from rasa.cli import SubParsersAction
|
|
5
|
+
from rasa.cli.arguments.default_arguments import (
|
|
6
|
+
add_config_param,
|
|
7
|
+
add_data_param,
|
|
8
|
+
add_domain_param,
|
|
9
|
+
add_endpoint_param,
|
|
10
|
+
)
|
|
11
|
+
from rasa.shared.constants import (
|
|
12
|
+
DEFAULT_DOMAIN_PATH,
|
|
13
|
+
DEFAULT_ENDPOINTS_PATH,
|
|
14
|
+
)
|
|
15
|
+
from rasa.studio.push import (
|
|
16
|
+
handle_push,
|
|
17
|
+
handle_push_config,
|
|
18
|
+
handle_push_endpoints,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def add_subparser(
|
|
23
|
+
subparsers: SubParsersAction,
|
|
24
|
+
parents: List[argparse.ArgumentParser],
|
|
25
|
+
domain: Text = DEFAULT_DOMAIN_PATH,
|
|
26
|
+
) -> None:
|
|
27
|
+
"""Register the `rasa studio push` command and its sub-commands.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
subparsers: The subparsers to add the command to.
|
|
31
|
+
parents: Parent parsers, needed to ensure tree structure in argparse
|
|
32
|
+
domain: Path to the assistant's domain file.
|
|
33
|
+
"""
|
|
34
|
+
push_parser = subparsers.add_parser(
|
|
35
|
+
"push",
|
|
36
|
+
parents=parents,
|
|
37
|
+
conflict_handler="resolve",
|
|
38
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
39
|
+
help="Push assistant data to Rasa Studio.",
|
|
40
|
+
)
|
|
41
|
+
push_subparsers = push_parser.add_subparsers()
|
|
42
|
+
|
|
43
|
+
# Arguments for pushing configuration only
|
|
44
|
+
config_parser = push_subparsers.add_parser(
|
|
45
|
+
"config",
|
|
46
|
+
parents=parents,
|
|
47
|
+
conflict_handler="resolve",
|
|
48
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
49
|
+
help="Push only the assistant configuration file.",
|
|
50
|
+
)
|
|
51
|
+
add_config_param(config_parser)
|
|
52
|
+
config_parser.set_defaults(func=handle_push_config)
|
|
53
|
+
|
|
54
|
+
# Arguments for pushing endpoints only
|
|
55
|
+
endpoints_parser = push_subparsers.add_parser(
|
|
56
|
+
"endpoints",
|
|
57
|
+
parents=parents,
|
|
58
|
+
conflict_handler="resolve",
|
|
59
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
60
|
+
help="Push ONLY the endpoints configuration file.",
|
|
61
|
+
)
|
|
62
|
+
add_endpoint_param(
|
|
63
|
+
endpoints_parser,
|
|
64
|
+
"Configuration file for the model endpoints.",
|
|
65
|
+
default=DEFAULT_ENDPOINTS_PATH,
|
|
66
|
+
)
|
|
67
|
+
endpoints_parser.set_defaults(func=handle_push_endpoints)
|
|
68
|
+
|
|
69
|
+
# Arguments for pushing the whole assistant data
|
|
70
|
+
add_domain_param(push_parser, domain)
|
|
71
|
+
add_data_param(push_parser)
|
|
72
|
+
add_config_param(push_parser)
|
|
73
|
+
add_endpoint_param(
|
|
74
|
+
push_parser,
|
|
75
|
+
"Configuration file for the model endpoints.",
|
|
76
|
+
default=DEFAULT_ENDPOINTS_PATH,
|
|
77
|
+
)
|
|
78
|
+
push_parser.set_defaults(func=handle_push)
|
rasa/cli/studio/studio.py
CHANGED
|
@@ -5,10 +5,15 @@ from urllib.parse import ParseResult, urlparse
|
|
|
5
5
|
import questionary
|
|
6
6
|
|
|
7
7
|
import rasa.cli.studio.download
|
|
8
|
+
import rasa.cli.studio.link
|
|
9
|
+
import rasa.cli.studio.pull
|
|
10
|
+
import rasa.cli.studio.push
|
|
8
11
|
import rasa.cli.studio.train
|
|
9
12
|
import rasa.cli.studio.upload
|
|
10
13
|
import rasa.shared.utils.cli
|
|
11
14
|
from rasa.cli import SubParsersAction
|
|
15
|
+
from rasa.cli.utils import get_validated_path
|
|
16
|
+
from rasa.shared.constants import DEFAULT_DOMAIN_PATH, DEFAULT_DOMAIN_PATHS
|
|
12
17
|
from rasa.studio.auth import StudioAuth
|
|
13
18
|
from rasa.studio.config import StudioConfig
|
|
14
19
|
|
|
@@ -33,6 +38,13 @@ def add_subparser(
|
|
|
33
38
|
rasa.cli.studio.upload.add_subparser(studio_subparsers, parents)
|
|
34
39
|
rasa.cli.studio.download.add_subparser(studio_subparsers, parents)
|
|
35
40
|
|
|
41
|
+
domain = get_validated_path(
|
|
42
|
+
DEFAULT_DOMAIN_PATH, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=True
|
|
43
|
+
)
|
|
44
|
+
rasa.cli.studio.link.add_subparser(studio_subparsers, parents, domain)
|
|
45
|
+
rasa.cli.studio.push.add_subparser(studio_subparsers, parents, domain)
|
|
46
|
+
rasa.cli.studio.pull.add_subparser(studio_subparsers, parents, domain)
|
|
47
|
+
|
|
36
48
|
_add_config_subparser(studio_subparsers, parents)
|
|
37
49
|
_add_login_subparser(studio_subparsers, parents)
|
|
38
50
|
|
rasa/cli/studio/train.py
CHANGED
rasa/cli/studio/upload.py
CHANGED
|
@@ -54,3 +54,11 @@ def set_upload_arguments(parser: argparse.ArgumentParser) -> None:
|
|
|
54
54
|
type=str,
|
|
55
55
|
help="Name of intents to upload to Rasa Studio",
|
|
56
56
|
)
|
|
57
|
+
|
|
58
|
+
parser.add_argument(
|
|
59
|
+
"assistant_name",
|
|
60
|
+
default=None,
|
|
61
|
+
nargs="?",
|
|
62
|
+
type=str,
|
|
63
|
+
help="Name of the assistant on Rasa Studio",
|
|
64
|
+
)
|
rasa/cli/train.py
CHANGED
|
@@ -11,7 +11,7 @@ import rasa.cli.utils
|
|
|
11
11
|
import rasa.core.utils
|
|
12
12
|
import rasa.utils.common
|
|
13
13
|
from rasa.cli import SubParsersAction
|
|
14
|
-
from rasa.core import ContextualResponseRephraser
|
|
14
|
+
from rasa.core.nlg.contextual_response_rephraser import ContextualResponseRephraser
|
|
15
15
|
from rasa.core.nlg.generator import NaturalLanguageGenerator
|
|
16
16
|
from rasa.core.train import do_compare_training
|
|
17
17
|
from rasa.engine.validation import validate_api_type_config_key_usage
|
rasa/cli/utils.py
CHANGED
|
@@ -104,7 +104,7 @@ def get_validated_path(
|
|
|
104
104
|
parameter=parameter,
|
|
105
105
|
event_info=(f"Parameter '{parameter}' was not set. {shared_info}"),
|
|
106
106
|
)
|
|
107
|
-
|
|
107
|
+
elif current not in default_options:
|
|
108
108
|
structlogger.warn(
|
|
109
109
|
"cli.get_validated_path.path_does_not_exists",
|
|
110
110
|
path=current,
|
rasa/cli/x.py
CHANGED
|
@@ -15,7 +15,7 @@ import rasa.utils.common
|
|
|
15
15
|
import rasa.utils.io
|
|
16
16
|
from rasa.cli import SubParsersAction
|
|
17
17
|
from rasa.cli.arguments import x as arguments
|
|
18
|
-
from rasa.core.
|
|
18
|
+
from rasa.core.available_endpoints import AvailableEndpoints
|
|
19
19
|
from rasa.shared.constants import (
|
|
20
20
|
DEFAULT_CREDENTIALS_PATH,
|
|
21
21
|
DEFAULT_ENDPOINTS_PATH,
|