langwatch-scenario 0.7.9__tar.gz → 0.7.10__tar.gz
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.
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/PKG-INFO +3 -2
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/langwatch_scenario.egg-info/PKG-INFO +3 -2
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/langwatch_scenario.egg-info/requires.txt +1 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/pyproject.toml +4 -6
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_events/event_alert_message_logger.py +5 -0
- langwatch_scenario-0.7.10/scenario/_events/utils.py +113 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/judge_agent.py +3 -2
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/scenario_executor.py +116 -59
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/scenario_state.py +2 -1
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/types.py +54 -2
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/user_simulator_agent.py +3 -2
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/tests/test_scenario.py +8 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/tests/test_scenario_agent.py +3 -4
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/tests/test_scenario_executor.py +24 -1
- langwatch_scenario-0.7.9/scenario/_events/utils.py +0 -97
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/README.md +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/langwatch_scenario.egg-info/SOURCES.txt +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/langwatch_scenario.egg-info/dependency_links.txt +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/langwatch_scenario.egg-info/entry_points.txt +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/langwatch_scenario.egg-info/top_level.txt +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/__init__.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_error_messages.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_events/__init__.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_events/event_bus.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_events/event_reporter.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_events/events.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_events/messages.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/README.md +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/__init__.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/__init__.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/__init__.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/delete_api_annotations_id.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/delete_api_prompts_by_id.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/delete_api_scenario_events.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_annotations.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_annotations_id.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_annotations_trace_id.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_dataset_by_slug_or_id.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_prompts.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_prompts_by_id.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_prompts_by_id_versions.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_trace_id.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/patch_api_annotations_id.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/post_api_annotations_trace_id.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/post_api_dataset_by_slug_entries.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/post_api_prompts.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/post_api_prompts_by_id_versions.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/post_api_scenario_events.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/post_api_trace_id_share.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/post_api_trace_id_unshare.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/put_api_prompts_by_id.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/traces/__init__.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/traces/post_api_trace_search.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/client.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/errors.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/__init__.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/annotation.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/dataset_post_entries.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/dataset_post_entries_entries_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_annotations_id_response_200.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_prompts_by_id_response_200.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_prompts_by_id_response_400.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_prompts_by_id_response_400_error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_prompts_by_id_response_401.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_prompts_by_id_response_401_error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_prompts_by_id_response_404.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_prompts_by_id_response_500.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_scenario_events_response_200.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_scenario_events_response_400.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_scenario_events_response_401.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_scenario_events_response_500.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/evaluation.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/evaluation_timestamps.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_dataset_by_slug_or_id_response_200.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_dataset_by_slug_or_id_response_200_data_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_dataset_by_slug_or_id_response_200_data_item_entry.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_dataset_by_slug_or_id_response_400.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_dataset_by_slug_or_id_response_401.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_dataset_by_slug_or_id_response_404.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_dataset_by_slug_or_id_response_422.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_dataset_by_slug_or_id_response_500.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_200.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_200_messages_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_200_messages_item_role.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_200_response_format_type_0.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_200_response_format_type_0_json_schema.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_200_response_format_type_0_json_schema_schema.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_200_response_format_type_0_type.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_400.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_400_error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_401.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_401_error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_404.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_500.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200_config_data.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200_config_data_demonstrations.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200_config_data_demonstrations_columns_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200_config_data_demonstrations_columns_item_type.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200_config_data_demonstrations_rows_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200_config_data_inputs_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200_config_data_inputs_item_type.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200_config_data_messages_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200_config_data_messages_item_role.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200_config_data_outputs_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200_config_data_outputs_item_json_schema.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200_config_data_outputs_item_type.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200_config_data_prompting_technique.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_400.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_400_error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_401.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_401_error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_404.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_500.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_200_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_200_item_messages_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_200_item_messages_item_role.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_200_item_response_format_type_0.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_200_item_response_format_type_0_json_schema.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_200_item_response_format_type_0_json_schema_schema.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_200_item_response_format_type_0_type.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_400.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_400_error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_401.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_401_error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_500.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_error_type_0.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_evaluations_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_evaluations_item_error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_evaluations_item_timestamps.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_input.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_metadata.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_metrics.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_output.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_error_type_0.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_input.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_input_value_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_metrics.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_output.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_output_value_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_params.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_timestamps.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_timestamps.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/input_.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/metadata.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/metrics.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/output.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/pagination.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/patch_api_annotations_id_body.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/patch_api_annotations_id_response_200.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_annotations_trace_id_body.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_body.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_demonstrations.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_demonstrations_columns_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_demonstrations_columns_item_type.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_demonstrations_rows_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_inputs_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_inputs_item_type.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_messages_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_messages_item_role.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_outputs_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_outputs_item_json_schema.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_outputs_item_type.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_prompting_technique.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200_config_data.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200_config_data_demonstrations.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200_config_data_demonstrations_columns_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200_config_data_demonstrations_columns_item_type.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200_config_data_demonstrations_rows_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200_config_data_inputs_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200_config_data_inputs_item_type.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200_config_data_messages_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200_config_data_messages_item_role.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200_config_data_outputs_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200_config_data_outputs_item_json_schema.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200_config_data_outputs_item_type.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200_config_data_prompting_technique.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_400.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_400_error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_401.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_401_error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_404.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_500.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_200.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_200_messages_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_200_messages_item_role.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_200_response_format_type_0.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_200_response_format_type_0_json_schema.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_200_response_format_type_0_json_schema_schema.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_200_response_format_type_0_type.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_400.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_400_error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_401.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_401_error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_500.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_0.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_0_metadata.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_1.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_1_results_type_0.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_1_results_type_0_verdict.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_1_status.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_2.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_2_messages_item_type_0.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_2_messages_item_type_1.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_2_messages_item_type_2.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_2_messages_item_type_2_tool_calls_item.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_2_messages_item_type_2_tool_calls_item_function.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_2_messages_item_type_3.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_2_messages_item_type_4.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_response_201.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_response_400.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_response_401.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_response_500.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_trace_id_share_response_200.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_trace_id_unshare_response_200.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_body.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_response_200.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_response_400.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_response_400_error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_response_401.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_response_401_error.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_response_404.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_response_500.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/search_request.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/search_request_filters.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/search_response.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/timestamps.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/trace.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/py.typed +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/lang_watch_api_client/types.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_generated/langwatch_api_client/pyproject.toml +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_utils/__init__.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_utils/ids.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_utils/message_conversion.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/_utils/utils.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/agent_adapter.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/cache.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/config/__init__.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/config/langwatch.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/config/model.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/config/scenario.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/py.typed +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/pytest_plugin.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/scenario/script.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/setup.cfg +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/setup.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/tests/test_event_reporter.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/tests/test_model_config.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/tests/test_scenario_event_bus.py +0 -0
- {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.10}/tests/test_scenario_executor_events.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: langwatch-scenario
|
3
|
-
Version: 0.7.
|
3
|
+
Version: 0.7.10
|
4
4
|
Summary: The end-to-end agent testing library
|
5
5
|
Author-email: LangWatch Team <support@langwatch.ai>
|
6
6
|
License: MIT
|
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.8
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.9
|
15
15
|
Classifier: Programming Language :: Python :: 3.10
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
17
|
-
Requires-Python: >=3.
|
17
|
+
Requires-Python: >=3.10
|
18
18
|
Description-Content-Type: text/markdown
|
19
19
|
Requires-Dist: pytest>=8.1.1
|
20
20
|
Requires-Dist: litellm>=1.49.0
|
@@ -31,6 +31,7 @@ Requires-Dist: httpx>=0.27.0
|
|
31
31
|
Requires-Dist: rx>=3.2.0
|
32
32
|
Requires-Dist: python-dateutil>=2.9.0.post0
|
33
33
|
Requires-Dist: pydantic-settings>=2.9.1
|
34
|
+
Requires-Dist: langwatch>=0.2.19
|
34
35
|
Provides-Extra: dev
|
35
36
|
Requires-Dist: black; extra == "dev"
|
36
37
|
Requires-Dist: isort; extra == "dev"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: langwatch-scenario
|
3
|
-
Version: 0.7.
|
3
|
+
Version: 0.7.10
|
4
4
|
Summary: The end-to-end agent testing library
|
5
5
|
Author-email: LangWatch Team <support@langwatch.ai>
|
6
6
|
License: MIT
|
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.8
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.9
|
15
15
|
Classifier: Programming Language :: Python :: 3.10
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
17
|
-
Requires-Python: >=3.
|
17
|
+
Requires-Python: >=3.10
|
18
18
|
Description-Content-Type: text/markdown
|
19
19
|
Requires-Dist: pytest>=8.1.1
|
20
20
|
Requires-Dist: litellm>=1.49.0
|
@@ -31,6 +31,7 @@ Requires-Dist: httpx>=0.27.0
|
|
31
31
|
Requires-Dist: rx>=3.2.0
|
32
32
|
Requires-Dist: python-dateutil>=2.9.0.post0
|
33
33
|
Requires-Dist: pydantic-settings>=2.9.1
|
34
|
+
Requires-Dist: langwatch>=0.2.19
|
34
35
|
Provides-Extra: dev
|
35
36
|
Requires-Dist: black; extra == "dev"
|
36
37
|
Requires-Dist: isort; extra == "dev"
|
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "langwatch-scenario"
|
7
|
-
version = "0.7.
|
7
|
+
version = "0.7.10"
|
8
8
|
description = "The end-to-end agent testing library"
|
9
9
|
readme = "README.md"
|
10
10
|
authors = [{ name = "LangWatch Team", email = "support@langwatch.ai" }]
|
11
11
|
license = { text = "MIT" }
|
12
|
-
requires-python = ">=3.
|
12
|
+
requires-python = ">=3.10"
|
13
13
|
classifiers = [
|
14
14
|
"Development Status :: 4 - Beta",
|
15
15
|
"Intended Audience :: Developers",
|
@@ -36,6 +36,7 @@ dependencies = [
|
|
36
36
|
"rx>=3.2.0",
|
37
37
|
"python-dateutil>=2.9.0.post0",
|
38
38
|
"pydantic-settings>=2.9.1",
|
39
|
+
"langwatch>=0.2.19",
|
39
40
|
]
|
40
41
|
|
41
42
|
[project.optional-dependencies]
|
@@ -67,14 +68,11 @@ markers = ["agent_test: marks tests as agent scenario tests"]
|
|
67
68
|
|
68
69
|
[dependency-groups]
|
69
70
|
dev = [
|
70
|
-
|
71
71
|
"function-schema>=0.4.5",
|
72
72
|
"pre-commit>=4.2.0",
|
73
73
|
"pydantic-ai>=0.0.52",
|
74
|
-
"pyright>=1.1.
|
74
|
+
"pyright>=1.1.405",
|
75
75
|
"pytest-asyncio-concurrent>=0.4.1",
|
76
76
|
"pdoc3>=0.11.6",
|
77
77
|
"respx>=0.22.0",
|
78
78
|
]
|
79
|
-
|
80
|
-
|
@@ -15,6 +15,7 @@ class EventAlertMessageLogger:
|
|
15
15
|
"""
|
16
16
|
|
17
17
|
_shown_batch_ids: Set[str] = set()
|
18
|
+
_shown_watch_urls: Set[str] = set()
|
18
19
|
|
19
20
|
def handle_greeting(self) -> None:
|
20
21
|
"""
|
@@ -40,6 +41,10 @@ class EventAlertMessageLogger:
|
|
40
41
|
if self._is_greeting_disabled():
|
41
42
|
return
|
42
43
|
|
44
|
+
if set_url in EventAlertMessageLogger._shown_watch_urls:
|
45
|
+
return
|
46
|
+
|
47
|
+
EventAlertMessageLogger._shown_watch_urls.add(set_url)
|
43
48
|
self._display_watch_message(set_url)
|
44
49
|
|
45
50
|
def _is_greeting_disabled(self) -> bool:
|
@@ -0,0 +1,113 @@
|
|
1
|
+
import warnings
|
2
|
+
|
3
|
+
from ..types import ChatCompletionMessageParamWithTrace
|
4
|
+
from .events import MessageType
|
5
|
+
from .messages import (
|
6
|
+
SystemMessage,
|
7
|
+
AssistantMessage,
|
8
|
+
UserMessage,
|
9
|
+
ToolMessage,
|
10
|
+
ToolCall,
|
11
|
+
FunctionCall,
|
12
|
+
)
|
13
|
+
from typing import List
|
14
|
+
from pksuid import PKSUID
|
15
|
+
|
16
|
+
|
17
|
+
def convert_messages_to_api_client_messages(
|
18
|
+
messages: list[ChatCompletionMessageParamWithTrace],
|
19
|
+
) -> list[MessageType]:
|
20
|
+
"""
|
21
|
+
Converts OpenAI ChatCompletionMessageParam messages to API client Message format.
|
22
|
+
|
23
|
+
This function transforms messages from OpenAI's format to the API client format
|
24
|
+
that matches the expected schema for ScenarioMessageSnapshotEvent.
|
25
|
+
|
26
|
+
Args:
|
27
|
+
messages: List of OpenAI ChatCompletionMessageParam messages
|
28
|
+
|
29
|
+
Returns:
|
30
|
+
List of API client Message objects
|
31
|
+
|
32
|
+
Raises:
|
33
|
+
ValueError: If message role is not supported or message format is invalid
|
34
|
+
"""
|
35
|
+
|
36
|
+
converted_messages: list[MessageType] = []
|
37
|
+
|
38
|
+
for i, message in enumerate(messages):
|
39
|
+
# Generate unique ID for each message
|
40
|
+
message_id = message.get("id") or str(PKSUID("scenariomsg"))
|
41
|
+
|
42
|
+
role = message.get("role")
|
43
|
+
content = message.get("content")
|
44
|
+
|
45
|
+
if role == "user":
|
46
|
+
if not content:
|
47
|
+
raise ValueError(f"User message at index {i} missing required content")
|
48
|
+
message_ = UserMessage(
|
49
|
+
id=message_id,
|
50
|
+
role="user",
|
51
|
+
content=str(content),
|
52
|
+
)
|
53
|
+
message_.additional_properties = {"trace_id": message.get("trace_id")}
|
54
|
+
converted_messages.append(message_)
|
55
|
+
elif role == "assistant":
|
56
|
+
# Handle tool calls if present
|
57
|
+
tool_calls = message.get("tool_calls")
|
58
|
+
api_tool_calls: List[ToolCall] = []
|
59
|
+
|
60
|
+
if tool_calls:
|
61
|
+
for tool_call in tool_calls:
|
62
|
+
api_tool_calls.append(
|
63
|
+
ToolCall(
|
64
|
+
id=tool_call.get("id", str(PKSUID("scenariotoolcall"))),
|
65
|
+
type_="function",
|
66
|
+
function=FunctionCall(
|
67
|
+
name=tool_call["function"].get("name", "unknown"),
|
68
|
+
arguments=tool_call["function"].get("arguments", "{}"),
|
69
|
+
),
|
70
|
+
)
|
71
|
+
)
|
72
|
+
|
73
|
+
message_ = AssistantMessage(
|
74
|
+
id=message_id,
|
75
|
+
role="assistant",
|
76
|
+
content=str(content),
|
77
|
+
tool_calls=api_tool_calls,
|
78
|
+
)
|
79
|
+
message_.additional_properties = {"trace_id": message.get("trace_id")}
|
80
|
+
converted_messages.append(message_)
|
81
|
+
elif role == "system":
|
82
|
+
if not content:
|
83
|
+
raise ValueError(
|
84
|
+
f"System message at index {i} missing required content"
|
85
|
+
)
|
86
|
+
message_ = SystemMessage(id=message_id, role="system", content=str(content))
|
87
|
+
message_.additional_properties = {"trace_id": message.get("trace_id")}
|
88
|
+
converted_messages.append(message_)
|
89
|
+
elif role == "tool":
|
90
|
+
tool_call_id = message.get("tool_call_id")
|
91
|
+
if not tool_call_id:
|
92
|
+
warnings.warn(
|
93
|
+
f"Tool message at index {i} missing required tool_call_id, skipping tool message"
|
94
|
+
)
|
95
|
+
continue
|
96
|
+
if not content:
|
97
|
+
warnings.warn(
|
98
|
+
f"Tool message at index {i} missing required content, skipping tool message"
|
99
|
+
)
|
100
|
+
continue
|
101
|
+
|
102
|
+
message_ = ToolMessage(
|
103
|
+
id=message_id,
|
104
|
+
role="tool",
|
105
|
+
content=str(content),
|
106
|
+
tool_call_id=tool_call_id,
|
107
|
+
)
|
108
|
+
message_.additional_properties = {"trace_id": message.get("trace_id")}
|
109
|
+
converted_messages.append(message_)
|
110
|
+
else:
|
111
|
+
raise ValueError(f"Unsupported message role '{role}' at index {i}")
|
112
|
+
|
113
|
+
return converted_messages
|
@@ -12,7 +12,8 @@ import logging
|
|
12
12
|
import re
|
13
13
|
from typing import List, Optional, cast
|
14
14
|
|
15
|
-
|
15
|
+
import litellm
|
16
|
+
from litellm import Choices
|
16
17
|
from litellm.files.main import ModelResponse
|
17
18
|
|
18
19
|
from scenario.cache import scenario_cache
|
@@ -356,7 +357,7 @@ if you don't have enough information to make a verdict, say inconclusive with ma
|
|
356
357
|
|
357
358
|
response = cast(
|
358
359
|
ModelResponse,
|
359
|
-
completion(
|
360
|
+
litellm.completion(
|
360
361
|
model=self.model,
|
361
362
|
messages=messages,
|
362
363
|
temperature=self.temperature,
|
@@ -6,6 +6,7 @@ of scenario tests, managing the interaction between user simulators, agents unde
|
|
6
6
|
and judge agents to determine test success or failure.
|
7
7
|
"""
|
8
8
|
|
9
|
+
import json
|
9
10
|
import sys
|
10
11
|
from typing import (
|
11
12
|
Awaitable,
|
@@ -17,6 +18,7 @@ from typing import (
|
|
17
18
|
Tuple,
|
18
19
|
Union,
|
19
20
|
TypedDict,
|
21
|
+
cast,
|
20
22
|
)
|
21
23
|
import time
|
22
24
|
import warnings
|
@@ -33,6 +35,7 @@ from scenario._utils import (
|
|
33
35
|
await_if_awaitable,
|
34
36
|
get_batch_run_id,
|
35
37
|
generate_scenario_run_id,
|
38
|
+
SerializableWithStringFallback,
|
36
39
|
)
|
37
40
|
from openai.types.chat import (
|
38
41
|
ChatCompletionMessageParam,
|
@@ -40,7 +43,7 @@ from openai.types.chat import (
|
|
40
43
|
ChatCompletionAssistantMessageParam,
|
41
44
|
)
|
42
45
|
|
43
|
-
from .types import AgentInput, AgentRole, ScenarioResult, ScriptStep
|
46
|
+
from .types import AgentInput, AgentRole, ChatCompletionMessageParamWithTrace, ScenarioResult, ScriptStep
|
44
47
|
from ._error_messages import agent_response_not_awaitable
|
45
48
|
from .cache import context_scenario
|
46
49
|
from .agent_adapter import AgentAdapter
|
@@ -62,6 +65,11 @@ from ._events import (
|
|
62
65
|
from rx.subject.subject import Subject
|
63
66
|
from rx.core.observable.observable import Observable
|
64
67
|
|
68
|
+
import litellm
|
69
|
+
import langwatch
|
70
|
+
import langwatch.telemetry.context
|
71
|
+
from langwatch.telemetry.tracing import LangWatchTrace
|
72
|
+
|
65
73
|
|
66
74
|
class ScenarioExecutor:
|
67
75
|
"""
|
@@ -101,6 +109,7 @@ class ScenarioExecutor:
|
|
101
109
|
_pending_agents_on_turn: Set[AgentAdapter] = set()
|
102
110
|
_agent_times: Dict[int, float] = {}
|
103
111
|
_events: Subject
|
112
|
+
_trace: LangWatchTrace
|
104
113
|
|
105
114
|
event_bus: ScenarioEventBus
|
106
115
|
|
@@ -157,7 +166,8 @@ class ScenarioExecutor:
|
|
157
166
|
)
|
158
167
|
self.config = (ScenarioConfig.default_config or ScenarioConfig()).merge(config)
|
159
168
|
|
160
|
-
self.
|
169
|
+
self.batch_run_id = get_batch_run_id()
|
170
|
+
self.scenario_set_id = set_id or "default"
|
161
171
|
|
162
172
|
# Create executor's own event stream
|
163
173
|
self._events = Subject()
|
@@ -166,9 +176,6 @@ class ScenarioExecutor:
|
|
166
176
|
self.event_bus = event_bus or ScenarioEventBus()
|
167
177
|
self.event_bus.subscribe_to_events(self._events)
|
168
178
|
|
169
|
-
self.batch_run_id = get_batch_run_id()
|
170
|
-
self.scenario_set_id = set_id or "default"
|
171
|
-
|
172
179
|
@property
|
173
180
|
def events(self) -> Observable:
|
174
181
|
"""Expose event stream for subscribers like the event bus."""
|
@@ -253,6 +260,8 @@ class ScenarioExecutor:
|
|
253
260
|
)
|
254
261
|
```
|
255
262
|
"""
|
263
|
+
message = cast(ChatCompletionMessageParamWithTrace, message)
|
264
|
+
message["trace_id"] = self._trace.trace_id
|
256
265
|
self._state.messages.append(message)
|
257
266
|
|
258
267
|
# Broadcast the message to other agents
|
@@ -263,6 +272,21 @@ class ScenarioExecutor:
|
|
263
272
|
self._pending_messages[idx] = []
|
264
273
|
self._pending_messages[idx].append(message)
|
265
274
|
|
275
|
+
# Update trace with input/output
|
276
|
+
if message["role"] == "user":
|
277
|
+
self._trace.update(input={"type": "text", "value": str(message["content"])})
|
278
|
+
elif message["role"] == "assistant":
|
279
|
+
self._trace.update(
|
280
|
+
output={
|
281
|
+
"type": "text",
|
282
|
+
"value": str(
|
283
|
+
message["content"]
|
284
|
+
if "content" in message
|
285
|
+
else json.dumps(message, cls=SerializableWithStringFallback)
|
286
|
+
),
|
287
|
+
}
|
288
|
+
)
|
289
|
+
|
266
290
|
def add_messages(
|
267
291
|
self,
|
268
292
|
messages: List[ChatCompletionMessageParam],
|
@@ -292,6 +316,21 @@ class ScenarioExecutor:
|
|
292
316
|
self.add_message(message, from_agent_idx)
|
293
317
|
|
294
318
|
def _new_turn(self):
|
319
|
+
if hasattr(self, "_trace") and self._trace is not None:
|
320
|
+
self._trace.__exit__(None, None, None)
|
321
|
+
|
322
|
+
self._trace = langwatch.trace(
|
323
|
+
name="Scenario Turn",
|
324
|
+
metadata={
|
325
|
+
"labels": ["scenario"],
|
326
|
+
"thread_id": self._state.thread_id,
|
327
|
+
"scenario.name": self.name,
|
328
|
+
"scenario.batch_id": self.batch_run_id,
|
329
|
+
"scenario.set_id": self.scenario_set_id,
|
330
|
+
"scenario.turn": self._state.current_turn,
|
331
|
+
},
|
332
|
+
).__enter__()
|
333
|
+
|
295
334
|
self._pending_agents_on_turn = set(self.agents)
|
296
335
|
self._pending_roles_on_turn = [
|
297
336
|
AgentRole.USER,
|
@@ -460,7 +499,7 @@ class ScenarioExecutor:
|
|
460
499
|
|
461
500
|
async def _call_agent(
|
462
501
|
self, idx: int, role: AgentRole, request_judgment: bool = False
|
463
|
-
) -> Union[List[ChatCompletionMessageParam], ScenarioResult]:
|
502
|
+
) -> Union[List[ChatCompletionMessageParam], ScenarioResult, None]:
|
464
503
|
agent = self.agents[idx]
|
465
504
|
|
466
505
|
if role == AgentRole.USER and self.config.debug:
|
@@ -482,67 +521,84 @@ class ScenarioExecutor:
|
|
482
521
|
ChatCompletionUserMessageParam(role="user", content=input_message)
|
483
522
|
]
|
484
523
|
|
485
|
-
with
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
warnings.
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
524
|
+
with self._trace.span(type="agent", name=f"{agent.__class__.__name__}.call") as span:
|
525
|
+
with show_spinner(
|
526
|
+
text=(
|
527
|
+
"Judging..."
|
528
|
+
if role == AgentRole.JUDGE
|
529
|
+
else f"{role.value if isinstance(role, AgentRole) else role}:"
|
530
|
+
),
|
531
|
+
color=(
|
532
|
+
"blue"
|
533
|
+
if role == AgentRole.AGENT
|
534
|
+
else "green" if role == AgentRole.USER else "yellow"
|
535
|
+
),
|
536
|
+
enabled=self.config.verbose,
|
537
|
+
):
|
538
|
+
start_time = time.time()
|
539
|
+
|
540
|
+
# Prevent pydantic validation warnings which should already be disabled
|
541
|
+
with warnings.catch_warnings():
|
542
|
+
warnings.simplefilter("ignore")
|
543
|
+
|
544
|
+
self._trace.autotrack_litellm_calls(litellm)
|
545
|
+
|
546
|
+
agent_response = agent.call(
|
547
|
+
AgentInput(
|
548
|
+
# TODO: test thread_id
|
549
|
+
thread_id=self._state.thread_id,
|
550
|
+
messages=cast(List[ChatCompletionMessageParam], self._state.messages),
|
551
|
+
new_messages=self._pending_messages.get(idx, []),
|
552
|
+
judgment_request=request_judgment,
|
553
|
+
scenario_state=self._state,
|
554
|
+
)
|
555
|
+
)
|
556
|
+
if not isinstance(agent_response, Awaitable):
|
557
|
+
raise Exception(
|
558
|
+
agent_response_not_awaitable(agent.__class__.__name__),
|
511
559
|
)
|
512
|
-
)
|
513
|
-
if not isinstance(agent_response, Awaitable):
|
514
|
-
raise Exception(
|
515
|
-
agent_response_not_awaitable(agent.__class__.__name__),
|
516
|
-
)
|
517
560
|
|
518
|
-
|
561
|
+
agent_response = await agent_response
|
519
562
|
|
520
|
-
|
521
|
-
|
522
|
-
|
563
|
+
if idx not in self._agent_times:
|
564
|
+
self._agent_times[idx] = 0
|
565
|
+
self._agent_times[idx] += time.time() - start_time
|
523
566
|
|
524
|
-
|
525
|
-
|
567
|
+
self._pending_messages[idx] = []
|
568
|
+
check_valid_return_type(agent_response, agent.__class__.__name__)
|
569
|
+
|
570
|
+
messages = []
|
571
|
+
if isinstance(agent_response, ScenarioResult):
|
572
|
+
# TODO: should be an event
|
573
|
+
span.add_evaluation(
|
574
|
+
name=f"{agent.__class__.__name__} Judgment",
|
575
|
+
status="processed",
|
576
|
+
passed=agent_response.success,
|
577
|
+
details=agent_response.reasoning,
|
578
|
+
score=(
|
579
|
+
len(agent_response.passed_criteria)
|
580
|
+
/ len(agent_response.failed_criteria)
|
581
|
+
if agent_response.failed_criteria
|
582
|
+
else 1.0
|
583
|
+
),
|
584
|
+
)
|
526
585
|
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
agent_response,
|
534
|
-
role="user" if role == AgentRole.USER else "assistant",
|
535
|
-
)
|
586
|
+
return agent_response
|
587
|
+
else:
|
588
|
+
messages = convert_agent_return_types_to_openai_messages(
|
589
|
+
agent_response,
|
590
|
+
role="user" if role == AgentRole.USER else "assistant",
|
591
|
+
)
|
536
592
|
|
537
|
-
|
593
|
+
self.add_messages(messages, from_agent_idx=idx)
|
538
594
|
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
595
|
+
if messages and self.config.verbose:
|
596
|
+
print_openai_messages(
|
597
|
+
self._scenario_name(),
|
598
|
+
[m for m in messages if m["role"] != "system"],
|
599
|
+
)
|
544
600
|
|
545
|
-
|
601
|
+
return messages
|
546
602
|
|
547
603
|
def _scenario_name(self):
|
548
604
|
if self.config.verbose == 2:
|
@@ -817,6 +873,7 @@ class ScenarioExecutor:
|
|
817
873
|
|
818
874
|
# Signal end of event stream
|
819
875
|
self._events.on_completed()
|
876
|
+
self._trace.__exit__(None, None, None)
|
820
877
|
|
821
878
|
|
822
879
|
async def run(
|
@@ -14,6 +14,7 @@ from openai.types.chat import (
|
|
14
14
|
)
|
15
15
|
from pydantic import BaseModel
|
16
16
|
|
17
|
+
from scenario.types import ChatCompletionMessageParamWithTrace
|
17
18
|
from scenario.config import ScenarioConfig
|
18
19
|
|
19
20
|
if TYPE_CHECKING:
|
@@ -70,7 +71,7 @@ class ScenarioState(BaseModel):
|
|
70
71
|
"""
|
71
72
|
|
72
73
|
description: str
|
73
|
-
messages: List[
|
74
|
+
messages: List[ChatCompletionMessageParamWithTrace]
|
74
75
|
thread_id: str
|
75
76
|
current_turn: int
|
76
77
|
config: ScenarioConfig
|
@@ -8,10 +8,20 @@ from typing import (
|
|
8
8
|
Callable,
|
9
9
|
List,
|
10
10
|
Optional,
|
11
|
+
TypeAlias,
|
11
12
|
Union,
|
12
13
|
)
|
13
14
|
|
14
|
-
from openai.types.chat import
|
15
|
+
from openai.types.chat import (
|
16
|
+
ChatCompletionMessageParam,
|
17
|
+
ChatCompletionUserMessageParam,
|
18
|
+
ChatCompletionToolMessageParam,
|
19
|
+
ChatCompletionUserMessageParam,
|
20
|
+
ChatCompletionSystemMessageParam,
|
21
|
+
ChatCompletionFunctionMessageParam,
|
22
|
+
ChatCompletionAssistantMessageParam,
|
23
|
+
ChatCompletionDeveloperMessageParam,
|
24
|
+
)
|
15
25
|
|
16
26
|
# Prevent circular imports + Pydantic breaking
|
17
27
|
if TYPE_CHECKING:
|
@@ -22,6 +32,48 @@ else:
|
|
22
32
|
ScenarioStateType = Any
|
23
33
|
|
24
34
|
|
35
|
+
# Since Python types do not support intersection, we need to wrap ALL the chat completion
|
36
|
+
# message types with the trace_id field
|
37
|
+
|
38
|
+
|
39
|
+
class ChatCompletionDeveloperMessageParamWithTrace(ChatCompletionDeveloperMessageParam):
|
40
|
+
trace_id: Optional[str]
|
41
|
+
|
42
|
+
|
43
|
+
class ChatCompletionSystemMessageParamWithTrace(ChatCompletionSystemMessageParam):
|
44
|
+
trace_id: Optional[str]
|
45
|
+
|
46
|
+
|
47
|
+
class ChatCompletionUserMessageParamWithTrace(ChatCompletionUserMessageParam):
|
48
|
+
trace_id: Optional[str]
|
49
|
+
|
50
|
+
|
51
|
+
class ChatCompletionAssistantMessageParamWithTrace(ChatCompletionAssistantMessageParam):
|
52
|
+
trace_id: Optional[str]
|
53
|
+
|
54
|
+
|
55
|
+
class ChatCompletionToolMessageParamWithTrace(ChatCompletionToolMessageParam):
|
56
|
+
trace_id: Optional[str]
|
57
|
+
|
58
|
+
|
59
|
+
class ChatCompletionFunctionMessageParamWithTrace(ChatCompletionFunctionMessageParam):
|
60
|
+
trace_id: Optional[str]
|
61
|
+
|
62
|
+
|
63
|
+
"""
|
64
|
+
A wrapper around ChatCompletionMessageParam that adds a trace_id field to be able to
|
65
|
+
tie back each message of the scenario run to a trace.
|
66
|
+
"""
|
67
|
+
ChatCompletionMessageParamWithTrace: TypeAlias = Union[
|
68
|
+
ChatCompletionDeveloperMessageParamWithTrace,
|
69
|
+
ChatCompletionSystemMessageParamWithTrace,
|
70
|
+
ChatCompletionUserMessageParamWithTrace,
|
71
|
+
ChatCompletionAssistantMessageParamWithTrace,
|
72
|
+
ChatCompletionToolMessageParamWithTrace,
|
73
|
+
ChatCompletionFunctionMessageParamWithTrace,
|
74
|
+
]
|
75
|
+
|
76
|
+
|
25
77
|
class AgentRole(Enum):
|
26
78
|
"""
|
27
79
|
Defines the different roles that agents can play in a scenario.
|
@@ -171,7 +223,7 @@ class ScenarioResult(BaseModel):
|
|
171
223
|
|
172
224
|
success: bool
|
173
225
|
# Prevent issues with slightly inconsistent message types for example when comming from Gemini right at the result level
|
174
|
-
messages: Annotated[List[
|
226
|
+
messages: Annotated[List[ChatCompletionMessageParamWithTrace], SkipValidation]
|
175
227
|
reasoning: Optional[str] = None
|
176
228
|
passed_criteria: List[str] = []
|
177
229
|
failed_criteria: List[str] = []
|
@@ -10,7 +10,8 @@ conversation history.
|
|
10
10
|
import logging
|
11
11
|
from typing import Optional, cast
|
12
12
|
|
13
|
-
|
13
|
+
import litellm
|
14
|
+
from litellm import Choices
|
14
15
|
from litellm.files.main import ModelResponse
|
15
16
|
|
16
17
|
from scenario.cache import scenario_cache
|
@@ -228,7 +229,7 @@ Your goal (assistant) is to interact with the Agent Under Test (user) as if you
|
|
228
229
|
|
229
230
|
response = cast(
|
230
231
|
ModelResponse,
|
231
|
-
completion(
|
232
|
+
litellm.completion(
|
232
233
|
model=self.model,
|
233
234
|
messages=messages,
|
234
235
|
temperature=self.temperature,
|
@@ -98,6 +98,10 @@ async def test_scenario_allow_scripted_scenario():
|
|
98
98
|
self,
|
99
99
|
input: scenario.AgentInput,
|
100
100
|
) -> scenario.AgentReturnTypes:
|
101
|
+
for message in input.new_messages:
|
102
|
+
if "trace_id" in message:
|
103
|
+
del message["trace_id"]
|
104
|
+
|
101
105
|
assert input.new_messages == [
|
102
106
|
{
|
103
107
|
"role": "user",
|
@@ -138,6 +142,10 @@ async def test_scenario_allow_scripted_scenario_with_lower_level_openai_messages
|
|
138
142
|
self,
|
139
143
|
input: scenario.AgentInput,
|
140
144
|
) -> scenario.AgentReturnTypes:
|
145
|
+
for message in input.new_messages:
|
146
|
+
if "trace_id" in message:
|
147
|
+
del message["trace_id"]
|
148
|
+
|
141
149
|
assert input.new_messages == [
|
142
150
|
{
|
143
151
|
"role": "user",
|