rasa-pro 3.13.12__py3-none-any.whl → 3.14.0__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 (586) hide show
  1. rasa/__main__.py +15 -3
  2. rasa/agents/__init__.py +0 -0
  3. rasa/agents/agent_factory.py +122 -0
  4. rasa/agents/agent_manager.py +213 -0
  5. rasa/agents/constants.py +43 -0
  6. rasa/agents/core/__init__.py +0 -0
  7. rasa/agents/core/agent_protocol.py +107 -0
  8. rasa/agents/core/types.py +81 -0
  9. rasa/agents/exceptions.py +38 -0
  10. rasa/agents/protocol/__init__.py +5 -0
  11. rasa/agents/protocol/a2a/__init__.py +0 -0
  12. rasa/agents/protocol/a2a/a2a_agent.py +889 -0
  13. rasa/agents/protocol/mcp/__init__.py +0 -0
  14. rasa/agents/protocol/mcp/mcp_base_agent.py +778 -0
  15. rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
  16. rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
  17. rasa/agents/schemas/__init__.py +13 -0
  18. rasa/agents/schemas/agent_input.py +38 -0
  19. rasa/agents/schemas/agent_output.py +26 -0
  20. rasa/agents/schemas/agent_tool_result.py +65 -0
  21. rasa/agents/schemas/agent_tool_schema.py +186 -0
  22. rasa/agents/templates/__init__.py +0 -0
  23. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
  24. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
  25. rasa/agents/utils.py +228 -0
  26. rasa/agents/validation.py +538 -0
  27. rasa/api.py +23 -9
  28. rasa/builder/README.md +120 -0
  29. rasa/builder/__init__.py +0 -0
  30. rasa/builder/auth.py +176 -0
  31. rasa/builder/config.py +96 -0
  32. rasa/builder/copilot/__init__.py +0 -0
  33. rasa/builder/copilot/constants.py +38 -0
  34. rasa/builder/copilot/copilot.py +562 -0
  35. rasa/builder/copilot/copilot_response_handler.py +522 -0
  36. rasa/builder/copilot/copilot_templated_message_provider.py +81 -0
  37. rasa/builder/copilot/exceptions.py +32 -0
  38. rasa/builder/copilot/models.py +690 -0
  39. rasa/builder/copilot/prompts/__init__.py +0 -0
  40. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +787 -0
  41. rasa/builder/copilot/prompts/copilot_training_error_handler_prompt.jinja2 +53 -0
  42. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +91 -0
  43. rasa/builder/copilot/signing.py +305 -0
  44. rasa/builder/copilot/telemetry.py +234 -0
  45. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  46. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  47. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +41 -0
  48. rasa/builder/copilot/templated_messages/copilot_welcome_messages.yml +56 -0
  49. rasa/builder/document_retrieval/__init__.py +0 -0
  50. rasa/builder/document_retrieval/constants.py +15 -0
  51. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  52. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  53. rasa/builder/document_retrieval/models.py +62 -0
  54. rasa/builder/download.py +140 -0
  55. rasa/builder/exceptions.py +91 -0
  56. rasa/builder/guardrails/__init__.py +1 -0
  57. rasa/builder/guardrails/clients.py +256 -0
  58. rasa/builder/guardrails/constants.py +12 -0
  59. rasa/builder/guardrails/exceptions.py +4 -0
  60. rasa/builder/guardrails/models.py +266 -0
  61. rasa/builder/guardrails/policy_checker.py +324 -0
  62. rasa/builder/guardrails/store.py +238 -0
  63. rasa/builder/guardrails/utils.py +94 -0
  64. rasa/builder/job_manager.py +87 -0
  65. rasa/builder/jobs.py +609 -0
  66. rasa/builder/llm_service.py +273 -0
  67. rasa/builder/logging_utils.py +265 -0
  68. rasa/builder/main.py +234 -0
  69. rasa/builder/models.py +229 -0
  70. rasa/builder/project_generator.py +463 -0
  71. rasa/builder/project_info.py +72 -0
  72. rasa/builder/service.py +1367 -0
  73. rasa/builder/shared/tracker_context.py +212 -0
  74. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  75. rasa/builder/template_cache.py +69 -0
  76. rasa/builder/training_service.py +188 -0
  77. rasa/builder/validation_service.py +101 -0
  78. rasa/cli/arguments/data.py +9 -0
  79. rasa/cli/arguments/default_arguments.py +12 -0
  80. rasa/cli/arguments/run.py +2 -0
  81. rasa/cli/arguments/train.py +2 -0
  82. rasa/cli/data.py +78 -10
  83. rasa/cli/dialogue_understanding_test.py +11 -7
  84. rasa/cli/e2e_test.py +10 -6
  85. rasa/cli/evaluate.py +4 -2
  86. rasa/cli/export.py +5 -2
  87. rasa/cli/inspect.py +9 -4
  88. rasa/cli/interactive.py +8 -4
  89. rasa/cli/llm_fine_tuning.py +12 -6
  90. rasa/cli/project_templates/basic/README.md +23 -0
  91. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  92. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  93. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  94. rasa/cli/project_templates/basic/config.yml +29 -0
  95. rasa/cli/project_templates/basic/credentials.yml +33 -0
  96. rasa/cli/project_templates/basic/data/data.md +8 -0
  97. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  98. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  99. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  100. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  101. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  102. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  103. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  104. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  105. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  106. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  107. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  108. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  109. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  110. rasa/cli/project_templates/basic/domain/domain.md +11 -0
  111. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  112. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  113. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  114. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  115. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  116. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  117. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  118. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  119. rasa/cli/project_templates/basic/endpoints.yml +67 -0
  120. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  121. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
  122. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
  123. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
  124. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/help.yml +8 -0
  125. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/human_handoff.yml +41 -0
  126. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/patterns.yml +32 -0
  127. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/show_faqs.yml +8 -0
  128. rasa/cli/project_templates/default/config.yml +4 -0
  129. rasa/cli/project_templates/default/endpoints.yml +4 -0
  130. rasa/cli/project_templates/defaults.py +1 -0
  131. rasa/cli/project_templates/finance/README.md +26 -0
  132. rasa/cli/project_templates/finance/actions/__init__.py +0 -0
  133. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  134. rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -0
  135. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  136. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  137. rasa/cli/project_templates/finance/actions/cards/check_that_card_exists.py +21 -0
  138. rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
  139. rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
  140. rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
  141. rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
  142. rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
  143. rasa/cli/project_templates/finance/actions/db.py +117 -0
  144. rasa/cli/project_templates/finance/actions/general/__init__.py +0 -0
  145. rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
  146. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  147. rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
  148. rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
  149. rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
  150. rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
  151. rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
  152. rasa/cli/project_templates/finance/config.yml +29 -0
  153. rasa/cli/project_templates/finance/credentials.yml +33 -0
  154. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +9 -0
  155. rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
  156. rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
  157. rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
  158. rasa/cli/project_templates/finance/data/cards/block_card.yml +45 -0
  159. rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
  160. rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
  161. rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
  162. rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
  163. rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
  164. rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
  165. rasa/cli/project_templates/finance/data/data.md +14 -0
  166. rasa/cli/project_templates/finance/data/general/bot_challenge.yml +6 -0
  167. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  168. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  169. rasa/cli/project_templates/finance/data/general/hello.yml +6 -0
  170. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  171. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  172. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  173. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  174. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  175. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  176. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  177. rasa/cli/project_templates/finance/data/transfers/check_transfer_limit.yml +18 -0
  178. rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
  179. rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
  180. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +34 -0
  181. rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
  182. rasa/cli/project_templates/finance/db/cards.json +18 -0
  183. rasa/cli/project_templates/finance/db/contacts.json +10 -0
  184. rasa/cli/project_templates/finance/db/my_account.json +6 -0
  185. rasa/cli/project_templates/finance/db/transactions.json +22 -0
  186. rasa/cli/project_templates/finance/docs/docs.md +8 -0
  187. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
  188. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
  189. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
  190. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
  191. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
  192. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
  193. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
  194. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
  195. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
  196. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
  197. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +15 -0
  198. rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
  199. rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
  200. rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
  201. rasa/cli/project_templates/finance/domain/cards/block_card.yml +44 -0
  202. rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
  203. rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
  204. rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
  205. rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
  206. rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
  207. rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
  208. rasa/cli/project_templates/finance/domain/domain.md +18 -0
  209. rasa/cli/project_templates/finance/domain/general/_shared.yml +39 -0
  210. rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
  211. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +8 -0
  212. rasa/cli/project_templates/finance/domain/general/feedback.yml +25 -0
  213. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  214. rasa/cli/project_templates/finance/domain/general/help.yml +0 -0
  215. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +31 -0
  216. rasa/cli/project_templates/finance/domain/general/welcome.yml +39 -0
  217. rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
  218. rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
  219. rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
  220. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +221 -0
  221. rasa/cli/project_templates/finance/endpoints.yml +67 -0
  222. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  223. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/check_balance.yml +9 -0
  224. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/download_statements.yml +43 -0
  225. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/cards/block_card.yml +55 -0
  226. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
  227. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
  228. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
  229. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
  230. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
  231. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/patterns.yml +22 -0
  232. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/transfers/transfer_money.yml +56 -0
  233. rasa/cli/project_templates/telco/README.md +25 -0
  234. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  235. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  236. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  237. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  238. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  239. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  240. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  241. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  242. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  243. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  244. rasa/cli/project_templates/telco/config.yml +29 -0
  245. rasa/cli/project_templates/telco/credentials.yml +33 -0
  246. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  247. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  248. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  249. rasa/cli/project_templates/telco/data/data.md +11 -0
  250. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  251. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  252. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  253. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  254. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  255. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  256. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  257. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  258. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  259. rasa/cli/project_templates/telco/docs/docs.md +8 -0
  260. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  261. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  262. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  263. rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
  264. rasa/cli/project_templates/telco/domain/domain.md +13 -0
  265. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  266. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  267. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  268. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  269. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
  270. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  271. rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
  272. rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
  273. rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
  274. rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +74 -0
  275. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  276. rasa/cli/project_templates/telco/endpoints.yml +67 -0
  277. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  278. rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_not_slow.yml +33 -0
  279. rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_slow.yml +47 -0
  280. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/billing/understand_bill.yml +67 -0
  281. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
  282. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
  283. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
  284. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
  285. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
  286. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/patterns.yml +23 -0
  287. rasa/cli/project_templates/tutorial/config.yml +2 -1
  288. rasa/cli/project_templates/tutorial/credentials.yml +10 -0
  289. rasa/cli/run.py +8 -10
  290. rasa/cli/scaffold.py +50 -6
  291. rasa/cli/shell.py +10 -5
  292. rasa/cli/studio/studio.py +1 -1
  293. rasa/cli/test.py +34 -14
  294. rasa/cli/train.py +44 -30
  295. rasa/cli/utils.py +1 -393
  296. rasa/cli/validation/__init__.py +0 -0
  297. rasa/cli/validation/bot_config.py +232 -0
  298. rasa/cli/validation/config_path_validation.py +257 -0
  299. rasa/cli/x.py +8 -4
  300. rasa/constants.py +7 -1
  301. rasa/core/actions/action.py +53 -13
  302. rasa/core/actions/action_exceptions.py +1 -1
  303. rasa/core/actions/action_run_slot_rejections.py +1 -1
  304. rasa/core/actions/grpc_custom_action_executor.py +1 -1
  305. rasa/core/agent.py +22 -2
  306. rasa/core/available_agents.py +239 -0
  307. rasa/core/brokers/broker.py +1 -1
  308. rasa/core/brokers/kafka.py +56 -8
  309. rasa/core/channels/__init__.py +82 -35
  310. rasa/core/channels/channel.py +4 -3
  311. rasa/core/channels/constants.py +3 -0
  312. rasa/core/channels/development_inspector.py +29 -16
  313. rasa/core/channels/hangouts.py +2 -2
  314. rasa/core/channels/inspector/README.md +25 -13
  315. rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-6177260a.js} +1 -1
  316. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
  317. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
  318. rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
  319. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
  320. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
  322. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-088372e2.js} +1 -1
  323. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-58676240.js} +1 -1
  324. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
  325. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-ea63f85c.js} +1 -1
  326. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
  327. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
  328. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
  329. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
  330. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
  331. rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-0a6f8466.js} +1 -1
  332. rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-7610671a.js} +1 -1
  333. rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
  334. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
  335. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
  336. rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-e7fbc2bf.js} +1 -1
  337. rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-a8aa457c.js} +1 -1
  338. rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-3351e0d2.js} +1 -1
  339. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
  340. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
  341. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
  342. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
  343. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
  344. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
  345. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-0e770395.js} +1 -1
  346. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
  347. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-36a9e70d.js} +1 -1
  348. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-884a8b5b.js} +1 -1
  349. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-dc097813.js} +1 -1
  350. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
  351. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
  352. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
  353. rasa/core/channels/inspector/dist/index.html +1 -1
  354. rasa/core/channels/inspector/package.json +18 -18
  355. rasa/core/channels/inspector/src/App.tsx +56 -12
  356. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
  357. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  358. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
  359. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
  360. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +296 -0
  361. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
  362. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +26 -4
  363. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  364. rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
  365. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  366. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  367. rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
  368. rasa/core/channels/inspector/src/types.ts +55 -1
  369. rasa/core/channels/inspector/yarn.lock +336 -189
  370. rasa/core/channels/socketio.py +212 -51
  371. rasa/core/channels/studio_chat.py +82 -32
  372. rasa/core/channels/telegram.py +4 -9
  373. rasa/core/channels/voice_ready/twilio_voice.py +1 -1
  374. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  375. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  376. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  377. rasa/core/channels/voice_stream/audiocodes.py +11 -6
  378. rasa/core/channels/voice_stream/browser_audio.py +91 -4
  379. rasa/core/channels/voice_stream/call_state.py +13 -2
  380. rasa/core/channels/voice_stream/genesys.py +19 -15
  381. rasa/core/channels/voice_stream/jambonz.py +22 -12
  382. rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
  383. rasa/core/channels/voice_stream/twilio_media_streams.py +35 -14
  384. rasa/core/channels/voice_stream/util.py +11 -1
  385. rasa/core/channels/voice_stream/voice_channel.py +170 -32
  386. rasa/core/concurrent_lock_store.py +83 -16
  387. rasa/core/config/__init__.py +0 -0
  388. rasa/core/{available_endpoints.py → config/available_endpoints.py} +56 -18
  389. rasa/core/config/configuration.py +295 -0
  390. rasa/core/config/credentials.py +19 -0
  391. rasa/core/config/message_procesing_config.py +34 -0
  392. rasa/core/constants.py +17 -0
  393. rasa/core/exceptions.py +1 -1
  394. rasa/core/featurizers/tracker_featurizers.py +3 -2
  395. rasa/core/iam_credentials_providers/__init__.py +0 -0
  396. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +291 -0
  397. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +91 -0
  398. rasa/core/lock_store.py +50 -10
  399. rasa/core/nlg/contextual_response_rephraser.py +5 -0
  400. rasa/core/nlg/generator.py +1 -1
  401. rasa/core/persistor.py +7 -7
  402. rasa/core/policies/enterprise_search_policy.py +9 -10
  403. rasa/core/policies/flow_policy.py +4 -4
  404. rasa/core/policies/flows/agent_executor.py +720 -0
  405. rasa/core/policies/flows/flow_exceptions.py +5 -2
  406. rasa/core/policies/flows/flow_executor.py +146 -77
  407. rasa/core/policies/flows/mcp_tool_executor.py +304 -0
  408. rasa/core/policies/intentless_policy.py +1 -1
  409. rasa/core/policies/rule_policy.py +1 -1
  410. rasa/core/policies/ted_policy.py +20 -12
  411. rasa/core/policies/unexpected_intent_policy.py +6 -0
  412. rasa/core/processor.py +100 -44
  413. rasa/core/redis_connection_factory.py +474 -0
  414. rasa/core/run.py +49 -10
  415. rasa/core/test.py +4 -0
  416. rasa/core/tracker_stores/redis_tracker_store.py +36 -14
  417. rasa/core/tracker_stores/sql_tracker_store.py +59 -1
  418. rasa/core/tracker_stores/tracker_store.py +3 -7
  419. rasa/core/train.py +1 -1
  420. rasa/core/training/interactive.py +20 -18
  421. rasa/core/training/story_conflict.py +5 -5
  422. rasa/core/utils.py +22 -23
  423. rasa/dialogue_understanding/commands/__init__.py +8 -0
  424. rasa/dialogue_understanding/commands/cancel_flow_command.py +20 -6
  425. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
  426. rasa/dialogue_understanding/commands/clarify_command.py +20 -2
  427. rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
  428. rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
  429. rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
  430. rasa/dialogue_understanding/commands/start_flow_command.py +75 -7
  431. rasa/dialogue_understanding/commands/utils.py +135 -2
  432. rasa/dialogue_understanding/generator/command_parser.py +4 -0
  433. rasa/dialogue_understanding/generator/flow_retrieval.py +0 -9
  434. rasa/dialogue_understanding/generator/llm_based_command_generator.py +52 -12
  435. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  436. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  437. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
  438. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
  439. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
  440. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
  441. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
  442. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
  443. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
  444. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  445. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  446. rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
  447. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +49 -9
  448. rasa/dialogue_understanding/processor/command_processor.py +136 -15
  449. rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
  450. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
  451. rasa/dialogue_understanding/stack/utils.py +57 -3
  452. rasa/dialogue_understanding/utils.py +24 -4
  453. rasa/dialogue_understanding_test/du_test_runner.py +8 -3
  454. rasa/e2e_test/e2e_test_runner.py +13 -3
  455. rasa/engine/caching.py +2 -2
  456. rasa/engine/constants.py +1 -1
  457. rasa/engine/graph.py +5 -1
  458. rasa/engine/loader.py +12 -0
  459. rasa/engine/recipes/default_components.py +138 -49
  460. rasa/engine/recipes/default_recipe.py +108 -11
  461. rasa/engine/runner/dask.py +8 -5
  462. rasa/engine/validation.py +25 -8
  463. rasa/graph_components/validators/default_recipe_validator.py +86 -28
  464. rasa/hooks.py +5 -5
  465. rasa/llm_fine_tuning/utils.py +2 -2
  466. rasa/model_manager/model_api.py +4 -5
  467. rasa/model_manager/runner_service.py +2 -2
  468. rasa/model_manager/socket_bridge.py +21 -17
  469. rasa/model_manager/trainer_service.py +12 -9
  470. rasa/model_manager/utils.py +1 -29
  471. rasa/model_manager/warm_rasa_process.py +13 -3
  472. rasa/model_training.py +60 -47
  473. rasa/nlu/classifiers/diet_classifier.py +198 -98
  474. rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
  475. rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
  476. rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
  477. rasa/nlu/extractors/crf_entity_extractor.py +9 -10
  478. rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
  479. rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
  480. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
  481. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
  482. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
  483. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
  484. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
  485. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
  486. rasa/nlu/selectors/response_selector.py +10 -2
  487. rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
  488. rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
  489. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
  490. rasa/nlu/utils/mitie_utils.py +3 -0
  491. rasa/nlu/utils/spacy_utils.py +3 -2
  492. rasa/plugin.py +8 -8
  493. rasa/privacy/privacy_config.py +1 -1
  494. rasa/privacy/privacy_manager.py +12 -3
  495. rasa/server.py +15 -3
  496. rasa/shared/agents/__init__.py +0 -0
  497. rasa/shared/agents/auth/__init__.py +0 -0
  498. rasa/shared/agents/auth/agent_auth_factory.py +105 -0
  499. rasa/shared/agents/auth/agent_auth_manager.py +92 -0
  500. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  501. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  502. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  503. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  504. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +170 -0
  505. rasa/shared/agents/auth/constants.py +13 -0
  506. rasa/shared/agents/auth/types.py +12 -0
  507. rasa/shared/agents/auth/utils.py +85 -0
  508. rasa/shared/agents/utils.py +35 -0
  509. rasa/shared/constants.py +11 -0
  510. rasa/shared/core/constants.py +17 -1
  511. rasa/shared/core/domain.py +62 -22
  512. rasa/shared/core/events.py +329 -0
  513. rasa/shared/core/flows/constants.py +5 -0
  514. rasa/shared/core/flows/flow.py +1 -1
  515. rasa/shared/core/flows/flow_step.py +7 -1
  516. rasa/shared/core/flows/flows_list.py +21 -5
  517. rasa/shared/core/flows/flows_yaml_schema.json +119 -184
  518. rasa/shared/core/flows/steps/call.py +57 -6
  519. rasa/shared/core/flows/steps/collect.py +98 -13
  520. rasa/shared/core/flows/validation.py +372 -8
  521. rasa/shared/core/flows/yaml_flows_io.py +19 -10
  522. rasa/shared/core/slots.py +6 -2
  523. rasa/shared/core/trackers.py +5 -2
  524. rasa/shared/core/training_data/story_reader/story_reader.py +1 -1
  525. rasa/shared/exceptions.py +39 -2
  526. rasa/shared/importers/importer.py +6 -0
  527. rasa/shared/importers/rasa.py +1 -1
  528. rasa/shared/importers/utils.py +86 -4
  529. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  530. rasa/shared/providers/llm/_base_litellm_client.py +41 -9
  531. rasa/shared/providers/llm/litellm_router_llm_client.py +10 -6
  532. rasa/shared/providers/llm/llm_client.py +7 -3
  533. rasa/shared/providers/llm/llm_response.py +66 -0
  534. rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
  535. rasa/shared/utils/common.py +26 -1
  536. rasa/shared/utils/health_check/health_check.py +7 -3
  537. rasa/shared/utils/llm.py +92 -19
  538. rasa/shared/utils/mcp/__init__.py +0 -0
  539. rasa/shared/utils/mcp/server_connection.py +250 -0
  540. rasa/shared/utils/mcp/utils.py +20 -0
  541. rasa/shared/utils/schemas/events.py +42 -0
  542. rasa/shared/utils/yaml.py +3 -1
  543. rasa/studio/download.py +3 -0
  544. rasa/studio/prompts.py +1 -0
  545. rasa/studio/pull/pull.py +3 -2
  546. rasa/studio/train.py +8 -7
  547. rasa/studio/upload.py +19 -52
  548. rasa/telemetry.py +166 -28
  549. rasa/tracing/config.py +45 -12
  550. rasa/tracing/constants.py +14 -0
  551. rasa/tracing/instrumentation/attribute_extractors.py +142 -9
  552. rasa/tracing/instrumentation/instrumentation.py +626 -21
  553. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  554. rasa/tracing/instrumentation/metrics.py +32 -0
  555. rasa/tracing/metric_instrument_provider.py +68 -0
  556. rasa/utils/common.py +92 -1
  557. rasa/utils/endpoints.py +11 -2
  558. rasa/utils/io.py +27 -9
  559. rasa/utils/json_utils.py +6 -1
  560. rasa/utils/log_utils.py +121 -7
  561. rasa/utils/ml_utils.py +1 -1
  562. rasa/utils/openapi.py +144 -0
  563. rasa/utils/plotting.py +1 -1
  564. rasa/utils/pypred.py +45 -0
  565. rasa/utils/tensorflow/__init__.py +7 -0
  566. rasa/utils/tensorflow/callback.py +136 -101
  567. rasa/utils/tensorflow/crf.py +1 -1
  568. rasa/utils/tensorflow/data_generator.py +21 -8
  569. rasa/utils/tensorflow/layers.py +21 -11
  570. rasa/utils/tensorflow/metrics.py +7 -3
  571. rasa/utils/tensorflow/models.py +56 -8
  572. rasa/utils/tensorflow/rasa_layers.py +8 -6
  573. rasa/utils/tensorflow/transformer.py +2 -3
  574. rasa/utils/train_utils.py +54 -24
  575. rasa/validator.py +149 -16
  576. rasa/version.py +1 -1
  577. rasa_pro-3.14.0.dist-info/METADATA +212 -0
  578. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/RECORD +581 -269
  579. rasa/core/channels/inspector/dist/assets/channel-51d02e9e.js +0 -1
  580. rasa/core/channels/inspector/dist/assets/clone-cc738fa6.js +0 -1
  581. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-0c716443.js +0 -1
  582. rasa/core/channels/inspector/dist/assets/index-c804b295.js +0 -1335
  583. rasa_pro-3.13.12.dist-info/METADATA +0 -192
  584. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/NOTICE +0 -0
  585. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/WHEEL +0 -0
  586. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/entry_points.txt +0 -0
rasa/shared/core/slots.py CHANGED
@@ -68,9 +68,9 @@ class SlotRejection:
68
68
 
69
69
 
70
70
  class SlotValidation(BaseModel):
71
- rejections: List[SlotRejection] = Field(alias=REJECTIONS)
71
+ rejections: List[SlotRejection] = Field(alias=REJECTIONS) # type: ignore[literal-required]
72
72
  """how the slot value is validated using predicate evaluation."""
73
- refill_utter: str = Field(alias=REFILL_UTTER)
73
+ refill_utter: str = Field(alias=REFILL_UTTER) # type: ignore[literal-required]
74
74
  """The utterance that the assistant uses to ask for the slot."""
75
75
 
76
76
  @staticmethod
@@ -273,10 +273,14 @@ class Slot(ABC):
273
273
  try:
274
274
  return rasa.shared.utils.common.class_from_module_path(type_name)
275
275
  except (ImportError, AttributeError):
276
+ known_types = [
277
+ cls.type_name for cls in rasa.shared.utils.common.all_subclasses(Slot)
278
+ ]
276
279
  raise InvalidSlotTypeException(
277
280
  f"Failed to find slot type, '{type_name}' is neither a known type nor "
278
281
  f"user-defined. If you are creating your own slot type, make "
279
282
  f"sure its module path is correct. "
283
+ f"Known types: {', '.join(known_types)} "
280
284
  f"You can find all build in types at {DOCS_URL_SLOTS}"
281
285
  )
282
286
 
@@ -849,7 +849,7 @@ class DialogueStateTracker:
849
849
  action_names_to_exclude: Optional[List[Text]] = None,
850
850
  skip: int = 0,
851
851
  event_verbosity: EventVerbosity = EventVerbosity.APPLIED,
852
- ) -> Optional["EventTypeAlias"]:
852
+ ) -> Optional[Event]:
853
853
  """Gets the last event of a given type which was actually applied.
854
854
 
855
855
  Args:
@@ -889,9 +889,12 @@ class DialogueStateTracker:
889
889
  Returns:
890
890
  `True` if last executed action had name `name`, otherwise `False`.
891
891
  """
892
- last: Optional[ActionExecuted] = self.get_last_event_for(
892
+ last_event = self.get_last_event_for(
893
893
  ActionExecuted, action_names_to_exclude=[ACTION_LISTEN_NAME], skip=skip
894
894
  )
895
+ last: Optional[ActionExecuted] = (
896
+ last_event if isinstance(last_event, ActionExecuted) else None
897
+ )
895
898
  return last is not None and last.action_name == name
896
899
 
897
900
  ###
@@ -126,4 +126,4 @@ class StoryParseError(RasaCoreException, ValueError):
126
126
 
127
127
  def __init__(self, message: Text) -> None:
128
128
  self.message = message
129
- super(StoryParseError, self).__init__()
129
+ super(StoryParseError, self).__init__(message)
rasa/shared/exceptions.py CHANGED
@@ -16,6 +16,17 @@ class RasaException(Exception):
16
16
  to the users, but will be ignored in telemetry.
17
17
  """
18
18
 
19
+ def __init__(self, message: str, suppress_stack_trace: bool = False, **kwargs: Any):
20
+ """Initialize the exception.
21
+
22
+ Args:
23
+ message: The error message.
24
+ suppress_stack_trace: If True, the stack trace will be suppressed in logs.
25
+ **kwargs: Additional keyword arguments (e.g., cause for exception chaining).
26
+ """
27
+ Exception.__init__(self, message)
28
+ self.suppress_stack_trace = suppress_stack_trace
29
+
19
30
 
20
31
  class RasaCoreException(RasaException):
21
32
  """Basic exception for errors raised by Rasa Core."""
@@ -113,6 +124,17 @@ class SchemaValidationError(RasaException, jsonschema.ValidationError):
113
124
  class InvalidEntityFormatException(RasaException, json.JSONDecodeError):
114
125
  """Raised if the format of an entity is invalid."""
115
126
 
127
+ def __init__(self, msg: str, doc: str = "", pos: int = 0):
128
+ """Initialize the exception.
129
+
130
+ Args:
131
+ msg: The error message.
132
+ doc: The document that caused the error.
133
+ pos: The position in the document where the error occurred.
134
+ """
135
+ RasaException.__init__(self, msg)
136
+ json.JSONDecodeError.__init__(self, msg, doc, pos)
137
+
116
138
  @classmethod
117
139
  def create_from(
118
140
  cls, other: json.JSONDecodeError, msg: Text
@@ -130,8 +152,7 @@ class ConnectionException(RasaException):
130
152
 
131
153
 
132
154
  class ProviderClientAPIException(RasaException):
133
- """Raised for errors that occur during API interactions
134
- with LLM / embedding providers.
155
+ """For errors during API interactions with LLM / embedding providers.
135
156
 
136
157
  Attributes:
137
158
  original_exception (Exception): The original exception that was
@@ -163,9 +184,25 @@ class ProviderClientAPIException(RasaException):
163
184
  return s
164
185
 
165
186
 
187
+ class LLMToolResponseDecodeError(ProviderClientAPIException):
188
+ """Raised when a JSON decoding error occurs in LLM tool response."""
189
+
190
+
166
191
  class ProviderClientValidationError(RasaException):
167
192
  """Raised for errors that occur during validation of the API client."""
168
193
 
169
194
 
170
195
  class FinetuningDataPreparationException(RasaException):
171
196
  """Raised when there is an error in data preparation for fine-tuning."""
197
+
198
+
199
+ class AgentInitializationException(RasaException):
200
+ """Raised when there is an error during the initialization of an agent."""
201
+
202
+
203
+ class AgentAuthInitializationException(RasaException):
204
+ """Raised when there is an error during the initialization of agent auth client."""
205
+
206
+
207
+ class AuthenticationError(RasaException):
208
+ """Raised when there is an authentication error."""
@@ -207,6 +207,12 @@ class TrainingDataImporter(ABC):
207
207
  )
208
208
  ]
209
209
 
210
+ return TrainingDataImporter.wrap_in_builtins(importers)
211
+
212
+ @staticmethod
213
+ def wrap_in_builtins(
214
+ importers: List["TrainingDataImporter"],
215
+ ) -> "TrainingDataImporter":
210
216
  return LanguageImporter(
211
217
  E2EImporter(
212
218
  FlowSyncImporter(ResponsesSyncImporter(CombinedDataImporter(importers)))
@@ -74,7 +74,7 @@ class RasaFileImporter(TrainingDataImporter):
74
74
  @cached_method
75
75
  def get_flows(self) -> FlowsList:
76
76
  """Retrieves training stories / rules (see parent class for full docstring)."""
77
- return utils.flows_from_paths(self._flow_files)
77
+ return utils.flows_from_paths(self._flow_files, self.get_domain())
78
78
 
79
79
  @cached_method
80
80
  def get_conversation_tests(self) -> StoryGraph:
@@ -1,9 +1,37 @@
1
- from typing import Iterable, List, Optional, Text
1
+ from typing import Any, Dict, Iterable, List, Optional, Text
2
+
3
+ from pydantic import BaseModel, Field
2
4
 
3
5
  from rasa.shared.core.domain import Domain
4
6
  from rasa.shared.core.flows import FlowsList
7
+ from rasa.shared.core.flows.yaml_flows_io import KEY_FLOWS, get_flows_as_json
5
8
  from rasa.shared.core.training_data.structures import StoryGraph
9
+ from rasa.shared.importers.importer import TrainingDataImporter
10
+ from rasa.shared.nlu.training_data.formats.rasa_yaml import RasaYAMLWriter
6
11
  from rasa.shared.nlu.training_data.training_data import TrainingData
12
+ from rasa.utils.json_utils import extract_values
13
+
14
+
15
+ class CALMUserData(BaseModel):
16
+ """All pieces that will be uploaded to Rasa Studio."""
17
+
18
+ flows: Dict[str, Any] = Field(default_factory=dict)
19
+ domain: Dict[str, Any] = Field(default_factory=dict)
20
+ config: Dict[str, Any] = Field(default_factory=dict)
21
+ endpoints: Dict[str, Any] = Field(default_factory=dict)
22
+ nlu: Dict[str, Any] = Field(default_factory=dict)
23
+
24
+
25
+ DOMAIN_KEYS = [
26
+ "version",
27
+ "actions",
28
+ "responses",
29
+ "slots",
30
+ "intents",
31
+ "entities",
32
+ "forms",
33
+ "session_config",
34
+ ]
7
35
 
8
36
 
9
37
  def training_data_from_paths(paths: Iterable[Text], language: Text) -> TrainingData:
@@ -23,8 +51,14 @@ def story_graph_from_paths(
23
51
  return StoryGraph(story_steps)
24
52
 
25
53
 
26
- def flows_from_paths(files: List[Text]) -> FlowsList:
27
- """Returns the flows from paths."""
54
+ def flows_from_paths(files: List[Text], domain: Optional[Domain] = None) -> FlowsList:
55
+ """Returns the flows from paths.
56
+
57
+ Args:
58
+ files: List of flow file paths to load.
59
+ domain: Optional domain for validation. If provided, exit_if conditions
60
+ will be validated against defined slots.
61
+ """
28
62
  from rasa.shared.core.flows.yaml_flows_io import YAMLFlowsReader
29
63
 
30
64
  flows = FlowsList(underlying_flows=[])
@@ -32,5 +66,53 @@ def flows_from_paths(files: List[Text]) -> FlowsList:
32
66
  flows = flows.merge(
33
67
  YAMLFlowsReader.read_from_file(file), ignore_duplicates=False
34
68
  )
35
- flows.validate()
69
+ flows.validate(domain)
36
70
  return flows
71
+
72
+
73
+ def extract_calm_import_parts_from_importer(
74
+ importer: TrainingDataImporter,
75
+ config: Optional[Dict[str, Any]] = None,
76
+ endpoints: Optional[Dict[str, Any]] = None,
77
+ ) -> CALMUserData:
78
+ """Extracts CALMUserData from a TrainingDataImporter.
79
+
80
+ Args:
81
+ importer: The training data importer
82
+ data_paths: The path(s) to the training data for flows
83
+ config: Optional config dict, if not provided will use importer.get_config()
84
+ endpoints: Optional endpoints dict, defaults to empty dict
85
+
86
+ Returns:
87
+ CALMUserData containing flows, domain, config, endpoints, and nlu data
88
+ """
89
+ # Extract config
90
+ if config is None:
91
+ config = importer.get_config()
92
+
93
+ # Extract domain
94
+ domain_from_files = importer.get_user_domain().as_dict()
95
+ domain = extract_values(domain_from_files, DOMAIN_KEYS)
96
+
97
+ # Extract flows
98
+ flows = importer.get_user_flows()
99
+ flows_dict = {KEY_FLOWS: get_flows_as_json(flows)}
100
+
101
+ # Extract NLU data
102
+ nlu_data = importer.get_nlu_data()
103
+ nlu_examples = nlu_data.filter_training_examples(
104
+ lambda ex: ex.get("intent") in nlu_data.intents
105
+ )
106
+ nlu_dict = RasaYAMLWriter().training_data_to_dict(nlu_examples)
107
+
108
+ # Use provided endpoints or default to empty dict
109
+ if endpoints is None:
110
+ endpoints = {}
111
+
112
+ return CALMUserData(
113
+ flows=flows_dict or {},
114
+ domain=domain or {},
115
+ config=config or {},
116
+ endpoints=endpoints or {},
117
+ nlu=nlu_dict or {},
118
+ )
@@ -72,6 +72,9 @@ schema;responses:
72
72
  allowempty: True
73
73
  channel:
74
74
  type: "str"
75
+ allow_interruptions:
76
+ type: "bool"
77
+ required: False
75
78
  metadata:
76
79
  type: "any"
77
80
  condition:
@@ -21,7 +21,7 @@ from rasa.shared.providers._ssl_verification_utils import (
21
21
  ensure_ssl_certificates_for_litellm_non_openai_based_clients,
22
22
  ensure_ssl_certificates_for_litellm_openai_based_clients,
23
23
  )
24
- from rasa.shared.providers.llm.llm_response import LLMResponse, LLMUsage
24
+ from rasa.shared.providers.llm.llm_response import LLMResponse, LLMToolCall, LLMUsage
25
25
  from rasa.shared.utils.io import resolve_environment_variables, suppress_logs
26
26
 
27
27
  structlogger = structlog.get_logger()
@@ -126,7 +126,9 @@ class _BaseLiteLLMClient:
126
126
  raise ProviderClientValidationError(event_info)
127
127
 
128
128
  @suppress_logs(log_level=logging.WARNING)
129
- def completion(self, messages: Union[List[dict], List[str], str]) -> LLMResponse:
129
+ def completion(
130
+ self, messages: Union[List[dict], List[str], str], **kwargs: Any
131
+ ) -> LLMResponse:
130
132
  """Synchronously generate completions for given list of messages.
131
133
 
132
134
  Args:
@@ -138,6 +140,7 @@ class _BaseLiteLLMClient:
138
140
  - a list of messages. Each message is a string and will be formatted
139
141
  as a user message.
140
142
  - a single message as a string which will be formatted as user message.
143
+ **kwargs: Additional parameters to pass to the completion call.
141
144
 
142
145
  Returns:
143
146
  List of message completions.
@@ -147,15 +150,19 @@ class _BaseLiteLLMClient:
147
150
  """
148
151
  try:
149
152
  formatted_messages = self._get_formatted_messages(messages)
150
- arguments = resolve_environment_variables(self._completion_fn_args)
151
- response = completion(messages=formatted_messages, **arguments)
153
+ arguments = cast(
154
+ Dict[str, Any], resolve_environment_variables(self._completion_fn_args)
155
+ )
156
+ response = completion(
157
+ messages=formatted_messages, **{**arguments, **kwargs}
158
+ )
152
159
  return self._format_response(response)
153
160
  except Exception as e:
154
- raise ProviderClientAPIException(e)
161
+ raise ProviderClientAPIException(e) from e
155
162
 
156
163
  @suppress_logs(log_level=logging.WARNING)
157
164
  async def acompletion(
158
- self, messages: Union[List[dict], List[str], str]
165
+ self, messages: Union[List[dict], List[str], str], **kwargs: Any
159
166
  ) -> LLMResponse:
160
167
  """Asynchronously generate completions for given list of messages.
161
168
 
@@ -168,6 +175,7 @@ class _BaseLiteLLMClient:
168
175
  - a list of messages. Each message is a string and will be formatted
169
176
  as a user message.
170
177
  - a single message as a string which will be formatted as user message.
178
+ **kwargs: Additional parameters to pass to the completion call.
171
179
 
172
180
  Returns:
173
181
  List of message completions.
@@ -177,8 +185,12 @@ class _BaseLiteLLMClient:
177
185
  """
178
186
  try:
179
187
  formatted_messages = self._get_formatted_messages(messages)
180
- arguments = resolve_environment_variables(self._completion_fn_args)
181
- response = await acompletion(messages=formatted_messages, **arguments)
188
+ arguments = cast(
189
+ Dict[str, Any], resolve_environment_variables(self._completion_fn_args)
190
+ )
191
+ response = await acompletion(
192
+ messages=formatted_messages, **{**arguments, **kwargs}
193
+ )
182
194
  return self._format_response(response)
183
195
  except Exception as e:
184
196
  message = ""
@@ -197,7 +209,7 @@ class _BaseLiteLLMClient:
197
209
  "In case you are getting OpenAI connection errors, such as missing "
198
210
  "API key, your configuration is incorrect."
199
211
  )
200
- raise ProviderClientAPIException(e, message)
212
+ raise ProviderClientAPIException(e, message) from e
201
213
 
202
214
  def _get_formatted_messages(
203
215
  self, messages: Union[List[dict], List[str], str]
@@ -246,12 +258,32 @@ class _BaseLiteLLMClient:
246
258
  else 0
247
259
  )
248
260
  formatted_response.usage = LLMUsage(prompt_tokens, completion_tokens)
261
+
262
+ # Extract tool calls from all choices
263
+ formatted_response.tool_calls = self._extract_tool_calls(response)
264
+
249
265
  structlogger.debug(
250
266
  "base_litellm_client.formatted_response",
251
267
  formatted_response=formatted_response.to_dict(),
252
268
  )
253
269
  return formatted_response
254
270
 
271
+ def _extract_tool_calls(self, response: Any) -> List[LLMToolCall]:
272
+ """Extract tool calls from response choices.
273
+
274
+ Args:
275
+ response: List of response choices from LiteLLM
276
+
277
+ Returns:
278
+ List of LLMToolCall objects, empty if no tool calls found
279
+ """
280
+ return [
281
+ LLMToolCall.from_litellm(tool_call)
282
+ for choice in response.choices
283
+ if choice.message.tool_calls
284
+ for tool_call in choice.message.tool_calls
285
+ ]
286
+
255
287
  def _format_text_completion_response(self, response: Any) -> LLMResponse:
256
288
  """Parses the LiteLLM text completion response to Rasa format."""
257
289
  formatted_response = LLMResponse(
@@ -122,7 +122,9 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
122
122
  raise ProviderClientAPIException(e)
123
123
 
124
124
  @suppress_logs(log_level=logging.WARNING)
125
- def completion(self, messages: Union[List[dict], List[str], str]) -> LLMResponse:
125
+ def completion(
126
+ self, messages: Union[List[dict], List[str], str], **kwargs: Any
127
+ ) -> LLMResponse:
126
128
  """
127
129
  Synchronously generate completions for given list of messages.
128
130
 
@@ -140,6 +142,7 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
140
142
  - a list of messages. Each message is a string and will be formatted
141
143
  as a user message.
142
144
  - a single message as a string which will be formatted as user message.
145
+ **kwargs: Additional parameters to pass to the completion call.
143
146
  Returns:
144
147
  List of message completions.
145
148
  Raises:
@@ -148,9 +151,9 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
148
151
  if not self._use_chat_completions_endpoint:
149
152
  return self._text_completion(messages)
150
153
  try:
151
- formatted_messages = self._format_messages(messages)
154
+ formatted_messages = self._get_formatted_messages(messages)
152
155
  response = self.router_client.completion(
153
- messages=formatted_messages, **self._completion_fn_args
156
+ messages=formatted_messages, **{**self._completion_fn_args, **kwargs}
154
157
  )
155
158
  return self._format_response(response)
156
159
  except Exception as e:
@@ -158,7 +161,7 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
158
161
 
159
162
  @suppress_logs(log_level=logging.WARNING)
160
163
  async def acompletion(
161
- self, messages: Union[List[dict], List[str], str]
164
+ self, messages: Union[List[dict], List[str], str], **kwargs: Any
162
165
  ) -> LLMResponse:
163
166
  """
164
167
  Asynchronously generate completions for given list of messages.
@@ -177,6 +180,7 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
177
180
  - a list of messages. Each message is a string and will be formatted
178
181
  as a user message.
179
182
  - a single message as a string which will be formatted as user message.
183
+ **kwargs: Additional parameters to pass to the completion call.
180
184
  Returns:
181
185
  List of message completions.
182
186
  Raises:
@@ -185,9 +189,9 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
185
189
  if not self._use_chat_completions_endpoint:
186
190
  return await self._atext_completion(messages)
187
191
  try:
188
- formatted_messages = self._format_messages(messages)
192
+ formatted_messages = self._get_formatted_messages(messages)
189
193
  response = await self.router_client.acompletion(
190
- messages=formatted_messages, **self._completion_fn_args
194
+ messages=formatted_messages, **{**self._completion_fn_args, **kwargs}
191
195
  )
192
196
  return self._format_response(response)
193
197
  except Exception as e:
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Dict, List, Protocol, Union, runtime_checkable
3
+ from typing import Any, Dict, List, Protocol, Union, runtime_checkable
4
4
 
5
5
  from rasa.shared.providers.llm.llm_response import LLMResponse
6
6
 
@@ -32,7 +32,9 @@ class LLMClient(Protocol):
32
32
  """
33
33
  ...
34
34
 
35
- def completion(self, messages: Union[List[dict], List[str], str]) -> LLMResponse:
35
+ def completion(
36
+ self, messages: Union[List[dict], List[str], str], **kwargs: Any
37
+ ) -> LLMResponse:
36
38
  """
37
39
  Synchronously generate completions for given list of messages.
38
40
 
@@ -48,13 +50,14 @@ class LLMClient(Protocol):
48
50
  - a list of messages. Each message is a string and will be formatted
49
51
  as a user message.
50
52
  - a single message as a string which will be formatted as user message.
53
+ **kwargs: Additional parameters to pass to the completion call.
51
54
  Returns:
52
55
  LLMResponse
53
56
  """
54
57
  ...
55
58
 
56
59
  async def acompletion(
57
- self, messages: Union[List[dict], List[str], str]
60
+ self, messages: Union[List[dict], List[str], str], **kwargs: Any
58
61
  ) -> LLMResponse:
59
62
  """
60
63
  Asynchronously generate completions for given list of messages.
@@ -71,6 +74,7 @@ class LLMClient(Protocol):
71
74
  - a list of messages. Each message is a string and will be formatted
72
75
  as a user message.
73
76
  - a single message as a string which will be formatted as user message.
77
+ **kwargs: Additional parameters to pass to the completion call.
74
78
  Returns:
75
79
  LLMResponse
76
80
  """
@@ -1,9 +1,15 @@
1
1
  import functools
2
+ import json
2
3
  import time
3
4
  from dataclasses import asdict, dataclass, field
4
5
  from typing import Any, Awaitable, Callable, Dict, List, Optional, Text, Union
5
6
 
6
7
  import structlog
8
+ from litellm.utils import ChatCompletionMessageToolCall
9
+ from pydantic import BaseModel
10
+
11
+ from rasa.shared.constants import KEY_TOOL_CALLS
12
+ from rasa.shared.exceptions import LLMToolResponseDecodeError
7
13
 
8
14
  structlogger = structlog.get_logger()
9
15
 
@@ -38,6 +44,53 @@ class LLMUsage:
38
44
  return asdict(self)
39
45
 
40
46
 
47
+ class LLMToolCall(BaseModel):
48
+ """A class representing a response from an LLM tool call."""
49
+
50
+ id: str
51
+ """The ID of the tool call."""
52
+
53
+ tool_name: str
54
+ """The name of the tool that was called."""
55
+
56
+ tool_args: Dict[str, Any]
57
+ """The arguments passed to the tool call."""
58
+
59
+ type: str = "function"
60
+ """The type of the tool call."""
61
+
62
+ @classmethod
63
+ def from_dict(cls, data: Dict[Text, Any]) -> "LLMToolCall":
64
+ """Creates an LLMToolResponse from a dictionary."""
65
+ return cls(**data)
66
+
67
+ @classmethod
68
+ def from_litellm(cls, data: ChatCompletionMessageToolCall) -> "LLMToolCall":
69
+ """Creates an LLMToolResponse from a dictionary."""
70
+ try:
71
+ tool_args = json.loads(data.function.arguments)
72
+ except json.JSONDecodeError as e:
73
+ structlogger.error(
74
+ "llm_response.litellm_tool_call.invalid_arguments",
75
+ tool_name=data.function.name,
76
+ tool_call=data.function.arguments,
77
+ )
78
+ raise LLMToolResponseDecodeError(
79
+ original_exception=e,
80
+ message=(
81
+ f"Invalid arguments for tool call - `{data.function.name}`: "
82
+ f"`{data.function.arguments}`"
83
+ ),
84
+ ) from e
85
+
86
+ return cls(
87
+ id=data.id,
88
+ tool_name=data.function.name,
89
+ tool_args=tool_args,
90
+ type=data.type,
91
+ )
92
+
93
+
41
94
  @dataclass
42
95
  class LLMResponse:
43
96
  id: str
@@ -62,12 +115,22 @@ class LLMResponse:
62
115
  latency: Optional[float] = None
63
116
  """Optional field to store the latency of the LLM API call."""
64
117
 
118
+ tool_calls: Optional[List[LLMToolCall]] = None
119
+ """The list of tool calls the model generated for the input prompt."""
120
+
65
121
  @classmethod
66
122
  def from_dict(cls, data: Dict[Text, Any]) -> "LLMResponse":
67
123
  """Creates an LLMResponse from a dictionary."""
68
124
  usage_data = data.get("usage", {})
69
125
  usage_obj = LLMUsage.from_dict(usage_data) if usage_data else None
70
126
 
127
+ tool_calls_data = data.get(KEY_TOOL_CALLS, [])
128
+ tool_calls_obj = (
129
+ [LLMToolCall.from_dict(tool) for tool in tool_calls_data]
130
+ if tool_calls_data
131
+ else None
132
+ )
133
+
71
134
  return cls(
72
135
  id=data["id"],
73
136
  choices=data["choices"],
@@ -76,6 +139,7 @@ class LLMResponse:
76
139
  usage=usage_obj,
77
140
  additional_info=data.get("additional_info"),
78
141
  latency=data.get("latency"),
142
+ tool_calls=tool_calls_obj,
79
143
  )
80
144
 
81
145
  @classmethod
@@ -92,6 +156,8 @@ class LLMResponse:
92
156
  result = asdict(self)
93
157
  if self.usage:
94
158
  result["usage"] = self.usage.to_dict()
159
+ if self.tool_calls:
160
+ result[KEY_TOOL_CALLS] = [tool.model_dump() for tool in self.tool_calls]
95
161
  return result
96
162
 
97
163
 
@@ -237,7 +237,7 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
237
237
  raise ProviderClientAPIException(e)
238
238
 
239
239
  async def acompletion(
240
- self, messages: Union[List[dict], List[str], str]
240
+ self, messages: Union[List[dict], List[str], str], **kwargs: Any
241
241
  ) -> LLMResponse:
242
242
  """Asynchronous completion of the model with the given messages.
243
243
 
@@ -255,15 +255,18 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
255
255
  - a list of messages. Each message is a string and will be formatted
256
256
  as a user message.
257
257
  - a single message as a string which will be formatted as user message.
258
+ **kwargs: Additional parameters to pass to the completion call.
258
259
 
259
260
  Returns:
260
261
  The completion response.
261
262
  """
262
263
  if self._use_chat_completions_endpoint:
263
- return await super().acompletion(messages)
264
+ return await super().acompletion(messages, **kwargs)
264
265
  return await self._atext_completion(messages)
265
266
 
266
- def completion(self, messages: Union[List[dict], List[str], str]) -> LLMResponse:
267
+ def completion(
268
+ self, messages: Union[List[dict], List[str], str], **kwargs: Any
269
+ ) -> LLMResponse:
267
270
  """Completion of the model with the given messages.
268
271
 
269
272
  Method overrides the base class method to call the appropriate
@@ -273,12 +276,13 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
273
276
 
274
277
  Args:
275
278
  messages: The messages to be used for completion.
279
+ **kwargs: Additional parameters to pass to the completion call.
276
280
 
277
281
  Returns:
278
282
  The completion response.
279
283
  """
280
284
  if self._use_chat_completions_endpoint:
281
- return super().completion(messages)
285
+ return super().completion(messages, **kwargs)
282
286
  return self._text_completion(messages)
283
287
 
284
288
  @staticmethod