rasa-pro 3.11.5__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 +135 -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/{arc-f0f8bd46.js → arc-9f1365dc.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-7162c77d.js → blockDiagram-38ab4fdb-e0f81b12.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-b1d0d098.js → c4Diagram-3d4e48cf-9deaee1c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-44956714.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-807a1b27.js → classDiagram-70f12bd4-20450a96.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-5238dcdb.js → classDiagram-v2-f2320105-749d2abf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-a9475142.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-75dfaa67.js → createText-2e5e7dd3-bef0b38c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-df20501d.js → edges-e0da2a9e-943801a7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-13cf4797.js → erDiagram-9861fffd-d523a948.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-a4991264.js → flowDb-956e92f1-54e4cf19.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-ccecf773.js → flowDiagram-66a62f08-48bfbbe8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-43fa749a.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-b5801783.js → flowchart-elk-definition-4a651766-17c30827.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-161e079a.js → ganttDiagram-c361ad54-43086f2d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-f38e86a4.js → gitGraphDiagram-72cf32ee-5c8b693e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-be6ef5d8.js → graph-41a90d26.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-d9ce8994.js → index-3862675e-b43eeae9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-7794b245.js → index-e8affe45.js} +155 -155
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-5000a3dc.js → infoDiagram-f8f76790-0b20676b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-8ef0a17a.js → journeyDiagram-49397b02-39bce7b5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-d649bc98.js → layout-dc8eeea4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-95add810.js → line-c4d2e756.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-f6025094.js → linear-86f6f2d9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-2e8531c4.js → mindmap-definition-fc14e90a-4216f771.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-918adfdb.js → pieDiagram-8a3498a8-1a0cfa96.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-cbd01797.js → quadrantDiagram-120e2f19-f91e67cf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-6a8b877b.js → requirementDiagram-deff3bca-d4046bed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-c377c3fe.js → sankeyDiagram-04a897e0-2cf6d1d7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-ab9e9b7f.js → sequenceDiagram-704730f1-751ac4f5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-5e6ae67d.js → stateDiagram-587899a1-f734f4d4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-40643476.js → stateDiagram-v2-d93cdb3a-91c65710.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-afb8d108.js → styles-6aaf32cf-e0cff7be.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-7edc9423.js → styles-9a916d00-c8029e5d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-c1d8f7e9.js → styles-c10674c1-114f312a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-f494b2ef.js → svgDrawCommon-08f97a94-b7b9dc00.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-11c7cdd0.js → timeline-definition-85554ec2-9536d189.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-3f191ec1.js → xychartDiagram-e933f94c-bf3b0f36.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +1 -0
- 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 +5 -0
- 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 +9 -9
- 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 +3 -2
- 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.5.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/channel-e265ea59.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-21f8a43d.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-5c8ce12d.js +0 -1
- rasa_pro-3.11.5.dist-info/RECORD +0 -785
- /rasa/dialogue_understanding/generator/{single_step → prompt_templates}/command_prompt_template.jinja2 +0 -0
- {rasa_pro-3.11.5.dist-info → rasa_pro-3.12.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.11.5.dist-info → rasa_pro-3.12.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.11.5.dist-info → rasa_pro-3.12.0.dist-info}/entry_points.txt +0 -0
|
@@ -4,23 +4,29 @@ from typing import Any, Dict, List, Optional
|
|
|
4
4
|
import structlog
|
|
5
5
|
|
|
6
6
|
from rasa.shared.constants import (
|
|
7
|
+
API_BASE_CONFIG_KEY,
|
|
8
|
+
API_KEY,
|
|
9
|
+
API_VERSION_CONFIG_KEY,
|
|
7
10
|
AZURE_API_BASE_ENV_VAR,
|
|
8
11
|
AZURE_API_KEY_ENV_VAR,
|
|
9
12
|
AZURE_API_TYPE_ENV_VAR,
|
|
10
13
|
AZURE_API_VERSION_ENV_VAR,
|
|
14
|
+
AZURE_OPENAI_PROVIDER,
|
|
11
15
|
OPENAI_API_BASE_ENV_VAR,
|
|
12
16
|
OPENAI_API_KEY_ENV_VAR,
|
|
13
17
|
OPENAI_API_TYPE_ENV_VAR,
|
|
14
18
|
OPENAI_API_VERSION_ENV_VAR,
|
|
15
|
-
API_BASE_CONFIG_KEY,
|
|
16
|
-
API_KEY,
|
|
17
|
-
API_VERSION_CONFIG_KEY,
|
|
18
|
-
AZURE_OPENAI_PROVIDER,
|
|
19
19
|
)
|
|
20
20
|
from rasa.shared.exceptions import ProviderClientValidationError
|
|
21
21
|
from rasa.shared.providers._configs.azure_openai_client_config import (
|
|
22
|
+
AzureEntraIDOAuthConfig,
|
|
22
23
|
AzureOpenAIClientConfig,
|
|
23
24
|
)
|
|
25
|
+
from rasa.shared.providers.constants import (
|
|
26
|
+
DEFAULT_AZURE_API_KEY_NAME,
|
|
27
|
+
LITE_LLM_API_KEY_FIELD,
|
|
28
|
+
LITE_LLM_AZURE_AD_TOKEN,
|
|
29
|
+
)
|
|
24
30
|
from rasa.shared.providers.embedding._base_litellm_embedding_client import (
|
|
25
31
|
_BaseLiteLLMEmbeddingClient,
|
|
26
32
|
)
|
|
@@ -41,6 +47,8 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
|
|
|
41
47
|
If not provided, it will be set via environment variable.
|
|
42
48
|
api_version (Optional[str]): The version of the API to use.
|
|
43
49
|
If not provided, it will be set via environment variable.
|
|
50
|
+
oauth (Optional[AzureEntraIDOAuthConfig]): Optional OAuth configuration.
|
|
51
|
+
If provided, the client will use OAuth for authentication.
|
|
44
52
|
kwargs (Optional[Dict[str, Any]]): Optional configuration parameters specific
|
|
45
53
|
to the embedding model deployment.
|
|
46
54
|
|
|
@@ -57,6 +65,7 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
|
|
|
57
65
|
api_base: Optional[str] = None,
|
|
58
66
|
api_type: Optional[str] = None,
|
|
59
67
|
api_version: Optional[str] = None,
|
|
68
|
+
oauth: Optional[AzureEntraIDOAuthConfig] = None,
|
|
60
69
|
**kwargs: Any,
|
|
61
70
|
):
|
|
62
71
|
super().__init__() # type: ignore
|
|
@@ -84,7 +93,11 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
|
|
|
84
93
|
# Litellm does not support use of OPENAI_API_KEY, so we need to map it
|
|
85
94
|
# because of backward compatibility. However, we're first looking at
|
|
86
95
|
# AZURE_API_KEY.
|
|
87
|
-
|
|
96
|
+
|
|
97
|
+
self._oauth = oauth
|
|
98
|
+
self._api_key_env_var = (
|
|
99
|
+
self._resolve_api_key_env_var() if not self._oauth else None
|
|
100
|
+
)
|
|
88
101
|
|
|
89
102
|
self.validate_client_setup()
|
|
90
103
|
|
|
@@ -100,7 +113,7 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
|
|
|
100
113
|
return self._extra_parameters[API_KEY]
|
|
101
114
|
|
|
102
115
|
if os.getenv(AZURE_API_KEY_ENV_VAR) is not None:
|
|
103
|
-
return "${
|
|
116
|
+
return f"${{{DEFAULT_AZURE_API_KEY_NAME}}}"
|
|
104
117
|
|
|
105
118
|
if os.getenv(OPENAI_API_KEY_ENV_VAR) is not None:
|
|
106
119
|
# API key can be set through OPENAI_API_KEY too,
|
|
@@ -163,6 +176,7 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
|
|
|
163
176
|
api_base=azure_openai_config.api_base,
|
|
164
177
|
api_type=azure_openai_config.api_type,
|
|
165
178
|
api_version=azure_openai_config.api_version,
|
|
179
|
+
oauth=azure_openai_config.oauth,
|
|
166
180
|
**azure_openai_config.extra_parameters,
|
|
167
181
|
)
|
|
168
182
|
|
|
@@ -177,6 +191,7 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
|
|
|
177
191
|
api_base=self.api_base,
|
|
178
192
|
api_type=self.api_type,
|
|
179
193
|
api_version=self.api_version,
|
|
194
|
+
oauth=self._oauth,
|
|
180
195
|
extra_parameters=self._extra_parameters,
|
|
181
196
|
)
|
|
182
197
|
return config.to_dict()
|
|
@@ -219,13 +234,23 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
|
|
|
219
234
|
|
|
220
235
|
@property
|
|
221
236
|
def _embedding_fn_args(self) -> dict:
|
|
237
|
+
auth_parameter: Dict[str, str] = {}
|
|
238
|
+
|
|
239
|
+
if self._oauth:
|
|
240
|
+
auth_parameter = {
|
|
241
|
+
**auth_parameter,
|
|
242
|
+
LITE_LLM_AZURE_AD_TOKEN: self._oauth.get_bearer_token(),
|
|
243
|
+
}
|
|
244
|
+
elif self._api_key_env_var:
|
|
245
|
+
auth_parameter = {LITE_LLM_API_KEY_FIELD: self._api_key_env_var}
|
|
246
|
+
|
|
222
247
|
return {
|
|
223
248
|
**self._litellm_extra_parameters,
|
|
224
249
|
"model": self._litellm_model_name,
|
|
225
250
|
"api_base": self.api_base,
|
|
226
251
|
"api_type": self.api_type,
|
|
227
252
|
"api_version": self.api_version,
|
|
228
|
-
|
|
253
|
+
**auth_parameter,
|
|
229
254
|
}
|
|
230
255
|
|
|
231
256
|
@property
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
2
3
|
import logging
|
|
4
|
+
from typing import Any, Dict, List
|
|
5
|
+
|
|
3
6
|
import structlog
|
|
4
7
|
|
|
5
8
|
from rasa.shared.exceptions import ProviderClientAPIException
|
|
@@ -45,7 +48,7 @@ class LiteLLMRouterEmbeddingClient(
|
|
|
45
48
|
)
|
|
46
49
|
|
|
47
50
|
@classmethod
|
|
48
|
-
def from_config(cls, config: Dict[str, Any]) ->
|
|
51
|
+
def from_config(cls, config: Dict[str, Any]) -> LiteLLMRouterEmbeddingClient:
|
|
49
52
|
"""Instantiates a LiteLLM Router Embedding client from a configuration dict.
|
|
50
53
|
|
|
51
54
|
Args:
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import logging
|
|
2
4
|
from abc import abstractmethod
|
|
3
|
-
from typing import Dict, List,
|
|
5
|
+
from typing import Any, Dict, List, Union, cast
|
|
4
6
|
|
|
5
7
|
import structlog
|
|
6
|
-
from litellm import
|
|
7
|
-
completion,
|
|
8
|
-
acompletion,
|
|
9
|
-
validate_environment,
|
|
10
|
-
)
|
|
8
|
+
from litellm import acompletion, completion, validate_environment
|
|
11
9
|
|
|
12
|
-
from rasa.shared.constants import API_BASE_CONFIG_KEY, API_KEY
|
|
10
|
+
from rasa.shared.constants import API_BASE_CONFIG_KEY, API_KEY, ROLE_USER
|
|
13
11
|
from rasa.shared.exceptions import (
|
|
14
12
|
ProviderClientAPIException,
|
|
15
13
|
ProviderClientValidationError,
|
|
@@ -19,7 +17,7 @@ from rasa.shared.providers._ssl_verification_utils import (
|
|
|
19
17
|
ensure_ssl_certificates_for_litellm_openai_based_clients,
|
|
20
18
|
)
|
|
21
19
|
from rasa.shared.providers.llm.llm_response import LLMResponse, LLMUsage
|
|
22
|
-
from rasa.shared.utils.io import
|
|
20
|
+
from rasa.shared.utils.io import resolve_environment_variables, suppress_logs
|
|
23
21
|
|
|
24
22
|
structlogger = structlog.get_logger()
|
|
25
23
|
|
|
@@ -50,7 +48,7 @@ class _BaseLiteLLMClient:
|
|
|
50
48
|
|
|
51
49
|
@classmethod
|
|
52
50
|
@abstractmethod
|
|
53
|
-
def from_config(cls, config: Dict[str, Any]) ->
|
|
51
|
+
def from_config(cls, config: Dict[str, Any]) -> _BaseLiteLLMClient:
|
|
54
52
|
pass
|
|
55
53
|
|
|
56
54
|
@property
|
|
@@ -122,12 +120,18 @@ class _BaseLiteLLMClient:
|
|
|
122
120
|
raise ProviderClientValidationError(event_info)
|
|
123
121
|
|
|
124
122
|
@suppress_logs(log_level=logging.WARNING)
|
|
125
|
-
def completion(self, messages: Union[List[str], str]) -> LLMResponse:
|
|
123
|
+
def completion(self, messages: Union[List[dict], List[str], str]) -> LLMResponse:
|
|
126
124
|
"""Synchronously generate completions for given list of messages.
|
|
127
125
|
|
|
128
126
|
Args:
|
|
129
|
-
messages:
|
|
130
|
-
|
|
127
|
+
messages: The message can be,
|
|
128
|
+
- a list of preformatted messages. Each message should be a dictionary
|
|
129
|
+
with the following keys:
|
|
130
|
+
- content: The message content.
|
|
131
|
+
- role: The role of the message (e.g. user or system).
|
|
132
|
+
- a list of messages. Each message is a string and will be formatted
|
|
133
|
+
as a user message.
|
|
134
|
+
- a single message as a string which will be formatted as user message.
|
|
131
135
|
|
|
132
136
|
Returns:
|
|
133
137
|
List of message completions.
|
|
@@ -136,7 +140,7 @@ class _BaseLiteLLMClient:
|
|
|
136
140
|
ProviderClientAPIException: If the API request fails.
|
|
137
141
|
"""
|
|
138
142
|
try:
|
|
139
|
-
formatted_messages = self.
|
|
143
|
+
formatted_messages = self._get_formatted_messages(messages)
|
|
140
144
|
arguments = resolve_environment_variables(self._completion_fn_args)
|
|
141
145
|
response = completion(messages=formatted_messages, **arguments)
|
|
142
146
|
return self._format_response(response)
|
|
@@ -144,12 +148,20 @@ class _BaseLiteLLMClient:
|
|
|
144
148
|
raise ProviderClientAPIException(e)
|
|
145
149
|
|
|
146
150
|
@suppress_logs(log_level=logging.WARNING)
|
|
147
|
-
async def acompletion(
|
|
151
|
+
async def acompletion(
|
|
152
|
+
self, messages: Union[List[dict], List[str], str]
|
|
153
|
+
) -> LLMResponse:
|
|
148
154
|
"""Asynchronously generate completions for given list of messages.
|
|
149
155
|
|
|
150
156
|
Args:
|
|
151
|
-
messages:
|
|
152
|
-
|
|
157
|
+
messages: The message can be,
|
|
158
|
+
- a list of preformatted messages. Each message should be a dictionary
|
|
159
|
+
with the following keys:
|
|
160
|
+
- content: The message content.
|
|
161
|
+
- role: The role of the message (e.g. user or system).
|
|
162
|
+
- a list of messages. Each message is a string and will be formatted
|
|
163
|
+
as a user message.
|
|
164
|
+
- a single message as a string which will be formatted as user message.
|
|
153
165
|
|
|
154
166
|
Returns:
|
|
155
167
|
List of message completions.
|
|
@@ -158,7 +170,7 @@ class _BaseLiteLLMClient:
|
|
|
158
170
|
ProviderClientAPIException: If the API request fails.
|
|
159
171
|
"""
|
|
160
172
|
try:
|
|
161
|
-
formatted_messages = self.
|
|
173
|
+
formatted_messages = self._get_formatted_messages(messages)
|
|
162
174
|
arguments = resolve_environment_variables(self._completion_fn_args)
|
|
163
175
|
response = await acompletion(messages=formatted_messages, **arguments)
|
|
164
176
|
return self._format_response(response)
|
|
@@ -181,11 +193,24 @@ class _BaseLiteLLMClient:
|
|
|
181
193
|
)
|
|
182
194
|
raise ProviderClientAPIException(e, message)
|
|
183
195
|
|
|
196
|
+
def _get_formatted_messages(
|
|
197
|
+
self, messages: Union[List[dict], List[str], str]
|
|
198
|
+
) -> List[Dict[str, str]]:
|
|
199
|
+
"""Returns a list of formatted messages."""
|
|
200
|
+
if (
|
|
201
|
+
isinstance(messages, list)
|
|
202
|
+
and len(messages) > 0
|
|
203
|
+
and isinstance(messages[0], dict)
|
|
204
|
+
):
|
|
205
|
+
# Check if the messages are already formatted. If so, return them as is.
|
|
206
|
+
return cast(List[Dict[str, str]], messages)
|
|
207
|
+
return self._format_messages(messages)
|
|
208
|
+
|
|
184
209
|
def _format_messages(self, messages: Union[List[str], str]) -> List[Dict[str, str]]:
|
|
185
210
|
"""Formats messages (or a single message) to OpenAI format."""
|
|
186
211
|
if isinstance(messages, str):
|
|
187
212
|
messages = [messages]
|
|
188
|
-
return [{"content": message, "role":
|
|
213
|
+
return [{"content": message, "role": ROLE_USER} for message in messages]
|
|
189
214
|
|
|
190
215
|
def _format_response(self, response: Any) -> LLMResponse:
|
|
191
216
|
"""Parses the LiteLLM response to Rasa format."""
|
|
@@ -1,33 +1,60 @@
|
|
|
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
|
-
OPENAI_API_BASE_ENV_VAR,
|
|
9
|
-
OPENAI_API_VERSION_ENV_VAR,
|
|
10
|
-
AZURE_API_BASE_ENV_VAR,
|
|
11
|
-
AZURE_API_VERSION_ENV_VAR,
|
|
12
10
|
API_BASE_CONFIG_KEY,
|
|
11
|
+
API_KEY,
|
|
13
12
|
API_VERSION_CONFIG_KEY,
|
|
14
|
-
|
|
13
|
+
AZURE_API_BASE_ENV_VAR,
|
|
15
14
|
AZURE_API_KEY_ENV_VAR,
|
|
16
|
-
OPENAI_API_TYPE_ENV_VAR,
|
|
17
|
-
OPENAI_API_KEY_ENV_VAR,
|
|
18
15
|
AZURE_API_TYPE_ENV_VAR,
|
|
16
|
+
AZURE_API_VERSION_ENV_VAR,
|
|
19
17
|
AZURE_OPENAI_PROVIDER,
|
|
20
|
-
|
|
18
|
+
DEPLOYMENT_CONFIG_KEY,
|
|
19
|
+
OPENAI_API_BASE_ENV_VAR,
|
|
20
|
+
OPENAI_API_KEY_ENV_VAR,
|
|
21
|
+
OPENAI_API_TYPE_ENV_VAR,
|
|
22
|
+
OPENAI_API_VERSION_ENV_VAR,
|
|
21
23
|
)
|
|
22
24
|
from rasa.shared.exceptions import ProviderClientValidationError
|
|
23
25
|
from rasa.shared.providers._configs.azure_openai_client_config import (
|
|
26
|
+
AzureEntraIDOAuthConfig,
|
|
24
27
|
AzureOpenAIClientConfig,
|
|
25
28
|
)
|
|
29
|
+
from rasa.shared.providers.constants import (
|
|
30
|
+
DEFAULT_AZURE_API_KEY_NAME,
|
|
31
|
+
LITE_LLM_API_BASE_FIELD,
|
|
32
|
+
LITE_LLM_API_KEY_FIELD,
|
|
33
|
+
LITE_LLM_API_VERSION_FIELD,
|
|
34
|
+
LITE_LLM_AZURE_AD_TOKEN,
|
|
35
|
+
)
|
|
26
36
|
from rasa.shared.providers.llm._base_litellm_client import _BaseLiteLLMClient
|
|
27
37
|
from rasa.shared.utils.io import raise_deprecation_warning
|
|
28
38
|
|
|
29
39
|
structlogger = structlog.get_logger()
|
|
30
40
|
|
|
41
|
+
AZURE_CLIENT_ID = "AZURE_CLIENT_ID"
|
|
42
|
+
AZURE_CLIENT_SECRET = "AZURE_CLIENT_SECRET"
|
|
43
|
+
AZURE_TENANT_ID = "AZURE_TENANT_ID"
|
|
44
|
+
CLIENT_SECRET_VARS = (AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID)
|
|
45
|
+
|
|
46
|
+
AZURE_CLIENT_CERTIFICATE_PATH = "AZURE_CLIENT_CERTIFICATE_PATH"
|
|
47
|
+
AZURE_CLIENT_CERTIFICATE_PASSWORD = "AZURE_CLIENT_CERTIFICATE_PASSWORD"
|
|
48
|
+
AZURE_CLIENT_SEND_CERTIFICATE_CHAIN = "AZURE_CLIENT_SEND_CERTIFICATE_CHAIN"
|
|
49
|
+
CERT_VARS = (AZURE_CLIENT_ID, AZURE_CLIENT_CERTIFICATE_PATH, AZURE_TENANT_ID)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class AzureADConfig:
|
|
53
|
+
def __init__(
|
|
54
|
+
self, client_id: str, client_secret: str, tenant_id: str, scopes: str
|
|
55
|
+
) -> None:
|
|
56
|
+
self.scopes = scopes
|
|
57
|
+
|
|
31
58
|
|
|
32
59
|
class AzureOpenAILLMClient(_BaseLiteLLMClient):
|
|
33
60
|
"""A client for interfacing with Azure's OpenAI LLM deployments.
|
|
@@ -41,6 +68,7 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
|
|
|
41
68
|
it will be set via environment variables.
|
|
42
69
|
api_version (Optional[str]): The version of the API to use. If not provided,
|
|
43
70
|
it will be set via environment variable.
|
|
71
|
+
|
|
44
72
|
kwargs (Optional[Dict[str, Any]]): Optional configuration parameters specific
|
|
45
73
|
to the model deployment.
|
|
46
74
|
|
|
@@ -57,6 +85,7 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
|
|
|
57
85
|
api_type: Optional[str] = None,
|
|
58
86
|
api_base: Optional[str] = None,
|
|
59
87
|
api_version: Optional[str] = None,
|
|
88
|
+
oauth: Optional[AzureEntraIDOAuthConfig] = None,
|
|
60
89
|
**kwargs: Any,
|
|
61
90
|
):
|
|
62
91
|
super().__init__() # type: ignore
|
|
@@ -80,8 +109,6 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
|
|
|
80
109
|
or os.getenv(OPENAI_API_VERSION_ENV_VAR)
|
|
81
110
|
)
|
|
82
111
|
|
|
83
|
-
self._api_key_env_var = self._resolve_api_key_env_var()
|
|
84
|
-
|
|
85
112
|
# Not used by LiteLLM, here for backward compatibility
|
|
86
113
|
self._api_type = (
|
|
87
114
|
api_type
|
|
@@ -89,6 +116,19 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
|
|
|
89
116
|
or os.getenv(OPENAI_API_TYPE_ENV_VAR)
|
|
90
117
|
)
|
|
91
118
|
|
|
119
|
+
os.unsetenv("OPENAI_API_KEY")
|
|
120
|
+
os.unsetenv("AZURE_API_KEY")
|
|
121
|
+
|
|
122
|
+
self._oauth = oauth
|
|
123
|
+
|
|
124
|
+
if self._oauth:
|
|
125
|
+
os.unsetenv(DEFAULT_AZURE_API_KEY_NAME)
|
|
126
|
+
os.unsetenv(AZURE_API_KEY_ENV_VAR)
|
|
127
|
+
os.unsetenv(OPENAI_API_KEY_ENV_VAR)
|
|
128
|
+
self._api_key_env_var = (
|
|
129
|
+
self._resolve_api_key_env_var() if not self._oauth else None
|
|
130
|
+
)
|
|
131
|
+
|
|
92
132
|
# Run helper function to check and raise deprecation warning if
|
|
93
133
|
# deprecated environment variables were used for initialization of the
|
|
94
134
|
# client settings
|
|
@@ -157,7 +197,7 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
|
|
|
157
197
|
return self._extra_parameters[API_KEY]
|
|
158
198
|
|
|
159
199
|
if os.getenv(AZURE_API_KEY_ENV_VAR) is not None:
|
|
160
|
-
return "${
|
|
200
|
+
return f"${{{DEFAULT_AZURE_API_KEY_NAME}}}"
|
|
161
201
|
|
|
162
202
|
if os.getenv(OPENAI_API_KEY_ENV_VAR) is not None:
|
|
163
203
|
# API key can be set through OPENAI_API_KEY too,
|
|
@@ -188,7 +228,7 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
|
|
|
188
228
|
)
|
|
189
229
|
|
|
190
230
|
@classmethod
|
|
191
|
-
def from_config(cls, config: Dict[str, Any]) ->
|
|
231
|
+
def from_config(cls, config: Dict[str, Any]) -> AzureOpenAILLMClient:
|
|
192
232
|
"""Initializes the client from given configuration.
|
|
193
233
|
|
|
194
234
|
Args:
|
|
@@ -215,11 +255,12 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
|
|
|
215
255
|
raise
|
|
216
256
|
|
|
217
257
|
return cls(
|
|
218
|
-
azure_openai_config.deployment,
|
|
219
|
-
azure_openai_config.model,
|
|
220
|
-
azure_openai_config.api_type,
|
|
221
|
-
azure_openai_config.api_base,
|
|
222
|
-
azure_openai_config.api_version,
|
|
258
|
+
deployment=azure_openai_config.deployment,
|
|
259
|
+
model=azure_openai_config.model,
|
|
260
|
+
api_type=azure_openai_config.api_type,
|
|
261
|
+
api_base=azure_openai_config.api_base,
|
|
262
|
+
api_version=azure_openai_config.api_version,
|
|
263
|
+
oauth=azure_openai_config.oauth,
|
|
223
264
|
**azure_openai_config.extra_parameters,
|
|
224
265
|
)
|
|
225
266
|
|
|
@@ -234,6 +275,7 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
|
|
|
234
275
|
api_base=self._api_base,
|
|
235
276
|
api_version=self._api_version,
|
|
236
277
|
api_type=self._api_type,
|
|
278
|
+
oauth=self._oauth,
|
|
237
279
|
extra_parameters=self._extra_parameters,
|
|
238
280
|
)
|
|
239
281
|
return config.to_dict()
|
|
@@ -282,12 +324,23 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
|
|
|
282
324
|
"""Returns the completion arguments for invoking a call through
|
|
283
325
|
LiteLLM's completion functions.
|
|
284
326
|
"""
|
|
327
|
+
# Set the API key env var to None if OAuth is used
|
|
328
|
+
auth_parameter: Dict[str, str] = {}
|
|
329
|
+
|
|
330
|
+
if self._oauth:
|
|
331
|
+
auth_parameter = {
|
|
332
|
+
**auth_parameter,
|
|
333
|
+
LITE_LLM_AZURE_AD_TOKEN: self._oauth.get_bearer_token(),
|
|
334
|
+
}
|
|
335
|
+
elif self._api_key_env_var:
|
|
336
|
+
auth_parameter = {LITE_LLM_API_KEY_FIELD: self._api_key_env_var}
|
|
337
|
+
|
|
285
338
|
fn_args = super()._completion_fn_args
|
|
286
339
|
fn_args.update(
|
|
287
340
|
{
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
341
|
+
LITE_LLM_API_BASE_FIELD: self.api_base,
|
|
342
|
+
LITE_LLM_API_VERSION_FIELD: self.api_version,
|
|
343
|
+
**auth_parameter,
|
|
291
344
|
}
|
|
292
345
|
)
|
|
293
346
|
return fn_args
|
|
@@ -314,41 +367,44 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
|
|
|
314
367
|
|
|
315
368
|
return info.format(setting=setting, options=options)
|
|
316
369
|
|
|
370
|
+
env_var_field = "env_var"
|
|
371
|
+
config_key_field = "config_key"
|
|
372
|
+
current_value_field = "current_value"
|
|
317
373
|
# All required settings for Azure OpenAI client
|
|
318
374
|
settings: Dict[str, Dict[str, Any]] = {
|
|
319
375
|
"API Base": {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
376
|
+
current_value_field: self.api_base,
|
|
377
|
+
env_var_field: AZURE_API_BASE_ENV_VAR,
|
|
378
|
+
config_key_field: API_BASE_CONFIG_KEY,
|
|
323
379
|
},
|
|
324
380
|
"API Version": {
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
381
|
+
current_value_field: self.api_version,
|
|
382
|
+
env_var_field: AZURE_API_VERSION_ENV_VAR,
|
|
383
|
+
config_key_field: API_VERSION_CONFIG_KEY,
|
|
328
384
|
},
|
|
329
385
|
"Deployment Name": {
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
386
|
+
current_value_field: self.deployment,
|
|
387
|
+
env_var_field: None,
|
|
388
|
+
config_key_field: DEPLOYMENT_CONFIG_KEY,
|
|
333
389
|
},
|
|
334
390
|
}
|
|
335
391
|
|
|
336
392
|
missing_settings = [
|
|
337
393
|
setting_name
|
|
338
394
|
for setting_name, setting_info in settings.items()
|
|
339
|
-
if setting_info[
|
|
395
|
+
if setting_info[current_value_field] is None
|
|
340
396
|
]
|
|
341
397
|
|
|
342
398
|
if missing_settings:
|
|
343
399
|
event_info = f"Client settings not set: " f"{', '.join(missing_settings)}. "
|
|
344
400
|
|
|
345
401
|
for missing_setting in missing_settings:
|
|
346
|
-
if settings[missing_setting][
|
|
402
|
+
if settings[missing_setting][current_value_field] is not None:
|
|
347
403
|
continue
|
|
348
404
|
event_info += generate_event_info_for_missing_setting(
|
|
349
405
|
missing_setting,
|
|
350
|
-
settings[missing_setting][
|
|
351
|
-
settings[missing_setting][
|
|
406
|
+
settings[missing_setting][env_var_field],
|
|
407
|
+
settings[missing_setting][config_key_field],
|
|
352
408
|
)
|
|
353
409
|
|
|
354
410
|
structlogger.error(
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict
|
|
2
4
|
|
|
3
5
|
from rasa.shared.constants import (
|
|
4
6
|
AWS_BEDROCK_PROVIDER,
|
|
@@ -35,7 +37,7 @@ class DefaultLiteLLMClient(_BaseLiteLLMClient):
|
|
|
35
37
|
self.validate_client_setup()
|
|
36
38
|
|
|
37
39
|
@classmethod
|
|
38
|
-
def from_config(cls, config: Dict[str, Any]) ->
|
|
40
|
+
def from_config(cls, config: Dict[str, Any]) -> DefaultLiteLLMClient:
|
|
39
41
|
default_config = DefaultLiteLLMClientConfig.from_dict(config)
|
|
40
42
|
return cls(
|
|
41
43
|
model=default_config.model,
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
2
3
|
import logging
|
|
4
|
+
from typing import Any, Dict, List, Union
|
|
5
|
+
|
|
3
6
|
import structlog
|
|
4
7
|
|
|
5
8
|
from rasa.shared.exceptions import ProviderClientAPIException
|
|
6
9
|
from rasa.shared.providers._configs.litellm_router_client_config import (
|
|
7
10
|
LiteLLMRouterClientConfig,
|
|
8
11
|
)
|
|
12
|
+
from rasa.shared.providers.constants import LITE_LLM_MODEL_FIELD
|
|
9
13
|
from rasa.shared.providers.llm._base_litellm_client import _BaseLiteLLMClient
|
|
10
14
|
from rasa.shared.providers.llm.llm_response import LLMResponse
|
|
11
15
|
from rasa.shared.providers.router._base_litellm_router_client import (
|
|
@@ -41,7 +45,7 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
|
|
|
41
45
|
)
|
|
42
46
|
|
|
43
47
|
@classmethod
|
|
44
|
-
def from_config(cls, config: Dict[str, Any]) ->
|
|
48
|
+
def from_config(cls, config: Dict[str, Any]) -> LiteLLMRouterLLMClient:
|
|
45
49
|
"""Instantiates a LiteLLM Router LLM client from a configuration dict.
|
|
46
50
|
|
|
47
51
|
Args:
|
|
@@ -86,6 +90,10 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
|
|
|
86
90
|
ProviderClientAPIException: If the API request fails.
|
|
87
91
|
"""
|
|
88
92
|
try:
|
|
93
|
+
structlogger.info(
|
|
94
|
+
"litellm_router_llm_client.text_completion",
|
|
95
|
+
_completion_fn_args=self._completion_fn_args,
|
|
96
|
+
)
|
|
89
97
|
response = self.router_client.text_completion(
|
|
90
98
|
prompt=prompt, **self._completion_fn_args
|
|
91
99
|
)
|
|
@@ -114,7 +122,7 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
|
|
|
114
122
|
raise ProviderClientAPIException(e)
|
|
115
123
|
|
|
116
124
|
@suppress_logs(log_level=logging.WARNING)
|
|
117
|
-
def completion(self, messages: Union[List[str], str]) -> LLMResponse:
|
|
125
|
+
def completion(self, messages: Union[List[dict], List[str], str]) -> LLMResponse:
|
|
118
126
|
"""
|
|
119
127
|
Synchronously generate completions for given list of messages.
|
|
120
128
|
|
|
@@ -124,8 +132,14 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
|
|
|
124
132
|
text_completion method is called.
|
|
125
133
|
|
|
126
134
|
Args:
|
|
127
|
-
messages:
|
|
128
|
-
|
|
135
|
+
messages: The message can be,
|
|
136
|
+
- a list of preformatted messages. Each message should be a dictionary
|
|
137
|
+
with the following keys:
|
|
138
|
+
- content: The message content.
|
|
139
|
+
- role: The role of the message (e.g. user or system).
|
|
140
|
+
- a list of messages. Each message is a string and will be formatted
|
|
141
|
+
as a user message.
|
|
142
|
+
- a single message as a string which will be formatted as user message.
|
|
129
143
|
Returns:
|
|
130
144
|
List of message completions.
|
|
131
145
|
Raises:
|
|
@@ -143,7 +157,9 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
|
|
|
143
157
|
raise ProviderClientAPIException(e)
|
|
144
158
|
|
|
145
159
|
@suppress_logs(log_level=logging.WARNING)
|
|
146
|
-
async def acompletion(
|
|
160
|
+
async def acompletion(
|
|
161
|
+
self, messages: Union[List[dict], List[str], str]
|
|
162
|
+
) -> LLMResponse:
|
|
147
163
|
"""
|
|
148
164
|
Asynchronously generate completions for given list of messages.
|
|
149
165
|
|
|
@@ -153,8 +169,14 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
|
|
|
153
169
|
text_completion method is called.
|
|
154
170
|
|
|
155
171
|
Args:
|
|
156
|
-
messages:
|
|
157
|
-
|
|
172
|
+
messages: The message can be,
|
|
173
|
+
- a list of preformatted messages. Each message should be a dictionary
|
|
174
|
+
with the following keys:
|
|
175
|
+
- content: The message content.
|
|
176
|
+
- role: The role of the message (e.g. user or system).
|
|
177
|
+
- a list of messages. Each message is a string and will be formatted
|
|
178
|
+
as a user message.
|
|
179
|
+
- a single message as a string which will be formatted as user message.
|
|
158
180
|
Returns:
|
|
159
181
|
List of message completions.
|
|
160
182
|
Raises:
|
|
@@ -176,7 +198,8 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
|
|
|
176
198
|
"""Returns the completion arguments for invoking a call through
|
|
177
199
|
LiteLLM's completion functions.
|
|
178
200
|
"""
|
|
201
|
+
|
|
179
202
|
return {
|
|
180
203
|
**self._litellm_extra_parameters,
|
|
181
|
-
|
|
204
|
+
LITE_LLM_MODEL_FIELD: self.model_group_id,
|
|
182
205
|
}
|