langwatch-scenario 0.7.9__tar.gz → 0.7.11__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.
Files changed (256) hide show
  1. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/PKG-INFO +3 -2
  2. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/langwatch_scenario.egg-info/PKG-INFO +3 -2
  3. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/langwatch_scenario.egg-info/requires.txt +1 -0
  4. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/pyproject.toml +4 -6
  5. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_events/event_alert_message_logger.py +6 -1
  6. langwatch_scenario-0.7.11/scenario/_events/utils.py +113 -0
  7. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/judge_agent.py +3 -2
  8. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/scenario_executor.py +116 -59
  9. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/scenario_state.py +2 -1
  10. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/types.py +54 -2
  11. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/user_simulator_agent.py +3 -2
  12. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/tests/test_scenario.py +8 -0
  13. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/tests/test_scenario_agent.py +3 -4
  14. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/tests/test_scenario_executor.py +24 -1
  15. langwatch_scenario-0.7.9/scenario/_events/utils.py +0 -97
  16. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/README.md +0 -0
  17. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/langwatch_scenario.egg-info/SOURCES.txt +0 -0
  18. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/langwatch_scenario.egg-info/dependency_links.txt +0 -0
  19. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/langwatch_scenario.egg-info/entry_points.txt +0 -0
  20. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/langwatch_scenario.egg-info/top_level.txt +0 -0
  21. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/__init__.py +0 -0
  22. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_error_messages.py +0 -0
  23. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_events/__init__.py +0 -0
  24. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_events/event_bus.py +0 -0
  25. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_events/event_reporter.py +0 -0
  26. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_events/events.py +0 -0
  27. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_events/messages.py +0 -0
  28. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/README.md +0 -0
  29. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/__init__.py +0 -0
  30. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/__init__.py +0 -0
  31. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/__init__.py +0 -0
  32. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/delete_api_annotations_id.py +0 -0
  33. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/delete_api_prompts_by_id.py +0 -0
  34. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/delete_api_scenario_events.py +0 -0
  35. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_annotations.py +0 -0
  36. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_annotations_id.py +0 -0
  37. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_annotations_trace_id.py +0 -0
  38. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_dataset_by_slug_or_id.py +0 -0
  39. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_prompts.py +0 -0
  40. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_prompts_by_id.py +0 -0
  41. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_prompts_by_id_versions.py +0 -0
  42. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/get_api_trace_id.py +0 -0
  43. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/patch_api_annotations_id.py +0 -0
  44. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/post_api_annotations_trace_id.py +0 -0
  45. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/post_api_dataset_by_slug_entries.py +0 -0
  46. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/post_api_prompts.py +0 -0
  47. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/post_api_prompts_by_id_versions.py +0 -0
  48. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/post_api_scenario_events.py +0 -0
  49. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/post_api_trace_id_share.py +0 -0
  50. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/post_api_trace_id_unshare.py +0 -0
  51. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/default/put_api_prompts_by_id.py +0 -0
  52. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/traces/__init__.py +0 -0
  53. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/api/traces/post_api_trace_search.py +0 -0
  54. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/client.py +0 -0
  55. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/errors.py +0 -0
  56. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/__init__.py +0 -0
  57. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/annotation.py +0 -0
  58. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/dataset_post_entries.py +0 -0
  59. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/dataset_post_entries_entries_item.py +0 -0
  60. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_annotations_id_response_200.py +0 -0
  61. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_prompts_by_id_response_200.py +0 -0
  62. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_prompts_by_id_response_400.py +0 -0
  63. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_prompts_by_id_response_400_error.py +0 -0
  64. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_prompts_by_id_response_401.py +0 -0
  65. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_prompts_by_id_response_401_error.py +0 -0
  66. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_prompts_by_id_response_404.py +0 -0
  67. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_prompts_by_id_response_500.py +0 -0
  68. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_scenario_events_response_200.py +0 -0
  69. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_scenario_events_response_400.py +0 -0
  70. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_scenario_events_response_401.py +0 -0
  71. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/delete_api_scenario_events_response_500.py +0 -0
  72. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/error.py +0 -0
  73. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/evaluation.py +0 -0
  74. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/evaluation_timestamps.py +0 -0
  75. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_dataset_by_slug_or_id_response_200.py +0 -0
  76. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_dataset_by_slug_or_id_response_200_data_item.py +0 -0
  77. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  78. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_dataset_by_slug_or_id_response_400.py +0 -0
  79. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_dataset_by_slug_or_id_response_401.py +0 -0
  80. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_dataset_by_slug_or_id_response_404.py +0 -0
  81. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_dataset_by_slug_or_id_response_422.py +0 -0
  82. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_dataset_by_slug_or_id_response_500.py +0 -0
  83. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_200.py +0 -0
  84. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_200_messages_item.py +0 -0
  85. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_200_messages_item_role.py +0 -0
  86. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_200_response_format_type_0.py +0 -0
  87. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  88. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  89. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  90. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_400.py +0 -0
  91. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_400_error.py +0 -0
  92. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_401.py +0 -0
  93. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_401_error.py +0 -0
  94. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_404.py +0 -0
  95. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_response_500.py +0 -0
  96. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200.py +0 -0
  97. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200_config_data.py +0 -0
  98. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_200_config_data_demonstrations.py +0 -0
  99. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  100. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  101. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  102. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  103. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  104. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  105. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  106. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  107. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  108. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  109. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  110. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_400.py +0 -0
  111. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_400_error.py +0 -0
  112. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_401.py +0 -0
  113. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_401_error.py +0 -0
  114. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_404.py +0 -0
  115. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_by_id_versions_response_500.py +0 -0
  116. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_200_item.py +0 -0
  117. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_200_item_messages_item.py +0 -0
  118. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_200_item_messages_item_role.py +0 -0
  119. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_200_item_response_format_type_0.py +0 -0
  120. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  121. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  122. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_200_item_response_format_type_0_type.py +0 -0
  123. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_400.py +0 -0
  124. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_400_error.py +0 -0
  125. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_401.py +0 -0
  126. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_401_error.py +0 -0
  127. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_prompts_response_500.py +0 -0
  128. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200.py +0 -0
  129. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_error_type_0.py +0 -0
  130. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_evaluations_item.py +0 -0
  131. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_evaluations_item_error.py +0 -0
  132. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_evaluations_item_timestamps.py +0 -0
  133. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_input.py +0 -0
  134. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_metadata.py +0 -0
  135. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_metrics.py +0 -0
  136. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_output.py +0 -0
  137. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item.py +0 -0
  138. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_error_type_0.py +0 -0
  139. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_input.py +0 -0
  140. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_input_value_item.py +0 -0
  141. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_metrics.py +0 -0
  142. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_output.py +0 -0
  143. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_output_value_item.py +0 -0
  144. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_params.py +0 -0
  145. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_spans_item_timestamps.py +0 -0
  146. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/get_api_trace_id_response_200_timestamps.py +0 -0
  147. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/input_.py +0 -0
  148. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/metadata.py +0 -0
  149. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/metrics.py +0 -0
  150. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/output.py +0 -0
  151. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/pagination.py +0 -0
  152. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/patch_api_annotations_id_body.py +0 -0
  153. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/patch_api_annotations_id_response_200.py +0 -0
  154. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_annotations_trace_id_body.py +0 -0
  155. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_body.py +0 -0
  156. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body.py +0 -0
  157. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data.py +0 -0
  158. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_demonstrations.py +0 -0
  159. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  160. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  161. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  162. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_inputs_item.py +0 -0
  163. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  164. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_messages_item.py +0 -0
  165. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  166. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_outputs_item.py +0 -0
  167. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  168. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  169. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_body_config_data_prompting_technique.py +0 -0
  170. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200.py +0 -0
  171. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200_config_data.py +0 -0
  172. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_200_config_data_demonstrations.py +0 -0
  173. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  174. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  175. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  176. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  177. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  178. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  179. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  180. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  181. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  182. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  183. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  184. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_400.py +0 -0
  185. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_400_error.py +0 -0
  186. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_401.py +0 -0
  187. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_401_error.py +0 -0
  188. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_404.py +0 -0
  189. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_by_id_versions_response_500.py +0 -0
  190. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_200.py +0 -0
  191. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_200_messages_item.py +0 -0
  192. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_200_messages_item_role.py +0 -0
  193. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_200_response_format_type_0.py +0 -0
  194. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_200_response_format_type_0_json_schema.py +0 -0
  195. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  196. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_200_response_format_type_0_type.py +0 -0
  197. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_400.py +0 -0
  198. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_400_error.py +0 -0
  199. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_401.py +0 -0
  200. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_401_error.py +0 -0
  201. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_prompts_response_500.py +0 -0
  202. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_0.py +0 -0
  203. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_0_metadata.py +0 -0
  204. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_1.py +0 -0
  205. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_1_results_type_0.py +0 -0
  206. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_1_results_type_0_verdict.py +0 -0
  207. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_1_status.py +0 -0
  208. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_2.py +0 -0
  209. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_2_messages_item_type_0.py +0 -0
  210. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_2_messages_item_type_1.py +0 -0
  211. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_2_messages_item_type_2.py +0 -0
  212. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  213. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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
  214. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_2_messages_item_type_3.py +0 -0
  215. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_body_type_2_messages_item_type_4.py +0 -0
  216. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_response_201.py +0 -0
  217. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_response_400.py +0 -0
  218. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_response_401.py +0 -0
  219. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_scenario_events_response_500.py +0 -0
  220. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_trace_id_share_response_200.py +0 -0
  221. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/post_api_trace_id_unshare_response_200.py +0 -0
  222. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_body.py +0 -0
  223. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_response_200.py +0 -0
  224. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_response_400.py +0 -0
  225. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_response_400_error.py +0 -0
  226. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_response_401.py +0 -0
  227. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_response_401_error.py +0 -0
  228. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_response_404.py +0 -0
  229. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/put_api_prompts_by_id_response_500.py +0 -0
  230. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/search_request.py +0 -0
  231. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/search_request_filters.py +0 -0
  232. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/search_response.py +0 -0
  233. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/timestamps.py +0 -0
  234. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/models/trace.py +0 -0
  235. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/py.typed +0 -0
  236. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/lang_watch_api_client/types.py +0 -0
  237. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_generated/langwatch_api_client/pyproject.toml +0 -0
  238. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_utils/__init__.py +0 -0
  239. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_utils/ids.py +0 -0
  240. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_utils/message_conversion.py +0 -0
  241. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/_utils/utils.py +0 -0
  242. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/agent_adapter.py +0 -0
  243. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/cache.py +0 -0
  244. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/config/__init__.py +0 -0
  245. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/config/langwatch.py +0 -0
  246. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/config/model.py +0 -0
  247. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/config/scenario.py +0 -0
  248. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/py.typed +0 -0
  249. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/pytest_plugin.py +0 -0
  250. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/scenario/script.py +0 -0
  251. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/setup.cfg +0 -0
  252. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/setup.py +0 -0
  253. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/tests/test_event_reporter.py +0 -0
  254. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/tests/test_model_config.py +0 -0
  255. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/tests/test_scenario_event_bus.py +0 -0
  256. {langwatch_scenario-0.7.9 → langwatch_scenario-0.7.11}/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.9
3
+ Version: 0.7.11
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.9
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.9
3
+ Version: 0.7.11
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.9
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"
@@ -13,6 +13,7 @@ httpx>=0.27.0
13
13
  rx>=3.2.0
14
14
  python-dateutil>=2.9.0.post0
15
15
  pydantic-settings>=2.9.1
16
+ langwatch>=0.2.19
16
17
 
17
18
  [dev]
18
19
  black
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "langwatch-scenario"
7
- version = "0.7.9"
7
+ version = "0.7.11"
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.9"
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.401",
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:
@@ -72,7 +77,7 @@ class EventAlertMessageLogger:
72
77
  print(f"Follow it live: {batch_url}")
73
78
  print(f"{separator}\n")
74
79
 
75
- config = ScenarioConfig.default_config
80
+ config = ScenarioConfig.default_config or ScenarioConfig()
76
81
  if config and not config.headless:
77
82
  # Open the URL in the default browser (cross-platform)
78
83
  try:
@@ -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
- from litellm import Choices, completion
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.reset()
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 show_spinner(
486
- text=(
487
- "Judging..."
488
- if role == AgentRole.JUDGE
489
- else f"{role.value if isinstance(role, AgentRole) else role}:"
490
- ),
491
- color=(
492
- "blue"
493
- if role == AgentRole.AGENT
494
- else "green" if role == AgentRole.USER else "yellow"
495
- ),
496
- enabled=self.config.verbose,
497
- ):
498
- start_time = time.time()
499
-
500
- # Prevent pydantic validation warnings which should already be disabled
501
- with warnings.catch_warnings():
502
- warnings.simplefilter("ignore")
503
- agent_response = agent.call(
504
- AgentInput(
505
- # TODO: test thread_id
506
- thread_id=self._state.thread_id,
507
- messages=self._state.messages,
508
- new_messages=self._pending_messages.get(idx, []),
509
- judgment_request=request_judgment,
510
- scenario_state=self._state,
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
- agent_response = await agent_response
561
+ agent_response = await agent_response
519
562
 
520
- if idx not in self._agent_times:
521
- self._agent_times[idx] = 0
522
- self._agent_times[idx] += time.time() - start_time
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
- self._pending_messages[idx] = []
525
- check_valid_return_type(agent_response, agent.__class__.__name__)
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
- messages = []
528
- if isinstance(agent_response, ScenarioResult):
529
- # TODO: should be an event
530
- return agent_response
531
- else:
532
- messages = convert_agent_return_types_to_openai_messages(
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
- self.add_messages(messages, from_agent_idx=idx)
593
+ self.add_messages(messages, from_agent_idx=idx)
538
594
 
539
- if messages and self.config.verbose:
540
- print_openai_messages(
541
- self._scenario_name(),
542
- [m for m in messages if m["role"] != "system"],
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
- return messages
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[ChatCompletionMessageParam]
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 ChatCompletionMessageParam, ChatCompletionUserMessageParam
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[ChatCompletionMessageParam], SkipValidation]
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
- from litellm import Choices, completion
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",