rasa-pro 3.13.0.dev20250613__py3-none-any.whl → 3.13.0rc2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of rasa-pro might be problematic. Click here for more details.

Files changed (160) hide show
  1. rasa/cli/e2e_test.py +0 -7
  2. rasa/cli/export.py +2 -0
  3. rasa/cli/project_templates/tutorial/config.yml +1 -1
  4. rasa/cli/project_templates/tutorial/endpoints.yml +1 -1
  5. rasa/cli/studio/download.py +1 -23
  6. rasa/cli/studio/link.py +0 -17
  7. rasa/cli/studio/pull.py +3 -2
  8. rasa/cli/studio/push.py +1 -1
  9. rasa/cli/studio/train.py +1 -5
  10. rasa/cli/studio/upload.py +1 -1
  11. rasa/core/agent.py +6 -0
  12. rasa/core/channels/__init__.py +3 -0
  13. rasa/core/channels/development_inspector.py +1 -1
  14. rasa/core/channels/facebook.py +1 -4
  15. rasa/core/channels/inspector/README.md +3 -3
  16. rasa/core/channels/inspector/dist/assets/{arc-c4b064fc.js → arc-371401b1.js} +1 -1
  17. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-215b5026.js → blockDiagram-38ab4fdb-3f126156.js} +1 -1
  18. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-2b54a0a3.js → c4Diagram-3d4e48cf-12f22eb7.js} +1 -1
  19. rasa/core/channels/inspector/dist/assets/channel-f1efda17.js +1 -0
  20. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-daacea5f.js → classDiagram-70f12bd4-03b1d386.js} +1 -1
  21. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-930d4dc2.js → classDiagram-v2-f2320105-84f69d63.js} +1 -1
  22. rasa/core/channels/inspector/dist/assets/clone-fdf164e2.js +1 -0
  23. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-83c206ba.js → createText-2e5e7dd3-ca47fd38.js} +1 -1
  24. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-b0eb01d0.js → edges-e0da2a9e-f837ca8a.js} +1 -1
  25. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-17586500.js → erDiagram-9861fffd-8717ac54.js} +1 -1
  26. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-be2a1776.js → flowDb-956e92f1-94f38b83.js} +1 -1
  27. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-c2120ebd.js → flowDiagram-66a62f08-b616f9fb.js} +1 -1
  28. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-7d7a1629.js +1 -0
  29. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-a6ab5c48.js → flowchart-elk-definition-4a651766-f5d24bb8.js} +1 -1
  30. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-ef613457.js → ganttDiagram-c361ad54-b43ba8d9.js} +1 -1
  31. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-d59185b3.js → gitGraphDiagram-72cf32ee-c3aafaa5.js} +1 -1
  32. rasa/core/channels/inspector/dist/assets/{graph-0f155405.js → graph-0d0a2c10.js} +1 -1
  33. rasa/core/channels/inspector/dist/assets/{index-3862675e-d5f1d1b7.js → index-3862675e-58ea0305.js} +1 -1
  34. rasa/core/channels/inspector/dist/assets/{index-47737d3a.js → index-cce6f8a1.js} +3 -3
  35. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-b07d141f.js → infoDiagram-f8f76790-b8f60461.js} +1 -1
  36. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-1936d429.js → journeyDiagram-49397b02-95be5545.js} +1 -1
  37. rasa/core/channels/inspector/dist/assets/{layout-dde8d0f3.js → layout-da885b9b.js} +1 -1
  38. rasa/core/channels/inspector/dist/assets/{line-0c2c7ee0.js → line-f1c817d3.js} +1 -1
  39. rasa/core/channels/inspector/dist/assets/{linear-35dd89a4.js → linear-d42801e6.js} +1 -1
  40. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-56192851.js → mindmap-definition-fc14e90a-a38923a6.js} +1 -1
  41. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-fc21ed78.js → pieDiagram-8a3498a8-ca6e71e9.js} +1 -1
  42. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-25e98518.js → quadrantDiagram-120e2f19-b290dae9.js} +1 -1
  43. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-546ff1f5.js → requirementDiagram-deff3bca-03f02ceb.js} +1 -1
  44. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-02d8b82d.js → sankeyDiagram-04a897e0-c49eee40.js} +1 -1
  45. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-3ca5a92e.js → sequenceDiagram-704730f1-b2cd6a3d.js} +1 -1
  46. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-128ea07c.js → stateDiagram-587899a1-e53a2028.js} +1 -1
  47. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-95f290af.js → stateDiagram-v2-d93cdb3a-e1982a03.js} +1 -1
  48. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-4984898a.js → styles-6aaf32cf-d0226ca5.js} +1 -1
  49. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1bf266ba.js → styles-9a916d00-0e21dc00.js} +1 -1
  50. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-60521c63.js → styles-c10674c1-9588494e.js} +1 -1
  51. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-a25b6e12.js → svgDrawCommon-08f97a94-be478d4f.js} +1 -1
  52. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-0fc086bf.js → timeline-definition-85554ec2-74631749.js} +1 -1
  53. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-44ee592e.js → xychartDiagram-e933f94c-a043552f.js} +1 -1
  54. rasa/core/channels/inspector/dist/index.html +1 -1
  55. rasa/core/channels/inspector/src/components/RecruitmentPanel.tsx +1 -1
  56. rasa/core/channels/socketio.py +56 -41
  57. rasa/core/channels/studio_chat.py +311 -8
  58. rasa/core/channels/voice_ready/audiocodes.py +1 -1
  59. rasa/core/channels/voice_ready/jambonz.py +5 -6
  60. rasa/core/channels/voice_ready/twilio_voice.py +13 -12
  61. rasa/core/channels/voice_ready/utils.py +22 -0
  62. rasa/core/channels/voice_stream/asr/azure.py +9 -0
  63. rasa/core/channels/voice_stream/audiocodes.py +5 -11
  64. rasa/core/channels/voice_stream/browser_audio.py +1 -1
  65. rasa/core/channels/voice_stream/genesys.py +35 -16
  66. rasa/core/channels/voice_stream/jambonz.py +232 -0
  67. rasa/core/channels/voice_stream/tts/__init__.py +8 -0
  68. rasa/core/channels/voice_stream/twilio_media_streams.py +12 -7
  69. rasa/core/channels/voice_stream/voice_channel.py +53 -15
  70. rasa/core/exporter.py +36 -0
  71. rasa/core/information_retrieval/faiss.py +18 -11
  72. rasa/core/information_retrieval/ingestion/faq_parser.py +158 -0
  73. rasa/core/nlg/contextual_response_rephraser.py +10 -1
  74. rasa/core/policies/enterprise_search_policy.py +189 -263
  75. rasa/core/policies/enterprise_search_policy_config.py +241 -0
  76. rasa/core/policies/enterprise_search_prompt_with_relevancy_check_and_citation_template.jinja2 +6 -5
  77. rasa/core/policies/intentless_policy.py +47 -10
  78. rasa/core/processor.py +6 -0
  79. rasa/core/utils.py +11 -2
  80. rasa/dialogue_understanding/coexistence/llm_based_router.py +13 -11
  81. rasa/dialogue_understanding/commands/__init__.py +4 -0
  82. rasa/dialogue_understanding/commands/cancel_flow_command.py +4 -2
  83. rasa/dialogue_understanding/commands/clarify_command.py +2 -2
  84. rasa/dialogue_understanding/commands/correct_slots_command.py +5 -6
  85. rasa/dialogue_understanding/commands/error_command.py +1 -1
  86. rasa/dialogue_understanding/commands/human_handoff_command.py +1 -3
  87. rasa/dialogue_understanding/commands/set_slot_command.py +4 -4
  88. rasa/dialogue_understanding/commands/skip_question_command.py +1 -3
  89. rasa/dialogue_understanding/commands/start_flow_command.py +3 -3
  90. rasa/dialogue_understanding/generator/command_generator.py +11 -1
  91. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +3 -2
  92. rasa/dialogue_understanding/generator/nlu_command_adapter.py +2 -2
  93. rasa/dialogue_understanding/generator/prompt_templates/command_prompt_template.jinja2 +0 -2
  94. rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +1 -0
  95. rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +1 -0
  96. rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +79 -0
  97. rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +1 -0
  98. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +2 -2
  99. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +2 -18
  100. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +17 -11
  101. rasa/dialogue_understanding/patterns/cancel.py +1 -2
  102. rasa/dialogue_understanding/patterns/clarify.py +1 -1
  103. rasa/dialogue_understanding/patterns/correction.py +2 -2
  104. rasa/dialogue_understanding/processor/command_processor.py +11 -12
  105. rasa/dialogue_understanding/stack/utils.py +3 -1
  106. rasa/e2e_test/constants.py +1 -1
  107. rasa/e2e_test/e2e_test_coverage_report.py +1 -1
  108. rasa/engine/graph.py +2 -2
  109. rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +2 -6
  110. rasa/model_manager/runner_service.py +20 -4
  111. rasa/model_manager/trainer_service.py +6 -0
  112. rasa/privacy/privacy_manager.py +26 -11
  113. rasa/shared/constants.py +14 -0
  114. rasa/shared/core/command_payload_reader.py +1 -5
  115. rasa/shared/core/events.py +1 -3
  116. rasa/shared/core/flows/constants.py +2 -0
  117. rasa/shared/core/flows/flow.py +126 -12
  118. rasa/shared/core/flows/flows_list.py +18 -1
  119. rasa/shared/core/flows/steps/link.py +7 -2
  120. rasa/shared/core/flows/validation.py +25 -5
  121. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +1 -4
  122. rasa/shared/providers/_configs/azure_openai_client_config.py +2 -2
  123. rasa/shared/providers/_configs/default_litellm_client_config.py +1 -1
  124. rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +1 -1
  125. rasa/shared/providers/_configs/openai_client_config.py +1 -1
  126. rasa/shared/providers/_configs/rasa_llm_client_config.py +1 -1
  127. rasa/shared/providers/_configs/self_hosted_llm_client_config.py +1 -1
  128. rasa/shared/providers/_configs/utils.py +0 -99
  129. rasa/shared/utils/common.py +1 -1
  130. rasa/shared/utils/configs.py +110 -0
  131. rasa/shared/utils/constants.py +0 -3
  132. rasa/shared/utils/llm.py +123 -8
  133. rasa/shared/utils/pykwalify_extensions.py +0 -9
  134. rasa/studio/constants.py +1 -0
  135. rasa/studio/data_handler.py +30 -9
  136. rasa/studio/download.py +171 -0
  137. rasa/studio/link.py +13 -2
  138. rasa/studio/prompts.py +221 -0
  139. rasa/studio/pull/__init__.py +0 -0
  140. rasa/studio/{download/flows.py → pull/data.py} +2 -131
  141. rasa/studio/{download → pull}/domains.py +1 -1
  142. rasa/studio/pull/pull.py +239 -0
  143. rasa/studio/push.py +7 -0
  144. rasa/studio/train.py +1 -1
  145. rasa/studio/upload.py +61 -5
  146. rasa/studio/utils.py +33 -0
  147. rasa/tracing/instrumentation/attribute_extractors.py +21 -7
  148. rasa/utils/common.py +11 -0
  149. rasa/version.py +1 -1
  150. {rasa_pro-3.13.0.dev20250613.dist-info → rasa_pro-3.13.0rc2.dist-info}/METADATA +4 -4
  151. {rasa_pro-3.13.0.dev20250613.dist-info → rasa_pro-3.13.0rc2.dist-info}/RECORD +155 -147
  152. rasa/core/channels/inspector/dist/assets/channel-3730f5fd.js +0 -1
  153. rasa/core/channels/inspector/dist/assets/clone-e847561e.js +0 -1
  154. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-efbbfe00.js +0 -1
  155. rasa/studio/download/download.py +0 -416
  156. rasa/studio/pull.py +0 -94
  157. /rasa/{studio/download → core/information_retrieval/ingestion}/__init__.py +0 -0
  158. {rasa_pro-3.13.0.dev20250613.dist-info → rasa_pro-3.13.0rc2.dist-info}/NOTICE +0 -0
  159. {rasa_pro-3.13.0.dev20250613.dist-info → rasa_pro-3.13.0rc2.dist-info}/WHEEL +0 -0
  160. {rasa_pro-3.13.0.dev20250613.dist-info → rasa_pro-3.13.0rc2.dist-info}/entry_points.txt +0 -0
rasa/studio/upload.py CHANGED
@@ -31,6 +31,7 @@ from rasa.shared.nlu.training_data.formats.rasa_yaml import (
31
31
  RasaYAMLReader,
32
32
  RasaYAMLWriter,
33
33
  )
34
+ from rasa.shared.utils.llm import collect_custom_prompts
34
35
  from rasa.shared.utils.yaml import (
35
36
  dump_obj_as_yaml_to_string,
36
37
  read_yaml,
@@ -40,6 +41,7 @@ from rasa.studio import results_logger
40
41
  from rasa.studio.auth import KeycloakTokenReader
41
42
  from rasa.studio.config import StudioConfig
42
43
  from rasa.studio.results_logger import StudioResult, with_studio_error_handler
44
+ from rasa.studio.utils import validate_argument_paths
43
45
  from rasa.telemetry import track_upload_to_studio_failed
44
46
 
45
47
  structlogger = structlog.get_logger()
@@ -115,7 +117,7 @@ def run_validation(args: argparse.Namespace) -> None:
115
117
 
116
118
  training_data_importer = TrainingDataImporter.load_from_dict(
117
119
  domain_path=args.domain,
118
- training_data_paths=args.data,
120
+ training_data_paths=[args.data],
119
121
  config_path=args.config,
120
122
  expand_env_vars=False,
121
123
  )
@@ -142,6 +144,7 @@ def run_validation(args: argparse.Namespace) -> None:
142
144
 
143
145
  def handle_upload(args: argparse.Namespace) -> None:
144
146
  """Uploads primitives to rasa studio."""
147
+ validate_argument_paths(args)
145
148
  studio_config = StudioConfig.read_config()
146
149
  endpoint = studio_config.studio_url
147
150
  verify = not studio_config.disable_verify
@@ -166,6 +169,13 @@ def handle_upload(args: argparse.Namespace) -> None:
166
169
  args.config, "config", DEFAULT_CONFIG_PATH
167
170
  )
168
171
 
172
+ config = read_yaml_file(args.config, expand_env_vars=False)
173
+ assistant_name = args.assistant_name or _get_assistant_name(config)
174
+ if not _handle_existing_assistant(
175
+ assistant_name, studio_config.studio_url, verify, args
176
+ ):
177
+ return
178
+
169
179
  Domain.expand_env_vars = False
170
180
  RasaYAMLReader.expand_env_vars = False
171
181
  YAMLFlowsReader.expand_env_vars = False
@@ -253,7 +263,7 @@ def build_calm_import_parts(
253
263
  domain = extract_values(domain_from_files, DOMAIN_KEYS)
254
264
 
255
265
  flow_importer = FlowSyncImporter.load_from_dict(
256
- training_data_paths=data_path, expand_env_vars=False
266
+ training_data_paths=[str(data_path)], expand_env_vars=False
257
267
  )
258
268
 
259
269
  flows = list(flow_importer.get_user_flows())
@@ -261,7 +271,7 @@ def build_calm_import_parts(
261
271
  flows = read_yaml(flows_yaml, expand_env_vars=False)
262
272
 
263
273
  nlu_importer = TrainingDataImporter.load_from_dict(
264
- training_data_paths=data_path, expand_env_vars=False
274
+ training_data_paths=[str(data_path)], expand_env_vars=False
265
275
  )
266
276
  nlu_data = nlu_importer.get_nlu_data()
267
277
  nlu_examples = nlu_data.filter_training_examples(
@@ -297,8 +307,10 @@ def upload_calm_assistant(
297
307
  domain_path=args.domain,
298
308
  config_path=args.config,
299
309
  endpoints_path=args.endpoints,
310
+ assistant_name=args.assistant_name,
300
311
  )
301
312
 
313
+ prompts_json = collect_custom_prompts(parts.config, parts.endpoints)
302
314
  graphql_req = build_import_request(
303
315
  assistant_name,
304
316
  flows_yaml=yaml_or_empty(parts.flows),
@@ -306,7 +318,9 @@ def upload_calm_assistant(
306
318
  config_yaml=yaml_or_empty(parts.config),
307
319
  endpoints=yaml_or_empty(parts.endpoints),
308
320
  nlu_yaml=yaml_or_empty(parts.nlu),
321
+ prompts_json=prompts_json,
309
322
  )
323
+
310
324
  structlogger.info(
311
325
  "rasa.studio.upload.calm", event_info="Uploading to Rasa Studio..."
312
326
  )
@@ -336,7 +350,7 @@ def upload_nlu_assistant(
336
350
  )
337
351
  importer = TrainingDataImporter.load_from_dict(
338
352
  domain_path=args.domain,
339
- training_data_paths=args.data,
353
+ training_data_paths=[args.data],
340
354
  config_path=args.config,
341
355
  expand_env_vars=False,
342
356
  )
@@ -451,6 +465,7 @@ def build_import_request(
451
465
  config_yaml: Optional[str] = None,
452
466
  endpoints: Optional[str] = None,
453
467
  nlu_yaml: Optional[str] = None,
468
+ prompts_json: Optional[Dict[str, str]] = None,
454
469
  ) -> Dict:
455
470
  """Builds the GraphQL request for uploading a modern assistant.
456
471
 
@@ -461,6 +476,7 @@ def build_import_request(
461
476
  config_yaml: The YAML representation of the config
462
477
  endpoints: The YAML representation of the endpoints
463
478
  nlu_yaml: The YAML representation of the NLU data
479
+ prompts_json: The JSON representation of the prompts
464
480
 
465
481
  Returns:
466
482
  A dictionary representing the GraphQL request for uploading the assistant.
@@ -473,12 +489,15 @@ def build_import_request(
473
489
  "nlu": nlu_yaml,
474
490
  }
475
491
 
476
- payload = {
492
+ payload: Dict[Text, Any] = {
477
493
  field: convert_string_to_base64(value)
478
494
  for field, value in inputs_map.items()
479
495
  if value is not None
480
496
  }
481
497
 
498
+ if prompts_json:
499
+ payload["prompts"] = prompts_json
500
+
482
501
  variables_input = {"assistantName": assistant_name, **payload}
483
502
 
484
503
  graphql_req = {
@@ -677,3 +696,40 @@ def build_get_assistant_by_name_request(
677
696
  },
678
697
  }
679
698
  return graphql_req
699
+
700
+
701
+ def _handle_existing_assistant(
702
+ assistant_name: str,
703
+ endpoint: str,
704
+ verify: bool,
705
+ args: argparse.Namespace,
706
+ ) -> bool:
707
+ """Deal with the case that an assistant with the same name already exists.
708
+
709
+ Args:
710
+ assistant_name: The name of the assistant
711
+ endpoint: The studio endpoint
712
+ verify: Whether to verify SSL
713
+ args: The command line arguments
714
+
715
+ Returns:
716
+ bool: True if the assistant does not exist and can be created,
717
+ False if the assistant already exists and was linked.
718
+ """
719
+ from rasa.studio.link import handle_link
720
+
721
+ if not check_if_assistant_already_exists(assistant_name, endpoint, verify):
722
+ return True
723
+
724
+ should_link = questionary.confirm(
725
+ f"An assistant named {assistant_name} already exists in Studio. "
726
+ f"Would you like to link your local project to this existing assistant?"
727
+ ).ask()
728
+
729
+ if not should_link:
730
+ rasa.shared.utils.cli.print_error_and_exit("Upload cancelled.")
731
+ return False
732
+
733
+ args.assistant_name = assistant_name
734
+ handle_link(args)
735
+ return False
rasa/studio/utils.py ADDED
@@ -0,0 +1,33 @@
1
+ import argparse
2
+ from pathlib import Path
3
+
4
+ import rasa.shared.utils.cli
5
+ from rasa.shared.constants import (
6
+ DEFAULT_CONFIG_PATH,
7
+ DEFAULT_DATA_PATH,
8
+ DEFAULT_ENDPOINTS_PATH,
9
+ )
10
+ from rasa.studio.constants import DOMAIN_FILENAME
11
+
12
+
13
+ def validate_argument_paths(args: argparse.Namespace) -> None:
14
+ """Validates the paths provided in the command line arguments.
15
+
16
+ Args:
17
+ args: The command line arguments containing paths to validate.
18
+ """
19
+
20
+ def validate_path(arg_name: str, default: str) -> None:
21
+ path_value = getattr(args, arg_name, None)
22
+ if path_value and path_value != default:
23
+ resolved_path = Path(path_value).resolve()
24
+ if not resolved_path.exists():
25
+ rasa.shared.utils.cli.print_error_and_exit(
26
+ f"{arg_name.capitalize()} file or directory "
27
+ f"'{path_value}' does not exist."
28
+ )
29
+
30
+ validate_path("domain", DOMAIN_FILENAME)
31
+ validate_path("config", DEFAULT_CONFIG_PATH)
32
+ validate_path("endpoints", DEFAULT_ENDPOINTS_PATH)
33
+ validate_path("data", DEFAULT_DATA_PATH)
@@ -64,7 +64,10 @@ from rasa.shared.core.trackers import DialogueStateTracker
64
64
  from rasa.shared.core.training_data.structures import StoryGraph
65
65
  from rasa.shared.importers.importer import TrainingDataImporter
66
66
  from rasa.shared.nlu.constants import INTENT_NAME_KEY, SET_SLOT_COMMAND
67
- from rasa.shared.utils.llm import combine_custom_and_default_config
67
+ from rasa.shared.utils.llm import (
68
+ combine_custom_and_default_config,
69
+ resolve_model_client_config,
70
+ )
68
71
  from rasa.tracing.constants import (
69
72
  PROMPT_TOKEN_LENGTH_ATTRIBUTE_NAME,
70
73
  REQUEST_BODY_SIZE_IN_BYTES_ATTRIBUTE_NAME,
@@ -335,9 +338,8 @@ def extract_llm_config(
335
338
  else:
336
339
  config = self.config
337
340
 
338
- llm_property = combine_custom_and_default_config(
339
- config.get(LLM_CONFIG_KEY), default_llm_config
340
- )
341
+ llm_config = resolve_model_client_config(config.get(LLM_CONFIG_KEY))
342
+ llm_property = combine_custom_and_default_config(llm_config, default_llm_config)
341
343
 
342
344
  if isinstance(self, LLMBasedCommandGenerator):
343
345
  flow_retrieval_config = config.get(FLOW_RETRIEVAL_KEY, {}) or {}
@@ -346,8 +348,11 @@ def extract_llm_config(
346
348
  default_embeddings_config,
347
349
  )
348
350
  else:
351
+ embeddings_config = resolve_model_client_config(
352
+ config.get(EMBEDDINGS_CONFIG_KEY)
353
+ )
349
354
  embeddings_property = combine_custom_and_default_config(
350
- config.get(EMBEDDINGS_CONFIG_KEY), default_embeddings_config
355
+ embeddings_config, default_embeddings_config
351
356
  )
352
357
 
353
358
  attributes = {
@@ -814,14 +819,23 @@ def compute_prompt_tokens_length(
814
819
  )
815
820
  return None
816
821
 
817
- if model_name in ["gpt-3.5-turbo", "gpt-4"]:
822
+ if model_name == "gpt-4":
818
823
  logger.debug(
819
824
  f"Model {model_name} may update over time. "
820
825
  f"Returning num tokens assuming model '{model_name}-0613.'"
821
826
  )
822
827
  model_name = f"{model_name}-0613"
823
828
 
824
- encoding = tiktoken.encoding_for_model(model_name)
829
+ try:
830
+ encoding = tiktoken.encoding_for_model(model_name)
831
+ except KeyError:
832
+ # Fallback for unknown models
833
+ logger.warning(
834
+ f"Unknown model name '{model_name}', "
835
+ f"using 'cl100k_base' encoding as fallback."
836
+ )
837
+ encoding = tiktoken.get_encoding("cl100k_base")
838
+
825
839
  return len(encoding.encode(prompt))
826
840
 
827
841
 
rasa/utils/common.py CHANGED
@@ -280,6 +280,7 @@ def configure_library_logging() -> None:
280
280
  update_matplotlib_log_level(library_log_level)
281
281
  update_kafka_log_level(library_log_level)
282
282
  update_rabbitmq_log_level(library_log_level)
283
+ update_websockets_log_level(library_log_level)
283
284
 
284
285
 
285
286
  def update_apscheduler_log_level() -> None:
@@ -404,6 +405,16 @@ def update_rabbitmq_log_level(library_log_level: Text) -> None:
404
405
  logging.getLogger("aiormq").setLevel(log_level)
405
406
 
406
407
 
408
+ def update_websockets_log_level(library_log_level: Text) -> None:
409
+ """Set the log level of websockets.
410
+
411
+ Uses the library specific log level or the general libraries log level.
412
+ """
413
+ log_level = os.environ.get(ENV_LOG_LEVEL_LIBRARIES, library_log_level)
414
+ logging.getLogger("websockets").setLevel(log_level)
415
+ logging.getLogger("websockets").propagate = False
416
+
417
+
407
418
  def sort_list_of_dicts_by_first_key(dicts: List[Dict]) -> List[Dict]:
408
419
  """Sorts a list of dictionaries by their first key."""
409
420
  return sorted(dicts, key=lambda d: next(iter(d.keys())))
rasa/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  # this file will automatically be changed,
2
2
  # do not add anything but the version number here!
3
- __version__ = "3.13.0.dev20250613"
3
+ __version__ = "3.13.0rc2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: rasa-pro
3
- Version: 3.13.0.dev20250613
3
+ Version: 3.13.0rc2
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
@@ -23,7 +23,7 @@ Provides-Extra: spacy
23
23
  Provides-Extra: transformers
24
24
  Requires-Dist: CacheControl (>=0.14.2,<0.15.0)
25
25
  Requires-Dist: PyJWT[crypto] (>=2.8.0,<3.0.0)
26
- Requires-Dist: SQLAlchemy (>=2.0.40,<2.1.0)
26
+ Requires-Dist: SQLAlchemy (>=2.0.41,<2.1.0)
27
27
  Requires-Dist: absl-py (>=2.0,<2.1)
28
28
  Requires-Dist: aio-pika (>=8.2.3,<9.4.4)
29
29
  Requires-Dist: aiogram (>=3.15,<3.16)
@@ -91,7 +91,7 @@ Requires-Dist: pymongo (>=4.10.1,<4.11.0)
91
91
  Requires-Dist: pypred (>=0.4.0,<0.5.0)
92
92
  Requires-Dist: python-dateutil (>=2.8.2,<2.9.0)
93
93
  Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
94
- Requires-Dist: python-engineio (>=4.12.0,<6,!=5.0.0)
94
+ Requires-Dist: python-engineio (>=4.12.2,<4.13.0)
95
95
  Requires-Dist: python-keycloak (>=3.12.0,<4.0.0)
96
96
  Requires-Dist: python-socketio (>=5.8,<6)
97
97
  Requires-Dist: pytz (>=2022.7.1,<2023.0)
@@ -99,7 +99,7 @@ Requires-Dist: pyyaml (>=6.0)
99
99
  Requires-Dist: qdrant-client (>=1.9.1,<1.10.0)
100
100
  Requires-Dist: questionary (>=1.10.0,<2.1.0)
101
101
  Requires-Dist: randomname (>=0.2.1,<0.3.0)
102
- Requires-Dist: rasa-sdk (==3.13.0.dev1)
102
+ Requires-Dist: rasa-sdk (==3.13.0rc1)
103
103
  Requires-Dist: redis (>=4.6.0,<6.0)
104
104
  Requires-Dist: regex (>=2024.7.24,<2024.8.0)
105
105
  Requires-Dist: requests (>=2.32.3,<2.33.0)