langwatch 0.7.2__tar.gz → 0.8.0__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-0.8.0/AGENTS.md +46 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/CHANGELOG.md +11 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/Makefile +13 -3
- {langwatch-0.7.2 → langwatch-0.8.0}/PKG-INFO +1 -1
- langwatch-0.8.0/examples/README.md +167 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/cli/guaranteed_availability_with_cli.py +1 -21
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/distributed_tracing.py +4 -3
- langwatch-0.8.0/examples/test_utils/run_cli.py +23 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/pyproject.toml +11 -2
- langwatch-0.8.0/specs/prompts/fetch-policy.feature +7 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/__init__.py +3 -1
- langwatch-0.8.0/src/langwatch/__version__.py +3 -0
- langwatch-0.8.0/src/langwatch/prompts/__init__.py +36 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/prompts/errors.py +2 -1
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/prompts/local_loader.py +7 -2
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/prompts/prompt_facade.py +95 -5
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/prompts/types/__init__.py +4 -0
- langwatch-0.8.0/src/langwatch/prompts/types/fetch_policy.py +26 -0
- langwatch-0.8.0/tests/e2e/test_fetch_policies_e2e.py +356 -0
- langwatch-0.8.0/tests/prompts/test_fetch_policies.py +560 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/test_examples.py +16 -9
- {langwatch-0.7.2 → langwatch-0.8.0}/uv.lock +8 -2
- langwatch-0.7.2/src/langwatch/__version__.py +0 -3
- langwatch-0.7.2/src/langwatch/prompts/__init__.py +0 -5
- langwatch-0.7.2/src/langwatch/prompts/types.py +0 -16
- {langwatch-0.7.2 → langwatch-0.8.0}/.editorconfig +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/.env.example +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/.gitignore +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/README.md +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/__init__.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/azure_openai_stream_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/cli/README.md +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/custom_evaluation_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/data/rag_dspy_bot.json +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/dataset_kitchen_sink.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/documentation/openai_langwatch.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/documentation/openai_openinference.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/dspy_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/dspy_visualization.ipynb +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/evaluation_manual_call.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/fastapi_app.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/generic_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/generic_bot_async_streaming.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/generic_bot_exception.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/generic_bot_rag.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/generic_bot_rag_expected_output.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/generic_bot_rag_multithreaded.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/generic_bot_span_context_manager.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/generic_bot_span_low_level.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/generic_bot_streaming.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/generic_bot_sync_function.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/generic_bot_update_metadata_later.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/guardrails.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/guardrails_parallel.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/guardrails_without_tracing.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/haystack_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/langchain_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/langchain_bot_with_memory.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/langchain_rag_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/langchain_rag_bot_vertex_ai.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/langchain_rag_bot_with_threads.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/langgraph_rag_bot_with_threads.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/langwatch_docs_rag_evaluation.ipynb +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/litellm_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/offline_evaluation.ipynb +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/openai_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/openai_bot_disable_trace.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/openai_bot_function_call.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/openai_bot_max_string_length.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/openai_bot_max_string_length_none.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/openai_bot_otel_metrics.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/openai_bot_rag.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/openai_bot_sampling_rate.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/openinference/google_adk.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/opentelemetry/openinference_dspy_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/opentelemetry/openinference_haystack.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/opentelemetry/openinference_langchain_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/opentelemetry/openinference_openai_assistants_api_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/opentelemetry/openinference_openai_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/opentelemetry/openllmetry_anthropic_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/opentelemetry/openllmetry_crewai_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/opentelemetry/openllmetry_langchain_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/opentelemetry/openllmetry_openai_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/opentelemetry/traditional_instrumentation_fastapi_app.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/pdf_parsing_evaluation.ipynb +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/prompt_cli/.gitignore +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/prompt_cli/main.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/prompt_cli/prompts/agent/performance.prompt.yaml +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/prompt_management_fastapi.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/sanity/setup_example.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/span_evaluation.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/strands_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/streamlit_openai_assistants_api_bot.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/weaviate_dspy_visualization.ipynb +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/weaviate_setup/.gitignore +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/weaviate_setup/Weaviate-Import.ipynb +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/weaviate_setup/docker-compose.yml +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/weaviate_setup/optimization_screenshot.png +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/examples/weaviate_setup/tracing_screenshot.png +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/attributes.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/batch_evaluation.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/client.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/dataset/__init__.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/domain/__init__.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/dspy/__init__.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/evaluation/__init__.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/evaluation/evaluation.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/evaluations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/exporters/filterable_batch_span_exporter.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/__init__.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/__init__.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/__init__.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/delete_api_annotations_id.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/delete_api_prompts_by_id.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/delete_api_scenario_events.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/get_api_annotations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/get_api_annotations_id.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/get_api_annotations_trace_id.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/get_api_dataset_by_slug_or_id.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/get_api_prompts.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/get_api_prompts_by_id.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/get_api_prompts_by_id_versions.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/get_api_trace_id.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/get_index.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/patch_api_annotations_id.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/post_api_annotations_trace_id.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/post_api_dataset_by_slug_entries.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/post_api_prompts.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/post_api_prompts_by_id_sync.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/post_api_scenario_events.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/post_api_trace_id_share.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/post_api_trace_id_unshare.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/post_index.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/default/put_api_prompts_by_id.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/traces/__init__.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/api/traces/post_api_trace_search.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/client.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/errors.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/__init__.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/annotation.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/dataset_post_entries.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/dataset_post_entries_entries_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/delete_api_annotations_id_response_200.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/delete_api_prompts_by_id_response_200.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/delete_api_prompts_by_id_response_400.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/delete_api_prompts_by_id_response_401.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/delete_api_prompts_by_id_response_404.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/delete_api_prompts_by_id_response_422.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/delete_api_prompts_by_id_response_500.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/delete_api_scenario_events_response_200.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/delete_api_scenario_events_response_400.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/delete_api_scenario_events_response_401.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/delete_api_scenario_events_response_422.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/delete_api_scenario_events_response_500.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/error.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/evaluation.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/evaluation_timestamps.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_dataset_by_slug_or_id_response_200.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_dataset_by_slug_or_id_response_200_data_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_dataset_by_slug_or_id_response_200_data_item_entry.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_dataset_by_slug_or_id_response_400.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_dataset_by_slug_or_id_response_401.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_dataset_by_slug_or_id_response_404.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_dataset_by_slug_or_id_response_422.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_dataset_by_slug_or_id_response_500.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_inputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_inputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_messages_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_messages_item_role.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_outputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_outputs_item_json_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_outputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_prompting_technique.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_prompting_technique_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_prompting_technique_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_prompting_technique_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_prompting_technique_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_prompting_technique_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_response_format.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_response_format_json_schema_type_0.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_response_format_json_schema_type_0_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_response_format_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_200_scope.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_400.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_401.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_404.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_422.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_response_500.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_inputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_inputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_messages_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_messages_item_role.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_outputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_outputs_item_json_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_outputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_prompting_technique.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_prompting_technique_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_prompting_technique_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_prompting_technique_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_prompting_technique_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_prompting_technique_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_response_format.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_response_format_json_schema_type_0.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_response_format_json_schema_type_0_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_response_format_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_200_item_scope.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_400.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_401.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_404.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_422.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_by_id_versions_response_500.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_inputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_inputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_messages_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_messages_item_role.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_outputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_outputs_item_json_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_outputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_prompting_technique.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_prompting_technique_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_prompting_technique_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_prompting_technique_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_prompting_technique_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_prompting_technique_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_response_format.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_response_format_json_schema_type_0.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_response_format_json_schema_type_0_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_response_format_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_200_item_scope.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_400.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_401.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_422.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_prompts_response_500.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_error_type_0.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_evaluations_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_evaluations_item_error.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_evaluations_item_timestamps.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_input.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_metadata.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_metrics.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_output.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_spans_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_spans_item_error_type_0.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_spans_item_input.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_spans_item_input_value_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_spans_item_metrics.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_spans_item_output.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_spans_item_output_value_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_spans_item_params.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_spans_item_timestamps.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_api_trace_id_response_200_timestamps.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_index_response_200_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_index_response_200_item_messages_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_index_response_200_item_messages_item_role.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_index_response_200_item_response_format_type_0.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_index_response_200_item_response_format_type_0_json_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_index_response_200_item_response_format_type_0_json_schema_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_index_response_200_item_response_format_type_0_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_index_response_200_item_scope.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_index_response_400.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_index_response_401.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/get_index_response_500.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/input_.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/metadata.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/metrics.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/output.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/pagination.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/patch_api_annotations_id_body.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/patch_api_annotations_id_response_200.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_annotations_trace_id_body.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_body.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_body_inputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_body_inputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_body_messages_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_body_messages_item_role.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_body_outputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_body_outputs_item_json_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_body_outputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_body_schema_version.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_body_scope.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_inputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_inputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_messages_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_messages_item_role.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_outputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_outputs_item_json_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_outputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_prompting_technique.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_prompting_technique_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_prompting_technique_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_prompting_technique_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_prompting_technique_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_prompting_technique_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_response_format.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_response_format_json_schema_type_0.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_response_format_json_schema_type_0_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_body_config_data_response_format_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_action.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_inputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_inputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_messages_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_messages_item_role.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_outputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_outputs_item_json_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_outputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_prompting_technique.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_prompting_technique_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_prompting_technique_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_prompting_technique_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_prompting_technique_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_prompting_technique_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_response_format.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_response_format_json_schema_type_0.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_response_format_json_schema_type_0_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_conflict_info_remote_config_data_response_format_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_inputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_inputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_messages_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_messages_item_role.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_outputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_outputs_item_json_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_outputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_prompting_technique.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_prompting_technique_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_prompting_technique_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_prompting_technique_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_prompting_technique_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_prompting_technique_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_response_format.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_response_format_json_schema_type_0.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_response_format_json_schema_type_0_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_response_format_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_200_prompt_scope.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_400.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_401.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_422.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_by_id_sync_response_500.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_inputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_inputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_messages_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_messages_item_role.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_outputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_outputs_item_json_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_outputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_prompting_technique.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_prompting_technique_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_prompting_technique_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_prompting_technique_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_prompting_technique_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_prompting_technique_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_response_format.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_response_format_json_schema_type_0.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_response_format_json_schema_type_0_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_response_format_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_200_scope.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_400.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_401.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_409.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_422.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_prompts_response_500.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_scenario_events_body_type_0.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_scenario_events_body_type_0_metadata.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_scenario_events_body_type_1.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_scenario_events_body_type_1_results_type_0.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_scenario_events_body_type_1_results_type_0_verdict.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_scenario_events_body_type_1_status.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_scenario_events_body_type_2.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_scenario_events_body_type_2_messages_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_scenario_events_response_201.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_scenario_events_response_400.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_scenario_events_response_401.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_scenario_events_response_422.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_scenario_events_response_500.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_trace_id_share_response_200.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_api_trace_id_unshare_response_200.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_body.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_body_inputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_body_inputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_body_messages_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_body_messages_item_role.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_body_outputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_body_outputs_item_json_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_body_outputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_body_scope.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_response_200.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_response_200_messages_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_response_200_messages_item_role.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_response_200_response_format_type_0.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_response_200_response_format_type_0_json_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_response_200_response_format_type_0_json_schema_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_response_200_response_format_type_0_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_response_200_scope.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_response_400.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_response_401.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/post_index_response_500.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_body.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_body_inputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_body_inputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_body_messages_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_body_messages_item_role.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_body_outputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_body_outputs_item_json_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_body_outputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_body_schema_version.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_body_scope.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_inputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_inputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_messages_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_messages_item_role.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_outputs_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_outputs_item_json_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_outputs_item_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_prompting_technique.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_prompting_technique_demonstrations.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_prompting_technique_demonstrations_inline.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_prompting_technique_demonstrations_inline_column_types_item.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_prompting_technique_demonstrations_inline_records.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_prompting_technique_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_response_format.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_response_format_json_schema_type_0.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_response_format_json_schema_type_0_schema.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_response_format_type.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_200_scope.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_400.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_401.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_404.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_409.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_422.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/put_api_prompts_by_id_response_500.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/search_request.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/search_request_filters.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/search_response.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/timestamps.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/models/trace.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/py.typed +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/generated/langwatch_rest_api_client/types.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/guardrails.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/langchain.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/litellm.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/login.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/openai.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/prompts/decorators/prompt_service_tracing.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/prompts/decorators/prompt_tracing.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/prompts/prompt.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/prompts/prompt_api_service.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/prompts/types/prompt_data.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/prompts/types/structures.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/py.typed +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/state.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/telemetry/__tests__/test_tracing.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/telemetry/context.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/telemetry/sampling.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/telemetry/span.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/telemetry/tracing.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/telemetry/types.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/tracer.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/types.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/utils/__init__.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/utils/capture.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/utils/exceptions.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/utils/initialization.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/utils/module.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/utils/transformation.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/src/langwatch/utils/utils.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/conftest.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/exporters/test_filterable_batch_span_exporter.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/fixtures/README.md +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/fixtures/__init__.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/fixtures/get_response_factories.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/fixtures/prompts/cli.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/fixtures/prompts/general.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/fixtures/prompts/prompt_fixtures.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/fixtures/span_exporter.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/prompts/test_guaranteed_availability.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/prompts/test_local_loader.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/prompts/test_prompt.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/prompts/test_prompt_service_tracing.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/prompts/test_prompt_tracing.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/telemetry/test_context.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/telemetry/test_tracing.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/test_cli_runner.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/test_client.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/test_login.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/test_version.py +0 -0
- {langwatch-0.7.2 → langwatch-0.8.0}/tests/utils/test_transformation.py +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
## Python SDK Testing Antipatterns
|
|
2
|
+
|
|
3
|
+
| Antipattern | Correct Behavior |
|
|
4
|
+
|-------------|------------------|
|
|
5
|
+
| Writing E2E tests mixed with unit tests | Keep E2E tests isolated in `tests/e2e/` directory with `@pytest.mark.e2e`. E2E tests verify real API behavior with external services, while examples serve as user demonstrations. |
|
|
6
|
+
| Repeating happy paths in integration/unit tests | Do not duplicate E2E/example coverage in integrations or units. Focus integration tests on edge/error cases, and unit tests on pure logic. |
|
|
7
|
+
| Failing to follow [TESTING.md](../TESTING.md) hierarchy | Always start with a `.feature` file, drive from E2E tests in `tests/e2e/`, then add integration tests in `tests/` and unit tests as outlined. Examples in `examples/` serve as user demonstrations. |
|
|
8
|
+
| Using `pip` or `python` directly for installing, running, or testing | Always use [`uv`](https://github.com/astral-sh/uv) for all dependency installation, package management, and test running. Do not use `pip` commands or `python -m pip`, prefer `uv` equivalents throughout documentation, scripts, and workflows. |
|
|
9
|
+
|
|
10
|
+
## Testing Structure
|
|
11
|
+
|
|
12
|
+
The Python SDK follows a hierarchical testing approach:
|
|
13
|
+
|
|
14
|
+
### `tests/e2e/` - End-to-End Tests
|
|
15
|
+
- **Purpose**: Verify real API behavior with external services
|
|
16
|
+
- **Location**: `tests/e2e/` directory
|
|
17
|
+
- **Markers**: `@pytest.mark.e2e`
|
|
18
|
+
- **Run with**: `pytest tests/e2e/` or `pytest -m e2e`
|
|
19
|
+
- **Examples**: `test_fetch_policies_e2e.py` - verifies fetch policies work with real API calls
|
|
20
|
+
|
|
21
|
+
### `examples/` - User Demonstrations
|
|
22
|
+
- **Purpose**: Show users how to use the SDK features
|
|
23
|
+
- **Location**: `examples/` directory
|
|
24
|
+
- **Markers**: None (automatically tested by `test_examples.py`)
|
|
25
|
+
- **Run with**: `pytest tests/test_examples.py` or manually as scripts
|
|
26
|
+
- **Examples**: `generic_bot.py`, `langchain_bot.py`, etc.
|
|
27
|
+
|
|
28
|
+
### `tests/` - Integration & Unit Tests
|
|
29
|
+
- **Purpose**: Test components and error cases
|
|
30
|
+
- **Location**: `tests/` directory
|
|
31
|
+
- **Markers**: `@pytest.mark.integration`, `@pytest.mark.unit` (default)
|
|
32
|
+
- **Run with**: `pytest tests/` or `pytest -m "not e2e"`
|
|
33
|
+
|
|
34
|
+
### Running Tests Selectively
|
|
35
|
+
```bash
|
|
36
|
+
# Run all tests except E2E (fast CI)
|
|
37
|
+
pytest tests/ -m "not e2e"
|
|
38
|
+
|
|
39
|
+
# Run only E2E tests (requires API keys)
|
|
40
|
+
pytest tests/e2e/
|
|
41
|
+
|
|
42
|
+
# Run examples as demonstrations
|
|
43
|
+
pytest tests/test_examples.py
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.8.0](https://github.com/langwatch/langwatch/compare/python-sdk@v0.7.2...python-sdk@v0.8.0) (2025-12-16)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* implement FetchPolicy enum for Python SDK ([#989](https://github.com/langwatch/langwatch/issues/989)) ([43de904](https://github.com/langwatch/langwatch/commit/43de904de08ec54a78aece35da155a8a3cb4289d))
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* rerun evaluations if new spans arrive even after 30s but less than 1h ([79ba316](https://github.com/langwatch/langwatch/commit/79ba3163c64f224e3d2b640b5340f1503fc57c48))
|
|
13
|
+
|
|
3
14
|
## [0.7.2](https://github.com/langwatch/langwatch/compare/python-sdk@v0.7.1...python-sdk@v0.7.2) (2025-12-03)
|
|
4
15
|
|
|
5
16
|
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
.PHONY: test test-tracing install example
|
|
2
2
|
|
|
3
|
-
test:
|
|
4
|
-
LANGWATCH_API_KEY="testkey" PYTHONPATH=$$PYTHONPATH:. uv run pytest -s -vv -m "not integration" -k "not test_example and not test_prompt_service_tracing and not test_prompt_tracing and not test_context and not test_tracing" $(filter-out $@,$(MAKECMDGOALS))
|
|
3
|
+
test-unit:
|
|
4
|
+
LANGWATCH_API_KEY="testkey" PYTHONPATH=$$PYTHONPATH:. uv run pytest -s -vv -m "not integration and not e2e" -k "not test_example and not test_prompt_service_tracing and not test_prompt_tracing and not test_context and not test_tracing" $(filter-out $@,$(MAKECMDGOALS))
|
|
5
|
+
|
|
6
|
+
test-e2e:
|
|
7
|
+
PYTHONPATH=$$PYTHONPATH:. uv run pytest -s -vv -m "e2e"
|
|
5
8
|
|
|
6
9
|
# Run tracing tests in isolation to avoid global OpenTelemetry state conflicts
|
|
7
10
|
test-tracing:
|
|
@@ -14,6 +17,11 @@ test-tracing:
|
|
|
14
17
|
@echo "Running telemetry tracing tests..."
|
|
15
18
|
@LANGWATCH_API_KEY="testkey" PYTHONPATH=$$PYTHONPATH:. uv run pytest -s -vv tests/telemetry/test_tracing.py
|
|
16
19
|
|
|
20
|
+
test: install
|
|
21
|
+
$(MAKE) test-unit
|
|
22
|
+
$(MAKE) test-tracing
|
|
23
|
+
$(MAKE) test-e2e
|
|
24
|
+
|
|
17
25
|
# Test bot/chatbot examples (excludes CLI examples)
|
|
18
26
|
# Call it with `make test-examples -- -k examples/openai_bot.py` to run a specific example
|
|
19
27
|
test-examples:
|
|
@@ -46,6 +54,8 @@ example:
|
|
|
46
54
|
uv run python $$args; \
|
|
47
55
|
elif [[ $$args =~ "streamlit" ]]; then \
|
|
48
56
|
uv run streamlit run $$args; \
|
|
57
|
+
elif [[ $$args =~ "fetch_policies" ]]; then \
|
|
58
|
+
PYTHONPATH=$$PYTHONPATH:. uv run python $$args; \
|
|
49
59
|
else \
|
|
50
60
|
uv run chainlit run -w --port 9000 $$args; \
|
|
51
61
|
fi
|
|
@@ -60,7 +70,7 @@ ensure-openapi-python-client:
|
|
|
60
70
|
|
|
61
71
|
generate/api-client: ensure-openapi-python-client
|
|
62
72
|
@echo "Generating OpenAPI spec..."
|
|
63
|
-
@cd ../langwatch &&
|
|
73
|
+
@cd ../langwatch && pnpm run task generateOpenAPISpec
|
|
64
74
|
@echo "Deleting old API client..."
|
|
65
75
|
@rm -rf src/langwatch/generated/langwatch_rest_api_client
|
|
66
76
|
@echo "Building API client..."
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# LangWatch Python SDK Examples
|
|
2
|
+
|
|
3
|
+
This directory contains examples demonstrating various LangWatch SDK features. Each example is a runnable Python script that shows real-world usage patterns.
|
|
4
|
+
|
|
5
|
+
## 📋 Categories
|
|
6
|
+
|
|
7
|
+
### 🤖 Core Bot Examples
|
|
8
|
+
|
|
9
|
+
Basic chatbot implementations showing fundamental LangWatch tracing:
|
|
10
|
+
|
|
11
|
+
| Example | Description | Key Features |
|
|
12
|
+
|---------|-------------|--------------|
|
|
13
|
+
| [`generic_bot.py`](generic_bot.py) | Simple synchronous chatbot | Basic tracing, metadata |
|
|
14
|
+
| [`generic_bot_sync_function.py`](generic_bot_sync_function.py) | Sync function usage | Function-level tracing |
|
|
15
|
+
| [`generic_bot_async_streaming.py`](generic_bot_async_streaming.py) | Async streaming responses | Streaming support, async/await |
|
|
16
|
+
| [`generic_bot_streaming.py`](generic_bot_streaming.py) | Synchronous streaming | Streaming without async |
|
|
17
|
+
| [`generic_bot_span_context_manager.py`](generic_bot_span_context_manager.py) | Manual span management | Context managers, custom spans |
|
|
18
|
+
| [`generic_bot_span_low_level.py`](generic_bot_span_low_level.py) | Low-level span control | Direct span manipulation |
|
|
19
|
+
|
|
20
|
+
### 🔗 Framework Integrations
|
|
21
|
+
|
|
22
|
+
Examples showing integration with popular AI frameworks:
|
|
23
|
+
|
|
24
|
+
| Example | Framework | Features |
|
|
25
|
+
|---------|-----------|----------|
|
|
26
|
+
| [`langchain_bot.py`](langchain_bot.py) | LangChain | LCEL, chains, agents |
|
|
27
|
+
| [`langchain_bot_with_memory.py`](langchain_bot_with_memory.py) | LangChain + Memory | Conversation history |
|
|
28
|
+
| [`langchain_rag_bot.py`](langchain_rag_bot.py) | LangChain RAG | Retrieval-augmented generation |
|
|
29
|
+
| [`langchain_rag_bot_with_threads.py`](langchain_rag_bot_with_threads.py) | LangChain RAG + Threads | Multi-threading |
|
|
30
|
+
| [`langchain_rag_bot_vertex_ai.py`](langchain_rag_bot_vertex_ai.py) | LangChain + Vertex AI | Google Cloud integration |
|
|
31
|
+
| [`langgraph_rag_bot_with_threads.py`](langgraph_rag_bot_with_threads.py) | LangGraph | Graph-based workflows |
|
|
32
|
+
| [`haystack_bot.py`](haystack_bot.py) | Haystack | Document search, pipelines |
|
|
33
|
+
| [`dspy_bot.py`](dspy_bot.py) | DSPy | Programmatic prompting |
|
|
34
|
+
| [`litellm_bot.py`](litellm_bot.py) | LiteLLM | Multi-provider support |
|
|
35
|
+
|
|
36
|
+
### 🌐 Web Framework Examples
|
|
37
|
+
|
|
38
|
+
Examples showing web application integration:
|
|
39
|
+
|
|
40
|
+
| Example | Framework | Features |
|
|
41
|
+
|---------|-----------|----------|
|
|
42
|
+
| [`fastapi_app.py`](fastapi_app.py) | FastAPI | Web API with tracing |
|
|
43
|
+
| [`prompt_management_fastapi.py`](prompt_management_fastapi.py) | FastAPI | Prompt management API |
|
|
44
|
+
| [`streamlit_openai_assistants_api_bot.py`](streamlit_openai_assistants_api_bot.py) | Streamlit | UI with assistants API |
|
|
45
|
+
|
|
46
|
+
### 📊 Evaluation & Analysis
|
|
47
|
+
|
|
48
|
+
Examples focused on evaluation and analytics:
|
|
49
|
+
|
|
50
|
+
| Example | Purpose | Features |
|
|
51
|
+
|---------|---------|----------|
|
|
52
|
+
| [`evaluation_manual_call.py`](evaluation_manual_call.py) | Manual evaluation | Custom evaluation logic |
|
|
53
|
+
| [`span_evaluation.py`](span_evaluation.py) | Span-based evaluation | Automatic span analysis |
|
|
54
|
+
| [`custom_evaluation_bot.py`](custom_evaluation_bot.py) | Custom evaluators | User-defined metrics |
|
|
55
|
+
|
|
56
|
+
### 🛡️ Safety & Reliability
|
|
57
|
+
|
|
58
|
+
Examples demonstrating guardrails and error handling:
|
|
59
|
+
|
|
60
|
+
| Example | Focus | Features |
|
|
61
|
+
|---------|-------|----------|
|
|
62
|
+
| [`guardrails.py`](guardrails.py) | Content safety | Input/output filtering |
|
|
63
|
+
| [`guardrails_parallel.py`](guardrails_parallel.py) | Parallel guardrails | Concurrent safety checks |
|
|
64
|
+
| [`guardrails_without_tracing.py`](guardrails_without_tracing.py) | Standalone guardrails | Safety without tracing |
|
|
65
|
+
| [`generic_bot_exception.py`](generic_bot_exception.py) | Error handling | Exception tracing |
|
|
66
|
+
|
|
67
|
+
### 🔍 RAG & Retrieval Examples
|
|
68
|
+
|
|
69
|
+
Advanced retrieval-augmented generation patterns:
|
|
70
|
+
|
|
71
|
+
| Example | Approach | Features |
|
|
72
|
+
|---------|----------|----------|
|
|
73
|
+
| [`generic_bot_rag.py`](generic_bot_rag.py) | Basic RAG | Document retrieval |
|
|
74
|
+
| [`generic_bot_rag_multithreaded.py`](generic_bot_rag_multithreaded.py) | Multi-threaded RAG | Concurrent processing |
|
|
75
|
+
| [`openai_bot_rag.py`](openai_bot_rag.py) | OpenAI + RAG | Embeddings, vector search |
|
|
76
|
+
|
|
77
|
+
### 📈 Advanced Features
|
|
78
|
+
|
|
79
|
+
Specialized functionality examples:
|
|
80
|
+
|
|
81
|
+
| Example | Feature | Description |
|
|
82
|
+
|---------|---------|-------------|
|
|
83
|
+
| [`fetch_policies_example.py`](fetch_policies_example.py) | Fetch policies | Prompt retrieval strategies |
|
|
84
|
+
| [`distributed_tracing.py`](distributed_tracing.py) | Distributed tracing | Multi-service tracing |
|
|
85
|
+
| [`dataset_kitchen_sink.py`](dataset_kitchen_sink.py) | Dataset operations | Full dataset workflow |
|
|
86
|
+
| [`offline_evaluation.ipynb`](offline_evaluation.ipynb) | Offline analysis | Jupyter notebook evaluation |
|
|
87
|
+
|
|
88
|
+
### 🔧 Specialized Integrations
|
|
89
|
+
|
|
90
|
+
Examples for specific use cases and integrations:
|
|
91
|
+
|
|
92
|
+
| Example | Integration | Purpose |
|
|
93
|
+
|---------|-------------|---------|
|
|
94
|
+
| [`azure_openai_stream_bot.py`](azure_openai_stream_bot.py) | Azure OpenAI | Cloud provider integration |
|
|
95
|
+
| [`strands_bot.py`](strands_bot.py) | Strands | Multi-agent systems |
|
|
96
|
+
|
|
97
|
+
## 🚀 Running Examples
|
|
98
|
+
|
|
99
|
+
### Prerequisites
|
|
100
|
+
```bash
|
|
101
|
+
# Install dependencies
|
|
102
|
+
uv sync
|
|
103
|
+
|
|
104
|
+
# Set API keys (varies by example)
|
|
105
|
+
export OPENAI_API_KEY="your-key"
|
|
106
|
+
export LANGWATCH_API_KEY="your-langwatch-key"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Run Individual Examples
|
|
110
|
+
```bash
|
|
111
|
+
# Basic bot
|
|
112
|
+
python examples/generic_bot.py
|
|
113
|
+
|
|
114
|
+
# LangChain integration
|
|
115
|
+
python examples/langchain_bot.py
|
|
116
|
+
|
|
117
|
+
# FastAPI web app
|
|
118
|
+
uvicorn examples.fastapi_app:app --reload
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Run All Examples (Testing)
|
|
122
|
+
```bash
|
|
123
|
+
# Run all examples as tests
|
|
124
|
+
pytest tests/test_examples.py
|
|
125
|
+
|
|
126
|
+
# Run specific example
|
|
127
|
+
pytest tests/test_examples.py -k "generic_bot"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## 📁 Directory Structure
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
examples/
|
|
134
|
+
├── README.md # This file
|
|
135
|
+
├── *.py # Individual examples
|
|
136
|
+
├── cli/ # CLI-specific examples
|
|
137
|
+
│ └── README.md
|
|
138
|
+
├── data/ # Example data files
|
|
139
|
+
├── documentation/ # Documentation examples
|
|
140
|
+
├── openinference/ # OpenInference integration
|
|
141
|
+
├── opentelemetry/ # OpenTelemetry integration
|
|
142
|
+
├── prompt_cli/ # Prompt CLI examples
|
|
143
|
+
├── sanity/ # Setup/sanity check examples
|
|
144
|
+
├── test_utils/ # Utilities for testing examples
|
|
145
|
+
└── weaviate_setup/ # Weaviate-specific setup
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## 🎯 Example Categories
|
|
149
|
+
|
|
150
|
+
- **Beginner**: `generic_bot.py`, `generic_bot_sync_function.py`
|
|
151
|
+
- **Intermediate**: Framework integrations, basic RAG
|
|
152
|
+
- **Advanced**: Multi-threading, distributed tracing, custom evaluations, fetch policies
|
|
153
|
+
- **Integration**: Web frameworks, cloud providers, specialized tools
|
|
154
|
+
|
|
155
|
+
## 📝 Contributing
|
|
156
|
+
|
|
157
|
+
When adding new examples:
|
|
158
|
+
1. Follow naming convention: `{feature/framework}_bot.py`
|
|
159
|
+
2. Include docstring explaining what it demonstrates
|
|
160
|
+
3. Add to appropriate category in this README
|
|
161
|
+
4. Ensure it runs with `pytest tests/test_examples.py`
|
|
162
|
+
|
|
163
|
+
## 🔗 Related Documentation
|
|
164
|
+
|
|
165
|
+
- [Main SDK Documentation](../README.md)
|
|
166
|
+
- [Testing Guidelines](../TESTING.md)
|
|
167
|
+
- [Agent Guidelines](../AGENTS.md)
|
|
@@ -23,33 +23,13 @@ from pathlib import Path
|
|
|
23
23
|
|
|
24
24
|
from dotenv import load_dotenv
|
|
25
25
|
import langwatch
|
|
26
|
+
from examples.test_utils.run_cli import run_cli
|
|
26
27
|
|
|
27
28
|
load_dotenv()
|
|
28
29
|
|
|
29
30
|
CLI_EXECUTABLE = ["npx", "langwatch@latest"]
|
|
30
31
|
|
|
31
32
|
|
|
32
|
-
def run_cli(command: list, cwd: Path):
|
|
33
|
-
"""Run CLI command and handle errors."""
|
|
34
|
-
print(f"▶️ {' '.join(command)}")
|
|
35
|
-
try:
|
|
36
|
-
result = subprocess.run(
|
|
37
|
-
command,
|
|
38
|
-
cwd=cwd,
|
|
39
|
-
capture_output=True,
|
|
40
|
-
text=True,
|
|
41
|
-
timeout=30, # 30 second timeout
|
|
42
|
-
input="Y\n", # Answer "Y" to prompts
|
|
43
|
-
)
|
|
44
|
-
if result.returncode != 0:
|
|
45
|
-
print(f"❌ Failed: {result.stderr}")
|
|
46
|
-
raise subprocess.CalledProcessError(result.returncode, command)
|
|
47
|
-
return result
|
|
48
|
-
except subprocess.TimeoutExpired:
|
|
49
|
-
print("❌ Command timed out after 30 seconds")
|
|
50
|
-
raise
|
|
51
|
-
|
|
52
|
-
|
|
53
33
|
def main():
|
|
54
34
|
langwatch.setup()
|
|
55
35
|
|
|
@@ -59,11 +59,11 @@ async def main(message: cl.Message):
|
|
|
59
59
|
"span_id": f"span_{nanoid.generate()}",
|
|
60
60
|
"input": {
|
|
61
61
|
"type": "text",
|
|
62
|
-
"value": message.content,
|
|
62
|
+
"value": "" if index == 0 else message.content,
|
|
63
63
|
},
|
|
64
64
|
"output": {
|
|
65
65
|
"type": "text",
|
|
66
|
-
"value": f"{full_response} (span {index})",
|
|
66
|
+
"value": "" if index == 0 else f"{full_response} (span {index})",
|
|
67
67
|
},
|
|
68
68
|
"timestamps": {
|
|
69
69
|
"started_at": int(time.time() * 1000),
|
|
@@ -79,10 +79,11 @@ async def main(message: cl.Message):
|
|
|
79
79
|
)
|
|
80
80
|
|
|
81
81
|
threads = []
|
|
82
|
-
for i in range(
|
|
82
|
+
for i in range(2):
|
|
83
83
|
thread = threading.Thread(target=send_span, args=(i,))
|
|
84
84
|
threads.append(thread)
|
|
85
85
|
thread.start()
|
|
86
|
+
time.sleep(30)
|
|
86
87
|
|
|
87
88
|
# Wait for all threads to complete
|
|
88
89
|
for thread in threads:
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import subprocess
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def run_cli(command: list, cwd: Path):
|
|
6
|
+
"""Run CLI command and handle errors."""
|
|
7
|
+
print(f"▶️ {' '.join(command)}")
|
|
8
|
+
try:
|
|
9
|
+
result = subprocess.run(
|
|
10
|
+
command,
|
|
11
|
+
cwd=cwd,
|
|
12
|
+
capture_output=True,
|
|
13
|
+
text=True,
|
|
14
|
+
timeout=30, # 30 second timeout
|
|
15
|
+
input="Y\n", # Answer "Y" to prompts
|
|
16
|
+
)
|
|
17
|
+
if result.returncode != 0:
|
|
18
|
+
print(f"❌ Failed: {result.stderr}")
|
|
19
|
+
raise subprocess.CalledProcessError(result.returncode, command)
|
|
20
|
+
return result
|
|
21
|
+
except subprocess.TimeoutExpired:
|
|
22
|
+
print("❌ Command timed out after 30 seconds")
|
|
23
|
+
raise
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "langwatch"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.8.0" # remember to also update it in src/langwatch/__version__.py
|
|
4
4
|
description = "LangWatch Python SDK, for monitoring your LLMs"
|
|
5
5
|
authors = [{ name = "Langwatch Engineers", email = "engineering@langwatch.ai" }]
|
|
6
6
|
requires-python = ">=3.10,<3.14"
|
|
@@ -64,6 +64,11 @@ packages = ["src/langwatch"]
|
|
|
64
64
|
testpaths = ["tests"]
|
|
65
65
|
python_files = "test_*.py"
|
|
66
66
|
python_functions = "test_*"
|
|
67
|
+
markers = [
|
|
68
|
+
"e2e: End-to-end tests that require external services",
|
|
69
|
+
"integration: Integration tests",
|
|
70
|
+
"unit: Unit tests (default)",
|
|
71
|
+
]
|
|
67
72
|
|
|
68
73
|
[dependency-groups]
|
|
69
74
|
dev = ["black>=25.1.0"]
|
|
@@ -99,4 +104,8 @@ examples = [
|
|
|
99
104
|
"strands-agents[otel]>=1.14.0,<2.0.0",
|
|
100
105
|
"unstructured[pdf]>=0.18.3",
|
|
101
106
|
]
|
|
102
|
-
tests = [
|
|
107
|
+
tests = [
|
|
108
|
+
"factory-boy>=3.3.3",
|
|
109
|
+
"pytest-asyncio>=0.21.2",
|
|
110
|
+
"python-dotenv==1.0.1"
|
|
111
|
+
]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# DO NOT EDIT THIS FILE - IT IS TO MAINTAIN PARITY WITH TYPESCRIPT SDK
|
|
2
|
+
|
|
3
|
+
Feature: Prompt Fetch Policy
|
|
4
|
+
As a developer using the Python SDK
|
|
5
|
+
I want to retrieve prompts using with the same behavior as the
|
|
6
|
+
typescript feature: ../typescript-sdk/specs/prompts/fetch-policy.feature
|
|
7
|
+
|
|
@@ -8,6 +8,8 @@ from .login import login
|
|
|
8
8
|
from .state import get_api_key, get_endpoint
|
|
9
9
|
from .__version__ import __version__
|
|
10
10
|
from .utils.initialization import ensure_setup, setup
|
|
11
|
+
from .prompts.types import FetchPolicy
|
|
12
|
+
|
|
11
13
|
|
|
12
14
|
# Type hints for IntelliSense (only imported for typing)
|
|
13
15
|
from typing import TYPE_CHECKING
|
|
@@ -153,5 +155,5 @@ __all__ = [
|
|
|
153
155
|
"evaluations",
|
|
154
156
|
"langchain",
|
|
155
157
|
"dspy",
|
|
156
|
-
"
|
|
158
|
+
"FetchPolicy",
|
|
157
159
|
]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from .prompt_facade import PromptsFacade
|
|
2
|
+
from .types import FetchPolicy
|
|
3
|
+
|
|
4
|
+
__all__ = [
|
|
5
|
+
"PromptsFacade",
|
|
6
|
+
"FetchPolicy",
|
|
7
|
+
]
|
|
8
|
+
|
|
9
|
+
# Cached PromptsFacade instance for module-level method delegation
|
|
10
|
+
_facade_instance: PromptsFacade | None = None
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _get_facade() -> PromptsFacade:
|
|
14
|
+
"""Get or create the cached PromptsFacade instance."""
|
|
15
|
+
global _facade_instance
|
|
16
|
+
if _facade_instance is None:
|
|
17
|
+
_facade_instance = PromptsFacade.from_global()
|
|
18
|
+
return _facade_instance
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def __getattr__(name: str):
|
|
22
|
+
"""
|
|
23
|
+
Delegate attribute access to PromptsFacade instance.
|
|
24
|
+
|
|
25
|
+
This allows langwatch.prompts to work both as:
|
|
26
|
+
- A module (for submodule access like `from langwatch.prompts.types import FetchPolicy`)
|
|
27
|
+
- A facade (for method access like `langwatch.prompts.get(...)`)
|
|
28
|
+
|
|
29
|
+
When Python imports `langwatch.prompts.types`, it stores `langwatch.prompts` as a module
|
|
30
|
+
in sys.modules, which shadows the lazy-loaded PromptsFacade instance from langwatch.__getattr__.
|
|
31
|
+
This __getattr__ ensures method calls still work by delegating to a PromptsFacade instance.
|
|
32
|
+
"""
|
|
33
|
+
facade = _get_facade()
|
|
34
|
+
if hasattr(facade, name):
|
|
35
|
+
return getattr(facade, name)
|
|
36
|
+
raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
|
|
@@ -139,7 +139,8 @@ def unwrap_response(
|
|
|
139
139
|
error_detail = f": {msg}" if msg else ""
|
|
140
140
|
raise ValueError(f"Invalid prompt request{error_detail}")
|
|
141
141
|
if status == 401:
|
|
142
|
-
|
|
142
|
+
error_detail = f": {msg}" if msg else ""
|
|
143
|
+
raise RuntimeError(f"Authentication error{error_detail}")
|
|
143
144
|
if status >= 500:
|
|
144
145
|
error_detail = f" - {msg}" if msg else ""
|
|
145
146
|
raise RuntimeError(
|
|
@@ -25,8 +25,13 @@ class LocalPromptLoader:
|
|
|
25
25
|
"""Loads prompts from local files in CLI format."""
|
|
26
26
|
|
|
27
27
|
def __init__(self, base_path: Optional[Path] = None):
|
|
28
|
-
"""Initialize with base path (defaults to current working directory)."""
|
|
29
|
-
self.
|
|
28
|
+
"""Initialize with base path (defaults to current working directory at load time)."""
|
|
29
|
+
self._base_path = base_path
|
|
30
|
+
|
|
31
|
+
@property
|
|
32
|
+
def base_path(self) -> Path:
|
|
33
|
+
"""Get the base path, defaulting to current working directory if not set."""
|
|
34
|
+
return self._base_path or Path.cwd()
|
|
30
35
|
|
|
31
36
|
def load_prompt(self, prompt_id: str) -> Optional[PromptData]:
|
|
32
37
|
"""
|
|
@@ -8,7 +8,8 @@ or when API is unavailable.
|
|
|
8
8
|
|
|
9
9
|
Follows the facade pattern to coordinate between LocalPromptLoader and PromptApiService.
|
|
10
10
|
"""
|
|
11
|
-
from typing import Dict, List, Literal, Optional
|
|
11
|
+
from typing import Any, Dict, List, Literal, Optional
|
|
12
|
+
import time
|
|
12
13
|
from langwatch.generated.langwatch_rest_api_client.client import (
|
|
13
14
|
Client as LangWatchRestApiClient,
|
|
14
15
|
)
|
|
@@ -16,9 +17,13 @@ from langwatch.generated.langwatch_rest_api_client.client import (
|
|
|
16
17
|
from langwatch.utils.initialization import ensure_setup
|
|
17
18
|
from langwatch.state import get_instance
|
|
18
19
|
from .prompt import Prompt
|
|
20
|
+
from .types import FetchPolicy
|
|
19
21
|
from .prompt_api_service import PromptApiService
|
|
20
22
|
from .local_loader import LocalPromptLoader
|
|
21
23
|
from .types import MessageDict, InputDict, OutputDict
|
|
24
|
+
from logging import getLogger
|
|
25
|
+
|
|
26
|
+
logger = getLogger(__name__)
|
|
22
27
|
|
|
23
28
|
|
|
24
29
|
class PromptsFacade:
|
|
@@ -34,6 +39,7 @@ class PromptsFacade:
|
|
|
34
39
|
"""Initialize the prompt service facade with dependencies."""
|
|
35
40
|
self._api_service = PromptApiService(rest_api_client)
|
|
36
41
|
self._local_loader = LocalPromptLoader()
|
|
42
|
+
self._cache: Dict[str, Dict[str, Any]] = {}
|
|
37
43
|
|
|
38
44
|
@classmethod
|
|
39
45
|
def from_global(cls) -> "PromptsFacade":
|
|
@@ -46,17 +52,43 @@ class PromptsFacade:
|
|
|
46
52
|
)
|
|
47
53
|
return cls(instance.rest_api_client)
|
|
48
54
|
|
|
49
|
-
def get(
|
|
55
|
+
def get(
|
|
56
|
+
self,
|
|
57
|
+
prompt_id: str,
|
|
58
|
+
version_number: Optional[int] = None,
|
|
59
|
+
fetch_policy: Optional[FetchPolicy] = None,
|
|
60
|
+
cache_ttl_minutes: Optional[int] = None,
|
|
61
|
+
) -> Prompt:
|
|
50
62
|
"""
|
|
51
|
-
Retrieve a prompt by its ID with
|
|
63
|
+
Retrieve a prompt by its ID with configurable fetch policy.
|
|
52
64
|
|
|
53
|
-
|
|
54
|
-
|
|
65
|
+
Args:
|
|
66
|
+
prompt_id: The prompt ID to retrieve
|
|
67
|
+
version_number: Optional specific version number to retrieve
|
|
68
|
+
fetch_policy: How to fetch the prompt. Defaults to MATERIALIZED_FIRST.
|
|
69
|
+
cache_ttl_minutes: Cache TTL in minutes (only used with CACHE_TTL policy). Defaults to 5.
|
|
55
70
|
|
|
56
71
|
Raises:
|
|
57
72
|
ValueError: If the prompt is not found (404 error).
|
|
58
73
|
RuntimeError: If the API call fails for other reasons (auth, server errors, etc.).
|
|
59
74
|
"""
|
|
75
|
+
fetch_policy = fetch_policy or FetchPolicy.MATERIALIZED_FIRST
|
|
76
|
+
|
|
77
|
+
if fetch_policy == FetchPolicy.MATERIALIZED_ONLY:
|
|
78
|
+
return self._get_materialized_only(prompt_id)
|
|
79
|
+
elif fetch_policy == FetchPolicy.ALWAYS_FETCH:
|
|
80
|
+
return self._get_always_fetch(prompt_id, version_number)
|
|
81
|
+
elif fetch_policy == FetchPolicy.CACHE_TTL:
|
|
82
|
+
return self._get_cache_ttl(
|
|
83
|
+
prompt_id, version_number, cache_ttl_minutes or 5
|
|
84
|
+
)
|
|
85
|
+
else: # MATERIALIZED_FIRST (default)
|
|
86
|
+
return self._get_materialized_first(prompt_id, version_number)
|
|
87
|
+
|
|
88
|
+
def _get_materialized_first(
|
|
89
|
+
self, prompt_id: str, version_number: Optional[int] = None
|
|
90
|
+
) -> Prompt:
|
|
91
|
+
"""Get prompt using MATERIALIZED_FIRST policy (local first, API fallback)."""
|
|
60
92
|
# Try to load from local files first
|
|
61
93
|
local_data = self._local_loader.load_prompt(prompt_id)
|
|
62
94
|
if local_data is not None:
|
|
@@ -66,6 +98,64 @@ class PromptsFacade:
|
|
|
66
98
|
api_data = self._api_service.get(prompt_id, version_number)
|
|
67
99
|
return Prompt(api_data)
|
|
68
100
|
|
|
101
|
+
def _get_materialized_only(self, prompt_id: str) -> Prompt:
|
|
102
|
+
"""Get prompt using MATERIALIZED_ONLY policy (local only, no API calls)."""
|
|
103
|
+
local_data = self._local_loader.load_prompt(prompt_id)
|
|
104
|
+
if local_data is not None:
|
|
105
|
+
return Prompt(local_data)
|
|
106
|
+
|
|
107
|
+
raise ValueError(f"Prompt '{prompt_id}' not found in materialized files")
|
|
108
|
+
|
|
109
|
+
def _get_always_fetch(
|
|
110
|
+
self, prompt_id: str, version_number: Optional[int] = None
|
|
111
|
+
) -> Prompt:
|
|
112
|
+
"""Get prompt using ALWAYS_FETCH policy (API first, local fallback)."""
|
|
113
|
+
try:
|
|
114
|
+
api_data = self._api_service.get(prompt_id, version_number)
|
|
115
|
+
return Prompt(api_data)
|
|
116
|
+
except Exception:
|
|
117
|
+
# Fall back to local if API fails
|
|
118
|
+
local_data = self._local_loader.load_prompt(prompt_id)
|
|
119
|
+
if local_data is not None:
|
|
120
|
+
return Prompt(local_data)
|
|
121
|
+
raise ValueError(f"Prompt '{prompt_id}' not found locally or on server")
|
|
122
|
+
|
|
123
|
+
def _get_cache_ttl(
|
|
124
|
+
self,
|
|
125
|
+
prompt_id: str,
|
|
126
|
+
version_number: Optional[int] = None,
|
|
127
|
+
cache_ttl_minutes: int = 5,
|
|
128
|
+
) -> Prompt:
|
|
129
|
+
"""Get prompt using CACHE_TTL policy (cache with TTL, fallback to local)."""
|
|
130
|
+
cache_key = f"{prompt_id}::version:{version_number or ''}"
|
|
131
|
+
ttl_ms = cache_ttl_minutes * 60 * 1000
|
|
132
|
+
now = time.time() * 1000 # Convert to milliseconds
|
|
133
|
+
|
|
134
|
+
cached = self._cache.get(cache_key)
|
|
135
|
+
if cached and now - cached["timestamp"] < ttl_ms:
|
|
136
|
+
return Prompt(cached["data"])
|
|
137
|
+
|
|
138
|
+
try:
|
|
139
|
+
api_data = self._api_service.get(prompt_id, version_number)
|
|
140
|
+
self._cache[cache_key] = {"data": api_data, "timestamp": now}
|
|
141
|
+
return Prompt(api_data)
|
|
142
|
+
except Exception:
|
|
143
|
+
logger.warning(
|
|
144
|
+
f"Failed to fetch prompt '{prompt_id}' from API, falling back to local",
|
|
145
|
+
exc_info=True,
|
|
146
|
+
stack_info=True,
|
|
147
|
+
extra={
|
|
148
|
+
"prompt_id": prompt_id,
|
|
149
|
+
"version_number": version_number,
|
|
150
|
+
"cache_ttl_minutes": cache_ttl_minutes,
|
|
151
|
+
},
|
|
152
|
+
)
|
|
153
|
+
# Fall back to local if API fails
|
|
154
|
+
local_data = self._local_loader.load_prompt(prompt_id)
|
|
155
|
+
if local_data is not None:
|
|
156
|
+
return Prompt(local_data)
|
|
157
|
+
raise ValueError(f"Prompt '{prompt_id}' not found locally or on server")
|
|
158
|
+
|
|
69
159
|
def create(
|
|
70
160
|
self,
|
|
71
161
|
handle: str,
|
|
@@ -8,6 +8,9 @@ organized by their purpose and scope.
|
|
|
8
8
|
# Core prompt data structure
|
|
9
9
|
from .prompt_data import PromptData
|
|
10
10
|
|
|
11
|
+
# Fetch policy
|
|
12
|
+
from .fetch_policy import FetchPolicy
|
|
13
|
+
|
|
11
14
|
# Standardized data structures
|
|
12
15
|
from .structures import (
|
|
13
16
|
MessageDict,
|
|
@@ -24,4 +27,5 @@ __all__ = [
|
|
|
24
27
|
"InputDict",
|
|
25
28
|
"OutputDict",
|
|
26
29
|
"ResponseFormatDict",
|
|
30
|
+
"FetchPolicy",
|
|
27
31
|
]
|