rasa-pro 3.11.4__py3-none-any.whl → 3.12.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.
- README.md +10 -13
- rasa/__main__.py +7 -7
- rasa/anonymization/anonymisation_rule_yaml_reader.py +1 -1
- rasa/anonymization/anonymization_pipeline.py +3 -3
- rasa/anonymization/anonymization_rule_executor.py +17 -11
- rasa/anonymization/anonymization_rule_orchestrator.py +2 -3
- rasa/cli/arguments/data.py +2 -2
- rasa/cli/arguments/default_arguments.py +1 -1
- rasa/cli/arguments/evaluate.py +2 -1
- rasa/cli/arguments/interactive.py +1 -1
- rasa/cli/arguments/run.py +1 -1
- rasa/cli/arguments/test.py +7 -5
- rasa/cli/arguments/train.py +3 -3
- rasa/cli/arguments/visualize.py +2 -2
- rasa/cli/arguments/x.py +1 -0
- rasa/cli/data.py +20 -3
- rasa/cli/dialogue_understanding_test.py +386 -0
- rasa/cli/evaluate.py +1 -1
- rasa/cli/export.py +6 -6
- rasa/cli/inspect.py +20 -1
- rasa/cli/interactive.py +4 -5
- rasa/cli/llm_fine_tuning.py +51 -16
- rasa/cli/markers.py +1 -2
- rasa/cli/project_templates/calm/actions/add_contact.py +1 -1
- rasa/cli/project_templates/calm/config.yml +2 -2
- rasa/cli/project_templates/calm/domain/list_contacts.yml +1 -2
- rasa/cli/project_templates/calm/domain/remove_contact.yml +1 -2
- rasa/cli/project_templates/calm/domain/shared.yml +1 -4
- rasa/cli/project_templates/calm/endpoints.yml +2 -2
- rasa/cli/project_templates/tutorial/actions/actions.py +3 -2
- rasa/cli/shell.py +5 -6
- rasa/cli/studio/download.py +1 -2
- rasa/cli/studio/studio.py +2 -3
- rasa/cli/studio/train.py +0 -1
- rasa/cli/telemetry.py +2 -2
- rasa/cli/test.py +11 -11
- rasa/cli/train.py +3 -0
- rasa/cli/utils.py +25 -5
- rasa/constants.py +0 -1
- rasa/core/__init__.py +0 -1
- rasa/core/actions/action.py +137 -208
- rasa/core/actions/action_handle_digressions.py +164 -0
- rasa/core/actions/action_hangup.py +1 -1
- rasa/core/actions/action_repeat_bot_messages.py +2 -2
- rasa/core/actions/action_run_slot_rejections.py +18 -6
- rasa/core/actions/action_trigger_chitchat.py +1 -1
- rasa/core/actions/action_trigger_flow.py +5 -5
- rasa/core/actions/action_trigger_search.py +1 -1
- rasa/core/actions/custom_action_executor.py +1 -1
- rasa/core/actions/direct_custom_actions_executor.py +1 -0
- rasa/core/actions/forms.py +22 -15
- rasa/core/actions/http_custom_action_executor.py +8 -1
- rasa/core/actions/loops.py +3 -3
- rasa/core/actions/two_stage_fallback.py +13 -13
- rasa/core/auth_retry_tracker_store.py +1 -2
- rasa/core/brokers/broker.py +2 -1
- rasa/core/brokers/file.py +1 -1
- rasa/core/brokers/kafka.py +8 -8
- rasa/core/brokers/pika.py +8 -9
- rasa/core/brokers/sql.py +4 -3
- rasa/core/channels/__init__.py +7 -0
- rasa/core/channels/botframework.py +2 -2
- rasa/core/channels/callback.py +4 -4
- rasa/core/channels/channel.py +11 -11
- rasa/core/channels/console.py +0 -1
- rasa/core/channels/development_inspector.py +80 -24
- rasa/core/channels/facebook.py +5 -5
- rasa/core/channels/hangouts.py +7 -8
- rasa/core/channels/inspector/dist/assets/Tableau10-1b767f5e.js +1 -0
- rasa/core/channels/inspector/dist/assets/arc-9f1365dc.js +1 -0
- rasa/core/channels/inspector/dist/assets/blockDiagram-38ab4fdb-e0f81b12.js +118 -0
- rasa/core/channels/inspector/dist/assets/c4Diagram-3d4e48cf-9deaee1c.js +10 -0
- rasa/core/channels/inspector/dist/assets/channel-44956714.js +1 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-70f12bd4-20450a96.js +2 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-v2-f2320105-749d2abf.js +2 -0
- rasa/core/channels/inspector/dist/assets/clone-a9475142.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-62fc7601-89c73b31.js → createText-2e5e7dd3-bef0b38c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/edges-e0da2a9e-943801a7.js +4 -0
- rasa/core/channels/inspector/dist/assets/{erDiagram-9d236eb7-907e0440.js → erDiagram-9861fffd-d523a948.js} +4 -4
- rasa/core/channels/inspector/dist/assets/flowDb-956e92f1-54e4cf19.js +10 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-66a62f08-48bfbbe8.js +4 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-43fa749a.js +1 -0
- rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-4a651766-17c30827.js +139 -0
- rasa/core/channels/inspector/dist/assets/ganttDiagram-c361ad54-43086f2d.js +257 -0
- rasa/core/channels/inspector/dist/assets/gitGraphDiagram-72cf32ee-5c8b693e.js +70 -0
- rasa/core/channels/inspector/dist/assets/graph-41a90d26.js +1 -0
- rasa/core/channels/inspector/dist/assets/index-3862675e-b43eeae9.js +1 -0
- rasa/core/channels/inspector/dist/assets/{index-e793d777.js → index-e8affe45.js} +201 -196
- rasa/core/channels/inspector/dist/assets/{infoDiagram-736b4530-8ceba4db.js → infoDiagram-f8f76790-0b20676b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-df861f2b-960d3809.js → journeyDiagram-49397b02-39bce7b5.js} +4 -4
- rasa/core/channels/inspector/dist/assets/katex-498eb57e.js +261 -0
- rasa/core/channels/inspector/dist/assets/layout-dc8eeea4.js +1 -0
- rasa/core/channels/inspector/dist/assets/{line-eeccc4e2.js → line-c4d2e756.js} +1 -1
- rasa/core/channels/inspector/dist/assets/linear-86f6f2d9.js +1 -0
- rasa/core/channels/inspector/dist/assets/mindmap-definition-fc14e90a-4216f771.js +312 -0
- rasa/core/channels/inspector/dist/assets/{pieDiagram-dbbf0591-dc9b5e1b.js → pieDiagram-8a3498a8-1a0cfa96.js} +7 -7
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-4d7f4fd6-a08cba6d.js → quadrantDiagram-120e2f19-f91e67cf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-6fc4c22a-87242b9e.js → requirementDiagram-deff3bca-d4046bed.js} +2 -2
- rasa/core/channels/inspector/dist/assets/sankeyDiagram-04a897e0-2cf6d1d7.js +8 -0
- rasa/core/channels/inspector/dist/assets/sequenceDiagram-704730f1-751ac4f5.js +122 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-587899a1-f734f4d4.js +1 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-v2-d93cdb3a-91c65710.js +1 -0
- rasa/core/channels/inspector/dist/assets/{styles-9c745c82-cef936a6.js → styles-6aaf32cf-e0cff7be.js} +1 -1
- rasa/core/channels/inspector/dist/assets/styles-9a916d00-c8029e5d.js +160 -0
- rasa/core/channels/inspector/dist/assets/styles-c10674c1-114f312a.js +116 -0
- rasa/core/channels/inspector/dist/assets/svgDrawCommon-08f97a94-b7b9dc00.js +1 -0
- rasa/core/channels/inspector/dist/assets/{timeline-definition-5b62e21b-0d39bdb2.js → timeline-definition-85554ec2-9536d189.js} +3 -3
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-2b33534f-a03fa445.js → xychartDiagram-e933f94c-bf3b0f36.js} +3 -3
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +11 -3
- rasa/core/channels/inspector/src/App.tsx +15 -2
- rasa/core/channels/inspector/src/components/RasaLogo.tsx +31 -0
- rasa/core/channels/inspector/src/components/RecruitmentPanel.tsx +68 -0
- rasa/core/channels/inspector/src/components/Welcome.tsx +19 -13
- rasa/core/channels/inspector/yarn.lock +94 -99
- rasa/core/channels/mattermost.py +4 -4
- rasa/core/channels/rasa_chat.py +4 -4
- rasa/core/channels/rest.py +11 -12
- rasa/core/channels/rocketchat.py +4 -3
- rasa/core/channels/slack.py +6 -5
- rasa/core/channels/socketio.py +8 -28
- rasa/core/channels/studio_chat.py +212 -0
- rasa/core/channels/telegram.py +105 -55
- rasa/core/channels/twilio.py +3 -3
- rasa/core/channels/vier_cvg.py +2 -2
- rasa/core/channels/voice_ready/audiocodes.py +51 -32
- rasa/core/channels/voice_ready/jambonz.py +5 -5
- rasa/core/channels/voice_ready/jambonz_protocol.py +3 -4
- rasa/core/channels/voice_ready/twilio_voice.py +9 -8
- rasa/core/channels/voice_ready/utils.py +2 -2
- rasa/core/channels/voice_stream/asr/asr_engine.py +12 -6
- rasa/core/channels/voice_stream/asr/asr_event.py +5 -0
- rasa/core/channels/voice_stream/asr/azure.py +16 -3
- rasa/core/channels/voice_stream/asr/deepgram.py +76 -19
- rasa/core/channels/voice_stream/audiocodes.py +292 -0
- rasa/core/channels/voice_stream/browser_audio.py +14 -7
- rasa/core/channels/voice_stream/call_state.py +6 -2
- rasa/core/channels/voice_stream/genesys.py +320 -0
- rasa/core/channels/voice_stream/tts/azure.py +13 -5
- rasa/core/channels/voice_stream/tts/cartesia.py +34 -14
- rasa/core/channels/voice_stream/tts/tts_cache.py +3 -2
- rasa/core/channels/voice_stream/tts/tts_engine.py +1 -1
- rasa/core/channels/voice_stream/twilio_media_streams.py +12 -8
- rasa/core/channels/voice_stream/util.py +1 -1
- rasa/core/channels/voice_stream/voice_channel.py +100 -56
- rasa/core/channels/webexteams.py +3 -4
- rasa/core/constants.py +2 -0
- rasa/core/evaluation/marker.py +7 -6
- rasa/core/evaluation/marker_base.py +15 -16
- rasa/core/evaluation/marker_stats.py +3 -4
- rasa/core/evaluation/marker_tracker_loader.py +5 -4
- rasa/core/exporter.py +4 -4
- rasa/core/featurizers/precomputation.py +8 -8
- rasa/core/featurizers/single_state_featurizer.py +7 -7
- rasa/core/featurizers/tracker_featurizers.py +13 -13
- rasa/core/http_interpreter.py +3 -4
- rasa/core/information_retrieval/__init__.py +1 -1
- rasa/core/information_retrieval/faiss.py +4 -4
- rasa/core/information_retrieval/information_retrieval.py +2 -2
- rasa/core/information_retrieval/milvus.py +3 -3
- rasa/core/information_retrieval/qdrant.py +3 -3
- rasa/core/jobs.py +1 -0
- rasa/core/lock.py +2 -3
- rasa/core/lock_store.py +3 -3
- rasa/core/migrate.py +12 -9
- rasa/core/nlg/__init__.py +1 -1
- rasa/core/nlg/callback.py +2 -3
- rasa/core/nlg/contextual_response_rephraser.py +82 -14
- rasa/core/nlg/generator.py +85 -17
- rasa/core/nlg/interpolator.py +4 -3
- rasa/core/nlg/response.py +9 -7
- rasa/core/nlg/summarize.py +1 -0
- rasa/core/nlg/translate.py +55 -0
- rasa/core/persistor.py +3 -3
- rasa/core/policies/ensemble.py +10 -9
- rasa/core/policies/enterprise_search_policy.py +87 -21
- rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2 +1 -1
- rasa/core/policies/flow_policy.py +13 -14
- rasa/core/policies/flows/flow_executor.py +85 -55
- rasa/core/policies/intentless_policy.py +6 -7
- rasa/core/policies/memoization.py +22 -20
- rasa/core/policies/policy.py +24 -22
- rasa/core/policies/rule_policy.py +37 -36
- rasa/core/policies/ted_policy.py +87 -85
- rasa/core/policies/unexpected_intent_policy.py +77 -75
- rasa/core/processor.py +167 -74
- rasa/core/run.py +5 -4
- rasa/core/secrets_manager/endpoints.py +2 -3
- rasa/core/secrets_manager/factory.py +2 -3
- rasa/core/secrets_manager/secret_manager.py +2 -3
- rasa/core/secrets_manager/vault.py +2 -2
- rasa/core/test.py +30 -30
- rasa/core/tracker_store.py +138 -49
- rasa/core/train.py +1 -1
- rasa/core/training/__init__.py +2 -2
- rasa/core/training/converters/responses_prefix_converter.py +1 -2
- rasa/core/training/interactive.py +13 -13
- rasa/core/training/story_conflict.py +4 -5
- rasa/core/training/training.py +3 -5
- rasa/core/utils.py +5 -5
- rasa/core/visualize.py +1 -1
- rasa/dialogue_understanding/coexistence/intent_based_router.py +2 -2
- rasa/dialogue_understanding/coexistence/llm_based_router.py +5 -5
- rasa/dialogue_understanding/commands/__init__.py +22 -22
- rasa/dialogue_understanding/commands/can_not_handle_command.py +38 -1
- rasa/dialogue_understanding/commands/cancel_flow_command.py +96 -9
- rasa/dialogue_understanding/commands/change_flow_command.py +36 -2
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +36 -4
- rasa/dialogue_understanding/commands/clarify_command.py +46 -4
- rasa/dialogue_understanding/commands/command.py +3 -2
- rasa/dialogue_understanding/commands/command_syntax_manager.py +55 -0
- rasa/dialogue_understanding/commands/correct_slots_command.py +14 -5
- rasa/dialogue_understanding/commands/error_command.py +1 -1
- rasa/dialogue_understanding/commands/free_form_answer_command.py +2 -1
- rasa/dialogue_understanding/commands/handle_code_change_command.py +2 -2
- rasa/dialogue_understanding/commands/handle_digressions_command.py +144 -0
- rasa/dialogue_understanding/commands/human_handoff_command.py +34 -4
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +36 -4
- rasa/dialogue_understanding/commands/noop_command.py +2 -1
- rasa/dialogue_understanding/commands/prompt_command.py +94 -0
- rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +34 -4
- rasa/dialogue_understanding/commands/restart_command.py +2 -5
- rasa/dialogue_understanding/commands/session_end_command.py +3 -5
- rasa/dialogue_understanding/commands/session_start_command.py +3 -5
- rasa/dialogue_understanding/commands/set_slot_command.py +55 -16
- rasa/dialogue_understanding/commands/skip_question_command.py +34 -4
- rasa/dialogue_understanding/commands/start_flow_command.py +78 -2
- rasa/dialogue_understanding/commands/user_silence_command.py +3 -5
- rasa/dialogue_understanding/commands/utils.py +126 -43
- rasa/dialogue_understanding/constants.py +2 -0
- rasa/dialogue_understanding/generator/__init__.py +2 -0
- rasa/dialogue_understanding/generator/command_generator.py +120 -79
- rasa/dialogue_understanding/generator/command_parser.py +245 -0
- rasa/dialogue_understanding/generator/constants.py +12 -4
- rasa/dialogue_understanding/generator/flow_retrieval.py +7 -7
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +187 -59
- rasa/dialogue_understanding/generator/llm_command_generator.py +6 -3
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +106 -110
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +53 -11
- rasa/dialogue_understanding/generator/prompt_templates/__init__.py +0 -0
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +58 -0
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +57 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +574 -0
- rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +41 -386
- rasa/dialogue_understanding/generator/utils.py +76 -0
- rasa/dialogue_understanding/patterns/cancel.py +2 -1
- rasa/dialogue_understanding/patterns/cannot_handle.py +1 -0
- rasa/dialogue_understanding/patterns/chitchat.py +1 -1
- rasa/dialogue_understanding/patterns/clarify.py +2 -1
- rasa/dialogue_understanding/patterns/code_change.py +2 -0
- rasa/dialogue_understanding/patterns/collect_information.py +7 -4
- rasa/dialogue_understanding/patterns/completed.py +1 -1
- rasa/dialogue_understanding/patterns/continue_interrupted.py +1 -1
- rasa/dialogue_understanding/patterns/correction.py +17 -3
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +78 -2
- rasa/dialogue_understanding/patterns/handle_digressions.py +81 -0
- rasa/dialogue_understanding/patterns/human_handoff.py +1 -1
- rasa/dialogue_understanding/patterns/internal_error.py +1 -0
- rasa/dialogue_understanding/patterns/search.py +1 -1
- rasa/dialogue_understanding/patterns/session_start.py +1 -1
- rasa/dialogue_understanding/patterns/skip_question.py +1 -0
- rasa/dialogue_understanding/patterns/user_silence.py +1 -1
- rasa/dialogue_understanding/patterns/validate_slot.py +65 -0
- rasa/dialogue_understanding/processor/command_processor.py +193 -43
- rasa/dialogue_understanding/processor/command_processor_component.py +1 -1
- rasa/dialogue_understanding/stack/dialogue_stack.py +4 -3
- rasa/dialogue_understanding/stack/frames/__init__.py +2 -2
- rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +4 -1
- rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +2 -3
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +5 -2
- rasa/dialogue_understanding/stack/frames/search_frame.py +4 -1
- rasa/dialogue_understanding/stack/utils.py +56 -10
- rasa/dialogue_understanding/utils.py +164 -0
- rasa/dialogue_understanding_test/README.md +429 -0
- rasa/dialogue_understanding_test/__init__.py +0 -0
- rasa/dialogue_understanding_test/command_comparison.py +60 -0
- rasa/dialogue_understanding_test/command_metric_calculation.py +122 -0
- rasa/dialogue_understanding_test/constants.py +22 -0
- rasa/dialogue_understanding_test/du_test_case.py +448 -0
- rasa/dialogue_understanding_test/du_test_result.py +390 -0
- rasa/dialogue_understanding_test/du_test_runner.py +322 -0
- rasa/dialogue_understanding_test/du_test_schema.yml +161 -0
- rasa/dialogue_understanding_test/io.py +443 -0
- rasa/dialogue_understanding_test/test_case_simulation/__init__.py +0 -0
- rasa/dialogue_understanding_test/test_case_simulation/exception.py +28 -0
- rasa/dialogue_understanding_test/test_case_simulation/test_case_tracker_simulator.py +336 -0
- rasa/dialogue_understanding_test/utils.py +70 -0
- rasa/dialogue_understanding_test/validation.py +77 -0
- rasa/e2e_test/aggregate_test_stats_calculator.py +1 -1
- rasa/e2e_test/assertions.py +202 -175
- rasa/e2e_test/assertions_schema.yml +6 -0
- rasa/e2e_test/constants.py +16 -1
- rasa/e2e_test/e2e_config.py +102 -41
- rasa/e2e_test/e2e_config_schema.yml +28 -10
- rasa/e2e_test/e2e_test_case.py +5 -5
- rasa/e2e_test/e2e_test_converter.py +2 -3
- rasa/e2e_test/e2e_test_coverage_report.py +6 -6
- rasa/e2e_test/e2e_test_result.py +1 -1
- rasa/e2e_test/e2e_test_runner.py +143 -38
- rasa/e2e_test/llm_judge_prompts/answer_relevance_prompt_template.jinja2 +93 -0
- rasa/e2e_test/llm_judge_prompts/groundedness_prompt_template.jinja2 +169 -0
- rasa/e2e_test/stub_custom_action.py +1 -1
- rasa/e2e_test/utils/generative_assertions.py +243 -0
- rasa/e2e_test/utils/io.py +123 -93
- rasa/e2e_test/utils/validation.py +101 -3
- rasa/engine/caching.py +5 -7
- rasa/engine/constants.py +1 -1
- rasa/engine/graph.py +3 -2
- rasa/engine/language.py +182 -0
- rasa/engine/recipes/config_files/default_config.yml +4 -0
- rasa/engine/recipes/default_components.py +13 -15
- rasa/engine/recipes/default_recipe.py +65 -49
- rasa/engine/recipes/graph_recipe.py +10 -7
- rasa/engine/recipes/recipe.py +2 -2
- rasa/engine/runner/dask.py +2 -2
- rasa/engine/runner/interface.py +1 -0
- rasa/engine/storage/local_model_storage.py +6 -4
- rasa/engine/storage/resource.py +2 -1
- rasa/engine/storage/storage.py +8 -3
- rasa/engine/training/components.py +2 -1
- rasa/engine/training/fingerprinting.py +4 -2
- rasa/engine/training/graph_trainer.py +4 -4
- rasa/engine/training/hooks.py +2 -2
- rasa/engine/validation.py +36 -33
- rasa/exceptions.py +3 -2
- rasa/graph_components/converters/nlu_message_converter.py +3 -3
- rasa/graph_components/providers/domain_for_core_training_provider.py +3 -3
- rasa/graph_components/providers/domain_provider.py +3 -2
- rasa/graph_components/providers/flows_provider.py +2 -3
- rasa/graph_components/providers/forms_provider.py +4 -4
- rasa/graph_components/providers/nlu_training_data_provider.py +5 -3
- rasa/graph_components/providers/responses_provider.py +4 -4
- rasa/graph_components/providers/rule_only_provider.py +3 -2
- rasa/graph_components/providers/story_graph_provider.py +8 -8
- rasa/graph_components/providers/training_tracker_provider.py +3 -2
- rasa/graph_components/validators/default_recipe_validator.py +16 -16
- rasa/graph_components/validators/finetuning_validator.py +10 -8
- rasa/hooks.py +19 -14
- rasa/jupyter.py +2 -2
- rasa/llm_fine_tuning/annotation_module.py +4 -4
- rasa/llm_fine_tuning/conversations.py +5 -33
- rasa/llm_fine_tuning/llm_data_preparation_module.py +6 -4
- rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +4 -4
- rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +18 -13
- rasa/llm_fine_tuning/paraphrasing_module.py +6 -2
- rasa/llm_fine_tuning/storage.py +3 -3
- rasa/llm_fine_tuning/train_test_split_module.py +27 -27
- rasa/llm_fine_tuning/utils.py +7 -0
- rasa/markers/marker.py +2 -3
- rasa/markers/marker_base.py +1 -2
- rasa/markers/upload.py +2 -2
- rasa/markers/validate.py +2 -3
- rasa/model.py +3 -5
- rasa/model_manager/config.py +1 -1
- rasa/model_manager/model_api.py +5 -4
- rasa/model_manager/runner_service.py +13 -10
- rasa/model_manager/socket_bridge.py +15 -9
- rasa/model_manager/studio_jwt_auth.py +1 -0
- rasa/model_manager/trainer_service.py +9 -7
- rasa/model_manager/utils.py +1 -1
- rasa/model_manager/warm_rasa_process.py +14 -9
- rasa/model_service.py +5 -6
- rasa/model_testing.py +13 -15
- rasa/model_training.py +29 -29
- rasa/nlu/classifiers/diet_classifier.py +72 -73
- rasa/nlu/classifiers/fallback_classifier.py +9 -8
- rasa/nlu/classifiers/keyword_intent_classifier.py +7 -6
- rasa/nlu/classifiers/logistic_regression_classifier.py +3 -3
- rasa/nlu/classifiers/mitie_intent_classifier.py +5 -4
- rasa/nlu/classifiers/regex_message_handler.py +3 -2
- rasa/nlu/classifiers/sklearn_intent_classifier.py +2 -2
- rasa/nlu/convert.py +2 -2
- rasa/nlu/emulators/dialogflow.py +3 -3
- rasa/nlu/emulators/luis.py +5 -5
- rasa/nlu/emulators/no_emulator.py +1 -0
- rasa/nlu/emulators/wit.py +4 -4
- rasa/nlu/extractors/crf_entity_extractor.py +11 -11
- rasa/nlu/extractors/duckling_entity_extractor.py +7 -6
- rasa/nlu/extractors/entity_synonyms.py +10 -9
- rasa/nlu/extractors/extractor.py +16 -16
- rasa/nlu/extractors/mitie_entity_extractor.py +10 -9
- rasa/nlu/extractors/regex_entity_extractor.py +11 -10
- rasa/nlu/extractors/spacy_entity_extractor.py +2 -2
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +15 -14
- rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +2 -1
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +10 -9
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +9 -7
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +13 -12
- rasa/nlu/featurizers/featurizer.py +5 -4
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +6 -6
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -4
- rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +4 -4
- rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +2 -0
- rasa/nlu/model.py +0 -1
- rasa/nlu/selectors/response_selector.py +67 -68
- rasa/nlu/test.py +38 -38
- rasa/nlu/tokenizers/jieba_tokenizer.py +1 -2
- rasa/nlu/tokenizers/mitie_tokenizer.py +2 -2
- rasa/nlu/tokenizers/spacy_tokenizer.py +3 -3
- rasa/nlu/tokenizers/tokenizer.py +6 -7
- rasa/nlu/tokenizers/whitespace_tokenizer.py +1 -1
- rasa/nlu/utils/bilou_utils.py +7 -7
- rasa/nlu/utils/hugging_face/registry.py +22 -22
- rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +2 -1
- rasa/nlu/utils/mitie_utils.py +2 -1
- rasa/nlu/utils/pattern_utils.py +1 -1
- rasa/nlu/utils/spacy_utils.py +3 -3
- rasa/plugin.py +12 -1
- rasa/server.py +6 -3
- rasa/shared/constants.py +45 -18
- rasa/shared/core/command_payload_reader.py +15 -7
- rasa/shared/core/constants.py +34 -4
- rasa/shared/core/conversation.py +1 -2
- rasa/shared/core/domain.py +19 -20
- rasa/shared/core/events.py +60 -39
- rasa/shared/core/flows/__init__.py +0 -1
- rasa/shared/core/flows/constants.py +11 -0
- rasa/shared/core/flows/flow.py +107 -26
- rasa/shared/core/flows/flow_step.py +4 -3
- rasa/shared/core/flows/flow_step_links.py +1 -2
- rasa/shared/core/flows/flow_step_sequence.py +1 -1
- rasa/shared/core/flows/flows_list.py +3 -3
- rasa/shared/core/flows/flows_yaml_schema.json +69 -3
- rasa/shared/core/flows/nlu_trigger.py +1 -1
- rasa/shared/core/flows/steps/__init__.py +2 -2
- rasa/shared/core/flows/steps/action.py +1 -1
- rasa/shared/core/flows/steps/call.py +1 -1
- rasa/shared/core/flows/steps/collect.py +22 -40
- rasa/shared/core/flows/steps/internal.py +1 -1
- rasa/shared/core/flows/steps/link.py +1 -1
- rasa/shared/core/flows/steps/no_operation.py +2 -2
- rasa/shared/core/flows/steps/set_slots.py +1 -1
- rasa/shared/core/flows/utils.py +44 -4
- rasa/shared/core/flows/validation.py +4 -6
- rasa/shared/core/generator.py +20 -21
- rasa/shared/core/slot_mappings.py +360 -121
- rasa/shared/core/slots.py +163 -6
- rasa/shared/core/trackers.py +108 -33
- rasa/shared/core/training_data/loading.py +1 -1
- rasa/shared/core/training_data/story_reader/story_reader.py +3 -3
- rasa/shared/core/training_data/story_reader/story_step_builder.py +4 -4
- rasa/shared/core/training_data/story_reader/yaml_story_reader.py +29 -31
- rasa/shared/core/training_data/story_writer/yaml_story_writer.py +22 -24
- rasa/shared/core/training_data/structures.py +11 -12
- rasa/shared/core/training_data/visualization.py +10 -10
- rasa/shared/data.py +6 -6
- rasa/shared/engine/caching.py +0 -1
- rasa/shared/exceptions.py +2 -2
- rasa/shared/importers/importer.py +58 -2
- rasa/shared/importers/rasa.py +5 -6
- rasa/shared/importers/utils.py +1 -1
- rasa/shared/nlu/constants.py +9 -0
- rasa/shared/nlu/training_data/entities_parser.py +6 -6
- rasa/shared/nlu/training_data/features.py +3 -3
- rasa/shared/nlu/training_data/formats/__init__.py +1 -1
- rasa/shared/nlu/training_data/formats/dialogflow.py +4 -5
- rasa/shared/nlu/training_data/formats/luis.py +7 -8
- rasa/shared/nlu/training_data/formats/rasa.py +4 -5
- rasa/shared/nlu/training_data/formats/rasa_yaml.py +17 -16
- rasa/shared/nlu/training_data/formats/readerwriter.py +8 -11
- rasa/shared/nlu/training_data/formats/wit.py +3 -4
- rasa/shared/nlu/training_data/loading.py +4 -4
- rasa/shared/nlu/training_data/lookup_tables_parser.py +1 -1
- rasa/shared/nlu/training_data/message.py +13 -14
- rasa/shared/nlu/training_data/schemas/data_schema.py +1 -1
- rasa/shared/nlu/training_data/schemas/responses.yml +19 -11
- rasa/shared/nlu/training_data/synonyms_parser.py +3 -3
- rasa/shared/nlu/training_data/training_data.py +12 -13
- rasa/shared/nlu/training_data/util.py +11 -10
- rasa/shared/providers/_configs/azure_entra_id_config.py +541 -0
- rasa/shared/providers/_configs/azure_openai_client_config.py +150 -15
- rasa/shared/providers/_configs/client_config.py +3 -1
- rasa/shared/providers/_configs/default_litellm_client_config.py +9 -7
- rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +13 -11
- rasa/shared/providers/_configs/litellm_router_client_config.py +12 -10
- rasa/shared/providers/_configs/model_group_config.py +8 -5
- rasa/shared/providers/_configs/oauth_config.py +33 -0
- rasa/shared/providers/_configs/openai_client_config.py +14 -12
- rasa/shared/providers/_configs/rasa_llm_client_config.py +5 -3
- rasa/shared/providers/_configs/self_hosted_llm_client_config.py +12 -11
- rasa/shared/providers/_configs/utils.py +1 -0
- rasa/shared/providers/_ssl_verification_utils.py +5 -6
- rasa/shared/providers/_utils.py +5 -5
- rasa/shared/providers/constants.py +6 -0
- rasa/shared/providers/embedding/_base_litellm_embedding_client.py +1 -1
- rasa/shared/providers/embedding/azure_openai_embedding_client.py +32 -7
- rasa/shared/providers/embedding/embedding_client.py +1 -1
- rasa/shared/providers/embedding/litellm_router_embedding_client.py +5 -2
- rasa/shared/providers/llm/_base_litellm_client.py +43 -18
- rasa/shared/providers/llm/azure_openai_llm_client.py +90 -34
- rasa/shared/providers/llm/default_litellm_llm_client.py +4 -2
- rasa/shared/providers/llm/litellm_router_llm_client.py +32 -9
- rasa/shared/providers/llm/llm_client.py +24 -8
- rasa/shared/providers/llm/llm_response.py +61 -2
- rasa/shared/providers/llm/openai_llm_client.py +11 -5
- rasa/shared/providers/llm/rasa_llm_client.py +17 -14
- rasa/shared/providers/llm/self_hosted_llm_client.py +35 -15
- rasa/shared/providers/mappings.py +18 -19
- rasa/shared/providers/router/_base_litellm_router_client.py +48 -15
- rasa/shared/providers/router/router_client.py +3 -1
- rasa/shared/utils/cli.py +1 -1
- rasa/shared/utils/common.py +15 -1
- rasa/shared/utils/constants.py +3 -0
- rasa/shared/utils/health_check/embeddings_health_check_mixin.py +1 -1
- rasa/shared/utils/health_check/health_check.py +3 -3
- rasa/shared/utils/health_check/llm_health_check_mixin.py +1 -1
- rasa/shared/utils/io.py +1 -1
- rasa/shared/utils/llm.py +100 -18
- rasa/shared/utils/pykwalify_extensions.py +25 -1
- rasa/shared/utils/schemas/domain.yml +26 -1
- rasa/shared/utils/schemas/events.py +1 -1
- rasa/shared/utils/yaml.py +24 -20
- rasa/studio/auth.py +3 -3
- rasa/studio/config.py +1 -2
- rasa/studio/data_handler.py +3 -3
- rasa/studio/download.py +1 -1
- rasa/studio/results_logger.py +3 -3
- rasa/studio/upload.py +21 -5
- rasa/telemetry.py +127 -48
- rasa/tracing/config.py +5 -3
- rasa/tracing/constants.py +12 -0
- rasa/tracing/instrumentation/attribute_extractors.py +92 -14
- rasa/tracing/instrumentation/instrumentation.py +61 -5
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +1 -1
- rasa/tracing/instrumentation/metrics.py +52 -11
- rasa/tracing/metric_instrument_provider.py +54 -14
- rasa/utils/common.py +12 -24
- rasa/utils/endpoints.py +1 -1
- rasa/utils/io.py +7 -7
- rasa/utils/licensing.py +3 -4
- rasa/utils/log_utils.py +7 -6
- rasa/utils/ml_utils.py +1 -0
- rasa/utils/plotting.py +3 -3
- rasa/utils/sanic_error_handler.py +1 -1
- rasa/utils/tensorflow/callback.py +2 -2
- rasa/utils/tensorflow/crf.py +2 -2
- rasa/utils/tensorflow/data_generator.py +5 -5
- rasa/utils/tensorflow/environment.py +3 -3
- rasa/utils/tensorflow/feature_array.py +2 -3
- rasa/utils/tensorflow/layers.py +18 -12
- rasa/utils/tensorflow/layers_utils.py +2 -1
- rasa/utils/tensorflow/metrics.py +2 -2
- rasa/utils/tensorflow/model_data.py +7 -7
- rasa/utils/tensorflow/model_data_utils.py +10 -9
- rasa/utils/tensorflow/models.py +31 -32
- rasa/utils/tensorflow/rasa_layers.py +20 -19
- rasa/utils/tensorflow/types.py +2 -1
- rasa/utils/train_utils.py +23 -21
- rasa/utils/url_tools.py +1 -1
- rasa/validator.py +594 -115
- rasa/version.py +1 -1
- {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/METADATA +23 -26
- rasa_pro-3.12.0.dist-info/RECORD +829 -0
- rasa/core/channels/inspector/dist/assets/arc-632a63ec.js +0 -1
- rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-081e0df4.js +0 -10
- rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-3df0afc2.js +0 -2
- rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-8c5ed31e.js +0 -2
- rasa/core/channels/inspector/dist/assets/edges-f2ad444c-4fc48c3e.js +0 -4
- rasa/core/channels/inspector/dist/assets/flowDb-1972c806-9ec53a3c.js +0 -6
- rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-41da787a.js +0 -4
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-8bea338b.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-ce370633.js +0 -139
- rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-90a36523.js +0 -266
- rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-41e1aa3f.js +0 -70
- rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-e6f2af62.js +0 -1
- rasa/core/channels/inspector/dist/assets/layout-498807d8.js +0 -1
- rasa/core/channels/inspector/dist/assets/linear-8a078617.js +0 -1
- rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-396d17dd.js +0 -109
- rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-53f6f391.js +0 -8
- rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-715c9c20.js +0 -122
- rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-2e8fb31f.js +0 -1
- rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-7e2d2aa0.js +0 -1
- rasa/core/channels/inspector/dist/assets/styles-080da4f6-4420cea6.js +0 -110
- rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-28676cf4.js +0 -159
- rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-151251e9.js +0 -1
- rasa_pro-3.11.4.dist-info/RECORD +0 -779
- /rasa/dialogue_understanding/generator/{single_step → prompt_templates}/command_prompt_template.jinja2 +0 -0
- {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/entry_points.txt +0 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Dict, List, Protocol, Union, runtime_checkable
|
|
2
4
|
|
|
3
5
|
from rasa.shared.providers.llm.llm_response import LLMResponse
|
|
4
6
|
|
|
@@ -11,7 +13,7 @@ class LLMClient(Protocol):
|
|
|
11
13
|
"""
|
|
12
14
|
|
|
13
15
|
@classmethod
|
|
14
|
-
def from_config(cls, config: dict) ->
|
|
16
|
+
def from_config(cls, config: dict) -> LLMClient:
|
|
15
17
|
"""
|
|
16
18
|
Initializes the llm client with the given configuration.
|
|
17
19
|
|
|
@@ -30,7 +32,7 @@ class LLMClient(Protocol):
|
|
|
30
32
|
"""
|
|
31
33
|
...
|
|
32
34
|
|
|
33
|
-
def completion(self, messages: Union[List[str], str]) -> LLMResponse:
|
|
35
|
+
def completion(self, messages: Union[List[dict], List[str], str]) -> LLMResponse:
|
|
34
36
|
"""
|
|
35
37
|
Synchronously generate completions for given list of messages.
|
|
36
38
|
|
|
@@ -38,14 +40,22 @@ class LLMClient(Protocol):
|
|
|
38
40
|
strings) and return a list of completions (as strings).
|
|
39
41
|
|
|
40
42
|
Args:
|
|
41
|
-
messages:
|
|
42
|
-
|
|
43
|
+
messages: The message can be,
|
|
44
|
+
- a list of preformatted messages. Each message should be a dictionary
|
|
45
|
+
with the following keys:
|
|
46
|
+
- content: The message content.
|
|
47
|
+
- role: The role of the message (e.g. user or system).
|
|
48
|
+
- a list of messages. Each message is a string and will be formatted
|
|
49
|
+
as a user message.
|
|
50
|
+
- a single message as a string which will be formatted as user message.
|
|
43
51
|
Returns:
|
|
44
52
|
LLMResponse
|
|
45
53
|
"""
|
|
46
54
|
...
|
|
47
55
|
|
|
48
|
-
async def acompletion(
|
|
56
|
+
async def acompletion(
|
|
57
|
+
self, messages: Union[List[dict], List[str], str]
|
|
58
|
+
) -> LLMResponse:
|
|
49
59
|
"""
|
|
50
60
|
Asynchronously generate completions for given list of messages.
|
|
51
61
|
|
|
@@ -53,8 +63,14 @@ class LLMClient(Protocol):
|
|
|
53
63
|
strings) and return a list of completions (as strings).
|
|
54
64
|
|
|
55
65
|
Args:
|
|
56
|
-
messages:
|
|
57
|
-
|
|
66
|
+
messages: The message can be,
|
|
67
|
+
- a list of preformatted messages. Each message should be a dictionary
|
|
68
|
+
with the following keys:
|
|
69
|
+
- content: The message content.
|
|
70
|
+
- role: The role of the message (e.g. user or system).
|
|
71
|
+
- a list of messages. Each message is a string and will be formatted
|
|
72
|
+
as a user message.
|
|
73
|
+
- a single message as a string which will be formatted as user message.
|
|
58
74
|
Returns:
|
|
59
75
|
LLMResponse
|
|
60
76
|
"""
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import functools
|
|
2
|
+
import time
|
|
3
|
+
from dataclasses import asdict, dataclass, field
|
|
4
|
+
from typing import Any, Awaitable, Callable, Dict, List, Optional, Text, Union
|
|
5
|
+
|
|
6
|
+
import structlog
|
|
7
|
+
|
|
8
|
+
structlogger = structlog.get_logger()
|
|
3
9
|
|
|
4
10
|
|
|
5
11
|
@dataclass
|
|
@@ -16,6 +22,17 @@ class LLMUsage:
|
|
|
16
22
|
def __post_init__(self) -> None:
|
|
17
23
|
self.total_tokens = self.prompt_tokens + self.completion_tokens
|
|
18
24
|
|
|
25
|
+
@classmethod
|
|
26
|
+
def from_dict(cls, data: Dict[Text, Any]) -> "LLMUsage":
|
|
27
|
+
"""Creates an LLMUsage object from a dictionary.
|
|
28
|
+
If any keys are missing, they will default to zero
|
|
29
|
+
or whatever default you prefer.
|
|
30
|
+
"""
|
|
31
|
+
return cls(
|
|
32
|
+
prompt_tokens=data.get("prompt_tokens"),
|
|
33
|
+
completion_tokens=data.get("completion_tokens"),
|
|
34
|
+
)
|
|
35
|
+
|
|
19
36
|
def to_dict(self) -> dict:
|
|
20
37
|
"""Converts the LLMUsage dataclass instance into a dictionary."""
|
|
21
38
|
return asdict(self)
|
|
@@ -42,9 +59,51 @@ class LLMResponse:
|
|
|
42
59
|
"""Optional dictionary for storing additional information related to the
|
|
43
60
|
completion that may not be covered by other fields."""
|
|
44
61
|
|
|
62
|
+
latency: Optional[float] = None
|
|
63
|
+
"""Optional field to store the latency of the LLM API call."""
|
|
64
|
+
|
|
65
|
+
@classmethod
|
|
66
|
+
def from_dict(cls, data: Dict[Text, Any]) -> "LLMResponse":
|
|
67
|
+
"""Creates an LLMResponse from a dictionary."""
|
|
68
|
+
usage_data = data.get("usage", {})
|
|
69
|
+
usage_obj = LLMUsage.from_dict(usage_data) if usage_data else None
|
|
70
|
+
|
|
71
|
+
return cls(
|
|
72
|
+
id=data["id"],
|
|
73
|
+
choices=data["choices"],
|
|
74
|
+
created=data["created"],
|
|
75
|
+
model=data.get("model"),
|
|
76
|
+
usage=usage_obj,
|
|
77
|
+
additional_info=data.get("additional_info"),
|
|
78
|
+
latency=data.get("latency"),
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
@classmethod
|
|
82
|
+
def ensure_llm_response(cls, response: Union[str, "LLMResponse"]) -> "LLMResponse":
|
|
83
|
+
if isinstance(response, LLMResponse):
|
|
84
|
+
return response
|
|
85
|
+
|
|
86
|
+
structlogger.warn("llm_response.deprecated_response_type", response=response)
|
|
87
|
+
data = {"id": None, "choices": [response], "created": None}
|
|
88
|
+
return LLMResponse.from_dict(data)
|
|
89
|
+
|
|
45
90
|
def to_dict(self) -> dict:
|
|
46
91
|
"""Converts the LLMResponse dataclass instance into a dictionary."""
|
|
47
92
|
result = asdict(self)
|
|
48
93
|
if self.usage:
|
|
49
94
|
result["usage"] = self.usage.to_dict()
|
|
50
95
|
return result
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def measure_llm_latency(
|
|
99
|
+
func: Callable[..., Awaitable[Optional[LLMResponse]]],
|
|
100
|
+
) -> Callable[..., Awaitable[Optional[LLMResponse]]]:
|
|
101
|
+
@functools.wraps(func)
|
|
102
|
+
async def wrapper(*args: Any, **kwargs: Any) -> Optional[LLMResponse]:
|
|
103
|
+
start = time.perf_counter()
|
|
104
|
+
result: Optional[LLMResponse] = await func(*args, **kwargs)
|
|
105
|
+
if result:
|
|
106
|
+
result.latency = time.perf_counter() - start
|
|
107
|
+
return result
|
|
108
|
+
|
|
109
|
+
return wrapper
|
|
@@ -1,16 +1,22 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import os
|
|
2
4
|
import re
|
|
3
|
-
from typing import
|
|
5
|
+
from typing import Any, Dict, Optional
|
|
4
6
|
|
|
5
7
|
import structlog
|
|
6
8
|
|
|
7
9
|
from rasa.shared.constants import (
|
|
8
10
|
OPENAI_API_BASE_ENV_VAR,
|
|
9
|
-
OPENAI_API_VERSION_ENV_VAR,
|
|
10
11
|
OPENAI_API_TYPE_ENV_VAR,
|
|
12
|
+
OPENAI_API_VERSION_ENV_VAR,
|
|
11
13
|
OPENAI_PROVIDER,
|
|
12
14
|
)
|
|
13
15
|
from rasa.shared.providers._configs.openai_client_config import OpenAIClientConfig
|
|
16
|
+
from rasa.shared.providers.constants import (
|
|
17
|
+
LITE_LLM_API_BASE_FIELD,
|
|
18
|
+
LITE_LLM_API_VERSION_FIELD,
|
|
19
|
+
)
|
|
14
20
|
from rasa.shared.providers.llm._base_litellm_client import _BaseLiteLLMClient
|
|
15
21
|
|
|
16
22
|
structlogger = structlog.get_logger()
|
|
@@ -57,7 +63,7 @@ class OpenAILLMClient(_BaseLiteLLMClient):
|
|
|
57
63
|
self.validate_client_setup()
|
|
58
64
|
|
|
59
65
|
@classmethod
|
|
60
|
-
def from_config(cls, config: Dict[str, Any]) ->
|
|
66
|
+
def from_config(cls, config: Dict[str, Any]) -> OpenAILLMClient:
|
|
61
67
|
"""
|
|
62
68
|
Initializes the client from given configuration.
|
|
63
69
|
|
|
@@ -148,8 +154,8 @@ class OpenAILLMClient(_BaseLiteLLMClient):
|
|
|
148
154
|
fn_args = super()._completion_fn_args
|
|
149
155
|
fn_args.update(
|
|
150
156
|
{
|
|
151
|
-
|
|
152
|
-
|
|
157
|
+
LITE_LLM_API_BASE_FIELD: self.api_base,
|
|
158
|
+
LITE_LLM_API_VERSION_FIELD: self.api_version,
|
|
153
159
|
}
|
|
154
160
|
)
|
|
155
161
|
return fn_args
|
|
@@ -1,23 +1,28 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
from typing import Any, Dict, Optional
|
|
2
4
|
|
|
3
5
|
import structlog
|
|
4
6
|
|
|
5
7
|
from rasa.shared.constants import (
|
|
6
|
-
RASA_PROVIDER,
|
|
7
8
|
OPENAI_PROVIDER,
|
|
9
|
+
RASA_PROVIDER,
|
|
8
10
|
)
|
|
9
11
|
from rasa.shared.providers._configs.rasa_llm_client_config import (
|
|
10
12
|
RasaLLMClientConfig,
|
|
11
13
|
)
|
|
12
|
-
from rasa.
|
|
14
|
+
from rasa.shared.providers.constants import (
|
|
15
|
+
LITE_LLM_API_BASE_FIELD,
|
|
16
|
+
LITE_LLM_API_KEY_FIELD,
|
|
17
|
+
)
|
|
13
18
|
from rasa.shared.providers.llm._base_litellm_client import _BaseLiteLLMClient
|
|
14
|
-
|
|
19
|
+
from rasa.utils.licensing import retrieve_license_from_env
|
|
15
20
|
|
|
16
21
|
structlogger = structlog.get_logger()
|
|
17
22
|
|
|
18
23
|
|
|
19
24
|
class RasaLLMClient(_BaseLiteLLMClient):
|
|
20
|
-
"""A client for interfacing with a Rasa-Hosted LLM endpoint that uses
|
|
25
|
+
"""A client for interfacing with a Rasa-Hosted LLM endpoint that uses.
|
|
21
26
|
|
|
22
27
|
Parameters:
|
|
23
28
|
model (str): The model or deployment name.
|
|
@@ -50,15 +55,12 @@ class RasaLLMClient(_BaseLiteLLMClient):
|
|
|
50
55
|
|
|
51
56
|
@property
|
|
52
57
|
def api_base(self) -> Optional[str]:
|
|
53
|
-
"""
|
|
54
|
-
Returns the base API URL for the openai llm client.
|
|
55
|
-
"""
|
|
58
|
+
"""Returns the base API URL for the openai llm client."""
|
|
56
59
|
return self._api_base
|
|
57
60
|
|
|
58
61
|
@property
|
|
59
62
|
def provider(self) -> str:
|
|
60
|
-
"""
|
|
61
|
-
Returns the provider name for the self hosted llm client.
|
|
63
|
+
"""Returns the provider name for the self hosted llm client.
|
|
62
64
|
|
|
63
65
|
Returns:
|
|
64
66
|
String representing the provider name.
|
|
@@ -83,17 +85,18 @@ class RasaLLMClient(_BaseLiteLLMClient):
|
|
|
83
85
|
|
|
84
86
|
@property
|
|
85
87
|
def _completion_fn_args(self) -> Dict[str, Any]:
|
|
86
|
-
"""Returns the completion arguments for invoking a call
|
|
87
|
-
LiteLLM's completion functions.
|
|
88
|
-
"""
|
|
88
|
+
"""Returns the completion arguments for invoking a call using completions."""
|
|
89
89
|
fn_args = super()._completion_fn_args
|
|
90
90
|
fn_args.update(
|
|
91
|
-
{
|
|
91
|
+
{
|
|
92
|
+
LITE_LLM_API_BASE_FIELD: self.api_base,
|
|
93
|
+
LITE_LLM_API_KEY_FIELD: retrieve_license_from_env(),
|
|
94
|
+
}
|
|
92
95
|
)
|
|
93
96
|
return fn_args
|
|
94
97
|
|
|
95
98
|
@classmethod
|
|
96
|
-
def from_config(cls, config: Dict[str, Any]) ->
|
|
99
|
+
def from_config(cls, config: Dict[str, Any]) -> RasaLLMClient:
|
|
97
100
|
try:
|
|
98
101
|
client_config = RasaLLMClientConfig.from_dict(config)
|
|
99
102
|
except ValueError as e:
|
|
@@ -1,21 +1,25 @@
|
|
|
1
|
-
from
|
|
2
|
-
|
|
3
|
-
text_completion,
|
|
4
|
-
atext_completion,
|
|
5
|
-
)
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
6
3
|
import logging
|
|
7
4
|
import os
|
|
5
|
+
from typing import Any, Dict, List, Optional, Union
|
|
6
|
+
|
|
8
7
|
import structlog
|
|
8
|
+
from litellm import atext_completion, text_completion
|
|
9
9
|
|
|
10
10
|
from rasa.shared.constants import (
|
|
11
|
-
SELF_HOSTED_VLLM_PREFIX,
|
|
12
|
-
SELF_HOSTED_VLLM_API_KEY_ENV_VAR,
|
|
13
11
|
API_KEY,
|
|
12
|
+
SELF_HOSTED_VLLM_API_KEY_ENV_VAR,
|
|
13
|
+
SELF_HOSTED_VLLM_PREFIX,
|
|
14
14
|
)
|
|
15
|
+
from rasa.shared.exceptions import ProviderClientAPIException
|
|
15
16
|
from rasa.shared.providers._configs.self_hosted_llm_client_config import (
|
|
16
17
|
SelfHostedLLMClientConfig,
|
|
17
18
|
)
|
|
18
|
-
from rasa.shared.
|
|
19
|
+
from rasa.shared.providers.constants import (
|
|
20
|
+
LITE_LLM_API_BASE_FIELD,
|
|
21
|
+
LITE_LLM_API_VERSION_FIELD,
|
|
22
|
+
)
|
|
19
23
|
from rasa.shared.providers.llm._base_litellm_client import _BaseLiteLLMClient
|
|
20
24
|
from rasa.shared.providers.llm.llm_response import LLMResponse
|
|
21
25
|
from rasa.shared.utils.io import suppress_logs
|
|
@@ -66,7 +70,7 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
|
|
|
66
70
|
self._apply_dummy_api_key_if_missing()
|
|
67
71
|
|
|
68
72
|
@classmethod
|
|
69
|
-
def from_config(cls, config: Dict[str, Any]) ->
|
|
73
|
+
def from_config(cls, config: Dict[str, Any]) -> SelfHostedLLMClient:
|
|
70
74
|
try:
|
|
71
75
|
client_config = SelfHostedLLMClientConfig.from_dict(config)
|
|
72
76
|
except ValueError as e:
|
|
@@ -183,8 +187,8 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
|
|
|
183
187
|
fn_args = super()._completion_fn_args
|
|
184
188
|
fn_args.update(
|
|
185
189
|
{
|
|
186
|
-
|
|
187
|
-
|
|
190
|
+
LITE_LLM_API_BASE_FIELD: self.api_base,
|
|
191
|
+
LITE_LLM_API_VERSION_FIELD: self.api_version,
|
|
188
192
|
}
|
|
189
193
|
)
|
|
190
194
|
return fn_args
|
|
@@ -213,7 +217,14 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
|
|
|
213
217
|
Asynchronously generate completions for given prompt.
|
|
214
218
|
|
|
215
219
|
Args:
|
|
216
|
-
|
|
220
|
+
messages: The message can be,
|
|
221
|
+
- a list of preformatted messages. Each message should be a dictionary
|
|
222
|
+
with the following keys:
|
|
223
|
+
- content: The message content.
|
|
224
|
+
- role: The role of the message (e.g. user or system).
|
|
225
|
+
- a list of messages. Each message is a string and will be formatted
|
|
226
|
+
as a user message.
|
|
227
|
+
- a single message as a string which will be formatted as user message.
|
|
217
228
|
Returns:
|
|
218
229
|
List of message completions.
|
|
219
230
|
Raises:
|
|
@@ -225,7 +236,9 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
|
|
|
225
236
|
except Exception as e:
|
|
226
237
|
raise ProviderClientAPIException(e)
|
|
227
238
|
|
|
228
|
-
async def acompletion(
|
|
239
|
+
async def acompletion(
|
|
240
|
+
self, messages: Union[List[dict], List[str], str]
|
|
241
|
+
) -> LLMResponse:
|
|
229
242
|
"""Asynchronous completion of the model with the given messages.
|
|
230
243
|
|
|
231
244
|
Method overrides the base class method to call the appropriate
|
|
@@ -234,7 +247,14 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
|
|
|
234
247
|
atext_completion method is called.
|
|
235
248
|
|
|
236
249
|
Args:
|
|
237
|
-
messages: The
|
|
250
|
+
messages: The message can be,
|
|
251
|
+
- a list of preformatted messages. Each message should be a dictionary
|
|
252
|
+
with the following keys:
|
|
253
|
+
- content: The message content.
|
|
254
|
+
- role: The role of the message (e.g. user or system).
|
|
255
|
+
- a list of messages. Each message is a string and will be formatted
|
|
256
|
+
as a user message.
|
|
257
|
+
- a single message as a string which will be formatted as user message.
|
|
238
258
|
|
|
239
259
|
Returns:
|
|
240
260
|
The completion response.
|
|
@@ -243,7 +263,7 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
|
|
|
243
263
|
return await super().acompletion(messages)
|
|
244
264
|
return await self._atext_completion(messages)
|
|
245
265
|
|
|
246
|
-
def completion(self, messages: Union[List[str], str]) -> LLMResponse:
|
|
266
|
+
def completion(self, messages: Union[List[dict], List[str], str]) -> LLMResponse:
|
|
247
267
|
"""Completion of the model with the given messages.
|
|
248
268
|
|
|
249
269
|
Method overrides the base class method to call the appropriate
|
|
@@ -1,13 +1,28 @@
|
|
|
1
|
-
from typing import Dict,
|
|
1
|
+
from typing import Dict, Optional, Type
|
|
2
2
|
|
|
3
3
|
from rasa.shared.constants import (
|
|
4
4
|
AZURE_OPENAI_PROVIDER,
|
|
5
5
|
HUGGINGFACE_LOCAL_EMBEDDING_PROVIDER,
|
|
6
6
|
OPENAI_PROVIDER,
|
|
7
|
-
SELF_HOSTED_PROVIDER,
|
|
8
7
|
RASA_PROVIDER,
|
|
8
|
+
SELF_HOSTED_PROVIDER,
|
|
9
9
|
SELF_HOSTED_VLLM_PREFIX,
|
|
10
10
|
)
|
|
11
|
+
from rasa.shared.providers._configs.azure_openai_client_config import (
|
|
12
|
+
AzureOpenAIClientConfig,
|
|
13
|
+
)
|
|
14
|
+
from rasa.shared.providers._configs.client_config import ClientConfig
|
|
15
|
+
from rasa.shared.providers._configs.default_litellm_client_config import (
|
|
16
|
+
DefaultLiteLLMClientConfig,
|
|
17
|
+
)
|
|
18
|
+
from rasa.shared.providers._configs.huggingface_local_embedding_client_config import (
|
|
19
|
+
HuggingFaceLocalEmbeddingClientConfig,
|
|
20
|
+
)
|
|
21
|
+
from rasa.shared.providers._configs.openai_client_config import OpenAIClientConfig
|
|
22
|
+
from rasa.shared.providers._configs.rasa_llm_client_config import RasaLLMClientConfig
|
|
23
|
+
from rasa.shared.providers._configs.self_hosted_llm_client_config import (
|
|
24
|
+
SelfHostedLLMClientConfig,
|
|
25
|
+
)
|
|
11
26
|
from rasa.shared.providers.embedding.azure_openai_embedding_client import (
|
|
12
27
|
AzureOpenAIEmbeddingClient,
|
|
13
28
|
)
|
|
@@ -25,24 +40,8 @@ from rasa.shared.providers.llm.azure_openai_llm_client import AzureOpenAILLMClie
|
|
|
25
40
|
from rasa.shared.providers.llm.default_litellm_llm_client import DefaultLiteLLMClient
|
|
26
41
|
from rasa.shared.providers.llm.llm_client import LLMClient
|
|
27
42
|
from rasa.shared.providers.llm.openai_llm_client import OpenAILLMClient
|
|
28
|
-
from rasa.shared.providers.llm.self_hosted_llm_client import SelfHostedLLMClient
|
|
29
43
|
from rasa.shared.providers.llm.rasa_llm_client import RasaLLMClient
|
|
30
|
-
from rasa.shared.providers.
|
|
31
|
-
AzureOpenAIClientConfig,
|
|
32
|
-
)
|
|
33
|
-
from rasa.shared.providers._configs.default_litellm_client_config import (
|
|
34
|
-
DefaultLiteLLMClientConfig,
|
|
35
|
-
)
|
|
36
|
-
from rasa.shared.providers._configs.huggingface_local_embedding_client_config import (
|
|
37
|
-
HuggingFaceLocalEmbeddingClientConfig,
|
|
38
|
-
)
|
|
39
|
-
from rasa.shared.providers._configs.openai_client_config import OpenAIClientConfig
|
|
40
|
-
from rasa.shared.providers._configs.self_hosted_llm_client_config import (
|
|
41
|
-
SelfHostedLLMClientConfig,
|
|
42
|
-
)
|
|
43
|
-
from rasa.shared.providers._configs.rasa_llm_client_config import RasaLLMClientConfig
|
|
44
|
-
|
|
45
|
-
from rasa.shared.providers._configs.client_config import ClientConfig
|
|
44
|
+
from rasa.shared.providers.llm.self_hosted_llm_client import SelfHostedLLMClient
|
|
46
45
|
|
|
47
46
|
_provider_to_llm_client_mapping: Dict[str, Type[LLMClient]] = {
|
|
48
47
|
OPENAI_PROVIDER: OpenAILLMClient,
|
|
@@ -1,21 +1,25 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
2
3
|
import os
|
|
3
|
-
import
|
|
4
|
+
from copy import deepcopy
|
|
5
|
+
from typing import Any, Dict, List
|
|
4
6
|
|
|
7
|
+
import structlog
|
|
5
8
|
from litellm import Router
|
|
6
9
|
|
|
7
10
|
from rasa.shared.constants import (
|
|
8
|
-
|
|
11
|
+
API_KEY,
|
|
12
|
+
LITELLM_PARAMS_KEY,
|
|
13
|
+
MODEL_CONFIG_KEY,
|
|
9
14
|
MODEL_GROUP_ID_CONFIG_KEY,
|
|
15
|
+
MODEL_LIST_KEY,
|
|
10
16
|
ROUTER_CONFIG_KEY,
|
|
11
|
-
SELF_HOSTED_VLLM_PREFIX,
|
|
12
17
|
SELF_HOSTED_VLLM_API_KEY_ENV_VAR,
|
|
13
|
-
|
|
14
|
-
API_KEY,
|
|
15
|
-
MODEL_CONFIG_KEY,
|
|
18
|
+
SELF_HOSTED_VLLM_PREFIX,
|
|
16
19
|
USE_CHAT_COMPLETIONS_ENDPOINT_CONFIG_KEY,
|
|
17
20
|
)
|
|
18
21
|
from rasa.shared.exceptions import ProviderClientValidationError
|
|
22
|
+
from rasa.shared.providers._configs.azure_entra_id_config import AzureEntraIDOAuthConfig
|
|
19
23
|
from rasa.shared.providers._configs.litellm_router_client_config import (
|
|
20
24
|
LiteLLMRouterClientConfig,
|
|
21
25
|
)
|
|
@@ -59,12 +63,8 @@ class _BaseLiteLLMRouterClient:
|
|
|
59
63
|
self._extra_parameters = kwargs or {}
|
|
60
64
|
self.additional_client_setup()
|
|
61
65
|
try:
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
)
|
|
65
|
-
self._router_client = Router(
|
|
66
|
-
model_list=resolved_model_configurations, **router_settings
|
|
67
|
-
)
|
|
66
|
+
# We instantiate a router client here to validate the configuration.
|
|
67
|
+
self._router_client = self._create_router_client()
|
|
68
68
|
except Exception as e:
|
|
69
69
|
event_info = "Cannot instantiate a router client."
|
|
70
70
|
structlogger.error(
|
|
@@ -93,7 +93,7 @@ class _BaseLiteLLMRouterClient:
|
|
|
93
93
|
return
|
|
94
94
|
|
|
95
95
|
@classmethod
|
|
96
|
-
def from_config(cls, config: Dict[str, Any]) ->
|
|
96
|
+
def from_config(cls, config: Dict[str, Any]) -> _BaseLiteLLMRouterClient:
|
|
97
97
|
"""Instantiates a LiteLLM Router Embedding client from a configuration dict.
|
|
98
98
|
|
|
99
99
|
Args:
|
|
@@ -143,6 +143,14 @@ class _BaseLiteLLMRouterClient:
|
|
|
143
143
|
@property
|
|
144
144
|
def router_client(self) -> Router:
|
|
145
145
|
"""Returns the instantiated LiteLLM Router client."""
|
|
146
|
+
# In ca se oauth is used, due to a bug in LiteLLM,
|
|
147
|
+
# azure_ad_token_provider is not working as expected.
|
|
148
|
+
# To work around this, we create a new client every
|
|
149
|
+
# time we need to make a call which will
|
|
150
|
+
# ensure that the token is always fresh.
|
|
151
|
+
# GitHub issue for LiteLLm: https://github.com/BerriAI/litellm/issues/4417
|
|
152
|
+
if self._has_oauth():
|
|
153
|
+
return self._create_router_client()
|
|
146
154
|
return self._router_client
|
|
147
155
|
|
|
148
156
|
@property
|
|
@@ -173,11 +181,36 @@ class _BaseLiteLLMRouterClient:
|
|
|
173
181
|
**self._litellm_extra_parameters,
|
|
174
182
|
}
|
|
175
183
|
|
|
184
|
+
def _create_router_client(self) -> Router:
|
|
185
|
+
resolved_model_configurations = self._resolve_env_vars_in_model_configurations()
|
|
186
|
+
return Router(model_list=resolved_model_configurations, **self.router_settings)
|
|
187
|
+
|
|
188
|
+
def _has_oauth(self) -> bool:
|
|
189
|
+
for model_configuration in self.model_configurations:
|
|
190
|
+
if model_configuration.get("litellm_params", {}).get("oauth", None):
|
|
191
|
+
return True
|
|
192
|
+
return False
|
|
193
|
+
|
|
176
194
|
def _resolve_env_vars_in_model_configurations(self) -> List:
|
|
177
195
|
model_configuration_with_resolved_keys = []
|
|
178
196
|
for model_configuration in self.model_configurations:
|
|
179
197
|
resolved_model_configuration = resolve_environment_variables(
|
|
180
|
-
model_configuration
|
|
198
|
+
deepcopy(model_configuration)
|
|
181
199
|
)
|
|
200
|
+
|
|
201
|
+
if not isinstance(resolved_model_configuration, dict):
|
|
202
|
+
continue
|
|
203
|
+
|
|
204
|
+
lite_llm_params = resolved_model_configuration.get("litellm_params", {})
|
|
205
|
+
if lite_llm_params.get("oauth", None):
|
|
206
|
+
oauth_config_dict = lite_llm_params.pop("oauth")
|
|
207
|
+
oauth_config = AzureEntraIDOAuthConfig.from_dict(oauth_config_dict)
|
|
208
|
+
credential = oauth_config.create_azure_credential()
|
|
209
|
+
# token_provider = get_bearer_token_provider(
|
|
210
|
+
# credential, *oauth_config.scopes
|
|
211
|
+
# )
|
|
212
|
+
resolved_model_configuration["litellm_params"]["azure_ad_token"] = (
|
|
213
|
+
credential.get_token(*oauth_config.scopes).token
|
|
214
|
+
)
|
|
182
215
|
model_configuration_with_resolved_keys.append(resolved_model_configuration)
|
|
183
216
|
return model_configuration_with_resolved_keys
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
from typing import Any, Dict, List, Protocol, runtime_checkable
|
|
2
4
|
|
|
3
5
|
|
|
@@ -9,7 +11,7 @@ class RouterClient(Protocol):
|
|
|
9
11
|
"""
|
|
10
12
|
|
|
11
13
|
@classmethod
|
|
12
|
-
def from_config(cls, config: dict) ->
|
|
14
|
+
def from_config(cls, config: dict) -> RouterClient:
|
|
13
15
|
"""
|
|
14
16
|
Initializes the router client with the given configuration.
|
|
15
17
|
|
rasa/shared/utils/cli.py
CHANGED
rasa/shared/utils/common.py
CHANGED
|
@@ -7,12 +7,13 @@ import os
|
|
|
7
7
|
import pkgutil
|
|
8
8
|
import sys
|
|
9
9
|
from types import ModuleType
|
|
10
|
-
from typing import
|
|
10
|
+
from typing import Any, Callable, Collection, Dict, List, Optional, Sequence, Text, Type
|
|
11
11
|
|
|
12
12
|
import rasa.shared.utils.io
|
|
13
13
|
from rasa.exceptions import MissingDependencyException
|
|
14
14
|
from rasa.shared.constants import DOCS_URL_MIGRATION_GUIDE
|
|
15
15
|
from rasa.shared.exceptions import ProviderClientValidationError, RasaException
|
|
16
|
+
from rasa.shared.utils.cli import print_success
|
|
16
17
|
|
|
17
18
|
logger = logging.getLogger(__name__)
|
|
18
19
|
|
|
@@ -322,3 +323,16 @@ def validate_environment(
|
|
|
322
323
|
raise MissingDependencyException(
|
|
323
324
|
f"Missing package for {component_name}: {p}"
|
|
324
325
|
)
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
def display_research_study_prompt() -> None:
|
|
329
|
+
"""Logs a prompt to get users to participate in a UX Improvement research study."""
|
|
330
|
+
separator = "-" * 54
|
|
331
|
+
message = f"""
|
|
332
|
+
{separator}
|
|
333
|
+
Want to help shape the future of Rasa Pro?
|
|
334
|
+
Share your feedback in a short conversation with our team.
|
|
335
|
+
Sign up at: https://calendly.com/alvaro-rasa/rasa-pro-installation
|
|
336
|
+
{separator}
|
|
337
|
+
"""
|
|
338
|
+
print_success(message)
|
rasa/shared/utils/constants.py
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import sys
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import Any, Dict, Optional
|
|
4
4
|
|
|
5
5
|
from rasa.shared.constants import (
|
|
6
|
+
LLM_API_HEALTH_CHECK_DEFAULT_VALUE,
|
|
6
7
|
LLM_API_HEALTH_CHECK_ENV_VAR,
|
|
7
8
|
MODELS_CONFIG_KEY,
|
|
8
|
-
LLM_API_HEALTH_CHECK_DEFAULT_VALUE,
|
|
9
9
|
)
|
|
10
10
|
from rasa.shared.exceptions import ProviderClientValidationError
|
|
11
11
|
from rasa.shared.providers.embedding.embedding_client import EmbeddingClient
|
|
12
12
|
from rasa.shared.providers.llm.llm_client import LLMClient
|
|
13
|
-
from rasa.shared.utils.llm import llm_factory, structlogger
|
|
13
|
+
from rasa.shared.utils.llm import embedder_factory, llm_factory, structlogger
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def try_instantiate_llm_client(
|
rasa/shared/utils/io.py
CHANGED
|
@@ -12,7 +12,7 @@ from collections import OrderedDict
|
|
|
12
12
|
from functools import wraps
|
|
13
13
|
from hashlib import md5
|
|
14
14
|
from pathlib import Path
|
|
15
|
-
from typing import Any,
|
|
15
|
+
from typing import Any, Callable, Dict, List, Optional, Text, Type, TypeVar, Union, cast
|
|
16
16
|
|
|
17
17
|
import portalocker
|
|
18
18
|
|