Full Code of traceloop/openllmetry for AI

main 3f2418b65aed cached
1538 files
34.4 MB
9.1M tokens
3911 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (36,462K chars total). Download the full file to get everything.
Repository: traceloop/openllmetry
Branch: main
Commit: 3f2418b65aed
Files: 1538
Total size: 34.4 MB

Directory structure:
gitextract_mxgftuci/

├── .cz.toml
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   └── feature_request.yml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── ci.yml
│       └── release.yml
├── .gitignore
├── CHANGELOG.md
├── CLAUDE.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── GOVERNANCE.md
├── LICENSE
├── MAINTAINERS.md
├── README.md
├── SECURITY.md
├── nx.json
├── package.json
├── packages/
│   ├── .gitkeep
│   ├── opentelemetry-instrumentation-agno/
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── agno/
│   │   │           ├── __init__.py
│   │   │           ├── _tool_wrappers.py
│   │   │           ├── config.py
│   │   │           ├── streaming.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_agent/
│   │       │   │   ├── test_agent_arun_basic.yaml
│   │       │   │   ├── test_agent_arun_streaming.yaml
│   │       │   │   ├── test_agent_arun_streaming_with_tools.yaml
│   │       │   │   ├── test_agent_metrics.yaml
│   │       │   │   ├── test_agent_run_basic.yaml
│   │       │   │   ├── test_agent_run_streaming.yaml
│   │       │   │   ├── test_agent_run_streaming_with_tools.yaml
│   │       │   │   └── test_agent_with_tools.yaml
│   │       │   └── test_team/
│   │       │       ├── test_team_basic.yaml
│   │       │       └── test_team_discussion.yaml
│   │       ├── conftest.py
│   │       ├── test_agent.py
│   │       └── test_team.py
│   ├── opentelemetry-instrumentation-alephalpha/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── alephalpha/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   ├── pytest.ini
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   └── test_completion/
│   │       │       ├── test_alephalpha_completion.yaml
│   │       │       ├── test_alephalpha_completion_with_events_with_content.yaml
│   │       │       └── test_alephalpha_completion_with_events_with_no_content.yaml
│   │       ├── conftest.py
│   │       └── test_completion.py
│   ├── opentelemetry-instrumentation-anthropic/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── anthropic/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── streaming.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_bedrock_with_raw_response/
│   │       │   │   ├── test_async_anthropic_bedrock_beta_with_raw_response.yaml
│   │       │   │   ├── test_async_anthropic_bedrock_regular_create.yaml
│   │       │   │   └── test_async_anthropic_bedrock_with_raw_response.yaml
│   │       │   ├── test_completion/
│   │       │   │   ├── test_anthropic_completion_legacy.yaml
│   │       │   │   ├── test_anthropic_completion_with_events_with_content.yaml
│   │       │   │   └── test_anthropic_completion_with_events_with_no_content.yaml
│   │       │   ├── test_messages/
│   │       │   │   ├── test_anthropic_async_multi_modal_legacy.yaml
│   │       │   │   ├── test_anthropic_async_multi_modal_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_async_multi_modal_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_image_with_history.yaml
│   │       │   │   ├── test_anthropic_message_create_legacy.yaml
│   │       │   │   ├── test_anthropic_message_create_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_message_create_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_message_stream_manager_legacy.yaml
│   │       │   │   ├── test_anthropic_message_stream_manager_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_message_stream_manager_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_message_streaming_legacy.yaml
│   │       │   │   ├── test_anthropic_message_streaming_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_message_streaming_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_multi_modal_legacy.yaml
│   │       │   │   ├── test_anthropic_multi_modal_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_multi_modal_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_streaming_helper_methods_legacy.yaml
│   │       │   │   ├── test_anthropic_sync_streaming_helper_methods_legacy.yaml
│   │       │   │   ├── test_anthropic_text_stream_helper_method_legacy.yaml
│   │       │   │   ├── test_anthropic_tools_history_legacy.yaml
│   │       │   │   ├── test_anthropic_tools_history_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_tools_history_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_tools_legacy.yaml
│   │       │   │   ├── test_anthropic_tools_streaming_legacy.yaml
│   │       │   │   ├── test_anthropic_tools_streaming_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_tools_streaming_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_tools_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_tools_with_events_with_no_content.yaml
│   │       │   │   ├── test_async_anthropic_beta_message_stream_manager_legacy.yaml
│   │       │   │   ├── test_async_anthropic_message_create_legacy.yaml
│   │       │   │   ├── test_async_anthropic_message_create_with_events_with_content.yaml
│   │       │   │   ├── test_async_anthropic_message_create_with_events_with_no_content.yaml
│   │       │   │   ├── test_async_anthropic_message_stream_manager_legacy.yaml
│   │       │   │   ├── test_async_anthropic_message_stream_manager_with_events_with_content.yaml
│   │       │   │   ├── test_async_anthropic_message_stream_manager_with_events_with_no_content.yaml
│   │       │   │   ├── test_async_anthropic_message_streaming_legacy.yaml
│   │       │   │   ├── test_async_anthropic_message_streaming_with_events_with_content.yaml
│   │       │   │   ├── test_async_anthropic_message_streaming_with_events_with_no_content.yaml
│   │       │   │   ├── test_with_asyncio_run_legacy.yaml
│   │       │   │   ├── test_with_asyncio_run_with_events_with_content.yaml
│   │       │   │   └── test_with_asyncio_run_with_events_with_no_content.yaml
│   │       │   ├── test_prompt_caching/
│   │       │   │   ├── test_anthropic_prompt_caching_async_legacy.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_async_stream_legacy.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_async_stream_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_async_stream_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_async_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_async_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_legacy.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_stream_legacy.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_stream_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_stream_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_with_events_with_content.yaml
│   │       │   │   └── test_anthropic_prompt_caching_with_events_with_no_content.yaml
│   │       │   ├── test_structured_outputs/
│   │       │   │   ├── test_anthropic_structured_outputs_legacy.yaml
│   │       │   │   ├── test_anthropic_structured_outputs_with_events_with_content.yaml
│   │       │   │   └── test_anthropic_structured_outputs_with_events_with_no_content.yaml
│   │       │   └── test_thinking/
│   │       │       ├── test_anthropic_thinking_legacy.yaml
│   │       │       ├── test_anthropic_thinking_streaming_legacy.yaml
│   │       │       ├── test_anthropic_thinking_streaming_with_events_with_content.yaml
│   │       │       ├── test_anthropic_thinking_streaming_with_events_with_no_content.yaml
│   │       │       ├── test_anthropic_thinking_with_events_with_content.yaml
│   │       │       ├── test_anthropic_thinking_with_events_with_no_content.yaml
│   │       │       ├── test_async_anthropic_thinking_legacy.yaml
│   │       │       ├── test_async_anthropic_thinking_streaming_legacy.yaml
│   │       │       ├── test_async_anthropic_thinking_streaming_with_events_with_content.yaml
│   │       │       ├── test_async_anthropic_thinking_streaming_with_events_with_no_content.yaml
│   │       │       ├── test_async_anthropic_thinking_with_events_with_content.yaml
│   │       │       └── test_async_anthropic_thinking_with_events_with_no_content.yaml
│   │       ├── conftest.py
│   │       ├── data/
│   │       │   └── 1024+tokens.txt
│   │       ├── test_bedrock_with_raw_response.py
│   │       ├── test_completion.py
│   │       ├── test_messages.py
│   │       ├── test_prompt_caching.py
│   │       ├── test_structured_outputs.py
│   │       ├── test_thinking.py
│   │       └── utils.py
│   ├── opentelemetry-instrumentation-bedrock/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── bedrock/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── guardrail.py
│   │   │           ├── prompt_caching.py
│   │   │           ├── reusable_streaming_body.py
│   │   │           ├── span_utils.py
│   │   │           ├── streaming_wrapper.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── metrics/
│   │       │   ├── __init__.py
│   │       │   ├── cassettes/
│   │       │   │   ├── test_bedrock_guardrails_metrics/
│   │       │   │   │   ├── test_titan_converse_guardrail.yaml
│   │       │   │   │   ├── test_titan_converse_stream_guardrail.yaml
│   │       │   │   │   ├── test_titan_invoke_model_guardrail.yaml
│   │       │   │   │   └── test_titan_invoke_stream_guardrail.yaml
│   │       │   │   ├── test_bedrock_metrics/
│   │       │   │   │   └── test_invoke_model_metrics.yaml
│   │       │   │   └── test_bedrock_prompt_caching_metrics/
│   │       │   │       └── test_prompt_cache.yaml
│   │       │   ├── conftest.py
│   │       │   ├── test_bedrock_guardrails_metrics.py
│   │       │   ├── test_bedrock_metrics.py
│   │       │   └── test_bedrock_prompt_caching_metrics.py
│   │       └── traces/
│   │           ├── __init__.py
│   │           ├── cassettes/
│   │           │   ├── test_ai21/
│   │           │   │   ├── test_ai21_j2_completion_string_content.yaml
│   │           │   │   ├── test_ai21_j2_completion_string_content_with_events_with_content.yaml
│   │           │   │   └── test_ai21_j2_completion_string_content_with_events_with_no_content.yaml
│   │           │   ├── test_anthropic/
│   │           │   │   ├── test_anthropic_2_completion.yaml
│   │           │   │   ├── test_anthropic_2_completion_with_events_with_content.yaml
│   │           │   │   ├── test_anthropic_2_completion_with_events_with_no_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_complex_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_complex_content_with_events_with_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_complex_content_with_events_with_no_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_streaming.yaml
│   │           │   │   ├── test_anthropic_3_completion_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_string_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_string_content_with_events_with_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_string_content_with_events_with_no_content.yaml
│   │           │   │   ├── test_anthropic_converse_stream_with_tool_use.yaml
│   │           │   │   ├── test_anthropic_cross_region.yaml
│   │           │   │   ├── test_anthropic_cross_region_with_events_with_content.yaml
│   │           │   │   ├── test_anthropic_cross_region_with_events_with_no_content.yaml
│   │           │   │   ├── test_prompt_cache.yaml
│   │           │   │   ├── test_prompt_cache_with_events_with_content.yaml
│   │           │   │   └── test_prompt_cache_with_events_with_no_content.yaml
│   │           │   ├── test_cohere/
│   │           │   │   ├── test_cohere_completion.yaml
│   │           │   │   ├── test_cohere_completion_with_events_with_content.yaml
│   │           │   │   └── test_cohere_completion_with_events_with_no_content.yaml
│   │           │   ├── test_guardrails/
│   │           │   │   ├── test_guardrail_converse.yaml
│   │           │   │   ├── test_guardrail_converse_stream.yaml
│   │           │   │   ├── test_guardrail_invoke.yaml
│   │           │   │   └── test_guardrail_invoke_stream.yaml
│   │           │   ├── test_imported_model/
│   │           │   │   ├── test_imported_model_completion.yaml
│   │           │   │   ├── test_imported_model_completion_with_events_with_content.yaml
│   │           │   │   └── test_imported_model_completion_with_events_with_no_content.yaml
│   │           │   ├── test_meta/
│   │           │   │   ├── test_meta_converse.yaml
│   │           │   │   ├── test_meta_converse_stream.yaml
│   │           │   │   ├── test_meta_converse_stream_with_events_with_content.yaml
│   │           │   │   ├── test_meta_converse_stream_with_events_with_no_content.yaml
│   │           │   │   ├── test_meta_converse_with_events_with_content.yaml
│   │           │   │   ├── test_meta_converse_with_events_with_no_content.yaml
│   │           │   │   ├── test_meta_llama2_completion_string_content.yaml
│   │           │   │   ├── test_meta_llama2_completion_string_content_with_events_with_content.yaml
│   │           │   │   ├── test_meta_llama2_completion_string_content_with_events_with_no_content.yaml
│   │           │   │   ├── test_meta_llama3_completion.yaml
│   │           │   │   ├── test_meta_llama3_completion_with_events_with_content.yaml
│   │           │   │   └── test_meta_llama3_completion_with_events_with_no_content.yaml
│   │           │   ├── test_nova/
│   │           │   │   ├── test_nova_completion.yaml
│   │           │   │   ├── test_nova_completion_with_events_with_content.yaml
│   │           │   │   ├── test_nova_completion_with_events_with_no_content.yaml
│   │           │   │   ├── test_nova_converse.yaml
│   │           │   │   ├── test_nova_converse_stream.yaml
│   │           │   │   ├── test_nova_converse_stream_with_events_with_content.yaml
│   │           │   │   ├── test_nova_converse_stream_with_events_with_no_content.yaml
│   │           │   │   ├── test_nova_converse_with_events_with_content.yaml
│   │           │   │   ├── test_nova_converse_with_events_with_no_content.yaml
│   │           │   │   ├── test_nova_cross_region_invoke.yaml
│   │           │   │   ├── test_nova_cross_region_invoke_with_events_with_content.yaml
│   │           │   │   ├── test_nova_cross_region_invoke_with_events_with_no_content.yaml
│   │           │   │   ├── test_nova_invoke_stream.yaml
│   │           │   │   ├── test_nova_invoke_stream_with_events_with_content.yaml
│   │           │   │   └── test_nova_invoke_stream_with_events_with_no_content.yaml
│   │           │   └── test_titan/
│   │           │       ├── test_titan_completion.yaml
│   │           │       ├── test_titan_completion_with_events_with_content.yaml
│   │           │       ├── test_titan_completion_with_events_with_no_content.yaml
│   │           │       ├── test_titan_converse.yaml
│   │           │       ├── test_titan_converse_stream.yaml
│   │           │       ├── test_titan_converse_stream_with_events_with_content.yaml
│   │           │       ├── test_titan_converse_stream_with_events_with_no_content.yaml
│   │           │       ├── test_titan_converse_with_events_with_content.yaml
│   │           │       ├── test_titan_converse_with_events_with_no_content.yaml
│   │           │       ├── test_titan_invoke_stream.yaml
│   │           │       ├── test_titan_invoke_stream_with_events_with_content.yaml
│   │           │       └── test_titan_invoke_stream_with_events_with_no_content.yaml
│   │           ├── test_ai21.py
│   │           ├── test_anthropic.py
│   │           ├── test_cohere.py
│   │           ├── test_guardrails.py
│   │           ├── test_imported_model.py
│   │           ├── test_meta.py
│   │           ├── test_nova.py
│   │           └── test_titan.py
│   ├── opentelemetry-instrumentation-chromadb/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── chromadb/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── utils.py
│   │   │           ├── version.py
│   │   │           └── wrapper.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       └── test_query.py
│   ├── opentelemetry-instrumentation-cohere/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── cohere/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── streaming.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_chat/
│   │       │   │   ├── test_cohere_chat_legacy.yaml
│   │       │   │   ├── test_cohere_chat_legacy_async.yaml
│   │       │   │   ├── test_cohere_chat_legacy_with_streaming.yaml
│   │       │   │   ├── test_cohere_chat_legacy_with_streaming_async.yaml
│   │       │   │   ├── test_cohere_chat_with_events_with_content.yaml
│   │       │   │   ├── test_cohere_chat_with_events_with_content_async.yaml
│   │       │   │   ├── test_cohere_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_cohere_chat_with_events_with_no_content_async.yaml
│   │       │   │   ├── test_cohere_v2_chat_legacy.yaml
│   │       │   │   ├── test_cohere_v2_chat_legacy_with_streaming.yaml
│   │       │   │   ├── test_cohere_v2_chat_legacy_with_streaming_async.yaml
│   │       │   │   ├── test_cohere_v2_chat_legacy_with_tool_calls_and_history.yaml
│   │       │   │   ├── test_cohere_v2_chat_legacy_with_tool_calls_and_history_async.yaml
│   │       │   │   ├── test_cohere_v2_chat_legacy_with_tool_calls_and_streaming.yaml
│   │       │   │   └── test_cohere_v2_chat_legacy_with_tool_calls_and_streaming_async.yaml
│   │       │   ├── test_completion/
│   │       │   │   ├── test_cohere_completion_legacy.yaml
│   │       │   │   ├── test_cohere_completion_with_events_with_content.yaml
│   │       │   │   └── test_cohere_completion_with_events_with_no_content.yaml
│   │       │   ├── test_embed/
│   │       │   │   ├── test_cohere_v2_embed_legacy.yaml
│   │       │   │   └── test_cohere_v2_embed_legacy_async.yaml
│   │       │   └── test_rerank/
│   │       │       ├── test_cohere_rerank_legacy.yaml
│   │       │       ├── test_cohere_rerank_with_events_with_content.yaml
│   │       │       ├── test_cohere_rerank_with_events_with_no_content.yaml
│   │       │       ├── test_cohere_v2_rerank_legacy.yaml
│   │       │       └── test_cohere_v2_rerank_legacy_async.yaml
│   │       ├── conftest.py
│   │       ├── test_chat.py
│   │       ├── test_completion.py
│   │       ├── test_embed.py
│   │       └── test_rerank.py
│   ├── opentelemetry-instrumentation-crewai/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── crewai/
│   │   │           ├── __init__.py
│   │   │           ├── crewai_span_attributes.py
│   │   │           ├── instrumentation.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       └── test_crewai_instrumentation.py
│   ├── opentelemetry-instrumentation-google-generativeai/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── google_generativeai/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_handler.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   └── test_generate_content/
│   │       │       ├── test_client_spans.yaml
│   │       │       └── test_generate_metrics.yaml
│   │       ├── conftest.py
│   │       ├── test_generate_content.py
│   │       └── test_new_library_instrumentation.py
│   ├── opentelemetry-instrumentation-groq/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── groq/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       └── traces/
│   │           ├── cassettes/
│   │           │   └── test_chat_tracing/
│   │           │       ├── test_async_chat_legacy.yaml
│   │           │       ├── test_async_chat_with_events_with_content.yaml
│   │           │       ├── test_async_chat_with_events_with_no_content.yaml
│   │           │       ├── test_chat_legacy.yaml
│   │           │       ├── test_chat_streaming_legacy.yaml
│   │           │       ├── test_chat_streaming_with_events_with_content.yaml
│   │           │       ├── test_chat_streaming_with_events_with_no_content.yaml
│   │           │       ├── test_chat_with_events_with_content.yaml
│   │           │       └── test_chat_with_events_with_no_content.yaml
│   │           ├── conftest.py
│   │           └── test_chat_tracing.py
│   ├── opentelemetry-instrumentation-haystack/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── haystack/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── utils.py
│   │   │           ├── version.py
│   │   │           ├── wrap_node.py
│   │   │           ├── wrap_openai.py
│   │   │           └── wrap_pipeline.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   └── test_simple_pipeline/
│   │       │       └── test_haystack.yaml
│   │       ├── conftest.py
│   │       ├── test_placeholder.py
│   │       └── test_simple_pipeline.py
│   ├── opentelemetry-instrumentation-lancedb/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── lancedb/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── utils.py
│   │   │           ├── version.py
│   │   │           └── wrapper.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       └── test_query.py
│   ├── opentelemetry-instrumentation-langchain/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── langchain/
│   │   │           ├── __init__.py
│   │   │           ├── callback_handler.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── langgraph_utils.py
│   │   │           ├── patch.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           ├── vendor_detection.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_agents/
│   │       │   │   ├── test_agents.yaml
│   │       │   │   ├── test_agents_with_events_with_content.yaml
│   │       │   │   └── test_agents_with_events_with_no_content.yaml
│   │       │   ├── test_chains/
│   │       │   │   ├── test_asequential_chain.yaml
│   │       │   │   ├── test_asequential_chain_with_events_with_content.yaml
│   │       │   │   ├── test_asequential_chain_with_events_with_no_content.yaml
│   │       │   │   ├── test_astream.yaml
│   │       │   │   ├── test_astream_with_events_with_content.yaml
│   │       │   │   ├── test_astream_with_events_with_no_content.yaml
│   │       │   │   ├── test_sequential_chain.yaml
│   │       │   │   ├── test_sequential_chain_with_events_with_content.yaml
│   │       │   │   ├── test_sequential_chain_with_events_with_no_content.yaml
│   │       │   │   ├── test_stream.yaml
│   │       │   │   ├── test_stream_with_events_with_content.yaml
│   │       │   │   └── test_stream_with_events_with_no_content.yaml
│   │       │   ├── test_documents_chains/
│   │       │   │   ├── test_sequential_chain.yaml
│   │       │   │   ├── test_sequential_chain_with_events_with_content.yaml
│   │       │   │   └── test_sequential_chain_with_events_with_no_content.yaml
│   │       │   ├── test_langgraph/
│   │       │   │   ├── test_langgraph_ainvoke.yaml
│   │       │   │   ├── test_langgraph_double_ainvoke.yaml
│   │       │   │   ├── test_langgraph_double_invoke.yaml
│   │       │   │   └── test_langgraph_invoke.yaml
│   │       │   ├── test_lcel/
│   │       │   │   ├── test_async_invoke.yaml
│   │       │   │   ├── test_async_invoke_with_events_with_content.yaml
│   │       │   │   ├── test_async_invoke_with_events_with_no_content.yaml
│   │       │   │   ├── test_async_lcel.yaml
│   │       │   │   ├── test_async_lcel_with_events_with_content.yaml
│   │       │   │   ├── test_async_lcel_with_events_with_no_content.yaml
│   │       │   │   ├── test_invoke.yaml
│   │       │   │   ├── test_invoke_with_events_with_content.yaml
│   │       │   │   ├── test_invoke_with_events_with_no_content.yaml
│   │       │   │   ├── test_lcel_with_datetime.yaml
│   │       │   │   ├── test_lcel_with_datetime_with_events_with_content.yaml
│   │       │   │   ├── test_lcel_with_datetime_with_events_with_no_content.yaml
│   │       │   │   ├── test_simple_lcel.yaml
│   │       │   │   ├── test_simple_lcel_with_events_with_content.yaml
│   │       │   │   ├── test_simple_lcel_with_events_with_no_content.yaml
│   │       │   │   ├── test_stream.yaml
│   │       │   │   ├── test_stream_with_events_with_content.yaml
│   │       │   │   └── test_stream_with_events_with_no_content.yaml
│   │       │   ├── test_llms/
│   │       │   │   ├── test_anthropic.yaml
│   │       │   │   ├── test_anthropic_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_with_events_with_no_content.yaml
│   │       │   │   ├── test_bedrock.yaml
│   │       │   │   ├── test_bedrock_with_events_with_content.yaml
│   │       │   │   ├── test_bedrock_with_events_with_no_content.yaml
│   │       │   │   ├── test_custom_llm.yaml
│   │       │   │   ├── test_custom_llm_with_events_with_content.yaml
│   │       │   │   ├── test_custom_llm_with_events_with_no_content.yaml
│   │       │   │   ├── test_openai.yaml
│   │       │   │   ├── test_openai_functions.yaml
│   │       │   │   ├── test_openai_functions_with_events_with_content.yaml
│   │       │   │   ├── test_openai_functions_with_events_with_no_content.yaml
│   │       │   │   ├── test_openai_with_events_with_content.yaml
│   │       │   │   ├── test_openai_with_events_with_no_content.yaml
│   │       │   │   ├── test_trace_propagation[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async_with_events_with_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async_with_events_with_content[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async_with_events_with_content[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async_with_events_with_no_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async_with_events_with_no_content[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async_with_events_with_no_content[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async_with_events_with_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async_with_events_with_content[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async_with_events_with_content[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async_with_events_with_no_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async_with_events_with_no_content[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async_with_events_with_no_content[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_with_events_with_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_with_events_with_content[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_with_events_with_content[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_with_events_with_no_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_with_events_with_no_content[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_with_events_with_no_content[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_with_events_with_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_with_events_with_content[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_with_events_with_content[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_with_events_with_no_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_with_events_with_no_content[OpenAI].yaml
│   │       │   │   └── test_trace_propagation_with_events_with_no_content[VLLMOpenAI].yaml
│   │       │   ├── test_structured_output/
│   │       │   │   ├── test_structured_output.yaml
│   │       │   │   ├── test_structured_output_with_events_with_content.yaml
│   │       │   │   └── test_structured_output_with_events_with_no_content.yaml
│   │       │   └── test_tool_calls/
│   │       │       ├── test_parallel_tool_calls.yaml
│   │       │       ├── test_parallel_tool_calls_with_events_with_content.yaml
│   │       │       ├── test_parallel_tool_calls_with_events_with_no_content.yaml
│   │       │       ├── test_tool_calls.yaml
│   │       │       ├── test_tool_calls_anthropic_text_block.yaml
│   │       │       ├── test_tool_calls_anthropic_text_block_and_history.yaml
│   │       │       ├── test_tool_calls_anthropic_text_block_and_history_with_events_with_content.yaml
│   │       │       ├── test_tool_calls_anthropic_text_block_and_history_with_events_with_no_content.yaml
│   │       │       ├── test_tool_calls_anthropic_text_block_with_events_with_content.yaml
│   │       │       ├── test_tool_calls_anthropic_text_block_with_events_with_no_content.yaml
│   │       │       ├── test_tool_calls_with_events_with_content.yaml
│   │       │       ├── test_tool_calls_with_events_with_no_content.yaml
│   │       │       ├── test_tool_calls_with_history.yaml
│   │       │       ├── test_tool_calls_with_history_with_events_with_content.yaml
│   │       │       ├── test_tool_calls_with_history_with_events_with_no_content.yaml
│   │       │       └── test_tool_message_with_tool_call_id.yaml
│   │       ├── conftest.py
│   │       ├── metrics/
│   │       │   ├── cassettes/
│   │       │   │   └── test_langchain_metrics/
│   │       │   │       ├── test_langgraph_metrics.yaml
│   │       │   │       ├── test_llm_chain_metrics.yaml
│   │       │   │       ├── test_llm_chain_metrics_with_none_llm_output.yaml
│   │       │   │       └── test_llm_chain_streaming_metrics.yaml
│   │       │   └── test_langchain_metrics.py
│   │       ├── test_agents.py
│   │       ├── test_batch_metadata.py
│   │       ├── test_chains.py
│   │       ├── test_documents_chains.py
│   │       ├── test_generation_role_extraction.py
│   │       ├── test_langgraph.py
│   │       ├── test_lcel.py
│   │       ├── test_llms.py
│   │       ├── test_non_ascii_content.py
│   │       ├── test_structured_output.py
│   │       ├── test_tool_call_content.py
│   │       └── test_tool_calls.py
│   ├── opentelemetry-instrumentation-llamaindex/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── data/
│   │   │   └── paul_graham/
│   │   │       └── paul_graham_essay.txt
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── llamaindex/
│   │   │           ├── __init__.py
│   │   │           ├── base_agent_instrumentor.py
│   │   │           ├── base_embedding_instrumentor.py
│   │   │           ├── base_retriever_instrumentor.py
│   │   │           ├── base_synthesizer_instrumentor.py
│   │   │           ├── base_tool_instrumentor.py
│   │   │           ├── config.py
│   │   │           ├── custom_llm_instrumentor.py
│   │   │           ├── dispatcher_wrapper.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── llamaparse_instrumentor.py
│   │   │           ├── query_pipeline_instrumentor.py
│   │   │           ├── retriever_query_engine_instrumentor.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_agents/
│   │       │   │   ├── test_agent_with_multiple_tools.yaml
│   │       │   │   ├── test_agent_with_multiple_tools_with_events_with_content.yaml
│   │       │   │   ├── test_agent_with_multiple_tools_with_events_with_no_content.yaml
│   │       │   │   ├── test_agent_with_query_tool.yaml
│   │       │   │   ├── test_agent_with_query_tool_with_events_with_content.yaml
│   │       │   │   ├── test_agent_with_query_tool_with_events_with_no_content.yaml
│   │       │   │   ├── test_agents_and_tools.yaml
│   │       │   │   ├── test_agents_and_tools_with_events_with_content.yaml
│   │       │   │   └── test_agents_and_tools_with_events_with_no_content.yaml
│   │       │   ├── test_chroma_vector_store/
│   │       │   │   └── test_rag_with_chroma.yaml
│   │       │   ├── test_llamaparse/
│   │       │   │   ├── test_llamaparse_aload_data_instrumentation.yaml
│   │       │   │   └── test_llamaparse_load_data_instrumentation.yaml
│   │       │   ├── test_query_pipeline/
│   │       │   │   └── test_query_pipeline.yaml
│   │       │   └── test_structured_llm/
│   │       │       ├── test_structured_llm_achat_model_attributes.yaml
│   │       │       └── test_structured_llm_model_attributes.yaml
│   │       ├── conftest.py
│   │       ├── test_agents.py
│   │       ├── test_chroma_vector_store.py
│   │       ├── test_instrumentation.py
│   │       ├── test_llamaparse.py
│   │       └── test_structured_llm.py
│   ├── opentelemetry-instrumentation-marqo/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── marqo/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── utils.py
│   │   │           ├── version.py
│   │   │           └── wrapper.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   └── test_query/
│   │       │       ├── test_marqo_add_documents.yaml
│   │       │       ├── test_marqo_delete_documents.yaml
│   │       │       └── test_marqo_search.yaml
│   │       ├── conftest.py
│   │       └── test_query.py
│   ├── opentelemetry-instrumentation-mcp/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── mcp/
│   │   │           ├── __init__.py
│   │   │           ├── fastmcp_instrumentation.py
│   │   │           ├── instrumentation.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── conftest.py
│   │       ├── test_fastmcp.py
│   │       ├── test_fastmcp_attributes.py
│   │       └── test_fastmcp_server_span.py
│   ├── opentelemetry-instrumentation-milvus/
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── milvus/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── utils.py
│   │   │           ├── version.py
│   │   │           └── wrapper.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── test_error.py
│   │       ├── test_hybrid_search.py
│   │       ├── test_query.py
│   │       ├── test_search.py
│   │       └── utils.py
│   ├── opentelemetry-instrumentation-mistralai/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── mistralai/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_chat/
│   │       │   │   ├── test_mistralai_async_chat_legacy.yaml
│   │       │   │   ├── test_mistralai_async_chat_with_events_with_content.yaml
│   │       │   │   ├── test_mistralai_async_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_mistralai_async_streaming_chat_legacy.yaml
│   │       │   │   ├── test_mistralai_async_streaming_chat_with_events_with_content.yaml
│   │       │   │   ├── test_mistralai_async_streaming_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_mistralai_chat_legacy.yaml
│   │       │   │   ├── test_mistralai_chat_with_events_with_content.yaml
│   │       │   │   ├── test_mistralai_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_mistralai_streaming_chat_legacy.yaml
│   │       │   │   ├── test_mistralai_streaming_chat_with_events_with_content.yaml
│   │       │   │   └── test_mistralai_streaming_chat_with_events_with_no_content.yaml
│   │       │   └── test_embeddings/
│   │       │       ├── test_mistral_async_embeddings_legacy.yaml
│   │       │       ├── test_mistral_async_embeddings_with_events_with_content.yaml
│   │       │       ├── test_mistral_async_embeddings_with_events_with_no_content.yaml
│   │       │       ├── test_mistral_embeddings_legacy.yaml
│   │       │       ├── test_mistral_embeddings_with_events_with_content.yaml
│   │       │       └── test_mistral_embeddings_with_events_with_no_content.yaml
│   │       ├── conftest.py
│   │       ├── test_chat.py
│   │       └── test_embeddings.py
│   ├── opentelemetry-instrumentation-ollama/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── ollama/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_chat/
│   │       │   │   ├── test_ollama_async_chat_legacy.yaml
│   │       │   │   ├── test_ollama_async_chat_with_events_with_content.yaml
│   │       │   │   ├── test_ollama_async_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_ollama_async_streaming_chat_legacy.yaml
│   │       │   │   ├── test_ollama_async_streaming_chat_with_events_with_content.yaml
│   │       │   │   ├── test_ollama_async_streaming_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_ollama_chat_legacy.yaml
│   │       │   │   ├── test_ollama_chat_tool_calls_legacy.yaml
│   │       │   │   ├── test_ollama_chat_tool_calls_with_events_with_content.yaml
│   │       │   │   ├── test_ollama_chat_tool_calls_with_events_with_no_content.yaml
│   │       │   │   ├── test_ollama_chat_with_events_with_content.yaml
│   │       │   │   ├── test_ollama_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_ollama_streaming_chat_legacy.yaml
│   │       │   │   ├── test_ollama_streaming_chat_with_events_with_content.yaml
│   │       │   │   └── test_ollama_streaming_chat_with_events_with_no_content.yaml
│   │       │   ├── test_embeddings/
│   │       │   │   ├── test_ollama_embeddings_legacy.yaml
│   │       │   │   ├── test_ollama_embeddings_with_events_with_content.yaml
│   │       │   │   └── test_ollama_embeddings_with_events_with_no_content.yaml
│   │       │   ├── test_generation/
│   │       │   │   ├── test_ollama_async_generation_legacy.yaml
│   │       │   │   ├── test_ollama_async_generation_with_events_with_content.yaml
│   │       │   │   ├── test_ollama_async_generation_with_events_with_no_content.yaml
│   │       │   │   ├── test_ollama_async_streaming_generation_legacy.yaml
│   │       │   │   ├── test_ollama_async_streaming_generation_with_events_with_content.yaml
│   │       │   │   ├── test_ollama_async_streaming_generation_with_events_with_no_content.yaml
│   │       │   │   ├── test_ollama_generation_legacy.yaml
│   │       │   │   ├── test_ollama_generation_with_events_with_content.yaml
│   │       │   │   ├── test_ollama_generation_with_events_with_no_content.yaml
│   │       │   │   ├── test_ollama_streaming_generation_legacy.yaml
│   │       │   │   ├── test_ollama_streaming_generation_with_events_with_content.yaml
│   │       │   │   └── test_ollama_streaming_generation_with_events_with_no_content.yaml
│   │       │   └── test_ollama_metrics/
│   │       │       ├── test_ollama_operation_duration_includes_model_attribute.yaml
│   │       │       ├── test_ollama_streaming_metrics.yaml
│   │       │       └── test_ollama_streaming_time_to_generate_metrics.yaml
│   │       ├── conftest.py
│   │       ├── test_chat.py
│   │       ├── test_embeddings.py
│   │       ├── test_generation.py
│   │       └── test_ollama_metrics.py
│   ├── opentelemetry-instrumentation-openai/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── openai/
│   │   │           ├── __init__.py
│   │   │           ├── shared/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── chat_wrappers.py
│   │   │           │   ├── completion_wrappers.py
│   │   │           │   ├── config.py
│   │   │           │   ├── embeddings_wrappers.py
│   │   │           │   ├── event_emitter.py
│   │   │           │   ├── event_models.py
│   │   │           │   ├── image_gen_wrappers.py
│   │   │           │   └── span_utils.py
│   │   │           ├── utils.py
│   │   │           ├── v0/
│   │   │           │   └── __init__.py
│   │   │           ├── v1/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── assistant_wrappers.py
│   │   │           │   ├── event_handler_wrapper.py
│   │   │           │   ├── realtime_wrappers.py
│   │   │           │   └── responses_wrappers.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   ├── pytest.ini
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── data/
│   │       │   └── 1024+tokens.txt
│   │       ├── metrics/
│   │       │   ├── __init__.py
│   │       │   ├── cassettes/
│   │       │   │   └── test_openai_metrics/
│   │       │   │       ├── test_chat_completion_metrics.yaml
│   │       │   │       ├── test_chat_completion_metrics_stream.yaml
│   │       │   │       ├── test_chat_parsed_completion_metrics.yaml
│   │       │   │       ├── test_chat_streaming_metrics.yaml
│   │       │   │       ├── test_embeddings_metrics.yaml
│   │       │   │       └── test_image_gen_metrics.yaml
│   │       │   ├── conftest.py
│   │       │   └── test_openai_metrics.py
│   │       └── traces/
│   │           ├── __init__.py
│   │           ├── cassettes/
│   │           │   ├── test_assistant/
│   │           │   │   ├── test_existing_assistant.yaml
│   │           │   │   ├── test_existing_assistant_with_events_with_content.yaml
│   │           │   │   ├── test_existing_assistant_with_events_with_no_content.yaml
│   │           │   │   ├── test_new_assistant.yaml
│   │           │   │   ├── test_new_assistant_with_events_with_content.yaml
│   │           │   │   ├── test_new_assistant_with_events_with_no_content.yaml
│   │           │   │   ├── test_new_assistant_with_polling.yaml
│   │           │   │   ├── test_new_assistant_with_polling_with_events_with_content.yaml
│   │           │   │   ├── test_new_assistant_with_polling_with_events_with_no_content.yaml
│   │           │   │   ├── test_streaming_existing_assistant.yaml
│   │           │   │   ├── test_streaming_existing_assistant_with_events_with_content.yaml
│   │           │   │   ├── test_streaming_existing_assistant_with_events_with_no_content.yaml
│   │           │   │   ├── test_streaming_new_assistant.yaml
│   │           │   │   ├── test_streaming_new_assistant_with_events_with_content.yaml
│   │           │   │   └── test_streaming_new_assistant_with_events_with_no_content.yaml
│   │           │   ├── test_azure/
│   │           │   │   ├── test_chat.yaml
│   │           │   │   ├── test_chat_async_streaming.yaml
│   │           │   │   ├── test_chat_async_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_chat_async_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_content_filtering.yaml
│   │           │   │   ├── test_chat_content_filtering_with_events_with_content.yaml
│   │           │   │   ├── test_chat_content_filtering_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_reasoning.yaml
│   │           │   │   ├── test_chat_streaming.yaml
│   │           │   │   ├── test_chat_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_chat_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_with_events_with_content.yaml
│   │           │   │   ├── test_chat_with_events_with_no_content.yaml
│   │           │   │   ├── test_prompt_content_filtering.yaml
│   │           │   │   ├── test_prompt_content_filtering_with_events_with_content.yaml
│   │           │   │   └── test_prompt_content_filtering_with_events_with_no_content.yaml
│   │           │   ├── test_chat/
│   │           │   │   ├── test_chat.yaml
│   │           │   │   ├── test_chat_async_context_propagation.yaml
│   │           │   │   ├── test_chat_async_context_propagation_with_events_with_content.yaml
│   │           │   │   ├── test_chat_async_context_propagation_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_async_streaming.yaml
│   │           │   │   ├── test_chat_async_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_chat_async_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_context_propagation.yaml
│   │           │   │   ├── test_chat_context_propagation_with_events_with_content.yaml
│   │           │   │   ├── test_chat_context_propagation_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_history_message_dict.yaml
│   │           │   │   ├── test_chat_history_message_pydantic.yaml
│   │           │   │   ├── test_chat_pydantic_based_tool_calls.yaml
│   │           │   │   ├── test_chat_pydantic_based_tool_calls_with_events_with_content.yaml
│   │           │   │   ├── test_chat_pydantic_based_tool_calls_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_reasoning.yaml
│   │           │   │   ├── test_chat_streaming.yaml
│   │           │   │   ├── test_chat_streaming_exception_during_consumption.yaml
│   │           │   │   ├── test_chat_streaming_memory_leak_prevention.yaml
│   │           │   │   ├── test_chat_streaming_not_consumed.yaml
│   │           │   │   ├── test_chat_streaming_partial_consumption.yaml
│   │           │   │   ├── test_chat_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_chat_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_tool_calls.yaml
│   │           │   │   ├── test_chat_tool_calls_with_events_with_content.yaml
│   │           │   │   ├── test_chat_tool_calls_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_tools.yaml
│   │           │   │   ├── test_chat_tools_async_streaming.yaml
│   │           │   │   ├── test_chat_tools_async_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_chat_tools_async_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_tools_streaming.yaml
│   │           │   │   ├── test_chat_tools_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_chat_tools_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_tools_with_events_with_content.yaml
│   │           │   │   ├── test_chat_tools_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_with_events_with_content.yaml
│   │           │   │   ├── test_chat_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_with_service_tier.yaml
│   │           │   │   ├── test_with_asyncio_run.yaml
│   │           │   │   ├── test_with_asyncio_run_with_events_with_content.yaml
│   │           │   │   └── test_with_asyncio_run_with_events_with_no_content.yaml
│   │           │   ├── test_chat_parse/
│   │           │   │   ├── test_async_parsed_completion.yaml
│   │           │   │   ├── test_async_parsed_completion_with_events_with_content.yaml
│   │           │   │   ├── test_async_parsed_completion_with_events_with_no_content.yaml
│   │           │   │   ├── test_async_parsed_refused_completion.yaml
│   │           │   │   ├── test_async_parsed_refused_completion_with_events_with_content.yaml
│   │           │   │   ├── test_async_parsed_refused_completion_with_events_with_no_content.yaml
│   │           │   │   ├── test_parsed_completion.yaml
│   │           │   │   ├── test_parsed_completion_with_events_with_content.yaml
│   │           │   │   ├── test_parsed_completion_with_events_with_no_content.yaml
│   │           │   │   ├── test_parsed_refused_completion.yaml
│   │           │   │   ├── test_parsed_refused_completion_with_events_with_content.yaml
│   │           │   │   └── test_parsed_refused_completion_with_events_with_no_content.yaml
│   │           │   ├── test_chat_response_format/
│   │           │   │   ├── test_async_chat_response_format.yaml
│   │           │   │   └── test_chat_response_format.yaml
│   │           │   ├── test_completions/
│   │           │   │   ├── test_async_completion.yaml
│   │           │   │   ├── test_async_completion_context_propagation.yaml
│   │           │   │   ├── test_async_completion_context_propagation_with_events_with_content.yaml
│   │           │   │   ├── test_async_completion_context_propagation_with_events_with_no_content.yaml
│   │           │   │   ├── test_async_completion_streaming.yaml
│   │           │   │   ├── test_async_completion_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_async_completion_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_async_completion_with_events_with_content.yaml
│   │           │   │   ├── test_async_completion_with_events_with_no_content.yaml
│   │           │   │   ├── test_completion.yaml
│   │           │   │   ├── test_completion_context_propagation.yaml
│   │           │   │   ├── test_completion_context_propagation_with_events_with_content.yaml
│   │           │   │   ├── test_completion_context_propagation_with_events_with_no_content.yaml
│   │           │   │   ├── test_completion_langchain_style.yaml
│   │           │   │   ├── test_completion_langchain_style_with_events_with_content.yaml
│   │           │   │   ├── test_completion_langchain_style_with_events_with_no_content.yaml
│   │           │   │   ├── test_completion_streaming.yaml
│   │           │   │   ├── test_completion_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_completion_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_completion_with_events_with_content.yaml
│   │           │   │   └── test_completion_with_events_with_no_content.yaml
│   │           │   ├── test_embeddings/
│   │           │   │   ├── test_async_embeddings_context_propagation.yaml
│   │           │   │   ├── test_async_embeddings_context_propagation_with_events_with_content.yaml
│   │           │   │   ├── test_async_embeddings_context_propagation_with_events_with_no_content.yaml
│   │           │   │   ├── test_azure_openai_embeddings.yaml
│   │           │   │   ├── test_azure_openai_embeddings_with_events_with_content.yaml
│   │           │   │   ├── test_azure_openai_embeddings_with_events_with_no_content.yaml
│   │           │   │   ├── test_embeddings.yaml
│   │           │   │   ├── test_embeddings_context_propagation.yaml
│   │           │   │   ├── test_embeddings_context_propagation_with_events_with_content.yaml
│   │           │   │   ├── test_embeddings_context_propagation_with_events_with_no_content.yaml
│   │           │   │   ├── test_embeddings_with_events_with_content.yaml
│   │           │   │   ├── test_embeddings_with_events_with_no_content.yaml
│   │           │   │   ├── test_embeddings_with_raw_response.yaml
│   │           │   │   ├── test_embeddings_with_raw_response_with_events_with_content.yaml
│   │           │   │   └── test_embeddings_with_raw_response_with_events_with_no_content.yaml
│   │           │   ├── test_exceptions/
│   │           │   │   └── test_exception_in_instrumentation_suppressed.yaml
│   │           │   ├── test_functions/
│   │           │   │   ├── test_open_ai_function_calls.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_parallel.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_parallel_with_events_with_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_parallel_with_events_with_no_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_streaming.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_streaming_parallel.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_streaming_parallel_with_events_with_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_streaming_parallel_with_events_with_no_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_with_events_with_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_with_events_with_no_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_with_events_with_content.yaml
│   │           │   │   └── test_open_ai_function_calls_with_events_with_no_content.yaml
│   │           │   ├── test_prompt_caching/
│   │           │   │   ├── test_openai_prompt_caching.yaml
│   │           │   │   ├── test_openai_prompt_caching_async.yaml
│   │           │   │   ├── test_openai_prompt_caching_async_with_events_with_content.yaml
│   │           │   │   ├── test_openai_prompt_caching_async_with_events_with_no_content.yaml
│   │           │   │   ├── test_openai_prompt_caching_with_events_with_content.yaml
│   │           │   │   └── test_openai_prompt_caching_with_events_with_no_content.yaml
│   │           │   ├── test_responses/
│   │           │   │   ├── test_responses.yaml
│   │           │   │   ├── test_responses_reasoning.yaml
│   │           │   │   ├── test_responses_reasoning_dict_issue.yaml
│   │           │   │   ├── test_responses_streaming.yaml
│   │           │   │   ├── test_responses_streaming_async.yaml
│   │           │   │   ├── test_responses_streaming_async_with_context_manager.yaml
│   │           │   │   ├── test_responses_streaming_async_with_parent_span.yaml
│   │           │   │   ├── test_responses_streaming_with_content.yaml
│   │           │   │   ├── test_responses_streaming_with_context_manager.yaml
│   │           │   │   ├── test_responses_streaming_with_parent_span.yaml
│   │           │   │   ├── test_responses_tool_calls.yaml
│   │           │   │   ├── test_responses_with_input_history.yaml
│   │           │   │   ├── test_responses_with_request_params.yaml
│   │           │   │   └── test_responses_with_service_tier.yaml
│   │           │   ├── test_streaming_with_api_usage/
│   │           │   │   ├── test_streaming_with_api_usage_and_events.yaml
│   │           │   │   └── test_streaming_with_api_usage_capture.yaml
│   │           │   └── test_vision/
│   │           │       ├── test_vision.yaml
│   │           │       ├── test_vision_base64.yaml
│   │           │       ├── test_vision_base64_with_events_with_content.yaml
│   │           │       ├── test_vision_base64_with_events_with_no_content.yaml
│   │           │       ├── test_vision_with_events_with_content.yaml
│   │           │       └── test_vision_with_events_with_no_content.yaml
│   │           ├── conftest.py
│   │           ├── test_assistant.py
│   │           ├── test_azure.py
│   │           ├── test_chat.py
│   │           ├── test_chat_parse.py
│   │           ├── test_chat_response_format.py
│   │           ├── test_completions.py
│   │           ├── test_embedding_metrics_handler.py
│   │           ├── test_embeddings.py
│   │           ├── test_exceptions.py
│   │           ├── test_functions.py
│   │           ├── test_prompt_caching.py
│   │           ├── test_realtime.py
│   │           ├── test_responses.py
│   │           ├── test_span_context_propagation.py
│   │           ├── test_streaming_with_api_usage.py
│   │           ├── test_vision.py
│   │           └── utils.py
│   ├── opentelemetry-instrumentation-openai-agents/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── openai_agents/
│   │   │           ├── __init__.py
│   │   │           ├── _hooks.py
│   │   │           ├── _realtime_wrappers.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_complete_handoff_with_tools/
│   │       │   │   └── test_router_analytics_complete_workflow.yaml
│   │       │   ├── test_openai_agents/
│   │       │   │   ├── test_agent_name_propagation_to_agent_spans.yaml
│   │       │   │   ├── test_agent_spans.yaml
│   │       │   │   ├── test_agent_with_function_tool_spans.yaml
│   │       │   │   ├── test_agent_with_handoff_spans.yaml
│   │       │   │   ├── test_agent_with_web_search_tool_spans.yaml
│   │       │   │   ├── test_dict_content_serialization.yaml
│   │       │   │   ├── test_generate_metrics.yaml
│   │       │   │   ├── test_music_composer_handoff_hierarchy.yaml
│   │       │   │   ├── test_recipe_workflow_agent_handoffs_with_function_tools.yaml
│   │       │   │   └── test_tool_call_and_result_attributes.yaml
│   │       │   └── test_recipe_agents_hierarchy/
│   │       │       └── test_recipe_agents_hierarchy.yaml
│   │       ├── conftest.py
│   │       ├── test_complete_handoff_with_tools.py
│   │       ├── test_openai_agents.py
│   │       ├── test_realtime.py
│   │       ├── test_realtime_session.py
│   │       └── test_recipe_agents_hierarchy.py
│   ├── opentelemetry-instrumentation-pinecone/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── pinecone/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── query_handlers.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   └── test_query/
│   │       │       └── test_pinecone_retrieval.yaml
│   │       ├── conftest.py
│   │       └── test_query.py
│   ├── opentelemetry-instrumentation-qdrant/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── qdrant/
│   │   │           ├── __init__.py
│   │   │           ├── async_qdrant_client_methods.json
│   │   │           ├── config.py
│   │   │           ├── qdrant_client_methods.json
│   │   │           ├── utils.py
│   │   │           ├── version.py
│   │   │           └── wrapper.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       └── test_qdrant_instrumentation.py
│   ├── opentelemetry-instrumentation-replicate/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── replicate/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_image_generation/
│   │       │   │   ├── test_replicate_image_generation_legacy.yaml
│   │       │   │   ├── test_replicate_image_generation_predictions_legacy.yaml
│   │       │   │   ├── test_replicate_image_generation_predictions_with_events_with_content.yaml
│   │       │   │   ├── test_replicate_image_generation_predictions_with_events_with_no_content.yaml
│   │       │   │   ├── test_replicate_image_generation_with_events_with_content.yaml
│   │       │   │   └── test_replicate_image_generation_with_events_with_no_content.yaml
│   │       │   └── test_llama/
│   │       │       ├── test_replicate_llama_stream_legacy.yaml
│   │       │       ├── test_replicate_llama_stream_with_events_with_content.yaml
│   │       │       └── test_replicate_llama_stream_with_events_with_no_content.yaml
│   │       ├── conftest.py
│   │       ├── test_image_generation.py
│   │       └── test_llama.py
│   ├── opentelemetry-instrumentation-sagemaker/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── sagemaker/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_handler.py
│   │   │           ├── event_models.py
│   │   │           ├── reusable_streaming_body.py
│   │   │           ├── span_utils.py
│   │   │           ├── streaming_wrapper.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   └── test_invocation/
│   │       │       ├── test_sagemaker_completion_string_content_legacy.yaml
│   │       │       ├── test_sagemaker_completion_string_content_with_events_with_content.yaml
│   │       │       └── test_sagemaker_completion_string_content_with_events_with_no_content.yaml
│   │       ├── conftest.py
│   │       └── test_invocation.py
│   ├── opentelemetry-instrumentation-together/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── together/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_handler.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   ├── pytest.ini
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_chat/
│   │       │   │   ├── test_together_chat_legacy.yaml
│   │       │   │   ├── test_together_chat_with_events_with_content.yaml
│   │       │   │   └── test_together_chat_with_events_with_no_content.yaml
│   │       │   └── test_completion/
│   │       │       ├── test_together_completion_legacy.yaml
│   │       │       ├── test_together_completion_with_events_with_content.yaml
│   │       │       └── test_together_completion_with_events_with_no_content.yaml
│   │       ├── conftest.py
│   │       ├── test_chat.py
│   │       └── test_completion.py
│   ├── opentelemetry-instrumentation-transformers/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── transformers/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── text_generation_pipeline_wrapper.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       └── test_pipeline.py
│   ├── opentelemetry-instrumentation-vertexai/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── vertexai/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── disabled_test_bison.py
│   │       ├── disabled_test_gemini.py
│   │       ├── test_placeholder.py
│   │       └── test_role_attributes.py
│   ├── opentelemetry-instrumentation-voyageai/
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── voyageai/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_embed/
│   │       │   │   ├── test_voyageai_embed_async_legacy.yaml
│   │       │   │   └── test_voyageai_embed_legacy.yaml
│   │       │   └── test_rerank/
│   │       │       ├── test_voyageai_rerank_async_legacy.yaml
│   │       │       └── test_voyageai_rerank_legacy.yaml
│   │       ├── conftest.py
│   │       ├── test_embed.py
│   │       └── test_rerank.py
│   ├── opentelemetry-instrumentation-watsonx/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── watsonx/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── metrics/
│   │       │   ├── __init__.py
│   │       │   ├── cassettes/
│   │       │   │   └── test_watsonx_metrics/
│   │       │   │       ├── test_generate_metrics.yaml
│   │       │   │       └── test_generate_stream_metrics.yaml
│   │       │   ├── conftest.py
│   │       │   └── test_watsonx_metrics.py
│   │       └── traces/
│   │           ├── __init__.py
│   │           ├── cassettes/
│   │           │   └── test_generate/
│   │           │       ├── test_generate.yaml
│   │           │       └── test_generate_text_stream.yaml
│   │           ├── conftest.py
│   │           └── test_generate.py
│   ├── opentelemetry-instrumentation-weaviate/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── weaviate/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── utils.py
│   │   │           ├── version.py
│   │   │           └── wrapper.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_weaviate_instrumentation/
│   │       │   │   ├── test_weaviate_create_batch.yaml
│   │       │   │   ├── test_weaviate_create_collection.yaml
│   │       │   │   ├── test_weaviate_create_collection_from_dict.yaml
│   │       │   │   ├── test_weaviate_delete_all.yaml
│   │       │   │   ├── test_weaviate_delete_collection.yaml
│   │       │   │   ├── test_weaviate_get_collection.yaml
│   │       │   │   ├── test_weaviate_insert_data.yaml
│   │       │   │   ├── test_weaviate_query_aggregate.yaml
│   │       │   │   └── test_weaviate_query_raw.yaml
│   │       │   └── test_weaviate_instrumentation_v3/
│   │       │       ├── test_weaviate_create_batch.yaml
│   │       │       ├── test_weaviate_create_data_object.yaml
│   │       │       ├── test_weaviate_create_schema.yaml
│   │       │       ├── test_weaviate_create_schemas.yaml
│   │       │       ├── test_weaviate_delete_all.yaml
│   │       │       ├── test_weaviate_delete_schema.yaml
│   │       │       ├── test_weaviate_get_schema.yaml
│   │       │       ├── test_weaviate_query_aggregate.yaml
│   │       │       ├── test_weaviate_query_get.yaml
│   │       │       └── test_weaviate_query_raw.yaml
│   │       ├── conftest.py
│   │       ├── test_weaviate_instrumentation.py
│   │       └── test_weaviate_instrumentation_v3.py
│   ├── opentelemetry-instrumentation-writer/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── writer/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_chat/
│   │       │   │   ├── test_writer_async_chat_legacy.yaml
│   │       │   │   ├── test_writer_async_chat_multiple_choices_legacy.yaml
│   │       │   │   ├── test_writer_async_chat_multiple_choices_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_chat_multiple_choices_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_chat_multiple_tool_call_requests_legacy.yaml
│   │       │   │   ├── test_writer_async_chat_multiple_tool_call_requests_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_chat_multiple_tool_call_requests_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_chat_tool_call_request_legacy.yaml
│   │       │   │   ├── test_writer_async_chat_tool_call_request_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_chat_tool_call_request_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_chat_tool_calls_legacy.yaml
│   │       │   │   ├── test_writer_async_chat_tool_calls_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_chat_tool_calls_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_chat_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_legacy.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_multiple_choices_legacy.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_multiple_choices_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_multiple_choices_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_multiple_tool_call_requests_legacy.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_multiple_tool_call_requests_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_multiple_tool_call_requests_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_tool_call_request_legacy.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_tool_call_request_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_tool_call_request_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_tool_calls_legacy.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_tool_calls_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_tool_calls_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_chat_legacy.yaml
│   │       │   │   ├── test_writer_chat_multiple_choices_legacy.yaml
│   │       │   │   ├── test_writer_chat_multiple_choices_with_events_with_content.yaml
│   │       │   │   ├── test_writer_chat_multiple_choices_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_chat_multiple_tool_call_requests_legacy.yaml
│   │       │   │   ├── test_writer_chat_multiple_tool_call_requests_with_events_with_content.yaml
│   │       │   │   ├── test_writer_chat_multiple_tool_call_requests_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_chat_tool_call_request_legacy.yaml
│   │       │   │   ├── test_writer_chat_tool_call_request_with_events_with_content.yaml
│   │       │   │   ├── test_writer_chat_tool_call_request_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_chat_tool_calls_legacy.yaml
│   │       │   │   ├── test_writer_chat_tool_calls_with_events_with_content.yaml
│   │       │   │   ├── test_writer_chat_tool_calls_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_chat_with_events_with_content.yaml
│   │       │   │   ├── test_writer_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_legacy.yaml
│   │       │   │   ├── test_writer_streaming_chat_multiple_choices_legacy.yaml
│   │       │   │   ├── test_writer_streaming_chat_multiple_choices_with_events_with_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_multiple_choices_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_multiple_tool_call_requests_legacy.yaml
│   │       │   │   ├── test_writer_streaming_chat_multiple_tool_call_requests_with_events_with_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_multiple_tool_call_requests_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_tool_call_request_legacy.yaml
│   │       │   │   ├── test_writer_streaming_chat_tool_call_request_with_events_with_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_tool_call_request_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_tool_calls_legacy.yaml
│   │       │   │   ├── test_writer_streaming_chat_tool_calls_with_events_with_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_tool_calls_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_with_events_with_content.yaml
│   │       │   │   └── test_writer_streaming_chat_with_events_with_no_content.yaml
│   │       │   ├── test_completions/
│   │       │   │   ├── test_writer_async_completions_legacy.yaml
│   │       │   │   ├── test_writer_async_completions_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_completions_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_streaming_completions_legacy.yaml
│   │       │   │   ├── test_writer_async_streaming_completions_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_streaming_completions_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_completions_legacy.yaml
│   │       │   │   ├── test_writer_completions_with_events_with_content.yaml
│   │       │   │   ├── test_writer_completions_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_streaming_completions_legacy.yaml
│   │       │   │   ├── test_writer_streaming_completions_with_events_with_content.yaml
│   │       │   │   └── test_writer_streaming_completions_with_events_with_no_content.yaml
│   │       │   └── test_metrics/
│   │       │       ├── test_writer_async_metrics.yaml
│   │       │       ├── test_writer_async_streaming_metrics.yaml
│   │       │       ├── test_writer_metrics.yaml
│   │       │       └── test_writer_streaming_metrics.yaml
│   │       ├── conftest.py
│   │       ├── test_chat.py
│   │       ├── test_completions.py
│   │       └── test_metrics.py
│   ├── opentelemetry-semantic-conventions-ai/
│   │   ├── .python-version
│   │   ├── MIGRATION.md
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── semconv_ai/
│   │   │       ├── __init__.py
│   │   │       ├── _testing.py
│   │   │       ├── utils.py
│   │   │       └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── test_placeholder.py
│   │       ├── test_semconv_compliance.py
│   │       └── test_span_attributes.py
│   ├── sample-app/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── data/
│   │   │   ├── paul_graham/
│   │   │   │   └── paul_graham_essay.txt
│   │   │   ├── scifact/
│   │   │   │   ├── scifact_claims.jsonl
│   │   │   │   └── scifact_corpus.jsonl
│   │   │   └── sherlock/
│   │   │       └── firstchapter.txt
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   ├── sample_app/
│   │   │   ├── __init__.py
│   │   │   ├── agents/
│   │   │   │   └── travel_agent_example.py
│   │   │   ├── agno_async_example.py
│   │   │   ├── agno_discussion_team.py
│   │   │   ├── agno_example.py
│   │   │   ├── agno_streaming_example.py
│   │   │   ├── agno_team_example.py
│   │   │   ├── anthropic_joke_example.py
│   │   │   ├── anthropic_joke_streaming_example.py
│   │   │   ├── anthropic_structured_outputs_demo.py
│   │   │   ├── anthropic_vision_base64_example.py
│   │   │   ├── async_anthropic_example.py
│   │   │   ├── async_anthropic_joke_streaming.py
│   │   │   ├── async_methods_decorated_app.py
│   │   │   ├── azure_openai.py
│   │   │   ├── bedrock_example_app.py
│   │   │   ├── chats/
│   │   │   │   ├── chatbot_with_tools_example.py
│   │   │   │   └── gemini_chatbot.py
│   │   │   ├── chroma_app.py
│   │   │   ├── chroma_sentence_transformer_app.py
│   │   │   ├── classes_decorated_app.py
│   │   │   ├── cohere_example.py
│   │   │   ├── crewai_example.py
│   │   │   ├── dataset_attachments_example.py
│   │   │   ├── dataset_example.py
│   │   │   ├── dataset_override_example.py
│   │   │   ├── experiment/
│   │   │   │   ├── experiment_example.py
│   │   │   │   ├── made_by_traceloop/
│   │   │   │   │   ├── agent_tool_trajectory.py
│   │   │   │   │   ├── agents_exp.py
│   │   │   │   │   ├── compliance_exp.py
│   │   │   │   │   ├── correctness_exp.py
│   │   │   │   │   ├── formatting_exp.py
│   │   │   │   │   ├── quality_exp.py
│   │   │   │   │   ├── security_exp.py
│   │   │   │   │   ├── style_exp.py
│   │   │   │   │   └── travel_agent_exp.py
│   │   │   │   ├── medical_prompts.py
│   │   │   │   └── run_research_experiment.py
│   │   │   ├── gemini.py
│   │   │   ├── gemini_structured_outputs_demo.py
│   │   │   ├── google_genai_image_example.py
│   │   │   ├── groq_example.py
│   │   │   ├── guardrail_medical_chat_example.py
│   │   │   ├── guardrail_travel_agent_example.py
│   │   │   ├── haystack_app.py
│   │   │   ├── langchain_agent.py
│   │   │   ├── langchain_app.py
│   │   │   ├── langchain_lcel.py
│   │   │   ├── langchain_watsonx.py
│   │   │   ├── langgraph_example.py
│   │   │   ├── langgraph_openai.py
│   │   │   ├── litellm_example.py
│   │   │   ├── llama_index_chroma_app.py
│   │   │   ├── llama_index_chroma_huggingface_app.py
│   │   │   ├── llama_index_workflow_app.py
│   │   │   ├── llama_parse_app.py
│   │   │   ├── manual_logging_example.py
│   │   │   ├── mcp_dev_assistant_demo.py
│   │   │   ├── mcp_dev_assistant_server.py
│   │   │   ├── mcp_sonnet_example.py
│   │   │   ├── methods_decorated_app.py
│   │   │   ├── multiple_span_processors.py
│   │   │   ├── ollama_streaming.py
│   │   │   ├── openai_agents_example.py
│   │   │   ├── openai_agents_realtime_example.py
│   │   │   ├── openai_agents_using_litellm.py
│   │   │   ├── openai_assistant.py
│   │   │   ├── openai_functions.py
│   │   │   ├── openai_guardrails_example.py
│   │   │   ├── openai_realtime_example.py
│   │   │   ├── openai_streaming.py
│   │   │   ├── openai_streaming_assistant.py
│   │   │   ├── openai_structured_outputs.py
│   │   │   ├── openai_structured_outputs_demo.py
│   │   │   ├── openai_vision_base64_example.py
│   │   │   ├── pinecone_app.py
│   │   │   ├── pinecone_app_sentence_transformers.py
│   │   │   ├── prompt_registry_example_app.py
│   │   │   ├── prompt_registry_vision.py
│   │   │   ├── qdrant_app.py
│   │   │   ├── redis_rag_app.py
│   │   │   ├── replicate_functions.py
│   │   │   ├── replicate_streaming.py
│   │   │   ├── sample_handoff_app.py
│   │   │   ├── simple_handoff_demo.py
│   │   │   ├── thread_pool_example.py
│   │   │   ├── vertex_gemini_vision_example.py
│   │   │   ├── vertexai_streaming.py
│   │   │   ├── voyageai_example.py
│   │   │   ├── watsonx-langchain.py
│   │   │   ├── watsonx_flow.py
│   │   │   ├── watsonx_generate.py
│   │   │   ├── weaviate_v3.py
│   │   │   ├── weaviate_v4.py
│   │   │   └── writer_example.py
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       └── test_placeholder.py
│   └── traceloop-sdk/
│       ├── .python-version
│       ├── README.md
│       ├── poetry.toml
│       ├── project.json
│       ├── pyproject.toml
│       ├── tests/
│       │   ├── __init__.py
│       │   ├── cassettes/
│       │   │   ├── test_association_properties/
│       │   │   │   ├── test_langchain_and_external_association_properties.yaml
│       │   │   │   └── test_langchain_association_properties.yaml
│       │   │   ├── test_privacy_no_prompts/
│       │   │   │   └── test_simple_workflow.yaml
│       │   │   ├── test_prompt_management/
│       │   │   │   ├── test_prompt_management.yaml
│       │   │   │   ├── test_prompt_management_with_response_format.yaml
│       │   │   │   └── test_prompt_management_with_tools.yaml
│       │   │   ├── test_sdk_initialization/
│       │   │   │   ├── test_resource_attributes.yaml
│       │   │   │   ├── test_resource_includes_sdk_attributes.yaml
│       │   │   │   └── test_span_postprocess_callback.yaml
│       │   │   ├── test_tasks/
│       │   │   │   └── test_task_io_serialization_with_langchain.yaml
│       │   │   └── test_workflows/
│       │   │       ├── test_simple_aworkflow.yaml
│       │   │       ├── test_simple_workflow.yaml
│       │   │       └── test_streaming_workflow.yaml
│       │   ├── conftest.py
│       │   ├── datasets/
│       │   │   ├── __init__.py
│       │   │   ├── cassettes/
│       │   │   │   ├── test_columns_operations/
│       │   │   │   │   ├── test_create_dataset_with_columns.yaml
│       │   │   │   │   ├── test_dataset_operations_errors.yaml
│       │   │   │   │   └── test_get_dataset_with_columns.yaml
│       │   │   │   ├── test_create_dataset/
│       │   │   │   │   ├── test_create_dataset_from_csv.yaml
│       │   │   │   │   ├── test_create_dataset_from_dataframe.yaml
│       │   │   │   │   ├── test_create_dataset_from_dataframe_with_duplicate_slug.yaml
│       │   │   │   │   └── test_create_dataset_with_duplicate_slug.yaml
│       │   │   │   ├── test_dataset_operations/
│       │   │   │   │   ├── test_get_dataset_by_version.yaml
│       │   │   │   │   └── test_publish_dataset.yaml
│       │   │   │   ├── test_dataset_with_attachments/
│       │   │   │   │   ├── test_create_dataset_with_external_attachments.yaml
│       │   │   │   │   ├── test_create_dataset_with_file_attachments_mocked.yaml
│       │   │   │   │   ├── test_create_dataset_with_in_memory_attachment.yaml
│       │   │   │   │   ├── test_create_dataset_with_mixed_attachments.yaml
│       │   │   │   │   └── test_create_dataset_without_attachments.yaml
│       │   │   │   ├── test_datasets_operations/
│       │   │   │   │   ├── test_delete_by_slug.yaml
│       │   │   │   │   ├── test_delete_by_slug_failure.yaml
│       │   │   │   │   ├── test_get_all_datasets.yaml
│       │   │   │   │   ├── test_get_all_datasets_with_invalid_credentials.yaml
│       │   │   │   │   ├── test_get_dataset_by_slug.yaml
│       │   │   │   │   ├── test_get_dataset_by_slug_failure.yaml
│       │   │   │   │   ├── test_get_version_csv.yaml
│       │   │   │   │   └── test_get_version_csv_failure.yaml
│       │   │   │   └── test_rows_operations/
│       │   │   │       ├── test_add_rows.yaml
│       │   │   │       ├── test_create_dataset_and_add_rows.yaml
│       │   │   │       ├── test_dataset_deletion.yaml
│       │   │   │       └── test_dataset_row_operations_api_errors.yaml
│       │   │   ├── test_columns_operations.py
│       │   │   ├── test_constants.py
│       │   │   ├── test_create_dataset.py
│       │   │   ├── test_dataset_operations.py
│       │   │   ├── test_dataset_with_attachments.py
│       │   │   ├── test_datasets_operations.py
│       │   │   └── test_rows_operations.py
│       │   ├── evaluator/
│       │   │   ├── test_evaluator.py
│       │   │   └── test_field_mapping.py
│       │   ├── experiment/
│       │   │   ├── test_experiment.py
│       │   │   └── test_export.py
│       │   ├── test_association_properties.py
│       │   ├── test_associations.py
│       │   ├── test_class_tasks.py
│       │   ├── test_client.py
│       │   ├── test_conversation_id.py
│       │   ├── test_manual.py
│       │   ├── test_nested_tasks.py
│       │   ├── test_privacy_no_prompts.py
│       │   ├── test_prompt_management.py
│       │   ├── test_sampler_initialization.py
│       │   ├── test_sdk_initialization.py
│       │   ├── test_tasks.py
│       │   ├── test_user_feedback.py
│       │   └── test_workflows.py
│       └── traceloop/
│           └── sdk/
│               ├── __init__.py
│               ├── annotation/
│               │   ├── __init__.py
│               │   ├── base_annotation.py
│               │   └── user_feedback.py
│               ├── associations/
│               │   ├── __init__.py
│               │   └── associations.py
│               ├── client/
│               │   ├── __init__.py
│               │   ├── client.py
│               │   └── http.py
│               ├── config/
│               │   └── __init__.py
│               ├── datasets/
│               │   ├── __init__.py
│               │   ├── attachment.py
│               │   ├── base.py
│               │   ├── column.py
│               │   ├── dataset.py
│               │   ├── datasets.py
│               │   ├── model.py
│               │   └── row.py
│               ├── decorators/
│               │   ├── __init__.py
│               │   └── base.py
│               ├── evaluator/
│               │   ├── __init__.py
│               │   ├── config.py
│               │   ├── evaluator.py
│               │   ├── field_mapping.py
│               │   ├── model.py
│               │   └── stream_client.py
│               ├── experiment/
│               │   ├── __init__.py
│               │   ├── experiment.py
│               │   ├── model.py
│               │   └── utils.py
│               ├── fetcher.py
│               ├── generated/
│               │   ├── __init__.py
│               │   └── evaluators/
│               │       ├── __init__.py
│               │       ├── definitions.py
│               │       ├── registry.py
│               │       ├── request.py
│               │       └── response.py
│               ├── guardrails/
│               │   ├── __init__.py
│               │   ├── guardrails.py
│               │   └── types.py
│               ├── images/
│               │   └── image_uploader.py
│               ├── instruments.py
│               ├── logging/
│               │   ├── __init__.py
│               │   └── logging.py
│               ├── metrics/
│               │   ├── __init__.py
│               │   └── metrics.py
│               ├── prompts/
│               │   ├── __init__.py
│               │   ├── client.py
│               │   ├── model.py
│               │   └── registry.py
│               ├── py.typed
│               ├── tracing/
│               │   ├── __init__.py
│               │   ├── content_allow_list.py
│               │   ├── context_manager.py
│               │   ├── manual.py
│               │   └── tracing.py
│               ├── utils/
│               │   ├── __init__.py
│               │   ├── in_memory_span_exporter.py
│               │   ├── json_encoder.py
│               │   └── package_check.py
│               └── version.py
└── scripts/
    ├── build-release.sh
    ├── codegen/
    │   └── generate_evaluator_models.py
    └── generate-models.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .cz.toml
================================================
[tool.commitizen]
name = "cz_conventional_commits"
tag_format = "v$version"
version_scheme = "pep440"
major_version_zero = true
update_changelog_on_bump = true
version = "0.53.3"
version_files = [
    "packages/opentelemetry-instrumentation-mcp/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-mcp/opentelemetry/instrumentation/mcp/version.py",
    "packages/opentelemetry-instrumentation-groq/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/version.py",
    "packages/opentelemetry-instrumentation-agno/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/version.py",
    "packages/opentelemetry-instrumentation-alephalpha/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/version.py",
    "packages/opentelemetry-instrumentation-anthropic/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/version.py",
    "packages/opentelemetry-instrumentation-bedrock/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/version.py",
    "packages/opentelemetry-instrumentation-chromadb/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/version.py",
    "packages/opentelemetry-instrumentation-cohere/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/version.py",
    "packages/opentelemetry-instrumentation-crewai/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/version.py",
    "packages/opentelemetry-instrumentation-google-generativeai/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google-generativeai/version.py",
    "packages/opentelemetry-instrumentation-haystack/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-haystack/opentelemetry/instrumentation/haystack/version.py",
    "packages/opentelemetry-instrumentation-langchain/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/version.py",
    "packages/opentelemetry-instrumentation-lancedb/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-lancedb/opentelemetry/instrumentation/lancedb/version.py",
    "packages/opentelemetry-instrumentation-milvus/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-milvus/opentelemetry/instrumentation/milvus/version.py",
    "packages/opentelemetry-instrumentation-mistralai/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-mistralai/opentelemetry/instrumentation/mistralai/version.py",
    "packages/opentelemetry-instrumentation-ollama/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-ollama/opentelemetry/instrumentation/ollama/version.py",
    "packages/opentelemetry-instrumentation-openai/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/version.py",
    "packages/opentelemetry-instrumentation-openai-agents/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/version.py",
    "packages/opentelemetry-instrumentation-pinecone/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone/version.py",
    "packages/opentelemetry-instrumentation-marqo/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-marqo/opentelemetry/instrumentation/marqo/version.py",
    "packages/opentelemetry-instrumentation-qdrant/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant/version.py",
    "packages/opentelemetry-instrumentation-replicate/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-replicate/opentelemetry/instrumentation/replicate/version.py",
    "packages/opentelemetry-instrumentation-sagemaker/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-sagemaker/opentelemetry/instrumentation/sagemaker/version.py",
    "packages/opentelemetry-instrumentation-together/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-together/opentelemetry/instrumentation/together/version.py",
    "packages/opentelemetry-instrumentation-transformers/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-transformers/opentelemetry/instrumentation/transformers/version.py",
    "packages/opentelemetry-instrumentation-vertexai/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-vertexai/opentelemetry/instrumentation/vertexai/version.py",
    "packages/opentelemetry-instrumentation-watsonx/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-watsonx/opentelemetry/instrumentation/watsonx/version.py",
    "packages/opentelemetry-instrumentation-weaviate/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-weaviate/opentelemetry/instrumentation/weaviate/version.py",
    "packages/opentelemetry-instrumentation-llamaindex/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/version.py",
    "packages/opentelemetry-instrumentation-writer/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-writer/opentelemetry/instrumentation/writer/version.py",
    "packages/opentelemetry-instrumentation-voyageai/pyproject.toml:^version",
    "packages/opentelemetry-instrumentation-voyageai/opentelemetry/instrumentation/voyageai/version.py",
    "packages/traceloop-sdk/pyproject.toml:^version",
    "packages/traceloop-sdk/traceloop/sdk/version.py",
]


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: "🐛 Bug Report"
description: "Submit a bug report to help us improve"
title: "🐛 Bug Report: "
labels: ["type: bug"]
body:
  - type: dropdown
    id: component
    validations:
      required: true
    attributes:
      label: Which component is this bug for?
      description: Which package does this bug report apply to?
      options:
        - "AlephAlpha Instrumentation"
        - "Anthropic Instrumentation"
        - "Bedrock Instrumentation"
        - "Chromadb Instrumentation"
        - "Cohere Instrumentation"
        - "Google Generative AI Instrumentation"
        - "Groq Instrumentation"
        - "Haystack Instrumentation"
        - "LanceDB Instrumentation"
        - "Langchain Instrumentation"
        - "LlamaIndex Instrumentation"
        - "Marqo Instrumentation"
        - "Milvus Instrumentation"
        - "Mistral Instrumentation"
        - "Ollama Instrumentation"
        - "OpenAI Instrumentation"
        - "Pinecone Instrumentation"
        - "Qdrant Instrumentation"
        - "Replicate Instrumentation"
        - "SageMaker Instrumentation"
        - "Together Instrumentation"
        - "Transformers Instrumentation"
        - "VertexAI Instrumentation"
        - "Watsonx Instrumentation"
        - "Weaviate Instrumentation"
        - "LLM Semantic Conventions"
        - "Traceloop SDK"
        - "All Packages"
  - type: markdown
    attributes:
      value: We value your time and effort to submit this bug report. 🙏
  - type: textarea
    id: description
    validations:
      required: true
    attributes:
      label: "📜 Description"
      description: "A clear and concise description of what the bug is."
      placeholder: "It bugs out when ..."
  - type: textarea
    id: steps-to-reproduce
    validations:
      required: true
    attributes:
      label: "👟 Reproduction steps"
      description: "How do you trigger this bug? Please walk us through it step by step."
      placeholder: "1. Go to '...'
        2. Click on '....'
        3. Scroll down to '....'
        4. See error"
  - type: textarea
    id: expected-behavior
    validations:
      required: true
    attributes:
      label: "👍 Expected behavior"
      description: "What did you think should happen?"
      placeholder: "It should ..."
  - type: textarea
    id: actual-behavior
    validations:
      required: true
    attributes:
      label: "👎 Actual Behavior with Screenshots"
      description: "What did actually happen? Add screenshots, if applicable."
      placeholder: "It actually ..."
  - type: input
    id: python-version
    validations:
      required: false
    attributes:
      label: "🤖 Python Version"
      description: >
        What Python version are you using?
  - type: textarea
    id: additional-context
    validations:
      required: false
    attributes:
      label: "📃 Provide any additional context for the Bug."
      description: "Add any other context about the problem here."
      placeholder: "It actually ..."
  - type: checkboxes
    id: no-duplicate-issues
    attributes:
      label: "👀 Have you spent some time to check if this bug has been raised before?"
      options:
        - label: "I checked and didn't find similar issue"
          required: true
  - type: dropdown
    attributes:
      label: Are you willing to submit PR?
      description: This is absolutely not required, but we are happy to guide you in the contribution process.
      options:
        - "Yes I am willing to submit a PR!"


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: 🚀 Feature
description: "Submit a proposal for a new feature"
title: "🚀 Feature: "
labels: [feature]
body:
  - type: dropdown
    id: component
    validations:
      required: true
    attributes:
      label: Which component is this feature for?
      description: Which package does this feature request apply to?
      options:
        - "AlephAlpha Instrumentation"
        - "Anthropic Instrumentation"
        - "Bedrock Instrumentation"
        - "Chromadb Instrumentation"
        - "Cohere Instrumentation"
        - "Google Generative AI Instrumentation"
        - "Groq Instrumentation"
        - "Haystack Instrumentation"
        - "LanceDB Instrumentation"
        - "Langchain Instrumentation"
        - "LlamaIndex Instrumentation"
        - "Marqo Instrumentation"
        - "Milvus Instrumentation"
        - "Mistral Instrumentation"
        - "Ollama Instrumentation"
        - "OpenAI Instrumentation"
        - "Pinecone Instrumentation"
        - "Qdrant Instrumentation"
        - "Replicate Instrumentation"
        - "SageMaker Instrumentation"
        - "Together Instrumentation"
        - "Transformers Instrumentation"
        - "VertexAI Instrumentation"
        - "Watsonx Instrumentation"
        - "Weaviate Instrumentation"
        - "LLM Semantic Conventions"
        - "Traceloop SDK"
        - "All Packages"
  - type: markdown
    attributes:
      value: |
        We value your time and efforts to submit this Feature request form. 🙏
  - type: textarea
    id: feature-description
    validations:
      required: true
    attributes:
      label: "🔖 Feature description"
      description: "A clear and concise description of what the feature is."
      placeholder: "You should add ..."
  - type: textarea
    id: pitch
    validations:
      required: true
    attributes:
      label: "🎤 Why is this feature needed ?"
      description: "Please explain why this feature should be implemented and how it would be used. Add examples, if applicable."
      placeholder: "In my use-case, ..."
  - type: textarea
    id: solution
    validations:
      required: true
    attributes:
      label: "✌️ How do you aim to achieve this?"
      description: "A clear and concise description of what you want to happen."
      placeholder: "I want this feature to, ..."
  - type: textarea
    id: alternative
    validations:
      required: false
    attributes:
      label: "🔄️ Additional Information"
      description: "A clear and concise description of any alternative solutions or additional solutions you've considered."
      placeholder: "I tried, ..."
  - type: checkboxes
    id: no-duplicate-issues
    attributes:
      label: "👀 Have you spent some time to check if this feature request has been raised before?"
      options:
        - label: "I checked and didn't find similar issue"
          required: true
  - type: dropdown
    id: willing-to-submit-pr
    attributes:
      label: Are you willing to submit PR?
      description: This is absolutely not required, but we are happy to guide you in the contribution process.
      options:
        - "Yes I am willing to submit a PR!"


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!-- Thanks for submitting a PR! To make sure this gets merged quickly, make sure to check the following checkboxes. -->

- [ ] I have added tests that cover my changes.
- [ ] If adding a new instrumentation or changing an existing one, I've added screenshots from some observability platform showing the change.
- [ ] PR name follows conventional commits format: `feat(instrumentation): ...` or `fix(instrumentation): ...`.
- [ ] (If applicable) I have updated the documentation accordingly.


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-alephalpha"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-anthropic"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-bedrock"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-chromadb"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-cohere"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-google-generativeai"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-haystack"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-langchain"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-llamaindex"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-marqo"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-milvus"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-mistralai"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-ollama"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-openai"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-pinecone"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-qdrant"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-replicate"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-together"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-transformers"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-vertexai"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-watsonx"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-instrumentation-weaviate"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/opentelemetry-semantic-conventions-ai"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"
  - package-ecosystem: "uv"
    directory: "/packages/traceloop-sdk"
    schedule:
      interval: "weekly"
    groups:
      gha:
        patterns:
          - "*"
    labels:
      - "dependencies"


================================================
FILE: .github/workflows/ci.yml
================================================
name: CI

on:
  pull_request:
    branches:
      - "main"
  push:
    branches:
      - "main"

env:
  PIP_NO_CACHE_DIR: 1

jobs:
  lint-pr:
    name: Lint PR
    runs-on: ubuntu-latest
    if: github.event_name == 'pull_request_target' && contains('["opened", "edited", "synchronize"]', github.event.action)
    permissions:
      pull-requests: read
    steps:
      - name: Validate PR title
        uses: amannn/action-semantic-pull-request@v5
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  lint:
    name: Lint
    runs-on: ubuntu-latest

    steps:
      - name: Free up disk space
        run: |
          # Remove unnecessary software and cached packages
          sudo apt-get remove -y '^dotnet-.*' '^llvm-.*' 'php.*' '^mongodb-.*' '^mysql-.*' azure-cli google-cloud-cli google-chrome-stable firefox powershell mono-devel libgl1-mesa-dri || true
          sudo apt-get autoremove -y
          sudo apt-get clean
          # Remove Docker images and containers
          docker system prune -af || true
          # Remove additional system files
          sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc /opt/hostedtoolcache/CodeQL || true
          sudo rm -rf /imagegeneration || true
          # Clear APT cache completely
          sudo rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* || true
          # Show available space
          df -h
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          ref: ${{  github.event.pull_request.head.sha }}

      - name: Set up Python 3.11
        uses: actions/setup-python@v5
        with:
          python-version: 3.11

      - name: Install uv
        uses: astral-sh/setup-uv@v4
        with:
          version: "latest"

      - uses: actions/setup-node@v4
        with:
          node-version: 18

      - uses: nrwl/nx-set-shas@v4
      - run: npm ci --cache ~/.npm --prefer-offline
      - name: Clean npm cache
        run: npm cache clean --force || true
      - run: npx nx affected -t install
      - run: npx nx affected -t lint --parallel=3
      - run: npx nx affected -t type-check --parallel=3

  build-packages:
    name: Build Packages
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.11"]

    steps:
      - name: Free up disk space
        run: |
          # Remove unnecessary software and cached packages
          sudo apt-get remove -y '^dotnet-.*' '^llvm-.*' 'php.*' '^mongodb-.*' '^mysql-.*' azure-cli google-cloud-cli google-chrome-stable firefox powershell mono-devel libgl1-mesa-dri || true
          sudo apt-get autoremove -y
          sudo apt-get clean
          # Remove Docker images and containers
          docker system prune -af || true
          # Remove additional system files
          sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc /opt/hostedtoolcache/CodeQL || true
          sudo rm -rf /imagegeneration || true
          # Clear APT cache completely
          sudo rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* || true
          # Show available space
          df -h
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install uv
        uses: astral-sh/setup-uv@v4
        with:
          version: "latest"

      - uses: actions/setup-node@v4
        with:
          node-version: 18

      - uses: nrwl/nx-set-shas@v4

      - run: npm ci --cache ~/.npm --prefer-offline
      - name: Clean npm cache
        run: npm cache clean --force || true

      - name: Install
        run: npx nx affected -t install --parallel=2


      - name: Build
        run: npx nx affected -t build-release --parallel=2

      - name: Clean build artifacts to save space
        run: |
          find packages -name "dist" -type d -exec rm -rf {} + || true
          find packages -name "*.egg-info" -type d -exec rm -rf {} + || true

  test-packages:
    name: Test Packages
    runs-on: ubuntu-latest
    permissions:
      contents: "read"
      id-token: "write"
    strategy:
      matrix:
        python-version: ["3.10", "3.11", "3.12"]

    steps:
      - name: Free up disk space
        run: |
          # Remove unnecessary software and cached packages
          sudo apt-get remove -y '^dotnet-.*' '^llvm-.*' 'php.*' '^mongodb-.*' '^mysql-.*' azure-cli google-cloud-cli google-chrome-stable firefox powershell mono-devel libgl1-mesa-dri || true
          sudo apt-get autoremove -y
          sudo apt-get clean
          # Remove Docker images and containers
          docker system prune -af || true
          # Remove additional system files
          sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc /opt/hostedtoolcache/CodeQL || true
          sudo rm -rf /imagegeneration || true
          # Clear APT cache completely
          sudo rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* || true
          # Show available space
          df -h
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          ref: ${{  github.event.pull_request.head.sha }}

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install uv
        uses: astral-sh/setup-uv@v4
        with:
          version: "latest"

      - uses: actions/setup-node@v4
        with:
          node-version: 18

      - uses: nrwl/nx-set-shas@v4

      - run: npm ci --cache ~/.npm --prefer-offline
      - name: Clean npm cache
        run: npm cache clean --force || true

      - name: Install
        run: npx nx affected -t install --exclude='sample-app' --parallel=2


      - name: Test
        env:
          HAYSTACK_TELEMETRY_ENABLED: False
        run: npx nx affected -t test --exclude='sample-app' --exclude='opentelemetry-instrumentation-haystack' --parallel=2

      - name: Clean test artifacts to save space
        run: |
          find packages -name ".pytest_cache" -type d -exec rm -rf {} + || true
          find packages -name "__pycache__" -type d -exec rm -rf {} + || true
          find packages -name "*.pyc" -delete || true


================================================
FILE: .github/workflows/release.yml
================================================
name: Release - Traceloop SDK & Standalone Instrumentations

on:
  workflow_dispatch:

jobs:
  bump-version:
    runs-on: ubuntu-latest
    permissions:
      contents: write

    outputs:
      new_version: ${{ steps.cz.outputs.version }}

    steps:
      - name: Generate GitHub App Token
        id: app-token
        uses: actions/create-github-app-token@v2
        with:
          app-id: ${{ secrets.OSS_CI_BOT_APP_ID }}
          private-key: ${{ secrets.OSS_CI_BOT_PRIVATE_KEY }}
          repositories: ${{ github.event.repository.name }}

      - uses: actions/checkout@v4
        with:
          persist-credentials: false
          fetch-depth: 0
          token: ${{ steps.app-token.outputs.token }}

      - name: Set up Python 3.11
        uses: actions/setup-python@v5
        with:
          python-version: 3.11

      - name: Install uv
        uses: astral-sh/setup-uv@v4
        with:
          version: "latest"

      - id: cz
        name: Bump Version, Create Tag and Changelog
        uses: commitizen-tools/commitizen-action@master
        with:
          github_token: ${{ steps.app-token.outputs.token }}
          changelog_increment_filename: body.md

      - name: Create Release
        uses: softprops/action-gh-release@v2
        with:
          body_path: "body.md"
          tag_name: ${{ env.REVISION }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Print Version
        run: echo "Bumped to version ${{ steps.cz.outputs.version }}"

  release-instrumentations:
    runs-on: ubuntu-latest
    needs:
      - bump-version
    permissions:
      id-token: write
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
          fetch-depth: 0
          ref: ${{ github.ref }}

      - name: Set up Python 3.11
        uses: actions/setup-python@v5
        with:
          python-version: 3.11

      - name: Install uv
        uses: astral-sh/setup-uv@v4
        with:
          version: "latest"
          enable-cache: true

      - uses: actions/setup-node@v4
        with:
          node-version: 18

      - run: npm ci

      - name: Build Instrumentations
        run: npx nx run-many -t build-release --projects=tag:instrumentation

      - run: mkdir instrumentations-dist
      - run: cp packages/opentelemetry-instrumentation-*/dist/* instrumentations-dist

      - name: Publish release distributions to PyPI
        uses: pypa/gh-action-pypi-publish@release/v1
        with:
          packages-dir: instrumentations-dist/

  release-sdk:
    runs-on: ubuntu-latest
    needs:
      - release-instrumentations
    permissions:
      id-token: write
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
          fetch-depth: 0
          ref: ${{ github.ref }}

      - name: Set up Python 3.11
        uses: actions/setup-python@v5
        with:
          python-version: 3.11

      - name: Install uv
        uses: astral-sh/setup-uv@v4
        with:
          version: "latest"
          enable-cache: true

      - uses: actions/setup-node@v4
        with:
          node-version: 18

      - run: npm ci

      - name: Build Traceloop SDK
        run: npx nx run traceloop-sdk:build-release

      - name: Publish release distributions to PyPI
        uses: pypa/gh-action-pypi-publish@release/v1
        with:
          packages-dir: packages/traceloop-sdk/dist/

  test-sdk-installation:
    runs-on: ubuntu-latest
    needs:
      - bump-version
      - release-sdk
    permissions:
      id-token: write
    steps:
      - name: Set up Python 3.11
        uses: actions/setup-python@v5
        with:
          python-version: 3.11

      - name: Install Traceloop SDK
        run: pip install traceloop-sdk==${{ needs.bump-version.outputs.new_version }}


================================================
FILE: .gitignore
================================================
# See http://help.github.com/ignore-files/ for more about ignoring files.

# compiled output
dist
tmp
/out-tsc

# dependencies
node_modules

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
yarn-error.log
testem.log
/typings

# System Files
.DS_Store
Thumbs.db

.cache/
reports/
.vscode/

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

# PyCharm
.idea/

# NX
.nx

# Test artifcats
chroma.sqlite3

# Claude
.claude

# Development files
packages/sample-app/sample_app/development/


================================================
FILE: CHANGELOG.md
================================================
## v0.53.3 (2026-03-19)

### Fix

- **langchain**: release and use semconv 0.4.16 version (#3829)

## v0.53.2 (2026-03-18)

### Fix

- use GITHUB_TOKEN for release creation to resolve 403 error (#3821)

## v0.53.1 (2026-03-17)

### Fix

- **traceloop-sdk**: Add dataset override functionality (#3813)

## v0.53.0 (2026-03-04)

### Feat

- **langchain**: add OpenTelemetry GenAI semantic conventions (#3673)

### Fix

- **semconv**: revert deleted semconv attributes (#3750)
- **pinecone**: instrument pinecone package instead of deprecated pinecone-client (#3733)
- **langchain**: support non-ascii characters to support i18n (#3734)

## v0.52.6 (2026-02-26)

### Fix

- **dataset**: Add versions to dataset metadata  (#3732)
- **qdrant**: support all versions of qdrant package (#3500)

## v0.52.5 (2026-02-23)

### Fix

- **traceloop-sdk**: Add evaluator config to the evaluator validator (#3706)
- **anthropic**: restore accidentally lost cache tokens attributes (#3648)

## v0.52.4 (2026-02-19)

### Fix

- **openai-agents**: fix realtime session event handling for prompts, completions, and usage (#3688)
- preserve return values for RealtimeSession context manager methods (#3681)
- **openai-agents**: add functools.wraps to dont_throw decorator (#3687)

## v0.52.3 (2026-02-10)

### Fix

- **openai-agents**: add clear flag to support two instrumentation modes (#3489)

## v0.52.2 (2026-02-08)

### Fix

- **traceloop-sdk**: Add conversation decorator (#3659)
- **traceloop-sdk**: Add endpoint_is_traceloop attribute (#3650)

## v0.52.1 (2026-02-02)

### Fix

- **voyageai**: add to commitizen to bump on release (#3660)

## v0.52.0 (2026-02-02)

### Feat

- **voyage-ai**: add voyage-ai instrumentation (#3653)

### Fix

- **openai-agents**: apply content tracing flag to content (#3487)
- **traceloop-sdk**: Align evals output schema (#3643)

## v0.51.1 (2026-01-26)

### Fix

- **openai-agents**: add support for realtime (#3533)

## v0.51.0 (2026-01-20)

### Feat

- **google-generativeai**: Add metrics support (#3506)

### Fix

- **traceloop-sdk**: Add csv and json support to experiment (#3537)
- **evals**: evals API supports input + config, generate mbt functions (#3534)
- **langchain**: correct unknown role in completion spans (#3532)
- **evals**: auto generate evals (#3529)
- **tracing**: Add association property (#3524)
- **openai-agents**: optional import of optional deps (#3488)

## v0.50.1 (2025-12-16)

### Fix

- **sample-app**: lint fix (#3522)

## v0.50.0 (2025-12-15)

### Feat

- **guardrail**: Add guardrail decorator (#3521)

## v0.49.8 (2025-12-11)

### Fix

- **openai**: add support for realtime api (websockets) (#3511)
- **ollama**: support Older Version Ollama (#3501)

## v0.49.7 (2025-12-08)

### Fix

- **exp**: Add a real agent example (#3507)
- **evals**: Add agent evaluators to made by traceloop (#3505)
- **exp**: Add made by traceloop evaluators (#3503)
- **traceloop-sdk**: Fixes gRPC exporter initialisation with insecure OTLP (#3481)

## v0.49.6 (2025-12-01)

### Fix

- **agno**: add streaming support for Agent.run() and Agent.arun() (#3483)

## v0.49.5 (2025-11-27)

### Fix

- **openai**: responses instrumentation broken traces for async streaming (#3475)
- **mcp**: remove faulty logic of trying to deduce HTTP errors (#3477)

## v0.49.4 (2025-11-27)

### Fix

- **exp**: Add run in github experiment  (#3459)

## v0.49.3 (2025-11-26)

### Fix

- **openai**: recognize NOT_GIVEN and Omit (#3473)
- **dataset**: add support for file cells in datasets with upload and external URL linking capabilities (#3462)
- **openai**: report request attributes in responses API instrumentation (#3471)
- **sdk**: crewai tracing provider conflict (#3470)
- **sdk**: watsonx warning on initialization (#3469)
- **traceloop-sdk**: add type-checking support with mypy (#3463)

## v0.49.2 (2025-11-25)

### Fix

- **sdk**: remove posthog (#3466)

## v0.49.1 (2025-11-24)

### Fix

- **langchain**: allow configuration of metadata key prefix (#3367)
- **openai**: record service_tier attribute (#3458)

## v0.49.0 (2025-11-23)

### Feat

- **agno**: add instrumentation for agno framework (#3452)

## v0.48.2 (2025-11-23)

### Fix

- add structured outputs schema logging for Anthropic and Gemini (#3454)
- **openai**: use SpanAttributes instead of GenAIAttributes for cache token attributes (#3442)
- migrate from events api to log records for otel 1.37.0+ compatibility (#3453)

## v0.48.1 (2025-11-17)

### Fix

- **openai**: safe handle None tools value in responses api (#3447)
- **mcp**: move exporter dependency to dev and test environment (#3445)

## v0.48.0 (2025-11-11)

### Feat

- **instrumentation**: updated GenAI attributes to use OTel's (#3138)

### Fix

- **openai**: add streaming support for responses.create() api (#3437)
- **bedrock**: handle non-text contentBlockDelta events in converse_stream (#3404)
- **openai-agents**: span attribute handling for tool calls and results (#3422)
- **watson**: collect prompt content and set as span attribute (#3417)

## v0.47.5 (2025-10-24)

### Fix

- **google-genai**: make streaming responses work (again) (#3421)
- **langchain**: changed dictionary access from spans[run_id] to spans.get(run_id) (#3403)

## v0.47.4 (2025-10-22)

### Fix

- **fastmcp**: Remote MCP instrumentation (#3419)

## v0.47.3 (2025-09-21)

### Fix

- **openai-agents**: propagate gen_ai.agent.name through an agent flow + set workflow name to fast mcp (#3388)

## v0.47.2 (2025-09-17)

### Fix

- **mcp**: add mcp.server parent span wrapper for FastMCP tool calls (#3382)

## v0.47.1 (2025-09-14)

### Fix

- **mcp**: better instrumentation for FastMCP (#3372)
- **anthropic**: preserve streaming helper methods in instrumentation (#3377)
- **cohere**: add v2 api instrumentation (#3378)
- **mistralai**: instrumentation for version 1.9+ compatibility (#3376)
- **sdk**: dual bearer send via httpx (#3373)

## v0.47.0 (2025-09-10)

### Feat

- **writer**: initial implementation (#3209)

### Fix

- **crewai**: Update CrewAI instrumentation name (#3363)
- **sample-app**: Update google genai package (#3358)
- **traceloop-sdk**: include telemetry SDK attributes in tracing (#3359)
- **sdk**: get default span processor don't work without a base URL (#3360)

## v0.46.2 (2025-08-29)

### Fix

- **vertexai**: add missing role attributes when handling images (#3347)
- **sdk**: manual logging example + fix span ended error (#3352)
- **sdk**: support disabling all instrumentations (#3353)
- **openai-agents**: support json inputs (#3354)
- **openai**: reasoning jsons weren't stored
- **crewai**: fix unpack error when metrics are disabled (#3345)
- **milvus**: Set default values when metrics are disabled (#3344)

## v0.46.1 (2025-08-24)

### Fix

- **google-generativeai,vertexai**: image support for Gemini models (#3340)

## v0.46.0 (2025-08-24)

### Feat

- **openai**: add reasoning attributes (#3336)
- **semantic-conventions-ai**: Add reasoning attributes (#3330)
- **experiment**: Add run experiment capabilities (#3331)

### Fix

- **traceloop-sdk**: bump logging instrumentation to support newer otel versions (#3339)
- **traceloop-sdk**: add @staticmethod decorator to set_association_properties (#3341)
- **google-genai**: update logic for deciding whether to use awrap or wrap in the Google Generative AI Instrumentation (#3329)
- **ollama**: missing response model attr in operation duration metric (#3328)
- **bedrock**: add guardrail on span attributes (#3326)

## v0.45.6 (2025-08-18)

### Fix

- **anthropic**: fix with_raw_response wrapper consistency and re-enable beta API instrumentation (#3297)
- **langchain**: include content attribute when assistant messages have tool calls (#3287)
- **google-genai**: migrate Google Generative AI instrumentation to googleapis/python-genai (#3282)

## v0.45.5 (2025-08-15)

### Fix

- **openai-agents**: switch to hook-based instrumentation (#3283)

## v0.45.4 (2025-08-14)

### Fix

- relax opentelemetry-semantic-conventions-ai deps (#3259)

## v0.45.3 (2025-08-14)

### Fix

- **anthropic**: temp disable beta apis instrumentation (#3258)

## v0.45.2 (2025-08-14)

### Fix

- **langchain**: langgraph application crash due to context detach (#3256)

## v0.45.1 (2025-08-13)

### Fix

- **langchain**: context detach exception (#3255)
- **mcp**: MCP Instrumentation: streamablehttp_client Parameter Corruption (#3199)

## v0.45.0 (2025-08-12)

### Feat

- **datasets**: add dataset and datasets functionality (#3247)

### Fix

- **anthropic**: support with_raw_response wrapper for span generation (#3250)
- **langchain**: fix nesting of langgraph spans (#3206)
- **langchain**: Add "dont_throw" to "on_llm_end" and remove blank file (#3232)

## v0.44.3 (2025-08-12)

### Fix

- **sdk**: avoid initializing metrics exporter on custom tracing config (#3249)
- **openai**: propagate span IDs properly to events (#3243)

## v0.44.2 (2025-08-11)

### Fix

- **openai**: dynamically import types for 1.99 (#3244)
- **langchain**: Added new method for fetching model name from association metadata (#3237)

## v0.44.1 (2025-08-04)

### Fix

- **mcp**: do not override meta pydantic types (#3179)

## v0.44.0 (2025-08-03)

### Feat

- **sdk**: support multiple span processors (#3207)
- **semantic-conentions-ai**: add LLMVendor enum to semantic conventions (#3170)

### Fix

- **langchain**: spans dictionary memory leak (#3216)
- **openai-agents**: use framework's context to infer trace (#3215)
- **sdk**: respect truncation otel environment variable (#3212)
- **anthropic**: async stream manager (#3220)
- **langchain**: populate metadata as span attributes in batch operations (#3218)
- **anthropic**: various fixes around tools parsing (#3204)
- **qdrant**: fix qdrant-client auto instrumentation condition (#3208)
- **instrumentation**: remove param `enrich_token_usage` and simplify token calculation (#3205)
- **langchain**: ensure llm spans are created for sync cases (#3201)
- **openai**: support for openai non-consumed streams (#3155)

## v0.43.1 (2025-07-23)

### Fix

- **langchain**: added vendors to llm calls (#3165)

## v0.43.0 (2025-07-22)

### Feat

- **prompts**: add tool function support (#3153)

### Fix

- **llamaindex**: structured llm model and temperature parsing (#3159)
- **langchain**: report token usage histogram (#3059)
- **openai**: prioritize api-provided token over tiktoken calculation (#3142)
- **milvus**: Add metrics support (#3013)

## v0.42.0 (2025-07-17)

### Feat

- **llamaindex**: support llamaparse instrumentation (#3103)
- **milvus**: add semantic convention for Milvus DB metrics (#3015)

### Fix

- **openai-agents**: fix broken traces with agents handoff on run_stream (#3143)
- **traceloop-sdk**: redefine histogram bucket boundaries (#3129)

## v0.41.0 (2025-07-13)

### Feat

- **openai-agents**: initial instrumentation; collect OpenAI agent traces and metrics (#2966)
- **google-generativeai**: implement emitting events in addition to current behavior (#2887)
- **vertexai**: implement emitting events in addition to current behavior (#2942)
- **langchain**: implement emitting events in addition to current behavior (#2889)
- **anthropic**: implement emitting events in addition to current behavior (#2884)
- **bedrock**: implement emitting events in addition to current behavior (#2885)
- **llamaindex**: implement emitting events in addition to current behavior (#2941)
- **watsonx**: implement emitting events in addition to current behavior (#2896)
- **cohere**: implement emitting events in addition to current behavior (#2886)
- **groq**: implement emitting events in addition to current behavior (#2888)
- **sagemaker**: implement emitting events in addition to current behavior  (#2894)
- **together**: implement emitting events in addition to current behavior  (#2895)
- **replicate**: implement emitting events in addition to current behavior (#2893)
- **ollama**: implement emitting events in addition to current behavior (#2891)
- **mistralai**: implement emitting events in addition to current behavior  (#2890)
- vendor matching (#3062)
- **semconv**: add an attribute for output schema (#3064)
- **transformers**: implement the support to emitting events in addition to current behavior (#2940)
- **alephalpha**: implement emitting events in addition to current behavior (#2880)
- **mcp**: Add support for mcp streamable http transport type (#3049)
- **milvus**: Add error.type attribute from OpenTelemetry Semantic Conventions  (#3009)
- **openai**: OpenAI responses minimal instrumentation (#3052)
- **ollama**: add meter STTG to ollama instrumentation (#3053)
- **openai**: implement emitting events in addition to current behavior (#2892)

### Fix

- align semconv deps (#3106)
- **sagemaker**: add should_send_prompts checks (#3072)
- **watsonx**: add should_send_prompts check to model response (#3071)
- **groq**: add should_send_prompts checks (#3074)
- **ollama**: add should_send_prompts check (#3073)
- **transformers**: add should_send_prompts checks (#3070)
- **groq**: wrong system attribute was given (#3069)
- **openai**: record exception as span events as well (#3067)
- **openai**: add request schema attribute (#3065)
- **mcp**: add support for error_type in mcp instrumentation (#3050)
- google gemini insturmentation (#3055)
- **openai**: completions.parse out of beta, azure remove double-slash (#3051)

## v0.40.14 (2025-06-24)

### Fix

- instrumentation dependencies issue for google, ollama and redis (#3044)

## v0.40.13 (2025-06-24)

### Fix

- **sdk**: manual report of usage data (#3045)
- **sagemaker**: Improve _handle_call to safely parse JSON, CSV, and byte inputs (#2963)
- **anthropic**: serialize assistant message pydantic models (#3041)
- **sdk**: Ensure instrumentors don’t report successful init if package isn’t installed (#3043)

## v0.40.12 (2025-06-20)

### Fix

- **langchain**: add tool call ids to tool message in history (#3033)

## v0.40.11 (2025-06-17)

### Fix

- **sdk**: sampling support (#3027)

## v0.40.10 (2025-06-17)

### Fix

- **google-genai**: Add support for generate_content method in google genai models (#3014)

## v0.40.9 (2025-06-10)

### Fix

- **langchain**: Fix missing langchain dependency for LangGraph tracing (#2988)

## v0.40.8 (2025-06-09)

### Fix

- **openai**: dump pydantic input message (#2979)
- **langchain**: trace langchain tool definitions (#2978)

## v0.40.7 (2025-05-20)

### Fix

- **mcp**: Added support for newer version of MCP (#2956)
- **gemini**: proper chat support (#2948)
- **milvus**: Add instrumentation for pymilvus MilvusClient hybrid search operation (#2945)

## v0.40.6 (2025-05-16)

### Fix

- **sdk**: support overriding the span processor on_end hook (#2947)
- **milvus**: Added New Semantic Conventions for pymilvus MilvusClient Hybrid Search (#2944)

## v0.40.5 (2025-05-13)

### Fix

- **langchain**: tools in message history (#2939)
- **sdk**: Place MCP in its lexical order (#2943)

## v0.40.4 (2025-05-10)

### Fix

- **milvus**: Enhanced Milvus VectorDB Instrumentation for Improved search Monitoring (#2815)
- **milvus**: Added New Semantic Conventions for Milvus Search (Request for Version Update 0.4.5 -> 0.4.6) (#2883)
- **MCP**: Added error status to traces in MCP server for tool calls (#2914)
- **ollama**: pre-imported funcs instrumentation failure (#2871)

## v0.40.3 (2025-05-07)

### Fix

- **langchain**: report token counts when trace content is enabled (#2899)
- **mcp+anthropic**: vanilla mcp crashed due to argument manipulation (#2881)

## v0.40.2 (2025-04-30)

### Fix

- **ci**: align mcp instrumentation version (#2876)

## v0.40.1 (2025-04-30)

### Fix

- **ci-cd**: add mcp to commitizen (#2875)

## v0.40.0 (2025-04-30)

### Feat

- **instrumentation**: Adding MCP opentelemetry-instrumentation into traceloop (#2829)

## v0.39.4 (2025-04-28)

### Fix

- **sdk**: improve type safety in decorators (#2867)

## v0.39.3 (2025-04-24)

### Fix

- **langchain**: support cached tokens attributes logging (#2830)

## v0.39.2 (2025-04-18)

### Fix

- **openai**: add cache read tokens from returned usage block (#2820)
- **ollama**: type error in dict combination of ollama instrumentation (#2814)
- **llama-index**: use the correct instrumentation point (#2807)

## v0.39.1 (2025-04-15)

### Fix

- **sdk**: Loosen tenacity dependency constraint to allow versions up to 10.0 (#2816)

## v0.39.0 (2025-03-25)

### Feat

- **instrumentation**: add metric for Bedrock prompt caching (#2788)
- **bedrock**: add support for ARN and cross region endpoint (#2785)
- **instrumentation**: Support Converse APIs and guardrail metrics (#2725)

### Fix

- **bedrock**: add span attr for Bedrock prompt caching (#2789)
- **anthropic**: add thinking as a separate completion message (#2780)
- **langchain**: support for date/time in langchain serializations (#2792)
- **openai**: set user messages as prompts, not completions (#2781)
- **groq**: exception when metrics are turned off (#2778)
- **ollama**: Implemented meter in the instrumentation (#2741)

## v0.38.12 (2025-03-07)

### Fix

- **sdk**: client shouldn't be initialized if destination is not traceloop (#2754)

## v0.38.11 (2025-03-06)

### Fix

- **sdk**: When tracing task with no `name` provided , use qualified name instaed of name (#2743)

## v0.38.10 (2025-03-05)

### Fix

- **sdk**: record exceptions (#2733)

## v0.38.9 (2025-03-04)

### Fix

- **milvus**: updated the instrumentation to collect get() and create_collection() span attributes  (#2687)
- **semconv**: added new semantic conventions for milvus db (#2727)

## v0.38.8 (2025-02-27)

### Fix

- **vertexai**: support generative model chat session tracing (#2689)
- **groq**: Updated the instrumentation to collect the token histogram (#2685)

## v0.38.7 (2025-02-19)

### Fix

- **langchain**: warning with mixed metadata value types (#2665)
- **langchain**: handle errors (#2664)
- **groq**: streaming support (#2663)

## v0.38.6 (2025-02-17)

### Fix

- **sdk**: async generator wrapping (#2635)
- **instrumentation**: watsonx initialize parameters (#2633)

## v0.38.5 (2025-02-10)

### Fix

- **sdk**: Fix async decorator input & output json encoder (#2629)

## v0.38.4 (2025-02-06)

### Fix

- **sdk**: improve package name detection with type hints and null safety (#2618)

## v0.38.3 (2025-02-05)

### Fix

- **langchain**: sanitize metadata (#2608)
- **sdk**: improve package name detection for metadata (#2607)
- **openai**: support context propagation for OpenAI v0 and v1 (#2606)
- **openai**: report exceptions on spans (#2604)

## v0.38.2 (2025-02-04)

### Fix

- dependency issue for python 3.13 (#2603)
- **openai**: compatibility issue with openai attribute not available (#2602)

## v0.38.1 (2025-02-04)

### Fix

- **openai**: don't eagerly import types from openai as they may not be available (#2601)
- **sdk**: watsonx package name was wrong preventing instrumentation (#2600)

## v0.38.0 (2025-02-04)

### Feat

- **crewai**: Implemented histogram for crewai instrumentation (#2576)

### Fix

- **mistral**: add response id attribute (#2549)
- **openai**: add response id attribute (#2550)
- **together**: add response id attribute (#2551)
- **langchain**: add response id (anthropic only) (#2548)

## v0.37.1 (2025-01-25)

### Fix

- **crewai**: instrumentation package version (#2570)

## v0.37.0 (2025-01-25)

### Feat

- **crewai**: initial instrumentation; collect agent and task traces (#2489)

### Fix

- add crewai to supported frameworks in readme (#2559)
- **cohere**: add response id attribute (#2545)
- **bedrock**: add response id attribute (#2544)
- **anthropic**: add response id attribute (#2543)
- **groq**: add response id attribute (#2546)
- **langchain**: address warning for NoneType attibute; update some test deps (#2539)

## v0.36.1 (2025-01-20)

### Fix

- **sdk**: remove use of `__all__` (#2536)
- **gemini**: set prompt attributes for role and content (#2511)

## v0.36.0 (2025-01-13)

### Feat

- **sdk**: client, annotations (#2452)

## v0.35.0 (2025-01-03)

### Feat

- **sdk**: combine async/sync decorators & annotations (#2442)

### Fix

- **sdk**: option to disable SDK (#2454)

## v0.34.1 (2024-12-22)

### Fix

- **llamaindex**: workflow context detach exception and span names (#2421)
- **langchain**: azure openai missing request model  (#2416)

## v0.34.0 (2024-12-12)

### Feat

- **docs**: Update README.md to add link to recently-added GCP integration document. (#2384)

### Fix

- bump otel >0.50b0 (#2386)
- update google generative AI import (#2382)
- **sdk**: Update JSONEncoder to allow class instance methods to be serializable (#2383)
- **openai**: Add token count and system to assistants (#2323)
- **openai**: Add trace context to client requests (#2321)

## v0.33.12 (2024-11-13)

### Fix

- **sdk**: aworkflow decorator for async generators (#2292)
- **cohere**: rerank exception on saving response when return_documents=True (#2289)
- **sdk**: gemini instrumentation was never installed due to package name error (#2288)

## v0.33.11 (2024-11-09)

### Fix

- **sdk**: remove print (#2285)

## v0.33.10 (2024-11-08)

### Fix

- general bump of otel dependencies (#2274)

## v0.33.9 (2024-11-05)

### Fix

- **openai**: exception throw with pydantic v1 (#2262)

## v0.33.8 (2024-11-05)

### Fix

- **vertex**: async / streaming was missing output fields (#2253)

## v0.33.7 (2024-11-04)

### Fix

- **sdk**: don't serialize large jsons as inputs/outputs (#2252)

## v0.33.6 (2024-11-04)

### Fix

- **anthropic**: instrument anthropics system message as gen_ai.prompt.0 (#2238)
- **llamaindex**: streaming LLMs caused detached spans (#2237)
- **sdk**: missing sagemaker initialization (#2235)
- **sdk**: support a "block-list" of things to not instrument (#1958)

## v0.33.5 (2024-10-29)

### Fix

- **openai+anthropic**: async call crashing the app when already in a running asyncio loop (#2226)

## v0.33.4 (2024-10-28)

### Fix

- **langchain**: structured output response parsing (#2214)
- **anthropic**: add instrumentation for Anthropic prompt caching (#2175)
- **bedrock**: cohere models failed to report prompts (#2204)

## v0.33.3 (2024-10-22)

### Fix

- **sdk**: capture posthog events as anonymous; roll ingestion key (#2194)

## v0.33.2 (2024-10-17)

### Fix

- **langchain**: various bugs and edge cases in metric exporting (#2167)
- **sdk**: add header for logging exporter (#2164)

## v0.33.1 (2024-10-16)

### Fix

- **langchain**: metrics support (#2154)
- **langchain**: Add trace context to client requests (#2152)
- **anthropic**: add instrumentation for Anthropic tool calling (alternative to #1372) (#2150)
- **openai**: add structured output instrumentation (#2111)

## v0.33.0 (2024-10-15)

### Feat

- **sdk**: add OpenTelemetry logging support (#2112)
- **ollama**: tool calling (#2059)

### Fix

- **llama-index**: add attribute to span for llm request type in dispatcher wrapper (#2141)

## v0.32.2 (2024-10-04)

### Fix

- **traceloop-sdk**: add aiohttp as dependency (#2094)

## v0.32.1 (2024-10-03)

### Fix

- **anthropic**: Replace count_tokens with usage for newer models (#2086)

## v0.32.0 (2024-10-03)

### Feat

- **bedrock**: support metrics for bedrock (#1957)
- **SageMaker**: Add SageMaker instrumentation (#2028)

### Fix

- **langchain**: token usage reporting (#2074)

## v0.31.4 (2024-10-01)

### Fix

- **langchain**: serialize inputs and outputs with pydantic (#2065)
- **sdk**: custom image uploader (#2064)

## v0.31.3 (2024-09-28)

### Fix

- support async image upload flows (#2051)

## v0.31.2 (2024-09-27)

### Fix

- **anthropic**: add support for base64 images upload for anthropic (#2029)

## v0.31.1 (2024-09-26)

### Fix

- **anthropic**: token counting exception when prompt contains images (#2030)

## v0.31.0 (2024-09-25)

### Feat

- **sdk+openai**: support base64 images upload (#2000)

### Fix

- **sdk**: wrong package check for Vertex AI (#2015)

## v0.30.1 (2024-09-16)

### Fix

- **langchain**: support v0.3.0 (#1985)

## v0.30.0 (2024-09-04)

### Feat

- add groq instrumentation (#1928)

## v0.29.2 (2024-08-31)

### Fix

- **langchain**: allow external and langchain metadata (#1922)

## v0.29.1 (2024-08-29)

### Fix

- **bedrock**: llama3 completion wasnt logged (#1914)

## v0.29.0 (2024-08-29)

### Feat

- **instrumentation**: Import redis from OpenTelemetry, add redis sample rag application (#1837)

### Fix

- **langchain**: add missing kind property (#1901)

## v0.28.2 (2024-08-26)

### Fix

- **openai**: calculating streaming usage didnt work on azure models

## v0.28.1 (2024-08-24)

### Fix

- **langchain**: langgraph traces were broken (#1895)

## v0.28.0 (2024-08-24)

### Feat

- **llama-index**: callback improvements (#1859)

### Fix

- **openai**: re-enabled token count for azure instances (#1877)
- **openai**: not given values thrown errors (#1876)
- **sdk**: `aentity_class` was missing a positional argument (#1816)
- **sdk**: instrument threading for propagating otel context (#1868)
- **openai**: TypeError: '<' not supported between instances of 'NoneType' and 'int' in embeddings_wrappers.py (#1836)

## v0.27.0 (2024-08-15)

### Feat

- **llama-index**: Use callbacks (#1546)
- LanceDB Integration (#1749)
- **sdk**: chained entity path on nested tasks (#1782)

### Fix

- workflow_name and entity_path support for langchain + fix entity_name (#1844)
- **sdk**: disable traceloop sync by default (#1835)

## v0.26.5 (2024-08-06)

### Fix

- **langchain**: export metadata as association properties (#1805)
- **bedrock**: add model name for amazon bedrock response (#1757)

## v0.26.4 (2024-08-03)

### Fix

- **bedrock**: token count for titan (#1748)

## v0.26.3 (2024-08-02)

### Fix

- **langchain**: various cases where not all parameters were logged properly (#1725)

## v0.26.2 (2024-07-31)

### Fix

- separate semconv-ai module to avoid conflicts (#1716)

## v0.26.1 (2024-07-30)

### Fix

- bump to otel 0.47b0 (#1695)
- **openai**: log content filter results in proper attributes (#1539)

## v0.26.0 (2024-07-26)

### Feat

- **openai**: add tool call id (#1664)

### Fix

- **pinecone**: support v5 (#1665)

## v0.25.6 (2024-07-23)

### Fix

- **sdk**: aworkflow wasn't propagating workflow_name attribute (#1648)
- **langchain**: agent executor weren't producing traces (#1616)

## v0.25.5 (2024-07-17)

### Fix

- **openai**: pydantic tool calls in prompt weren't serialized correctly (#1572)

## v0.25.4 (2024-07-15)

### Fix

- **sdk**: manual reporting of llm spans (#1555)

## v0.25.3 (2024-07-11)

### Fix

- **langchain**: input/output values weren't respecting user config (#1540)

## v0.25.2 (2024-07-11)

### Fix

- **llamaindex**: report entity name (#1525)
- **langchain**: remove leftover print
- **langchain**: cleanups, and fix streaming issue (#1522)
- **langchain**: report llm spans (instead of normal instrumentations) (#1452)

## v0.25.1 (2024-07-09)

### Fix

- association properties and workflow / task on metrics (#1494)
- **llamaindex**: report inputs+outputs on entities (#1495)

## v0.25.0 (2024-07-08)

### Feat

- suppress LLM instrumentations through context (#1453)
- **langchain**: improve callbacks (#1426)

### Fix

- **sdk**: llamaindex instrumentation was never initialized (#1490)

## v0.24.0 (2024-07-03)

### Feat

- **sdk**: prompt versions and workflow versions (#1425)
- **openai**: add support for parallel function calls (#1424)
- **marqo**: Add marqo instrumentation (#1373)

### Fix

- **sdk**: context detach issues on fastapi (#1432)
- **openai**: Handle `tool_calls` assistant messages (#1429)
- **sdk**: speedup SDK initialization (#1374)
- **gemini**: relax version requirements (#1367)

### Refactor

- **openai**: rename `function_call` to `tool_calls` (#1431)

## v0.23.0 (2024-06-17)

### Feat

- **langchain**: use callbacks (#1170)

### Fix

- input/output serialization issue for langchain (#1341)
- **sdk**: remove auto-create dashboard option (#1315)

## v0.22.1 (2024-06-13)

### Fix

- **sdk**: backpropagate association property to nearest workflow/task (#1300)
- **sdk**: clear context when @workflow or @task is ending (#1301)
- **bedrock**: utilize invocation metrics from response body for AI21, Anthropic, Meta models when available to record usage on spans (#1286)

## v0.22.0 (2024-06-10)

### Feat

- **gemini**: basic support in generate_content API (#1293)
- **alephalpha**: Add AlephAlpha instrumentation (#1285)
- **instrumentation**: add streamed OpenAI function tracing (#1284)
- **togetherai**: Add together ai instrumentation (#1264)

### Fix

- **anthropic**: duplicate creation of metrics (#1294)
- **haystack**: add input and output (#1202)
- **openai**: calculate token usage for azure (#1274)
- use constants (#1131)
- **instrumentation**: Handle OpenAI run polling (#1256)

## v0.21.5 (2024-06-05)

### Fix

- **openai**: handle empty finish_reason (#1236)
- removed debug prints from instrumentations
- **vertexai**: change the span names to match method calls (#1234)

## v0.21.4 (2024-06-03)

### Fix

- **openai+anthropic+watsonx**: align duration and token.usage metrics attributes with conventions (#1182)

## v0.21.3 (2024-06-03)

### Fix

- **openai**: async streaming responses (#1229)
- **sdk**: temporarily (?) remove sentry (#1228)

## v0.21.2 (2024-05-31)

### Fix

- **all packages**: Bump opentelemetry-api to 1.25.0 and opentelemetry-instrumentation to 0.46b0 (#1189)

## v0.21.1 (2024-05-30)

### Fix

- log tracing errors on debug level (#1180)
- **bedrock**: support streaming API (#1179)
- **weaviate**: support v4.6.3 (#1134)
- **sdk**: wrong package check for mistral instrumentations (#1168)

## v0.21.0 (2024-05-27)

### Feat

- **vertexai**: `vertexai.generative_models` / `llm_model` detection (#1141)

### Fix

- **bedrock**: support simple string in prompts (#1167)
- **langchain**: stringification fails for lists of LangChain `Documents` (#1140)

## v0.20.0 (2024-05-26)

### Feat

- **mistral**: implement instrumentation (#1139)
- **ollama**: implement instrumentation (#1138)

### Fix

- **anthropic**: don't fail if can't count anthropic tokens (#1142)
- **ollama**: proper unwrapping; limit instrumentations to versions <1
- **bedrock**: instrument bedrock calls for Langchain (with session) (#1135)

## v0.19.0 (2024-05-22)

### Feat

- **milvus**: add Milvus instrumentation (#1068)

### Fix

- add explicit buckets to pinecone histograms (#1129)
- **pinecone**: backport to v2.2.2 (#1122)
- llm metrics naming + views (#1121)
- **langchain**: better serialization of inputs and outputs (#1120)
- **sdk**: failsafe against instrumentation initialization errors (#1117)
- **sdk**: instrument milvus (#1116)

## v0.18.2 (2024-05-17)

### Fix

- **openai**: old streaming handling for backward compatibility with OpenAI v0 (#1064)
- **openai**: report fingerprint from response (#1066)
- **sdk**: special handling for metrics with custom traces exporter (#1065)

## v0.18.1 (2024-05-17)

### Fix

- **openai**: fallback to response model if request model is not set when calculating token usage (#1054)
- **openai**: add default value of stream as false in token usage metric (#1055)

## v0.18.0 (2024-05-14)

### Feat

- **pinecone**: metrics support (#1041)

### Fix

- **sdk**: handle workflow & tasks generators (#1045)
- **cohere**: use billed units for token usage (#1040)

## v0.17.7 (2024-05-13)

### Fix

- remove all un-needed tiktoken deps (#1039)

## v0.17.6 (2024-05-13)

### Fix

- **sdk**: removed unneeded tiktoken dependency (#1038)

## v0.17.5 (2024-05-13)

### Fix

- **openai**: relax tiktoken requirements (#1035)

## v0.17.4 (2024-05-13)

### Fix

- **sdk**: loosen SDK requirements for Sentry + Posthog (#1027)

## v0.17.3 (2024-05-08)

### Fix

- **sdk**: separate sentry SDK (#1004)

## v0.17.2 (2024-05-07)

### Fix

- **langchain**: support model-specific packages (#985)
- **pinecone**: filter argument may be dict (#984)

## v0.17.1 (2024-05-01)

### Fix

- **instrumentation**: correct the module declaration to match package filepath name (#940)

## v0.17.0 (2024-04-29)

### Feat

- **sdk**: otel metrics with traceloop (#883)
- Updated semantic conventions based on otel community (#884)

### Fix

- **sdk**: do not instrument sentry requests (used internally by SDK) (#939)

## v0.16.9 (2024-04-26)

### Fix

- **openai**: missing await for Embedding.acreate (#900)
- **cohere**: support v5 (#899)
- **pinecone**: support v3 (#895)
- **instrumentation**: the build problem for watsonx auto instrumentation (#885)

## v0.16.8 (2024-04-25)

### Fix

- **langchain**: input/output reporting (#894)
- **sdk**: reset the color of messages in the custom metrics exporter (#893)

## v0.16.7 (2024-04-25)

### Fix

- **openai**: azure filtering masked all completions (#886)
- **chromadb**: exception thrown when metadata isn't set (#882)

## v0.16.6 (2024-04-19)

### Fix

- properly handle and report exceptions (#748)
- **langchain**: bug when retrieving messages as kwargs from model invoke (#856)
- **openai**: handle filtered content (#854)
- **bedrock**: loosen version requirement of anthropic (#830)
- **haystack**: V2 Support (#710)

## v0.16.5 (2024-04-17)

### Fix

- **sdk**: warn for reporting score when not using Traceloop (#829)
- **openai**: fix aembeddings init error (#828)
- **openai**: missing aembedding metrics

## v0.16.4 (2024-04-15)

### Fix

- **anthropic**: fix issue with disabled metrics (#820)

## v0.16.3 (2024-04-15)

### Fix

- **openai**: missing metrics for OpenAI v0 instrumentation (#818)

## v0.16.2 (2024-04-14)

### Fix

- **bedrock**: enrich token usage for anthropic calls (#805)
- **langchain**: use chain names if exist (#804)

## v0.16.1 (2024-04-11)

### Fix

- **llamaindex**: proper support for custom LLMs (#776)
- **anthropic**: prompt attribute name (#775)
- **langchain**: BedrockChat model name should be model_id (#763)

## v0.16.0 (2024-04-10)

### Feat

- **instrumentation-anthropic**: Support for OpenTelemetry metrics for Anthropic (#764)

### Fix

- **bedrock**: support anthropic v3 (#770)

## v0.15.13 (2024-04-08)

### Fix

- **sdk**: custom instruments missing parameters (#769)
- **sdk**: import of removed method
- **sdk**: removed deprecated set_context

## v0.15.12 (2024-04-08)

### Fix

- **anthropic**: do not fail for missing methods
- **anthropic**: Async and streaming Anthropic (#750)

## v0.15.11 (2024-04-04)

### Fix

- **openai**: async streaming metrics (#749)

## v0.15.10 (2024-04-04)

### Fix

- **anthropic**: token usage (#747)

## v0.15.9 (2024-04-03)

### Fix

- **openai**: switch to init flag for token usage enrichment (#745)
- **anthropic**: support multi-modal (#746)
- **langchain**: instrument chat models (#741)

## v0.15.8 (2024-04-03)

### Fix

- bump otel -> 0.45.0 (#740)

## v0.15.7 (2024-04-03)

### Fix

- enrich spans with related entity name + support entities nesting (#713)

## v0.15.6 (2024-04-02)

### Fix

- **sdk**: stricter dependencies for instrumentations

## v0.15.5 (2024-04-02)

### Fix

- **openai**: missing metric for v0 instrumentation (#735)

## v0.15.4 (2024-03-31)

### Fix

- **traceloop-sdk**: default value for metrics endpoint (#711)

## v0.15.3 (2024-03-28)

### Fix

- instrumentation deps without the SDK (#707)
- **langchain**: support custom models (#706)

## v0.15.2 (2024-03-27)

### Fix

- **openai**: enrich assistant data if not available (#705)

## v0.15.1 (2024-03-27)

### Fix

- **openai**: support pre-created assistants (#701)

## v0.15.0 (2024-03-26)

### Feat

- **openai**: assistants API (#673)
- **pinecone**: instrument pinecone query embeddings (#368)

### Fix

- **traceloop-sdk**: custom span processor's on_start is honored (#695)
- **openai**: do not import tiktoken if not used
- **sdk**: exclude api.traceloop.com from requests
- **openai**: Support report token usage in stream mode (#661)

## v0.14.5 (2024-03-21)

### Fix

- **anthropic**: support messages API (#671)

## v0.14.4 (2024-03-21)

### Fix

- auto-instrumentation support (#662)
- **sample**: poetry issues; litellm sample
- **sdk**: better logging for otel metrics
- **sdk**: error for manually providing instrumentation list

## v0.14.3 (2024-03-17)

### Fix

- support python 3.12 (#639)
- **traceloop-sdk**: Log error message when providing wrong API key. (#638)

## v0.14.2 (2024-03-15)

### Fix

- **openai**: support tool syntax (#630)

## v0.14.1 (2024-03-12)

### Fix

- **sdk**: protect against unserializable inputs/outputs (#626)

## 0.14.0 (2024-03-12)

### Feat

- **watsonx instrumentation**: Watsonx metric support (#593)

### Fix

- **instrumentations**: add entry points to support auto-instrumentation (#592)

## 0.13.3 (2024-03-07)

### Fix

- **llamaindex**: backport to support v0.9.x (#590)
- **openai**: is_streaming attribute (#589)

## 0.13.2 (2024-03-06)

### Fix

- **openai**: span events on completion chunks in streaming (#586)
- **openai**: streaming metrics (#585)

## 0.13.1 (2024-03-01)

### Fix

- **watsonx**: Watsonx stream generate support (#552)
- **watsonx instrumentation**: Init OTEL_EXPORTER_OTLP_INSECURE before import watsonx models (#549)
- link back to repo in pyproject.toml (#548)

## 0.13.0 (2024-02-28)

### Feat

- basic Support for OpenTelemetry Metrics and Token Usage Metrics in OpenAI V1 (#369)
- **weaviate**: implement weaviate instrumentation (#394)

### Fix

- **watsonx**: exclude http request, adding span for model initialization (#543)

## 0.12.5 (2024-02-27)

### Fix

- **llamaindex**: instrument agents & tools (#533)
- **openai**: Fix `with_raw_response` redirect crashing span (#536)
- **openai**: track client attributes for v1 SDK of OpenAI (#522)
- **sdk**: replaced MySQL instrumentor with SQLAlchemy (#531)

## 0.12.4 (2024-02-26)

### Fix

- **sdk**: fail gracefully if input/output is not json serializable (#525)

## 0.12.3 (2024-02-26)

### Fix

- new PR template (#524)

## 0.12.2 (2024-02-23)

### Fix

- **cohere**: enrich rerank attributes (#476)

## 0.12.1 (2024-02-23)

### Fix

- **llamaindex**: support query pipeline (#475)

## 0.12.0 (2024-02-22)

### Feat

- Qdrant instrumentation (#364)

### Fix

- **langchain**: support LCEL (#473)
- **sdk**: fail gracefully in case input/output serialization failure (#472)

## 0.11.3 (2024-02-19)

### Fix

- **llamaindex**: support both new and legacy llama_index versions (#422)

## 0.11.2 (2024-02-16)

### Fix

- **sdk**: url for getting API key (#424)

## 0.11.1 (2024-02-14)

### Fix

- **openai**: handle async streaming responses for openai v1 client (#421)

## 0.11.0 (2024-02-13)

### Feat

- support both new and legacy llama_index versions (#420)

### Fix

- **sdk**: support input/output of tasks & workflows (#419)

## 0.10.5 (2024-02-13)

### Fix

- **langchain**: backport to 0.0.346 (#418)

## 0.10.4 (2024-02-08)

### Fix

- **openai**: handle OpenAI async completion streaming responses (#409)

## 0.10.3 (2024-01-30)

### Fix

- README

## 0.10.2 (2024-01-25)

### Fix

- re-enabled haystack instrumentation (#77)

## 0.10.1 (2024-01-24)

### Fix

- `resource_attributes` always being None (#359)

## 0.10.0 (2024-01-22)

### Feat

- watsonx support for traceloop (#341)

### Fix

- **sdk**: support arbitrary resources (#338)

## 0.9.4 (2024-01-15)

### Fix

- bug in managed prompts (#337)

## 0.9.3 (2024-01-15)

### Fix

- support langchain v0.1 (#320)

## 0.9.2 (2024-01-12)

### Fix

- otel deps (#336)

## 0.9.1 (2024-01-12)

### Fix

- **openai**: instrument embeddings APIs (#335)

## 0.9.0 (2024-01-11)

### Feat

- google-vertexai-instrumentation (#289)

## 0.8.2 (2024-01-10)

### Fix

- version bump error with replicate (#318)
- version bump error with replicate (#318)

## 0.8.1 (2024-01-10)

### Fix

- replicate release (#316)

## 0.8.0 (2024-01-04)

### Feat

- **semconv**: added top-k (#291)

### Fix

- support anthropic v0.8.1 (#301)
- **ci**: fix replicate release (#285)

## 0.7.0 (2023-12-21)

### Feat

- replicate support (#248)

### Fix

- support pydantic v1 (#282)
- broken tests (#281)

## 0.6.0 (2023-12-16)

### Feat

- **sdk**: user feedback scores (#247)

## 0.5.3 (2023-12-12)

### Fix

- **openai**: async streaming instrumentation (#245)

## 0.5.2 (2023-12-09)

### Fix

- send SDK version on fetch requests (#239)

## 0.5.1 (2023-12-08)

### Fix

- support async workflows in llama-index and openai (#233)

## 0.5.0 (2023-12-07)

### Feat

- **sdk**: support vision api for prompt management (#234)

## 0.4.2 (2023-12-01)

### Fix

- **openai**: langchain streaming bug (#225)

## 0.4.1 (2023-11-30)

### Fix

- **traceloop-sdk**: support explicit prompt versioning in prompt management (#221)

## 0.4.0 (2023-11-29)

### Feat

- bedrock support (#218)

### Fix

- lint issues

## 0.3.6 (2023-11-27)

### Fix

- **openai**: attributes for functions in request (#211)

## 0.3.5 (2023-11-23)

### Fix

- **llama-index**: support ollama completion (#212)

## 0.3.4 (2023-11-22)

### Fix

- **sdk**: flag for dashboard auto-creation (#210)

## 0.3.3 (2023-11-22)

### Fix

- new logo

## 0.3.2 (2023-11-16)

### Fix

- python 3.8 compatibility (#198)
- **cohere**: cohere chat token usage (#196)

## 0.3.1 (2023-11-14)

### Fix

- disable telemetry in tests (#171)

## 0.3.0 (2023-11-10)

### Feat

- sdk telemetry data (#168)

### Fix

- make auto-create path persisted (#170)

## 0.2.1 (2023-11-09)

### Fix

- **openai**: yield chunks for streaming (#166)

## 0.2.0 (2023-11-08)

### Feat

- llamaindex auto instrumentation (#157)

## 0.1.12 (2023-11-07)

### Fix

- **openai**: new OpenAI API v1 (#154)

## 0.1.11 (2023-11-06)

### Fix

- **sdk**: max_tokens are now optional from the backend (#153)

## 0.1.10 (2023-11-03)

### Fix

- errors on logging openai streaming completion calls (#144)

## 0.1.9 (2023-11-03)

### Fix

- **langchain**: improved support for agents and tools with Langchain (#143)
- support streaming API for OpenAI (#142)

## 0.1.8 (2023-11-02)

### Fix

- **prompt-registry**: remove redundant variables print

## 0.1.7 (2023-11-01)

### Fix

- **tracing**: add missing prompt manager template variables to span attributes (#140)

## 0.1.6 (2023-11-01)

### Fix

- **sdk**: allow overriding processor & propagator (#139)
- proper propagation of api key to fetcher (#138)

## 0.1.5 (2023-10-31)

### Fix

- **ci-cd**: release workflow fetches the outdated commit on release package jobs

## 0.1.4 (2023-10-31)

### Fix

- disable syncing when no API key is defined (#135)
- **ci-cd**: finalize release flow (#133)

## 0.1.3 (2023-10-30)

### Fix

- **ci-cd**: fix release workflow publish step

## 0.1.2 (2023-10-30)

### Fix

- **ci-cd**: fix release workflow publish step

## 0.1.1 (2023-10-30)

### Fix

- **ci-cd**: fix release workflow publish step

## 0.1.0 (2023-10-30)

### Feat

- **ci-cd**: add release workflow (#132)

### Fix

- release workflow credentials

## v0.0.70 (2023-10-29)

### Feat

- disable content tracing for privacy reasons (#118)
- add prompt version hash (#119)
- propagate prompt management attributes to llm spans (#109)
- support association IDs as objects (#111)
- hugging-face transformers pipeline instrumentation (#104)
- add chromadb instrumentation + fix langchain instrumentation (#103)
- export to Grafana tempo (#95)
- langchain instrumentation (#88)
- **cohere**: support for chat and rerank (#84)
- cohere instrumentation (#82)
- Anthropic instrumentation (#71)
- basic prompt management  (#69)
- Pinecone Instrumentation (#3)
- basic testing framework (#70)
- haystack instrumentations (#55)
- auto-create link to traceloop dashboard
- setting headers for exporting traces
- sdk code + openai instrumentation (#4)

### Fix

- **sdk**: disable sync when using external exporter
- disable content tracing when not overridden (#121)
- **langchain**: add retrieval_qa workflow span (#112)
- **traceloop-sdk**: logging of service name in traces (#99)
- do not trigger dashboard auto-creation if exporter is set (#96)
- **docs**: clarification on getting API key
- **chore**: spaces and nits on README
- **docs**: bad link for python SDK
- **docs**: updated TRACELOOP_BASE_URL (#81)
- add openai function call data to telemetry (#80)
- **sdk**: disabled prompt registry by default (#78)
- support pinecone non-grpc (#76)
- support python 3.12
- **docs**: upgrades; docs about prompt mgmt (#74)
- **traceloop-sdk**: missing lockfile (#72)
- **traceloop-sdk**: flushing in notebooks (#66)
- py security issue
- **docs**: update exporting.mdx to include nr instrumentation (#12)
- **sdk**: async decorators not awaited
- **sdk**: missing dependency
- warn if Traceloop wasn't initialized properly (#11)
- match new dashboard API
- **traceloop-sdk**: duplicate spans reporting (#10)
- moved api key to /tmp
- /v1/traces is always appended to endpoint
- parse headers correctly
- **traceloop-sdk**:  replace context variables with otel context + refactor (#8)
- traceloop sdk initialization and initial versions release for instrumentations (#7)
- wrong imports and missing code components (#6)
- gitignore
- README


================================================
FILE: CLAUDE.md
================================================
# OpenLLMetry Repository Guide

## Repository Structure
This repository contains multiple PyPI-publishable packages organized and orchestrated using Nx workspace management.

### Nx Workspace Commands
```bash
# Run tests across all packages
nx run-many -t test

# Run linting across all packages
nx run-many -t lint

# Update lock files across all packages
nx run-many -t lock

# Run specific targets on specific packages
nx run <package-name>:test
nx run <package-name>:lint

# Show project graph
nx graph

# Show what's affected by changes
nx affected:test
nx affected:lint
```

## Package Management
All packages use uv as the package manager. Always execute commands through uv:
```bash
uv run <command>
```

## Testing with VCR Cassettes
Tests utilize VCR cassettes for API calls.

### Commands
```bash
# Run tests normally (uses existing cassettes)
uv run pytest tests/

# Re-record all cassettes (requires API keys)
uv run pytest tests/ --record-mode=all

# Record only new test episodes
uv run pytest tests/ --record-mode=new_episodes

# Record cassettes once (if they don't exist)
uv run pytest tests/ --record-mode=once

# Run tests without recording (fails if cassettes missing)
uv run pytest tests/ --record-mode=none

# Run specific test files
uv run pytest tests/test_agents.py --record-mode=once
```

### Guidance
Re-record cassettes when API interactions change to ensure test accuracy.
Never commit secrets or PII. Scrub them using VCR filters (e.g., filter_headers, before_record) or your test framework's equivalent.
Store API keys only in environment variables/secure vaults; never in code or cassettes.
Typical record modes you may use: once, new_episodes, all, none (choose per test needs).
Creating new cassettes requires valid API keys (OpenAI, Anthropic, etc.); ask the user to provide them if needed.

## Debugging with Console Span Exporter
For debugging OpenTelemetry spans and hierarchy issues, use the console exporter:

```python
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
from traceloop.sdk import Traceloop

Traceloop.init(
    app_name="debug-app",
    exporter=ConsoleSpanExporter(),
    # other config...
)
```

This outputs all spans to console in JSON format, showing trace IDs, span IDs, parent relationships, and attributes for debugging span hierarchy issues.

## Semantic Conventions
The semantic convention package follows the OpenTelemetry GenAI specification:
https://opentelemetry.io/docs/specs/semconv/gen-ai/

## Instrumentation Packages
Instrumentation packages should leverage the semantic conventions package. Their purpose is to instrument AI-related libraries and generate spans and tracing data compliant with OpenTelemetry semantic conventions.

## Code Quality
Ruff is used for code linting. Configuration is in each package's pyproject.toml under `[tool.ruff]`.

================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes,
  and learning from the experience
- Focusing on what is best not just for us as individuals, but for the
  overall community

Examples of unacceptable behavior include:

- The use of sexualized language or imagery, and sexual attention or
  advances of any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or email
  address, without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
support@traceloop.dev.
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series
of actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within
the community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to OpenLLMetry

Thanks for taking the time to contribute! 😃 🚀

Please refer to our [Contributing Guide](https://traceloop.com/docs/openllmetry/contributing/overview) for instructions on how to contribute.

## Local Testing and Linting in this Repo

A few steps to set up this repo locally.

Run the following at repo root to setup the yarn dependencies.
```shell
npm ci
```

Make sure `uv` is installed for python packages managed by `uv`.

Generally, for setting up and testing an individual package, run the following from repo root.

```shell
npx nx run opentelemetry-instrumentation-openai:install
npx nx run opentelemetry-instrumentation-openai:lint
npx nx run opentelemetry-instrumentation-openai:test
```

Or you can run the following to automatically set up all affected packages.
```shell
npx nx affected -t install
npx nx affected -t lint
npx nx affected -t test
```

At the package directory, you can run `nx` without specifying the package.
```shell
cd packages/opentelemetry-instrumentation-openai
npx nx install
npx nx lint
npx nx test
```


================================================
FILE: GOVERNANCE.md
================================================
# OpenLLMetry Governance

This document defines the governance policies of OpenLLMetry.

## Contributors

Anyone can contribute to OpenLLMetry, whether through code, design discussions,
documentation, blog posts, talks, or other means. All contributors are expected
to follow the OpenLLMetry [Code of Conduct](CODE_OF_CONDUCT.md).

Contributions to the code base, documentation, or other components in the
OpenLLMetry GitHub repositories must follow the guidelines described in the
[CONTRIBUTING.md](CONTRIBUTING.md) document. Whether these contributions get
merged into the project is the prerogative of the maintainers.

## Maintainers

Maintainers are responsible for the overall security, quality and integrity of
the project. They propose, manage, review, approve/reject major change and
enhancement requests. They also have the ability to merge code into the project.
See the [MAINTAINERS.md](MAINTAINERS.md) document for the full list of
maintainer responsibilities.

Ideally, all project decisions are resolved by maintainer consensus. If this
is not possible, maintainers may call for a vote. The voting process is a simple
majority in which each maintainer receives one vote.

If a maintainer is no longer interested in or cannot perform the duties listed
above, they should move themselves to emeritus status. This can also occur by a
vote of the maintainers.

### Becoming A Maintainer

Anyone can become an OpenLLMetry maintainer. Maintainers should be extremely
proficient in Python; have relevant domain expertise; have the time and ability to
meet the maintainer expectations outlined above, and demonstrate the ability to
work with the existing maintainers and project process.

To become a maintainer, start by expressing interest to existing maintainers.
Existing maintainers will then ask you to demonstrate the qualifications
above by contributing PRs, doing code reviews, and other such tasks under
their guidance. After several months of working together, maintainers will
decide whether to grant maintainer status.

## Updating The Governance

This governance is a living document and its policies will need to be updated
over time to meet the community's needs. Until the steering committee is set
up, the maintainers will have full ownership of this governance. Changes can be
proposed at any time, but a super majority is required to approve any updates.


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: MAINTAINERS.md
================================================
## Overview

This document contains a list of maintainers in this repo.
If you're interested in contributing, and becoming a maintainer, see [CONTRIBUTING](CONTRIBUTING.md).

## Current Maintainers

| Maintainer     | GitHub ID                                           | Email                 |
| -------------- | --------------------------------------------------- | --------------------- |
| Nir Gazit      | [nirga](https://github.com/nirga)                   | nir@traceloop.com     |
| Gal Kleinman   | [galkleinman](https://github.com/galkleinman)       | gal@traceloop.com     |
| Dinmukhamed Mailibay | [dinmukhamedm](https://github.com/dinmukhamedm) | dinmukhamed.mailibay@gmail.com  |


================================================
FILE: README.md
================================================
<p align="center">
<a href="https://www.traceloop.com/openllmetry#gh-light-mode-only">
<img width="600" src="https://raw.githubusercontent.com/traceloop/openllmetry/main/img/logo-light.png">
</a>
<a href="https://www.traceloop.com/openllmetry#gh-dark-mode-only">
<img width="600" src="https://raw.githubusercontent.com/traceloop/openllmetry/main/img/logo-dark.png">
</a>
</p>
<p align="center">
  <p align="center">Open-source observability for your LLM application</p>
</p>
<h4 align="center">
    <a href="https://traceloop.com/docs/openllmetry/getting-started-python"><strong>Get started »</strong></a>
    <br />
    <br />
  <a href="https://traceloop.com/slack">Slack</a> |
  <a href="https://traceloop.com/docs/openllmetry/introduction">Docs</a> |
  <a href="https://www.traceloop.com/openllmetry">Website</a>
</h4>

<h4 align="center">
  <a href="https://github.com/traceloop/openllmetry/releases">
    <img src="https://img.shields.io/github/release/traceloop/openllmetry">
  </a>
  <a href="https://pepy.tech/project/opentelemetry-instrumentation-openai">
  <img src="https://static.pepy.tech/badge/opentelemetry-instrumentation-openai/month">
  </a>
   <a href="https://github.com/traceloop/openllmetry/blob/main/LICENSE">
    <img src="https://img.shields.io/badge/license-Apache 2.0-blue.svg" alt="OpenLLMetry is released under the Apache-2.0 License">
  </a>
  <a href="https://github.com/traceloop/openllmetry/actions/workflows/ci.yml">
  <img src="https://github.com/traceloop/openllmetry/actions/workflows/ci.yml/badge.svg">
  </a>
  <a href="https://github.com/traceloop/openllmetry/issues">
    <img src="https://img.shields.io/github/commit-activity/m/traceloop/openllmetry" alt="git commit activity" />
  </a>
  <a href="https://www.ycombinator.com/companies/traceloop"><img src="https://img.shields.io/website?color=%23f26522&down_message=Y%20Combinator&label=Backed&logo=ycombinator&style=flat-square&up_message=Y%20Combinator&url=https%3A%2F%2Fwww.ycombinator.com"></a>
  <a href="https://github.com/traceloop/openllmetry/blob/main/CONTRIBUTING.md">
    <img src="https://img.shields.io/badge/PRs-Welcome-brightgreen" alt="PRs welcome!" />
  </a>
  <a href="https://traceloop.com/slack">
    <img src="https://img.shields.io/badge/chat-on%20Slack-blueviolet" alt="Slack community channel" />
  </a>
  <a href="https://twitter.com/traceloopdev">
    <img src="https://img.shields.io/badge/follow-%40traceloopdev-1DA1F2?logo=twitter&style=social" alt="Traceloop Twitter" />
  </a>
</h4>

**🎉 New**:
Our semantic conventions are now part of OpenTelemetry! Join the [discussion](https://github.com/open-telemetry/community/blob/1c71595874e5d125ca92ec3b0e948c4325161c8a/projects/llm-semconv.md) and help us shape the future of LLM observability.

Looking for the JS/TS version? Check out [OpenLLMetry-JS](https://github.com/traceloop/openllmetry-js).

OpenLLMetry is a set of extensions built on top of [OpenTelemetry](https://opentelemetry.io/) that gives you complete observability over your LLM application. Because it uses OpenTelemetry under the hood, [it can be connected to your existing observability solutions](https://www.traceloop.com/docs/openllmetry/integrations/introduction) - Datadog, Honeycomb, and others.

It's built and maintained by Traceloop under the Apache 2.0 license.

The repo contains standard OpenTelemetry instrumentations for LLM providers and Vector DBs, as well as a Traceloop SDK that makes it easy to get started with OpenLLMetry, while still outputting standard OpenTelemetry data that can be connected to your observability stack.
If you already have OpenTelemetry instrumented, you can just add any of our instrumentations directly.

## 🚀 Getting Started

The easiest way to get started is to use our SDK.
For a complete guide, go to our [docs](https://traceloop.com/docs/openllmetry/getting-started-python).

Install the SDK:

```bash
pip install traceloop-sdk
```

Then, to start instrumenting your code, just add this line to your code:

```python
from traceloop.sdk import Traceloop

Traceloop.init()
```

That's it. You're now tracing your code with OpenLLMetry!
If you're running this locally, you may want to disable batch sending, so you can see the traces immediately:

```python
Traceloop.init(disable_batch=True)
```

## ⏫ Supported (and tested) destinations

- ✅ [Traceloop](https://www.traceloop.com/docs/openllmetry/integrations/traceloop)
- ✅ [Axiom](https://www.traceloop.com/docs/openllmetry/integrations/axiom)
- ✅ [Azure Application Insights](https://www.traceloop.com/docs/openllmetry/integrations/azure)
- ✅ [Braintrust](https://www.traceloop.com/docs/openllmetry/integrations/braintrust)
- ✅ [Dash0](https://www.traceloop.com/docs/openllmetry/integrations/dash0)
- ✅ [Datadog](https://www.traceloop.com/docs/openllmetry/integrations/datadog)
- ✅ [Dynatrace](https://www.traceloop.com/docs/openllmetry/integrations/dynatrace)
- ✅ [Google Cloud](https://www.traceloop.com/docs/openllmetry/integrations/gcp)
- ✅ [Grafana](https://www.traceloop.com/docs/openllmetry/integrations/grafana)
- ✅ [Highlight](https://www.traceloop.com/docs/openllmetry/integrations/highlight)
- ✅ [Honeycomb](https://www.traceloop.com/docs/openllmetry/integrations/honeycomb)
- ✅ [HyperDX](https://www.traceloop.com/docs/openllmetry/integrations/hyperdx)
- ✅ [IBM Instana](https://www.traceloop.com/docs/openllmetry/integrations/instana)
- ✅ [KloudMate](https://www.traceloop.com/docs/openllmetry/integrations/kloudmate)
- ✅ [Laminar](https://www.traceloop.com/docs/openllmetry/integrations/laminar)
- ✅ [New Relic](https://www.traceloop.com/docs/openllmetry/integrations/newrelic)
- ✅ [OpenTelemetry Collector](https://www.traceloop.com/docs/openllmetry/integrations/otel-collector)
- ✅ [Oracle Cloud](https://www.traceloop.com/docs/openllmetry/integrations/oraclecloud)
- ✅ [Scorecard](https://www.traceloop.com/docs/openllmetry/integrations/scorecard)
- ✅ [Service Now Cloud Observability](https://www.traceloop.com/docs/openllmetry/integrations/service-now)
- ✅ [SigNoz](https://www.traceloop.com/docs/openllmetry/integrations/signoz)
- ✅ [Sentry](https://www.traceloop.com/docs/openllmetry/integrations/sentry)
- ✅ [Splunk](https://www.traceloop.com/docs/openllmetry/integrations/splunk)
- ✅ [Tencent Cloud](https://www.traceloop.com/docs/openllmetry/integrations/tencent)

See [our docs](https://traceloop.com/docs/openllmetry/integrations/exporting) for instructions on connecting to each one.

## 🪗 What do we instrument?

OpenLLMetry can instrument everything that [OpenTelemetry already instruments](https://github.com/open-telemetry/opentelemetry-python-contrib/tree/main/instrumentation) - so things like your DB, API calls, and more. On top of that, we built a set of custom extensions that instrument things like your calls to OpenAI or Anthropic, or your Vector DB like Chroma, Pinecone, Qdrant or Weaviate.

- ✅ [Aleph Alpha](https://www.aleph-alpha.com/)
- ✅ [Anthropic](https://www.anthropic.com/)
- ✅ [Bedrock (AWS)](https://aws.amazon.com/bedrock/)
- ✅ [Cohere](https://cohere.com/)
- ✅ [Google Generative AI (Gemini)](https://ai.google/)
- ✅ [Groq](https://groq.com/)
- ✅ [HuggingFace](https://huggingface.co/)
- ✅ [IBM Watsonx AI](https://www.ibm.com/watsonx)
- ✅ [Mistral AI](https://mistral.ai/)
- ✅ [Ollama](https://ollama.com/)
- ✅ [OpenAI / Azure OpenAI](https://openai.com/)
- ✅ [Replicate](https://replicate.com/)
- ✅ [SageMaker (AWS)](https://aws.amazon.com/sagemaker/)
- ✅ [Together AI](https://together.xyz/)
- ✅ [Vertex AI (GCP)](https://cloud.google.com/vertex-ai)
- ✅ [WRITER](https://writer.com/)

### Vector DBs

- ✅ [Chroma](https://www.trychroma.com/)
- ✅ [LanceDB](https://lancedb.com/)
- ✅ [Marqo](https://marqo.ai/)
- ✅ [Milvus](https://milvus.io/)
- ✅ [Pinecone](https://www.pinecone.io/)
- ✅ [Qdrant](https://qdrant.tech/)
- ✅ [Weaviate](https://weaviate.io/)

### Frameworks

- ✅ [Agno](https://github.com/agno-agi/agno)
- ✅ [AWS Strands](https://strandsagents.com/) (built-in OTEL support)
- ✅ [CrewAI](https://docs.crewai.com/introduction)
- ✅ [Haystack](https://haystack.deepset.ai/integrations/traceloop)
- ✅ [LangChain](https://python.langchain.com/docs/introduction/)
- ✅ [Langflow](https://docs.langflow.org/)
- ✅ [LangGraph](https://langchain-ai.github.io/langgraph/concepts/why-langgraph/)
- ✅ [LiteLLM](https://docs.litellm.ai/docs/observability/opentelemetry_integration)
- ✅ [LlamaIndex](https://docs.llamaindex.ai/en/stable/module_guides/observability/observability.html#openllmetry)
- ✅ [OpenAI Agents](https://openai.github.io/openai-agents-python/)

### Protocol

- ✅ [MCP](https://modelcontextprotocol.io/)

## 🔎 Telemetry

We no longer log or collect any telemetry in the SDK or in the instrumentations. Make sure to bump to v0.49.2 and above.

### Why we collect telemetry

- The primary purpose is to detect exceptions within instrumentations. Since LLM providers frequently update their APIs, this helps us quickly identify and fix any breaking changes.
- We only collect anonymous data, with no personally identifiable information. You can view exactly what data we collect in our [Privacy documentation](https://www.traceloop.com/docs/openllmetry/privacy/telemetry).
- Telemetry is only collected in the SDK. If you use the instrumentations directly without the SDK, no telemetry is collected.

## 🌱 Contributing

Whether big or small, we love contributions ❤️ Check out our guide to see how to [get started](https://traceloop.com/docs/openllmetry/contributing/overview).

Not sure where to get started? You can:

- [Book a free pairing session with one of our teammates](mailto:nir@traceloop.com?subject=Pairing%20session&body=I'd%20like%20to%20do%20a%20pairing%20session!)!
- Join our <a href="https://traceloop.com/slack">Slack</a>, and ask us any questions there.

## 💚 Community & Support

- [Slack](https://traceloop.com/slack) (For live discussion with the community and the Traceloop team)
- [GitHub Discussions](https://github.com/traceloop/openllmetry/discussions) (For help with building and deeper conversations about features)
- [GitHub Issues](https://github.com/traceloop/openllmetry/issues) (For any bugs and errors you encounter using OpenLLMetry)
- [Twitter](https://twitter.com/traceloopdev) (Get news fast)

## 🙏 Special Thanks

To @patrickdebois, who [suggested the great name](https://x.com/patrickdebois/status/1695518950715473991?s=46&t=zn2SOuJcSVq-Pe2Ysevzkg) we're now using for this repo!

## 💫 Contributors

<a href="https://github.com/traceloop/openllmetry/graphs/contributors">
  <img alt="contributors" src="https://contrib.rocks/image?repo=traceloop/openllmetry"/>
</a>


================================================
FILE: SECURITY.md
================================================
# Security

Contact: security@traceloop.com

Based on [https://supabase.com/.well-known/security.txt](https://supabase.com/.well-known/security.txt)

We place a high priority on the security of our systems at Traceloop. However, no matter how hard we try to make our systems secure, vulnerabilities can still exist.

In the event that you discover a vulnerability, please let us know so we can address it as soon as possible. We would like to ask you to help us better protect our clients and our systems.

## Out of scope vulnerabilities:

- Clickjacking on pages with no sensitive actions.

- Unauthenticated/logout/login CSRF.

- Attacks requiring MITM or physical access to a user's device.

- Any activity that could lead to the disruption of our service (DoS).

- Content spoofing and text injection issues without showing an attack vector/without being able to modify HTML/CSS.

- Email spoofing

- Missing DNSSEC, CAA, CSP headers

- Lack of Secure or HTTP only flag on non-sensitive cookies

- Deadlinks

## Please do the following:

- E-mail your findings to [security@traceloop.dev](mailto:security@traceloop.dev).

- Do not run automated scanners on our infrastructure or dashboard. If you wish to do this, contact us and we will set up a sandbox for you.

- Do not take advantage of the vulnerability or problem you have discovered, for example by downloading more data than necessary to demonstrate the vulnerability or deleting or modifying other people's data,

- Do not reveal the problem to others until it has been resolved,

- Do not use attacks on physical security, social engineering, distributed denial of service, spam or applications of third parties,

- Do provide sufficient information to reproduce the problem, so we will be able to resolve it as quickly as possible. Usually, the IP address or the URL of the affected system and a description of the vulnerability will be sufficient, but complex vulnerabilities may require further explanation.

## What we promise:

- We will respond to your report within 3 business days with our evaluation of the report and an expected resolution date,

- If you have followed the instructions above, we will not take any legal action against you in regard to the report,

- We will handle your report with strict confidentiality, and not pass on your personal details to third parties without your permission,

- We will keep you informed of the progress towards resolving the problem,

- In the public information concerning the problem reported, we will give your name as the discoverer of the problem (unless you desire otherwise), and

- We strive to resolve all problems as quickly as possible, and we would like to play an active role in the ultimate publication on the problem after it is resolved.


================================================
FILE: nx.json
================================================
{
  "extends": "nx/presets/npm.json",
  "$schema": "./node_modules/nx/schemas/nx-schema.json",
  "plugins": ["@nxlv/python"]
}


================================================
FILE: package.json
================================================
{
  "name": "openllmetry",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {},
  "private": true,
  "devDependencies": {
    "@nxlv/python": "^22.0.5",
    "nx": "^20.8.1"
  },
  "workspaces": [
    "packages/*"
  ]
}


================================================
FILE: packages/.gitkeep
================================================


================================================
FILE: packages/opentelemetry-instrumentation-agno/README.md
================================================
# OpenTelemetry Agno Instrumentation

This library provides automatic instrumentation for the [Agno](https://github.com/agno-agi/agno) framework.

## Installation

```bash
pip install opentelemetry-instrumentation-agno
```

## Usage

```python
from opentelemetry.instrumentation.agno import AgnoInstrumentor

AgnoInstrumentor().instrument()
```

## Supported Features

This instrumentation captures:
- Agent execution (sync and async)
- Team operations
- Model invocations
- Function calls
- Streaming responses

## Links

- [Agno Framework](https://github.com/agno-agi/agno)
- [OpenTelemetry](https://opentelemetry.io/)


================================================
FILE: packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/__init__.py
================================================
"""OpenTelemetry Agno instrumentation"""

import logging
from typing import Collection
from importlib.metadata import version as package_version, PackageNotFoundError

from opentelemetry import context as context_api
from opentelemetry.instrumentation.agno._tool_wrappers import (
    _FunctionCallExecuteWrapper,
    _FunctionCallAExecuteWrapper,
)
from opentelemetry.instrumentation.agno.config import Config
from opentelemetry.instrumentation.agno.streaming import AgnoAsyncStream, AgnoStream
from opentelemetry.instrumentation.agno.utils import (
    dont_throw,
    should_send_prompts,
)
from opentelemetry.instrumentation.agno.version import __version__
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
from opentelemetry.instrumentation.utils import unwrap
from opentelemetry.metrics import get_meter
from opentelemetry.semconv._incubating.attributes import (
    gen_ai_attributes as GenAIAttributes,
)
from opentelemetry.semconv_ai import Meters, SpanAttributes, TraceloopSpanKindValues
from opentelemetry.trace import get_tracer, SpanKind
from opentelemetry.trace.status import Status, StatusCode
from wrapt import wrap_function_wrapper

logger = logging.getLogger(__name__)

_instruments = ("agno >= 2.0.0",)


def _get_agno_version():
    try:
        return package_version("agno")
    except PackageNotFoundError:
        return "unknown"


class AgnoInstrumentor(BaseInstrumentor):
    """An instrumentor for Agno framework."""

    def __init__(self, exception_logger=None, enrich_token_usage: bool = False):
        super().__init__()
        Config.exception_logger = exception_logger
        Config.enrich_token_usage = enrich_token_usage

    def instrumentation_dependencies(self) -> Collection[str]:
        return _instruments

    def _instrument(self, **kwargs):
        tracer_provider = kwargs.get("tracer_provider")
        tracer = get_tracer(__name__, __version__, tracer_provider)

        meter_provider = kwargs.get("meter_provider")
        meter = get_meter(__name__, __version__, meter_provider)

        duration_histogram = meter.create_histogram(
            name=Meters.LLM_OPERATION_DURATION,
            unit="s",
            description="GenAI operation duration",
        )

        token_histogram = meter.create_histogram(
            name=Meters.LLM_TOKEN_USAGE,
            unit="token",
            description="Measures number of input and output tokens used",
        )

        # Wrap Agent methods
        wrap_function_wrapper(
            module="agno.agent",
            name="Agent.run",
            wrapper=_AgentRunWrapper(tracer, duration_histogram, token_histogram),
        )

        wrap_function_wrapper(
            module="agno.agent",
            name="Agent.arun",
            wrapper=_AgentARunWrapper(tracer, duration_histogram, token_histogram),
        )

        # Wrap Team methods if available
        try:
            wrap_function_wrapper(
                module="agno.team",
                name="Team.run",
                wrapper=_TeamRunWrapper(tracer, duration_histogram, token_histogram),
            )

            wrap_function_wrapper(
                module="agno.team",
                name="Team.arun",
                wrapper=_TeamARunWrapper(tracer, duration_histogram, token_histogram),
            )
        except Exception as e:
            logger.debug(f"Could not instrument Team: {e}")

        # Wrap FunctionCall methods for tool execution
        try:
            wrap_function_wrapper(
                module="agno.tools",
                name="FunctionCall.execute",
                wrapper=_FunctionCallExecuteWrapper(
                    tracer, duration_histogram, token_histogram
                ),
            )

            wrap_function_wrapper(
                module="agno.tools",
                name="FunctionCall.aexecute",
                wrapper=_FunctionCallAExecuteWrapper(
                    tracer, duration_histogram, token_histogram
                ),
            )
        except Exception as e:
            logger.debug(f"Could not instrument FunctionCall: {e}")

    def _uninstrument(self, **kwargs):
        unwrap("agno.agent", "Agent.run")
        unwrap("agno.agent", "Agent.arun")
        try:
            unwrap("agno.team", "Team.run")
            unwrap("agno.team", "Team.arun")
        except Exception:
            pass
        try:
            unwrap("agno.tools", "FunctionCall.execute")
            unwrap("agno.tools", "FunctionCall.aexecute")
        except Exception:
            pass


class _AgentRunWrapper:
    """Wrapper for Agent.run() method to capture synchronous agent execution."""

    def __init__(self, tracer, duration_histogram, token_histogram):
        """Initialize the wrapper with OpenTelemetry instrumentation objects."""
        self._tracer = tracer
        self._duration_histogram = duration_histogram
        self._token_histogram = token_histogram

    @dont_throw
    def __call__(self, wrapped, instance, args, kwargs):
        """Wrap the Agent.run() call with tracing instrumentation."""
        if context_api.get_value(
            context_api._SUPPRESS_INSTRUMENTATION_KEY
        ) or context_api.get_value("suppress_agno_instrumentation"):
            return wrapped(*args, **kwargs)

        is_streaming = kwargs.get("stream", False)

        if is_streaming:
            span_name = f"{getattr(instance, 'name', 'unknown')}.agent"

            span = self._tracer.start_span(
                span_name,
                kind=SpanKind.CLIENT,
            )

            try:
                span.set_attribute(GenAIAttributes.GEN_AI_SYSTEM, "agno")
                span.set_attribute(
                    SpanAttributes.TRACELOOP_SPAN_KIND,
                    TraceloopSpanKindValues.AGENT.value,
                )

                if hasattr(instance, "name"):
                    span.set_attribute(GenAIAttributes.GEN_AI_AGENT_NAME, instance.name)

                if hasattr(instance, "model") and instance.model:
                    model_name = getattr(
                        instance.model, "id", getattr(instance.model, "name", "unknown")
                    )
                    span.set_attribute(GenAIAttributes.GEN_AI_REQUEST_MODEL, model_name)

                if args and should_send_prompts():
                    input_message = str(args[0])
                    span.set_attribute(
                        SpanAttributes.TRACELOOP_ENTITY_INPUT, input_message
                    )

                import time

                start_time = time.time()

                response = wrapped(*args, **kwargs)

                return AgnoStream(
                    span,
                    response,
                    instance,
                    start_time,
                    self._duration_histogram,
                    self._token_histogram,
                )

            except Exception as e:
                span.set_status(Status(StatusCode.ERROR, str(e)))
                span.record_exception(e)
                span.end()
                raise
        else:
            span_name = f"{getattr(instance, 'name', 'unknown')}.agent"

            with self._tracer.start_as_current_span(
                span_name,
                kind=SpanKind.CLIENT,
            ) as span:
                try:
                    span.set_attribute(GenAIAttributes.GEN_AI_SYSTEM, "agno")
                    span.set_attribute(
                        SpanAttributes.TRACELOOP_SPAN_KIND,
                        TraceloopSpanKindValues.AGENT.value,
                    )

                    if hasattr(instance, "name"):
                        span.set_attribute(GenAIAttributes.GEN_AI_AGENT_NAME, instance.name)

                    if hasattr(instance, "model") and instance.model:
                        model_name = getattr(
                            instance.model, "id", getattr(instance.model, "name", "unknown")
                        )
                        span.set_attribute(GenAIAttributes.GEN_AI_REQUEST_MODEL, model_name)

                    if args and should_send_prompts():
                        input_message = str(args[0])
                        span.set_attribute(
                            SpanAttributes.TRACELOOP_ENTITY_INPUT, input_message
                        )

                    import time

                    start_time = time.time()

                    result = wrapped(*args, **kwargs)

                    duration = time.time() - start_time

                    if hasattr(result, "content") and should_send_prompts():
                        span.set_attribute(
                            SpanAttributes.TRACELOOP_ENTITY_OUTPUT, str(result.content)
                        )

                    if hasattr(result, "run_id"):
                        span.set_attribute("agno.run.id", result.run_id)

                    if hasattr(result, "metrics"):
                        metrics = result.metrics
                        if hasattr(metrics, "input_tokens"):
                            span.set_attribute(
                                GenAIAttributes.GEN_AI_USAGE_INPUT_TOKENS,
                                metrics.input_tokens,
                            )
                        if hasattr(metrics, "output_tokens"):
                            span.set_attribute(
                                GenAIAttributes.GEN_AI_USAGE_OUTPUT_TOKENS,
                                metrics.output_tokens,
                            )
                        if hasattr(metrics, "total_tokens"):
                            span.set_attribute(
                                SpanAttributes.LLM_USAGE_TOTAL_TOKENS, metrics.total_tokens
                            )

                    span.set_status(Status(StatusCode.OK))

                    self._duration_histogram.record(
                        duration,
                        attributes={
                            GenAIAttributes.GEN_AI_SYSTEM: "agno",
                            SpanAttributes.TRACELOOP_SPAN_KIND: TraceloopSpanKindValues.AGENT.value,
                        },
                    )

                    return result

                except Exception as e:
                    span.set_status(Status(StatusCode.ERROR, str(e)))
                    span.record_exception(e)
                    raise


class _AgentARunWrapper:
    """Wrapper for Agent.arun() method to capture asynchronous agent execution."""

    def __init__(self, tracer, duration_histogram, token_histogram):
        """Initialize the wrapper with OpenTelemetry instrumentation objects."""
        self._tracer = tracer
        self._duration_histogram = duration_histogram
        self._token_histogram = token_histogram

    @dont_throw
    def __call__(self, wrapped, instance, args, kwargs):
        """Wrap the Agent.arun() call with tracing instrumentation."""
        if context_api.get_value(
            context_api._SUPPRESS_INSTRUMENTATION_KEY
        ) or context_api.get_value("suppress_agno_instrumentation"):
            return wrapped(*args, **kwargs)

        is_streaming = kwargs.get("stream", False)

        if is_streaming:
            span_name = f"{getattr(instance, 'name', 'unknown')}.agent"

            span = self._tracer.start_span(
                span_name,
                kind=SpanKind.CLIENT,
            )

            try:
                span.set_attribute(GenAIAttributes.GEN_AI_SYSTEM, "agno")
                span.set_attribute(
                    SpanAttributes.TRACELOOP_SPAN_KIND,
                    TraceloopSpanKindValues.AGENT.value,
                )

                if hasattr(instance, "name"):
                    span.set_attribute(GenAIAttributes.GEN_AI_AGENT_NAME, instance.name)

                if hasattr(instance, "model") and instance.model:
                    model_name = getattr(
                        instance.model, "id", getattr(instance.model, "name", "unknown")
                    )
                    span.set_attribute(GenAIAttributes.GEN_AI_REQUEST_MODEL, model_name)

                if args and should_send_prompts():
                    input_message = str(args[0])
                    span.set_attribute(
                        SpanAttributes.TRACELOOP_ENTITY_INPUT, input_message
                    )

                import time

                start_time = time.time()

                response = wrapped(*args, **kwargs)

                return AgnoAsyncStream(
                    span,
                    response,
                    instance,
                    start_time,
                    self._duration_histogram,
                    self._token_histogram,
                )

            except Exception as e:
                span.set_status(Status(StatusCode.ERROR, str(e)))
                span.record_exception(e)
                span.end()
                raise
        else:
            async def async_wrapper():
                span_name = f"{getattr(instance, 'name', 'unknown')}.agent"

                with self._tracer.start_as_current_span(
                    span_name,
                    kind=SpanKind.CLIENT,
                ) as span:
                    try:
                        span.set_attribute(GenAIAttributes.GEN_AI_SYSTEM, "agno")
                        span.set_attribute(
                            SpanAttributes.TRACELOOP_SPAN_KIND,
                            TraceloopSpanKindValues.AGENT.value,
                        )

                        if hasattr(instance, "name"):
                            span.set_attribute(GenAIAttributes.GEN_AI_AGENT_NAME, instance.name)

                        if hasattr(instance, "model") and instance.model:
                            model_name = getattr(
                                instance.model, "id", getattr(instance.model, "name", "unknown")
                            )
                            span.set_attribute(GenAIAttributes.GEN_AI_REQUEST_MODEL, model_name)

                        if args and should_send_prompts():
                            input_message = str(args[0])
                            span.set_attribute(
                                SpanAttributes.TRACELOOP_ENTITY_INPUT, input_message
                            )

                        import time

                        start_time = time.time()

                        result = await wrapped(*args, **kwargs)

                        duration = time.time() - start_time

                        if hasattr(result, "content") and should_send_prompts():
                            span.set_attribute(
                                SpanAttributes.TRACELOOP_ENTITY_OUTPUT, str(result.content)
                            )

                        if hasattr(result, "run_id"):
                            span.set_attribute("agno.run.id", result.run_id)

                        if hasattr(result, "metrics"):
                            metrics = result.metrics
                            if hasattr(metrics, "input_tokens"):
                                span.set_attribute(
                                    GenAIAttributes.GEN_AI_USAGE_INPUT_TOKENS,
                                    metrics.input_tokens,
                                )
                            if hasattr(metrics, "output_tokens"):
                                span.set_attribute(
                                    GenAIAttributes.GEN_AI_USAGE_OUTPUT_TOKENS,
                                    metrics.output_tokens,
                                )
                            if hasattr(metrics, "total_tokens"):
                                span.set_attribute(
                                    SpanAttributes.LLM_USAGE_TOTAL_TOKENS, metrics.total_tokens
                                )

                        span.set_status(Status(StatusCode.OK))

                        self._duration_histogram.record(
                            duration,
                            attributes={
                                GenAIAttributes.GEN_AI_SYSTEM: "agno",
                                SpanAttributes.TRACELOOP_SPAN_KIND: TraceloopSpanKindValues.AGENT.value,
                            },
                        )

                        return result

                    except Exception as e:
                        span.set_status(Status(StatusCode.ERROR, str(e)))
                        span.record_exception(e)
                        raise

            return async_wrapper()


class _TeamRunWrapper:
    """Wrapper for Team.run() method to capture synchronous team execution."""

    def __init__(self, tracer, duration_histogram, token_histogram):
        """Initialize the wrapper with OpenTelemetry instrumentation objects."""
        self._tracer = tracer
        self._duration_histogram = duration_histogram
        self._token_histogram = token_histogram

    @dont_throw
    def __call__(self, wrapped, instance, args, kwargs):
        """Wrap the Team.run() call with tracing instrumentation."""
        if context_api.get_value(
            context_api._SUPPRESS_INSTRUMENTATION_KEY
        ) or context_api.get_value("suppress_agno_instrumentation"):
            return wrapped(*args, **kwargs)

        span_name = f"{getattr(instance, 'name', 'unknown')}.team"

        with self._tracer.start_as_current_span(
            span_name,
            kind=SpanKind.CLIENT,
        ) as span:
            try:
                span.set_attribute(GenAIAttributes.GEN_AI_SYSTEM, "agno")
                span.set_attribute(
                    SpanAttributes.TRACELOOP_SPAN_KIND,
                    TraceloopSpanKindValues.WORKFLOW.value,
                )

                if hasattr(instance, "name"):
                    span.set_attribute("agno.team.name", instance.name)

                if args and should_send_prompts():
                    input_message = str(args[0])
                    span.set_attribute(
                        SpanAttributes.TRACELOOP_ENTITY_INPUT, input_message
                    )

                import time

                start_time = time.time()

                result = wrapped(*args, **kwargs)

                duration = time.time() - start_time

                if hasattr(result, "content") and should_send_prompts():
                    span.set_attribute(
                        SpanAttributes.TRACELOOP_ENTITY_OUTPUT, str(result.content)
                    )

                if hasattr(result, "run_id"):
                    span.set_attribute("agno.run.id", result.run_id)

                span.set_status(Status(StatusCode.OK))

                self._duration_histogram.record(
                    duration,
                    attributes={
                        GenAIAttributes.GEN_AI_SYSTEM: "agno",
                        SpanAttributes.TRACELOOP_SPAN_KIND: TraceloopSpanKindValues.WORKFLOW.value,
                    },
                )

                return result

            except Exception as e:
                span.set_status(Status(StatusCode.ERROR, str(e)))
                span.record_exception(e)
                raise


class _TeamARunWrapper:
    """Wrapper for Team.arun() method to capture asynchronous team execution."""

    def __init__(self, tracer, duration_histogram, token_histogram):
        """Initialize the wrapper with OpenTelemetry instrumentation objects."""
        self._tracer = tracer
        self._duration_histogram = duration_histogram
        self._token_histogram = token_histogram

    @dont_throw
    async def __call__(self, wrapped, instance, args, kwargs):
        """Wrap the Team.arun() call with tracing instrumentation."""
        if context_api.get_value(
            context_api._SUPPRESS_INSTRUMENTATION_KEY
        ) or context_api.get_value("suppress_agno_instrumentation"):
            return await wrapped(*args, **kwargs)

        span_name = f"{getattr(instance, 'name', 'unknown')}.team"

        with self._tracer.start_as_current_span(
            span_name,
            kind=SpanKind.CLIENT,
        ) as span:
            try:
                span.set_attribute(GenAIAttributes.GEN_AI_SYSTEM, "agno")
                span.set_attribute(
                    SpanAttributes.TRACELOOP_SPAN_KIND,
                    TraceloopSpanKindValues.WORKFLOW.value,
                )

                if hasattr(instance, "name"):
                    span.set_attribute("agno.team.name", instance.name)

                if args and should_send_prompts():
                    input_message = str(args[0])
                    span.set_attribute(
                        SpanAttributes.TRACELOOP_ENTITY_INPUT, input_message
                    )

                import time

                start_time = time.time()

                result = await wrapped(*args, **kwargs)

                duration = time.time() - start_time

                if hasattr(result, "content") and should_send_prompts():
                    span.set_attribute(
                        SpanAttributes.TRACELOOP_ENTITY_OUTPUT, str(result.content)
                    )

                if hasattr(result, "run_id"):
                    span.set_attribute("agno.run.id", result.run_id)

                span.set_status(Status(StatusCode.OK))

                self._duration_histogram.record(
                    duration,
                    attributes={
                        GenAIAttributes.GEN_AI_SYSTEM: "agno",
                        SpanAttributes.TRACELOOP_SPAN_KIND: TraceloopSpanKindValues.WORKFLOW.value,
                    },
                )

                return result

            except Exception as e:
                span.set_status(Status(StatusCode.ERROR, str(e)))
                span.record_exception(e)
                raise


================================================
FILE: packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/_tool_wrappers.py
================================================
"""Wrapper classes for FunctionCall tool execution instrumentation."""

import json
import time

from opentelemetry import context as context_api
from opentelemetry.instrumentation.agno.utils import dont_throw, should_send_prompts
from opentelemetry.semconv._incubating.attributes import gen_ai_attributes as GenAIAttributes
from opentelemetry.semconv_ai import SpanAttributes, TraceloopSpanKindValues
from opentelemetry.trace import SpanKind
from opentelemetry.trace.status import Status, StatusCode


class _FunctionCallExecuteWrapper:
    """Wrapper for FunctionCall.execute() method to capture synchronous tool execution."""

    def __init__(self, tracer, duration_histogram, token_histogram):
        """Initialize the wrapper with OpenTelemetry instrumentation objects."""
        self._tracer = tracer
        self._duration_histogram = duration_histogram
        self._token_histogram = token_histogram

    @dont_throw
    def __call__(self, wrapped, instance, args, kwargs):
        """Wrap the FunctionCall.execute() call with tracing instrumentation."""
        if context_api.get_value(
            context_api._SUPPRESS_INSTRUMENTATION_KEY
        ) or context_api.get_value("suppress_agno_instrumentation"):
            return wrapped(*args, **kwargs)

        function_name = getattr(instance.function, 'name', 'unknown')
        span_name = f"{function_name}.tool"

        with self._tracer.start_as_current_span(
            span_name,
            kind=SpanKind.CLIENT,
        ) as span:
            try:
                span.set_attribute(GenAIAttributes.GEN_AI_SYSTEM, "agno")
                span.set_attribute(SpanAttributes.TRACELOOP_SPAN_KIND,
                                   TraceloopSpanKindValues.TOOL.value)
                span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_NAME, function_name)

                if hasattr(instance.function, 'description') and instance.function.description:
                    span.set_attribute("tool.description", instance.function.description)

                # Capture input arguments
                if should_send_prompts():
                    if hasattr(instance, 'arguments') and instance.arguments:
                        span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_INPUT,
                                           json.dumps(instance.arguments))
                    elif kwargs:
                        span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_INPUT,
                                           json.dumps(kwargs))

                start_time = time.time()

                result = wrapped(*args, **kwargs)

                duration = time.time() - start_time

                if result is not None and should_send_prompts():
                    span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_OUTPUT, str(result))

                span.set_status(Status(StatusCode.OK))

                self._duration_histogram.record(
                    duration,
                    attributes={
                        GenAIAttributes.GEN_AI_SYSTEM: "agno",
                        SpanAttributes.TRACELOOP_SPAN_KIND: TraceloopSpanKindValues.TOOL.value,
                    }
                )

                return result

            except Exception as e:
                span.set_status(Status(StatusCode.ERROR, str(e)))
                span.record_exception(e)
                raise


class _FunctionCallAExecuteWrapper:
    """Wrapper for FunctionCall.aexecute() method to capture asynchronous tool execution."""

    def __init__(self, tracer, duration_histogram, token_histogram):
        """Initialize the wrapper with OpenTelemetry instrumentation objects."""
        self._tracer = tracer
        self._duration_histogram = duration_histogram
        self._token_histogram = token_histogram

    @dont_throw
    async def __call__(self, wrapped, instance, args, kwargs):
        """Wrap the FunctionCall.aexecute() call with tracing instrumentation."""
        if context_api.get_value(
            context_api._SUPPRESS_INSTRUMENTATION_KEY
        ) or context_api.get_value("suppress_agno_instrumentation"):
            return await wrapped(*args, **kwargs)

        function_name = getattr(instance.function, 'name', 'unknown')
        span_name = f"{function_name}.tool"

        with self._tracer.start_as_current_span(
            span_name,
            kind=SpanKind.CLIENT,
        ) as span:
            try:
                span.set_attribute(GenAIAttributes.GEN_AI_SYSTEM, "agno")
                span.set_attribute(SpanAttributes.TRACELOOP_SPAN_KIND,
                                   TraceloopSpanKindValues.TOOL.value)
                span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_NAME, function_name)

                if hasattr(instance.function, 'description') and instance.function.description:
                    span.set_attribute("tool.description", instance.function.description)

                # Capture input arguments
                if should_send_prompts():
                    if hasattr(instance, 'arguments') and instance.arguments:
                        span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_INPUT,
                                           json.dumps(instance.arguments))
                    elif kwargs:
                        span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_INPUT,
                                           json.dumps(kwargs))

                start_time = time.time()

                result = await wrapped(*args, **kwargs)

                duration = time.time() - start_time

                if result is not None and should_send_prompts():
                    span.set_attribute(SpanAttributes.TRACELOOP_ENTITY_OUTPUT, str(result))

                span.set_status(Status(StatusCode.OK))

                self._duration_histogram.record(
                    duration,
                    attributes={
                        GenAIAttributes.GEN_AI_SYSTEM: "agno",
                        SpanAttributes.TRACELOOP_SPAN_KIND: TraceloopSpanKindValues.TOOL.value,
                    }
                )

                return result

            except Exception as e:
                span.set_status(Status(StatusCode.ERROR, str(e)))
                span.record_exception(e)
                raise


================================================
FILE: packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/config.py
================================================
class Config:
    """Global configuration for Agno instrumentation."""

    exception_logger = None
    """Optional logger for recording instrumentation exceptions."""

    enrich_assistant = True
    """Whether to enrich spans with assistant information."""

    enrich_token_usage = False
    """Whether to enrich spans with detailed token usage information."""

    use_legacy_attributes = True
    """Whether to use legacy span attribute names for backward compatibility."""


================================================
FILE: packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/streaming.py
================================================
import logging
import time

from opentelemetry.instrumentation.agno.utils import should_send_prompts
from opentelemetry.metrics import Histogram
from opentelemetry.semconv._incubating.attributes import (
    gen_ai_attributes as GenAIAttributes,
)
from opentelemetry.semconv_ai import SpanAttributes, TraceloopSpanKindValues
from opentelemetry.trace.status import Status, StatusCode
from wrapt import ObjectProxy

logger = logging.getLogger(__name__)


class AgnoAsyncStream(ObjectProxy):
    """Wrapper for Agno async streaming responses that handles instrumentation"""

    def __init__(
        self,
        span,
        response,
        instance,
        start_time,
        duration_histogram: Histogram = None,
        token_histogram: Histogram = None,
    ):
        super().__init__(response)

        self._self_span = span
        self._self_instance = instance
        self._self_start_time = start_time
        self._self_duration_histogram = duration_histogram
        self._self_token_histogram = token_histogram
        self._self_events = []
        self._self_final_result = None
        self._self_instrumentation_completed = False

    def __aiter__(self):
        return self

    async def __anext__(self):
        try:
            event = await self.__wrapped__.__anext__()
        except StopAsyncIteration:
            if not self._self_instrumentation_completed:
                self._complete_instrumentation()
            raise
        except Exception as e:
            if not self._self_instrumentation_completed:
                if self._self_span and self._self_span.is_recording():
                    self._self_span.set_status(Status(StatusCode.ERROR, str(e)))
                    self._self_span.record_exception(e)
                    self._self_span.end()
                self._self_instrumentation_completed = True
            raise

        self._self_events.append(event)

        if hasattr(event, "event") and event.event == "run_response":
            self._self_final_result = event

        return event

    def _complete_instrumentation(self):
        """Complete the instrumentation when stream is fully consumed"""
        if self._self_instrumentation_completed:
            return

        try:
            duration = time.time() - self._self_start_time

            if self._self_final_result:
                result = self._self_final_result
                if hasattr(result, "content") and should_send_prompts():
                    self._self_span.set_attribute(
                        SpanAttributes.TRACELOOP_ENTITY_OUTPUT, str(result.content)
                    )

                if hasattr(result, "run_id"):
                    self._self_span.set_attribute("agno.run.id", result.run_id)

                if hasattr(result, "metrics"):
                    metrics = result.metrics
                    if hasattr(metrics, "input_tokens"):
                        self._self_span.set_attribute(
                            GenAIAttributes.GEN_AI_USAGE_INPUT_TOKENS,
                            metrics.input_tokens,
                        )
                    if hasattr(metrics, "output_tokens"):
                        self._self_span.set_attribute(
                            GenAIAttributes.GEN_AI_USAGE_OUTPUT_TOKENS,
                            metrics.output_tokens,
                        )
                    if hasattr(metrics, "total_tokens"):
                        self._self_span.set_attribute(
                            SpanAttributes.LLM_USAGE_TOTAL_TOKENS, metrics.total_tokens
                        )

            self._self_span.set_status(Status(StatusCode.OK))

            if self._self_duration_histogram:
                self._self_duration_histogram.record(
                    duration,
                    attributes={
                        GenAIAttributes.GEN_AI_SYSTEM: "agno",
                        SpanAttributes.TRACELOOP_SPAN_KIND: TraceloopSpanKindValues.AGENT.value,
                    },
                )

        except Exception as e:
            logger.warning("Failed to complete instrumentation: %s", str(e))
        finally:
            if self._self_span.is_recording():
                self._self_span.end()
            self._self_instrumentation_completed = True


class AgnoStream(ObjectProxy):
    """Wrapper for Agno sync streaming responses that handles instrumentation"""

    def __init__(
        self,
        span,
        response,
        instance,
        start_time,
        duration_histogram: Histogram = None,
        token_histogram: Histogram = None,
    ):
        super().__init__(response)

        self._self_span = span
        self._self_instance = instance
        self._self_start_time = start_time
        self._self_duration_histogram = duration_histogram
        self._self_token_histogram = token_histogram
        self._self_events = []
        self._self_final_result = None
        self._self_instrumentation_completed = False

    def __iter__(self):
        return self

    def __next__(self):
        try:
            event = self.__wrapped__.__next__()
        except StopIteration:
            if not self._self_instrumentation_completed:
                self._complete_instrumentation()
            raise
        except Exception as e:
            if not self._self_instrumentation_completed:
                if self._self_span and self._self_span.is_recording():
                    self._self_span.set_status(Status(StatusCode.ERROR, str(e)))
                    self._self_span.record_exception(e)
                    self._self_span.end()
                self._self_instrumentation_completed = True
            raise

        self._self_events.append(event)

        if hasattr(event, "event") and event.event == "run_response":
            self._self_final_result = event

        return event

    def _complete_instrumentation(self):
        """Complete the instrumentation when stream is fully consumed"""
        if self._self_instrumentation_completed:
            return

        try:
            duration = time.time() - self._self_start_time

            if self._self_final_result:
                result = self._self_final_result
                if hasattr(result, "content") and should_send_prompts():
                    self._self_span.set_attribute(
                        SpanAttributes.TRACELOOP_ENTITY_OUTPUT, str(result.content)
                    )

                if hasattr(result, "run_id"):
                    self._self_span.set_attribute("agno.run.id", result.run_id)

                if hasattr(result, "metrics"):
                    metrics = result.metrics
                    if hasattr(metrics, "input_tokens"):
                        self._self_span.set_attribute(
                            GenAIAttributes.GEN_AI_USAGE_INPUT_TOKENS,
                            metrics.input_tokens,
                        )
                    if hasattr(metrics, "output_tokens"):
                        self._self_span.set_attribute(
                            GenAIAttributes.GEN_AI_USAGE_OUTPUT_TOKENS,
                            metrics.output_tokens,
                        )
                    if hasattr(metrics, "total_tokens"):
                        self._self_span.set_attribute(
                            SpanAttributes.LLM_USAGE_TOTAL_TOKENS, metrics.total_tokens
                        )

            self._self_span.set_status(Status(StatusCode.OK))

            if self._self_duration_histogram:
                self._self_duration_histogram.record(
                    duration,
                    attributes={
                        GenAIAttributes.GEN_AI_SYSTEM: "agno",
                        SpanAttributes.TRACELOOP_SPAN_KIND: TraceloopSpanKindValues.AGENT.value,
                    },
                )

        except Exception as e:
            logger.warning("Failed to complete instrumentation: %s", str(e))
        finally:
            if self._self_span.is_recording():
                self._self_span.end()
            self._self_instrumentation_completed = True


================================================
FILE: packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/utils.py
================================================
import logging
from typing import Any
from functools import wraps
import asyncio
from opentelemetry.trace import Span

logger = logging.getLogger(__name__)


def dont_throw(func):
    """Decorator to prevent exceptions from being thrown."""
    if asyncio.iscoroutinefunction(func):
        @wraps(func)
        async def async_wrapper(*args, **kwargs):
            try:
                return await func(*args, **kwargs)
            except Exception as e:
                logger.debug(f"Error in {func.__name__}: {e}")
        return async_wrapper
    else:
        @wraps(func)
        def wrapper(*args, **kwargs):
            try:
                return func(*args, **kwargs)
            except Exception as e:
                logger.debug(f"Error in {func.__name__}: {e}")
        return wrapper


def set_span_attribute(span: Span, name: str, value: Any) -> None:
    """Set an attribute on a span if the value is not None."""
    if value is not None:
        if isinstance(value, dict):
            for key, val in value.items():
                set_span_attribute(span, f"{name}.{key}", val)
        elif isinstance(value, list):
            for index, item in enumerate(value):
                set_span_attribute(span, f"{name}.{index}", item)
        else:
            span.set_attribute(name, value)


def should_send_prompts() -> bool:
    """Check if prompts should be sent based on environment variables."""
    import os
    return os.getenv("TRACELOOP_TRACE_CONTENT", "true").lower() == "true"


================================================
FILE: packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/version.py
================================================
__version__ = "0.53.3"


================================================
FILE: packages/opentelemetry-instrumentation-agno/poetry.toml
================================================
[virtualenvs]
in-project = true


================================================
FILE: packages/opentelemetry-instrumentation-agno/project.json
================================================
{
  "name": "opentelemetry-instrumentation-agno",
  "$schema": "../../node_modules/nx/schemas/project-schema.json",
  "projectType": "library",
  "sourceRoot": "packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno",
  "targets": {
    "lock": {
      "executor": "nx:run-commands",
      "options": {
        "command": "uv lock",
        "cwd": "packages/opentelemetry-instrumentation-agno"
      }
    },
    "add": {
      "executor": "@nxlv/python:add",
      "options": {}
    },
    "update": {
      "executor": "@nxlv/python:update",
      "options": {}
    },
    "remove": {
      "executor": "@nxlv/python:remove",
      "options": {}
    },
    "build": {
      "executor": "@nxlv/python:build",
      "outputs": [
        "{projectRoot}/dist"
      ],
      "options": {
        "outputPath": "packages/opentelemetry-instrumentation-agno/dist",
        "publish": false,
        "lockedVersions": true,
        "bundleLocalDependencies": true
      }
    },
    "install": {
      "executor": "nx:run-commands",
      "options": {
        "command": "uv sync --all-groups",
        "cwd": "packages/opentelemetry-instrumentation-agno"
      }
    },
    "lint": {
      "executor": "nx:run-commands",
      "options": {
        "command": "uv run ruff check .",
        "cwd": "packages/opentelemetry-instrumentation-agno"
      }
    },
    "test": {
      "executor": "nx:run-commands",
      "outputs": [
        "{workspaceRoot}/reports/packages/opentelemetry-instrumentation-agno/unittests",
        "{workspaceRoot}/coverage/packages/opentelemetry-instrumentation-agno"
      ],
      "options": {
        "command": "uv run pytest tests/",
        "cwd": "packages/opentelemetry-instrumentation-agno"
      }
    },
    "build-release": {
      "executor": "nx:run-commands",
      "options": {
        "commands": [
          "chmod +x ../../scripts/build-release.sh",
          "../../scripts/build-release.sh"
        ],
        "cwd": "packages/opentelemetry-instrumentation-agno"
      }
    }
  },
  "tags": [
    "instrumentation"
  ]
}


================================================
FILE: packages/opentelemetry-instrumentation-agno/pyproject.toml
================================================
[project]
name = "opentelemetry-instrumentation-agno"
version = "0.53.3"
description = "OpenTelemetry Agno instrumentation"
authors = [
  { name = "Gal Kleinman", email = "gal@traceloop.com" },
  { name = "Nir Gazit", email = "nir@traceloop.com" },
]
license = "Apache-2.0"
readme = "README.md"
requires-python = ">=3.10,<4"
dependencies = [
  "opentelemetry-api>=1.28.0,<2",
  "opentelemetry-instrumentation>=0.59b0",
  "opentelemetry-semantic-conventions-ai>=0.4.13,<0.5.0",
  "opentelemetry-semantic-conventions>=0.59b0",
]

[project.urls]
Repository = "https://github.com/traceloop/openllmetry/tree/main/packages/opentelemetry-instrumentation-agno"

[project.optional-dependencies]
instruments = ["agno"]

[project.entry-points."opentelemetry_instrumentor"]
agno = "opentelemetry.instrumentation.agno:AgnoInstrumentor"

[dependency-groups]
dev = [
  "autopep8>=2.2.0,<3",
  "pytest-sugar==1.0.0",
  "pytest>=8.2.2,<9",
  "ruff>=0.4.0",
]
test = [
  "agno>=2.2.2",
  "openai>=1.52.2,<2",
  "opentelemetry-instrumentation-openai",
  "opentelemetry-sdk>=1.27.0,<2",
  "pytest-asyncio>=0.23.7,<0.24.0",
  "pytest-recording>=0.13.1,<0.14.0",
  "pytest-sugar==1.0.0",
  "pytest>=8.2.2,<9",
  "vcrpy>=8.0.0,<9",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.hatch.build.targets.wheel]
packages = ["opentelemetry"]

[tool.coverage.run]
branch = true
source = ["opentelemetry/instrumentation/agno"]

[tool.coverage.report]
exclude_lines = ["if TYPE_CHECKING:"]
show_missing = true

[tool.ruff]
line-length = 120
exclude = [
  ".git",
  "__pycache__",
  "build",
  "dist",
  ".venv",
  ".pytest_cache",
]

[tool.ruff.lint]
select = ["E", "F", "W"]

[tool.uv]
constraint-dependencies = ["urllib3>=2.6.3", "pip>=25.3"]


================================================
FILE: packages/opentelemetry-instrumentation-agno/tests/__init__.py
================================================


================================================
FILE: packages/opentelemetry-instrumentation-agno/tests/cassettes/test_agent/test_agent_arun_basic.yaml
================================================
interactions:
- request:
    body: '{"messages":[{"role":"developer","content":"A simple async test agent"},{"role":"user","content":"What
      is the capital of France?"}],"model":"gpt-4o-mini"}'
    headers:
      accept:
      - application/json
      accept-encoding:
      - gzip, deflate
      connection:
      - keep-alive
      content-length:
      - '154'
      content-type:
      - application/json
      host:
      - api.openai.com
      user-agent:
      - AsyncOpenAI/Python 1.109.1
      x-stainless-arch:
      - arm64
      x-stainless-async:
      - async:asyncio
      x-stainless-lang:
      - python
      x-stainless-os:
      - MacOS
      x-stainless-package-version:
      - 1.109.1
      x-stainless-read-timeout:
      - '600'
      x-stainless-retry-count:
      - '0'
      x-stainless-runtime:
      - CPython
      x-stainless-runtime-version:
      - 3.11.7
    method: POST
    uri: https://api.openai.com/v1/chat/completions
  response:
    body:
      string: !!binary |
        H4sIAAAAAAAAAwAAAP//jFLBitswEL37K4TO8eLEidPNcRcWCj2U0kOhLGZWGtuzK0tCGpe0S/69
        yM7GzraFXnyYN+/5vad5zYSQpOVBSNUBq96b/F4f6WMwR+RPv56Huy9NNOXL+ts+rh9uB7lKDPf0
        jIrfWDfK9d4gk7MTrAICY1Jd76uy2hZlVY1A7zSaRGs951uX92Qp3xSbbV7s8/WHM7tzpDDKg/ie
        CSHE6/hNPq3GozyIYvU26TFGaFEeLktCyOBMmkiIkSKDZbmaQeUsox2tf+1QKPDEYIRrxEMAq1BQ
        FJ8hULxZsgI2Q4Tk3A7GLACw1jGk5KPfxzNyujg0rvXBPcV3VNmQpdjVASE6m9xEdl6O6CkT4nFs
        YrgKJ31wveea3QuOv9uUk5yc+5/B/Rljx2DmcXku71qs1shAJi6KlApUh3pmzq3DoMktgGwR+U8v
        f9OeYpNt/0d+BpRCz6hrH1CTus47rwVMx/mvtUvFo2EZMfwghTUThvQMGhsYzHQyMv6MjH3dkG0x
        +EDT3TS+3lUFNBXudrcyO2W/AQAA//8DAIV/9MtFAwAA
    headers:
      CF-RAY:
      - 9a17d1c2e8f5c22c-TLV
      Connection:
      - keep-alive
      Content-Encoding:
      - gzip
      Content-Type:
      - application/json
      Date:
      - Thu, 20 Nov 2025 12:06:07 GMT
      Server:
      - cloudflare
      Set-Cookie:
      - __cf_bm=avR6DpUR6DN2zpi4aPsfTbRRs_hTBGvmRzhNEOtCiB0-1763640367-1.0.1.1-0OVjoNuYTCWUz_AbMbfArKvQadIE3pg4WgCqgQ0qE7VoNB8tCDLbeYvRhaMBwIRcodBMksRV9yFawwCkntj7D3WAK6e68nlegc97SrV55w4;
        path=/; expires=Thu, 20-Nov-25 12:36:07 GMT; domain=.api.openai.com; HttpOnly;
        Secure; SameSite=None
      - _cfuvid=g5EBmJdgFrHkcKEeCC5mr6mJYGe4DP4eaU52aTezNls-1763640367546-0.0.1.1-604800000;
        path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
      Strict-Transport-Security:
      - max-age=31536000; includeSubDomains; preload
      Transfer-Encoding:
      - chunked
      X-Content-Type-Options:
      - nosniff
      access-control-expose-headers:
      - X-Request-ID
      alt-svc:
      - h3=":443"; ma=86400
      cf-cache-status:
      - DYNAMIC
      openai-organization:
      - traceloop
      openai-processing-ms:
      - '498'
      openai-project:
      - proj_tzz1TbPPOXaf6j9tEkVUBIAa
      openai-version:
      - '2020-10-01'
      x-envoy-upstream-service-time:
      - '510'
      x-openai-proxy-wasm:
      - v0.1
      x-ratelimit-limit-requests:
      - '30000'
      x-ratelimit-limit-tokens:
      - '150000000'
      x-ratelimit-remaining-requests:
      - '29999'
      x-ratelimit-remaining-tokens:
      - '149999982'
      x-ratelimit-reset-requests:
      - 2ms
      x-ratelimit-reset-tokens:
      - 0s
      x-request-id:
      - req_117038824b344edfaffa5937b681b853
    status:
      code: 200
      message: OK
- request:
    body: '{"session_id":"5e1345bd-77b2-4a56-81f3-15424f4f1a03","run_id":"e8e05e68-b1c5-4dc9-8900-79ea6d423698","data":{"agent_id":"asynctestagent","db_type":null,"model_provider":"OpenAI","model_name":"OpenAIChat","model_id":"gpt-4o-mini","parser_model":null,"output_model":null,"has_tools":true,"has_memory":false,"has_culture":false,"has_reasoning":false,"has_knowledge":false,"has_input_schema":false,"has_output_schema":false,"has_team":false},"sdk_version":"2.2.13","type":"agent"}'
    headers:
      accept:
      - '*/*'
      accept-encoding:
      - gzip, deflate
      connection:
      - keep-alive
      content-length:
      - '476'
      content-type:
      - application/json
      host:
      - os-api.agno.com
      user-agent:
      - agno/2.2.13
    method: POST
    uri: https://os-api.agno.com/telemetry/runs
  response:
    body:
      string: '{"message":"Run creation acknowledged: e8e05e68-b1c5-4dc9-8900-79ea6d423698","status":"success"}'
    headers:
      Connection:
      - keep-alive
      Content-Length:
      - '96'
      Content-Type:
      - application/json
      Date:
      - Thu, 20 Nov 2025 12:06:08 GMT
      server:
      - uvicorn
    status:
      code: 201
      message: Created
version: 1


================================================
FILE: packages/opentelemetry-instrumentation-agno/tests/cassettes/test_agent/test_agent_arun_streaming.yaml
================================================
interactions:
- request:
    body: '{"messages": [{"role": "developer", "content": "An async streaming test
      agent"}, {"role": "user", "content": "What is 10 + 5?"}], "model": "gpt-4o-mini",
      "stream": true, "stream_options": {"include_usage": true}}'
    headers:
      accept:
      - application/json
      accept-encoding:
      - gzip, deflate
      connection:
      - keep-alive
      content-length:
      - '197'
      content-type:
      - application/json
      host:
      - api.openai.com
      user-agent:
      - AsyncOpenAI/Python 1.109.1
      x-stainless-arch:
      - arm64
      x-stainless-async:
      - async:asyncio
      x-stainless-lang:
      - python
      x-stainless-os:
      - MacOS
      x-stainless-package-version:
      - 1.109.1
      x-stainless-read-timeout:
      - '600'
      x-stainless-retry-count:
      - '0'
      x-stainless-runtime:
      - CPython
      x-stainless-runtime-version:
      - 3.11.7
    method: POST
    uri: https://api.openai.com/v1/chat/completions
  response:
    body:
      string: 'data: {"id":"chatcmpl-ChZGrWePAKduzUEk8i6v9utQc14XI","object":"chat.completion.chunk","created":1764499721,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"T3FmnOmia"}


        data: {"id":"chatcmpl-ChZGrWePAKduzUEk8i6v9utQc14XI","object":"chat.completion.chunk","created":1764499721,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"10"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"yPabhjnXh"}


        data: {"id":"chatcmpl-ChZGrWePAKduzUEk8i6v9utQc14XI","object":"chat.completion.chunk","created":1764499721,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"
        +"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"YgagWXPBu"}


        data: {"id":"chatcmpl-ChZGrWePAKduzUEk8i6v9utQc14XI","object":"chat.completion.chunk","created":1764499721,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"
        "},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"7F9bGwVxLn"}


        data: {"id":"chatcmpl-ChZGrWePAKduzUEk8i6v9utQc14XI","object":"chat.completion.chunk","created":1764499721,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"5"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"31XO6pfzvv"}


        data: {"id":"chatcmpl-ChZGrWePAKduzUEk8i6v9utQc14XI","object":"chat.completion.chunk","created":1764499721,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"
        equals"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"bK5x"}


        data: {"id":"chatcmpl-ChZGrWePAKduzUEk8i6v9utQc14XI","object":"chat.completion.chunk","created":1764499721,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"
        "},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"if1LCNLWSa"}


        data: {"id":"chatcmpl-ChZGrWePAKduzUEk8i6v9utQc14XI","object":"chat.completion.chunk","created":1764499721,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"15"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"YTemoMQpm"}


        data: {"id":"chatcmpl-ChZGrWePAKduzUEk8i6v9utQc14XI","object":"chat.completion.chunk","created":1764499721,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"."},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"tYV0az6arM"}


        data: {"id":"chatcmpl-ChZGrWePAKduzUEk8i6v9utQc14XI","object":"chat.completion.chunk","created":1764499721,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"0Tn35"}


        data: {"id":"chatcmpl-ChZGrWePAKduzUEk8i6v9utQc14XI","object":"chat.completion.chunk","created":1764499721,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[],"usage":{"prompt_tokens":24,"completion_tokens":8,"total_tokens":32,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"IngXyYERtzR"}


        data: [DONE]


        '
    headers:
      CF-RAY:
      - 9a69c60bb897935b-TLV
      Connection:
      - keep-alive
      Content-Type:
      - text/event-stream; charset=utf-8
      Date:
      - Sun, 30 Nov 2025 10:48:41 GMT
      Server:
      - cloudflare
      Set-Cookie:
      - __cf_bm=lmJyJxowi7UCeCxiq5.eMfkvZKN72hM9pmfpka3qsO8-1764499721-1.0.1.1-cJzziBuNDFDzVCFbfOVlMIm6r0p3zK3QN50vqF9FiIo1XwctQeLhSVEbrqLjbEnbn3OzsSESXICcwyGcWdjVEbaYA9oke8OlS3USWr4aYio;
        path=/; expires=Sun, 30-Nov-25 11:18:41 GMT; domain=.api.openai.com; HttpOnly;
        Secure; SameSite=None
      - _cfuvid=ii5nlTYgcQkf0j7QIT5pyTNx6dSiT.6sr.CVTensbFU-1764499721433-0.0.1.1-604800000;
        path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
      Strict-Transport-Security:
      - max-age=31536000; includeSubDomains; preload
      Transfer-Encoding:
      - chunked
      X-Content-Type-Options:
      - nosniff
      access-control-expose-headers:
      - X-Request-ID
      alt-svc:
      - h3=":443"; ma=86400
      cf-cache-status:
      - DYNAMIC
      openai-organization:
      - traceloop
      openai-processing-ms:
      - '152'
      openai-project:
      - proj_tzz1TbPPOXaf6j9tEkVUBIAa
      openai-version:
      - '2020-10-01'
      x-envoy-upstream-service-time:
      - '1872'
      x-openai-proxy-wasm:
      - v0.1
      x-ratelimit-limit-requests:
      - '30000'
      x-ratelimit-limit-tokens:
      - '150000000'
      x-ratelimit-remaining-requests:
      - '29999'
      x-ratelimit-remaining-tokens:
      - '149999985'
      x-ratelimit-reset-requests:
      - 2ms
      x-ratelimit-reset-tokens:
      - 0s
      x-request-id:
      - req_4c3b7fd0b96a4cd1a9ec031c9521253f
    status:
      code: 200
      message: OK
- request:
    body: '{"session_id": "218bbc8f-4862-474f-97ea-a5e0fd7a75ab", "run_id": "327f651a-e2f4-467a-8106-48e3e1d5b8b7",
      "data": {"agent_id": "asyncstreamagent", "db_type": null, "model_provider":
      "OpenAI", "model_name": "OpenAIChat", "model_id": "gpt-4o-mini", "parser_model":
      null, "output_model": null, "has_tools": true, "has_memory": false, "has_culture":
      false, "has_reasoning": false, "has_knowledge": false, "has_input_schema": false,
      "has_output_schema": false, "has_team": false}, "sdk_version": "2.2.13", "type":
      "agent"}'
    headers:
      accept:
      - '*/*'
      accept-encoding:
      - gzip, deflate
      connection:
      - keep-alive
      content-length:
      - '478'
      content-type:
      - application/json
      host:
      - os-api.agno.com
      user-agent:
      - agno/2.2.13
    method: POST
    uri: https://os-api.agno.com/telemetry/runs
  response:
    body:
      string: '{"message":"Run creation acknowledged: 327f651a-e2f4-467a-8106-48e3e1d5b8b7","status":"success"}'
    headers:
      Connection:
      - keep-alive
      Content-Length:
      - '96'
      Content-Type:
      - application/json
      Date:
      - Sun, 30 Nov 2025 10:48:42 GMT
      server:
      - uvicorn
    status:
      code: 201
      message: Created
version: 1


================================================
FILE: packages/opentelemetry-instrumentation-agno/tests/cassettes/test_agent/test_agent_arun_streaming_with_tools.yaml
================================================
interactions:
- request:
    body: '{"messages": [{"role": "developer", "content": "A streaming agent with
      tools"}, {"role": "user", "content": "What is 6 times 7?"}], "model": "gpt-4o-mini",
      "stream": true, "stream_options": {"include_usage": true}, "tools": [{"type":
      "function", "function": {"name": "multiply", "description": "Multiply two numbers.",
      "parameters": {"type": "object", "properties": {"a": {"type": "number"}, "b":
      {"type": "number"}}, "required": ["a", "b"]}}}]}'
    headers:
      accept:
      - application/json
      accept-encoding:
      - gzip, deflate
      connection:
      - keep-alive
      content-length:
      - '409'
      content-type:
      - application/json
      host:
      - api.openai.com
      user-agent:
      - AsyncOpenAI/Python 1.109.1
      x-stainless-arch:
      - arm64
      x-stainless-async:
      - async:asyncio
      x-stainless-lang:
      - python
      x-stainless-os:
      - MacOS
      x-stainless-package-version:
      - 1.109.1
      x-stainless-read-timeout:
      - '600'
      x-stainless-retry-count:
      - '0'
      x-stainless-runtime:
      - CPython
      x-stainless-runtime-version:
      - 3.11.7
    method: POST
    uri: https://api.openai.com/v1/chat/completions
  response:
    body:
      string: 'data: {"id":"chatcmpl-ChZGtWl2za1l5jTaEl4KhNkV3RdM0","object":"chat.completion.chunk","created":1764499723,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_fvsP35x2Oga1cEKZEOPqYNeO","type":"function","function":{"name":"multiply","arguments":""}}],"refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"027O0Hw"}


        data: {"id":"chatcmpl-ChZGtWl2za1l5jTaEl4KhNkV3RdM0","object":"chat.completion.chunk","created":1764499723,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"ODp6oBI3Vkuq56"}


        data: {"id":"chatcmpl-ChZGtWl2za1l5jTaEl4KhNkV3RdM0","object":"chat.completion.chunk","created":1764499723,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"a"}}]},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":""}


        data: {"id":"chatcmpl-ChZGtWl2za1l5jTaEl4KhNkV3RdM0","object":"chat.completion.chunk","created":1764499723,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"7QZEpfKsRcs9Oj"}


        data: {"id":"chatcmpl-ChZGtWl2za1l5jTaEl4KhNkV3RdM0","object":"chat.completion.chunk","created":1764499723,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"6"}}]},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":""}


        data: {"id":"chatcmpl-ChZGtWl2za1l5jTaEl4KhNkV3RdM0","object":"chat.completion.chunk","created":1764499723,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":",\""}}]},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"ZsJOt1y0FElDkx"}


        data: {"id":"chatcmpl-ChZGtWl2za1l5jTaEl4KhNkV3RdM0","object":"chat.completion.chunk","created":1764499723,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"b"}}]},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":""}


        data: {"id":"chatcmpl-ChZGtWl2za1l5jTaEl4KhNkV3RdM0","object":"chat.completion.chunk","created":1764499723,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"r2DypemXGAui7C"}


        data: {"id":"chatcmpl-ChZGtWl2za1l5jTaEl4KhNkV3RdM0","object":"chat.completion.chunk","created":1764499723,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"7"}}]},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":""}


        data: {"id":"chatcmpl-ChZGtWl2za1l5jTaEl4KhNkV3RdM0","object":"chat.completion.chunk","created":1764499723,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":""}


        data: {"id":"chatcmpl-ChZGtWl2za1l5jTaEl4KhNkV3RdM0","object":"chat.completion.chunk","created":1764499723,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"tool_calls"}],"usage":null,"obfuscation":"1a6WhodWpeDLf8i"}


        data: {"id":"chatcmpl-ChZGtWl2za1l5jTaEl4KhNkV3RdM0","object":"chat.completion.chunk","created":1764499723,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[],"usage":{"prompt_tokens":58,"completion_tokens":17,"total_tokens":75,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"YfyJcOz3jn"}


        data: [DONE]


        '
    headers:
      CF-RAY:
      - 9a69c6214ac4997f-TLV
      Connection:
      - keep-alive
      Content-Type:
      - text/event-stream; charset=utf-8
      Date:
      - Sun, 30 Nov 2025 10:48:44 GMT
      Server:
      - cloudflare
      Set-Cookie:
      - __cf_bm=KdIqnM_NjlF_a_hAtr_VnbxBtM25OmOPaj9u7bqHUS4-1764499724-1.0.1.1-5kdn32rOYH0amaKqnRwLQGZHkedRSiREBAiLjFLl9IiQrCEvM0VNDfeP6nl2pkDX1It5pHoxCFiOudMy8fKLFaDn7KYYY_a7O4ADUQwT5aI;
        path=/; expires=Sun, 30-Nov-25 11:18:44 GMT; domain=.api.openai.com; HttpOnly;
        Secure; SameSite=None
      - _cfuvid=ayM5sbPWKidG631jgonROcVKOmpiyZ13mX2bui1qUkE-1764499724004-0.0.1.1-604800000;
        path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
      Strict-Transport-Security:
      - max-age=31536000; includeSubDomains; preload
      Transfer-Encoding:
      - chunked
      X-Content-Type-Options:
      - nosniff
      access-control-expose-headers:
      - X-Request-ID
      alt-svc:
      - h3=":443"; ma=86400
      cf-cache-status:
      - DYNAMIC
      openai-organization:
      - traceloop
      openai-processing-ms:
      - '694'
      openai-project:
      - proj_tzz1TbPPOXaf6j9tEkVUBIAa
      openai-version:
      - '2020-10-01'
      x-envoy-upstream-service-time:
      - '889'
      x-openai-proxy-wasm:
      - v0.1
      x-ratelimit-limit-requests:
      - '30000'
      x-ratelimit-limit-tokens:
      - '150000000'
      x-ratelimit-remaining-requests:
      - '29999'
      x-ratelimit-remaining-tokens:
      - '149999985'
      x-ratelimit-reset-requests:
      - 2ms
      x-ratelimit-reset-tokens:
      - 0s
      x-request-id:
      - req_46bd5de8c07c4becb96557f555ec133d
    status:
      code: 200
      message: OK
- request:
    body: '{"messages": [{"role": "developer", "content": "A streaming agent with
      tools"}, {"role": "user", "content": "What is 6 times 7?"}, {"role": "assistant",
      "tool_calls": [{"id": "call_fvsP35x2Oga1cEKZEOPqYNeO", "type": "function", "function":
      {"name": "multiply", "arguments": "{\"a\":6,\"b\":7}"}}], "content": ""}, {"role":
      "tool", "content": "42", "tool_call_id": "call_fvsP35x2Oga1cEKZEOPqYNeO"}],
      "model": "gpt-4o-mini", "stream": true, "stream_options": {"include_usage":
      true}, "tools": [{"type": "function", "function": {"name": "multiply", "description":
      "Multiply two numbers.", "parameters": {"type": "object", "properties": {"a":
      {"type": "number"}, "b": {"type": "number"}}, "required": ["a", "b"]}}}]}'
    headers:
      accept:
      - application/json
      accept-encoding:
      - gzip, deflate
      connection:
      - keep-alive
      content-length:
      - '656'
      content-type:
      - application/json
      host:
      - api.openai.com
      user-agent:
      - AsyncOpenAI/Python 1.109.1
      x-stainless-arch:
      - arm64
      x-stainless-async:
      - async:asyncio
      x-stainless-lang:
      - python
      x-stainless-os:
      - MacOS
      x-stainless-package-version:
      - 1.109.1
      x-stainless-read-timeout:
      - '600'
      x-stainless-retry-count:
      - '0'
      x-stainless-runtime:
      - CPython
      x-stainless-runtime-version:
      - 3.11.7
    method: POST
    uri: https://api.openai.com/v1/chat/completions
  response:
    body:
      string: 'data: {"id":"chatcmpl-ChZGunQ0zcUQXzAGuRv0nT0f3APLS","object":"chat.completion.chunk","created":1764499724,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"rlrDvkoSF"}


        data: {"id":"chatcmpl-ChZGunQ0zcUQXzAGuRv0nT0f3APLS","object":"chat.completion.chunk","created":1764499724,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"6"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"zufiawYmUl"}


        data: {"id":"chatcmpl-ChZGunQ0zcUQXzAGuRv0nT0f3APLS","object":"chat.completion.chunk","created":1764499724,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"
        times"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"AWd5L"}


        data: {"id":"chatcmpl-ChZGunQ0zcUQXzAGuRv0nT0f3APLS","object":"chat.completion.chunk","created":1764499724,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"
        "},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"O2QJv57PE8"}


        data: {"id":"chatcmpl-ChZGunQ0zcUQXzAGuRv0nT0f3APLS","object":"chat.completion.chunk","created":1764499724,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"7"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"ZWA0uR3j8m"}


        data: {"id":"chatcmpl-ChZGunQ0zcUQXzAGuRv0nT0f3APLS","object":"chat.completion.chunk","created":1764499724,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"
        is"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"Eq6p3HYr"}


        data: {"id":"chatcmpl-ChZGunQ0zcUQXzAGuRv0nT0f3APLS","object":"chat.completion.chunk","created":1764499724,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"
        "},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"rjHD4JqjIJ"}


        data: {"id":"chatcmpl-ChZGunQ0zcUQXzAGuRv0nT0f3APLS","object":"chat.completion.chunk","created":1764499724,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"42"},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"bX7kiBthP"}


        data: {"id":"chatcmpl-ChZGunQ0zcUQXzAGuRv0nT0f3APLS","object":"chat.completion.chunk","created":1764499724,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{"content":"."},"logprobs":null,"finish_reason":null}],"usage":null,"obfuscation":"JMunvWGQ4A"}


        data: {"id":"chatcmpl-ChZGunQ0zcUQXzAGuRv0nT0f3APLS","object":"chat.completion.chunk","created":1764499724,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null,"obfuscation":"eDdrR"}


        data: {"id":"chatcmpl-ChZGunQ0zcUQXzAGuRv0nT0f3APLS","object":"chat.completion.chunk","created":1764499724,"model":"gpt-4o-mini-2024-07-18","service_tier":"default","system_fingerprint":"fp_50906f2aac","choices":[],"usage":{"prompt_tokens":83,"completion_tokens":9,"total_tokens":92,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"Y46woMhBiYm"}


        data: [DONE]


        '
    headers:
      CF-RAY:
      - 9a69c62c3cc6997f-TLV
      Connection:
      - keep-alive
      Content-Type:
      - text/event-stream; charset=utf-8
      Date:
      - Sun, 30 Nov 2025 10:48:45 GMT
      Server:
      - cloudflare
      Strict-Transport-Security:
      - max-age=31536000; includeSubDomains; preload
      Transfer-Encoding:
      - chunked
      X-Content-Type-Options:
      - nosniff
      access-control-expose-headers:
      - X-Request-ID
      alt-svc:
      - h3=":443"; ma=86400
      cf-cache-status:
      - DYNAMIC
      openai-organization:
      - traceloop
      openai-processing-ms:
      - '653'
      openai-project:
      - proj_tzz1TbPPOXaf6j9tEkVUBIAa
      openai-version:
      - '2020-10-01'
      x-envoy-upstream-service-time:
      - '767'
      x-openai-proxy-wasm:
      - v0.1
      x-ratelimit-limit-requests:
      - '30000'
      x-ratelimit-limit-tokens:
      - '150000000'
      x-ratelimit-remaining-requests:
      - '29999'
      x-ratelimit-remaining-tokens:
      - '149999985'
      x-ratelimit-reset-requests:
      - 2ms
      x-ratelimit-reset-tokens:
      - 0s
      x-request-id:
      - req_7729e51298d349d0a76f25314c92a69f
    status:
      code: 200
      message: OK
- request:
    body: '{"session_id": "68ca1e9e-b05e-4cce-a332-49b785ee30e5", "run_id": "70d8764b-1e37-493a-b822-f777434eb039",
      "data": {"agent_id": "streamtoolagent", "db_type": null, "model_provider": "OpenAI",
      "model_name": "OpenAIChat", "model_id": "gpt-4o-mini", "parser_model": null,
      "output_model": null, "has_tools": true, "has_memory": false, "has_culture":
      false, "has_reasoning": false, "has_knowledge": false, "has_input_schema": false,
      "has_output_schema": false, "has_team": false}, "sdk_version": "2.2.13", "type":
      "agent"}'
    headers:
      accept:
      - '*/*'
      accept-encoding:
      - gzip, deflate
      connection:
      - keep-alive
      content-length:
      - '477'
      content-type:
      - application/json
      host:
      - os-api.agno.com
      user-agent:
      - agno/2.2.13
    method: POST
    uri: https://os-api.agno.com/telemetry/runs
  response:
    body:
      string: '{"message":"Run creation acknowledged: 70d8764b-1e37-493a-b822-f777434eb039","status":"success"}'
    headers:
      Connection:
      - keep-alive
      Content-Length:
      - '96'
      Content-Type:
      - application/json
      Date:
      - Sun, 30 Nov 2025 10:48:46 GMT
      server:
      - uvicorn
    status:
      code: 201
      message: Created
version: 1


================================================
FILE: packages/opentelemetry-instrumentation-agno/tests/cassettes/test_agent/test_agent_metrics.yaml
================================================
interactions:
- request:
    body: '{"messages":[{"role":"user","content":"Tell me a short joke"}],"model":"gpt-4o-mini"}'
    headers:
      accept:
      - application/json
      accept-encoding:
      - gzip, deflate
      connection:
      - keep-alive
      content-length:
      - '85'
      content-type:
      - application/json
      host:
      - api.openai.com
      user-agent:
      - OpenAI/Python 1.109.1
      x-stainless-arch:
      - arm64
      x-stainless-async:
      - 'false'
      x-stainless-lang:
      - python
      x-stainless-os:
      - MacOS
      x-stainless-package-version:
      - 1.109.1
      x-stainless-read-timeout:
      - '600'
      x-stainless-retry-count:
      - '0'
      x-stainless-runtime:
      - CPython
      x-stainless-runtime-version:
      - 3.11.7
    method: POST
    uri: https://api.openai.com/v1/chat/completions
  response:
    body:
      string: !!binary |
        H4sIAAAAAAAAAwAAAP//jFJNj9MwEL3nVww+Nyj9XnpBYjlwAsQFIXYVzdqTZHYd27Id0mrV/46c
        dpt0AYmLD/PmPc97M88ZgGAldiBkg1G2Tue3as+fvz668O0W/ad1f8D9k131/Y8vHxeFmCWGfXgk
        GV9Yb6VtnabI1pxg6QkjJdX5drPcrIrldj4ArVWkE612MV/ZvGXD+aJYrPJim89vzuzGsqQgdvAz
        AwB4Ht40p1G0FzsoZi+VlkLAmsTu0gQgvNWpIjAEDhFNFLMRlNZEMsPo35sDKFYQG4Ig0ZP0toee
        DaAB7NGr9wB35s58IIldIGgIegxgu5hkFZsa2EDDASomrd5M//FUdQGTV9NpPQHQGBsxZTU4vD8j
        x4snbWvn7UN4RRUVGw5N6QmDNWn+EK0TA3rMAO6H7LqrOITztnWxjPaJhu/mi5OcGDc2AW/OYLQR
        9VhfnvO+VisVRWQdJtkLibIhNTLHRWGn2E6AbOL5z2H+pn3yzab+H/kRkJJcJFU6T4rlteGxzVO6
        53+1XTIeBhaB/C+WVEYmn/agqMJOn65MhEOI1JYVm5q883w6tcqV602B1YbW63ciO2a/AQAA//8D
        AObr3a54AwAA
    headers:
      CF-RAY:
      - 9a17d1dd982afc6b-TLV
      Connection:
      - keep-alive
      Content-Encoding:
      - gzip
      Content-Type:
      - application/json
      Date:
      - Thu, 20 Nov 2025 12:06:12 GMT
      Server:
      - cloudflare
      Set-Cookie:
      - __cf_bm=r8yS2MmhytDWBhbbk4BBlxyTbPnY5rea2VfUGxf.gW8-1763640372-1.0.1.1-sdi6ho5hKBNC_og9g51ToLIt7fgHKRThrN.k5og6bSrfX4725GKBM2DWgY9lNOy3A0_Bojxfj8x5opnmk8qQ7f2lAsYyVMBADRtn4ME8nEI;
        path=/; expires=Thu, 20-Nov-25 12:36:12 GMT; domain=.api.openai.com; HttpOnly;
        Secure; SameSite=None
      - _cfuvid=Y_90unMGp5RuQWAGAZUlcI7QabQ7HPdUOXHWEOY8ZKA-1763640372235-0.0.1.1-604800000;
        path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
      Strict-Transport-Security:
      - max-age=31536000; includeSubDomains; preload
      Transfer-Encoding:
      - chunked
      X-Content-Type-Options:
      - nosniff
      access-control-expose-headers:
      - X-Request-ID
      alt-svc:
      - h3=":443"; ma=86400
      cf-cache-status:
      - DYNAMIC
      openai-organization:
      - traceloop
      openai-processing-ms:
      - '886'
      openai-project:
      - proj_tzz1TbPPOXaf6j9tEkVUBIAa
      openai-version:
      - '2020-10-01'
      x-envoy-upstream-service-time:
      - '987'
      x-openai-proxy-wasm:
      - v0.1
      x-ratelimit-limit-requests:
      - '30000'
      x-ratelimit-limit-tokens:
      - '150000000'
      x-ratelimit-remaining-requests:
      - '29999'
      x-ratelimit-remaining-tokens:
      - '149999992'
      x-ratelimit-reset-requests:
      - 2ms
      x-ratelimit-reset-tokens:
      - 0s
      x-request-id:
      - req_954f19ffb2f94e76b1d80135f75aac32
    status:
      code: 200
      message: OK
- request:
    body: '{"session_id":"f34f8e41-736a-47fd-8d7d-f3f34b428632","run_id":"271f9190-dd0a-4a30-a8ef-a3d7abffe1c7","data":{"agent_id":"metricsagent","db_type":null,"model_provider":"OpenAI","model_name":"OpenAIChat","model_id":"gpt-4o-mini","parser_model":null,"output_model":null,"has_tools":true,"has_memory":false,"has_culture":false,"has_reasoning":false,"has_knowledge":false,"has_input_schema":false,"has_output_schema":false,"has_team":false},"sdk_version":"2.2.13","type":"agent"}'
    headers:
      accept:
      - '*/*'
      accept-encoding:
      - gzip, deflate
      connection:
      - keep-alive
      content-length:
      - '474'
      content-type:
      - application/json
      host:
      - os-api.agno.com
      user-agent:
      - agno/2.2.13
    method: POST
    uri: https://os-api.agno.com/telemetry/runs
  response:
    body:
      string: '{"message":"Run creation acknowledged: 271f9190-dd0a-4a30-a8ef-a3d7abffe1c7","status":"success"}'
    headers:
      Connection:
      - keep-alive
      Content-Length:
      - '96'
      Content-Type:
      - application/json
      Date:
      - Thu, 20 Nov 2025 12:06:12 GMT
      server:
      - uvicorn
    status:
      code: 201
      message: Created
version: 1


================================================
FILE: packages/opentelemetry-instrumentation-agno/tests/cassettes/test_agent/test_agent_run_basic.yaml
================================================
interactions:
- request:
    body: '{"messages":[{"role":"developer","content":"A simple test agent"},{"role":"user","content":"What
      is 2 + 2?"}],"model":"gpt-4o-mini"}'
    headers:
      accept:
      - application/json
      accept-encoding:
      - gzip, deflate
      connection:
      - keep-alive
      content-length:
      - '132'
      content-type:
      - application/json
      host:
      - api.openai.com
      user-agent:
      - OpenAI/Python 1.109.1
      x-stainless-arch:
      - arm64
      x-stainless-async:
      - 'false'
      x-stainless-lang:
      - python
      x-stainless-os:
      - MacOS
      x-stainless-package-version:
      - 1.109.1
      x-stainless-read-timeout:
      - '600'
      x-stainless-retry-count:
      - '0'
      x-stainless-runtime:
      - CPython
      x-stainless-runtime-version:
      - 3.11.7
    method: POST
    uri: https://api.openai.com/v1/chat/completions
  response:
    body:
      string: !!binary |
        H4sIAAAAAAAAAwAAAP//jJJBb9swDIXv/hUCr4sLx4nTNLd2GDDsVKDHoTBUiXaUyqIq0WuLIv99
        kJ3G7tYBu/jAj496j+ZbJgQYDTsBai9Zdd7mX/WLuf7ubENVvNFY3dzd4vPTj+Lx8A0PsEgKejig
        4nfVhaLOW2RDbsQqoGRMU5eXm9VmXayq7QA60miTrPWcrynvjDN5WZTrvLjMl9uTek9GYYSd+JkJ
        IcTb8E0+ncYX2Ili8V7pMEbZIuzOTUJAIJsqIGM0kaVjWExQkWN0g/VSfBGlwKde2ijWF/OugE0f
        ZXLqemtnQDpHLFPSwd/9iRzPjiy1PtBD/EMKjXEm7uuAMpJLr0cmDwM9ZkLcD8n7D2HAB+o810yP
        ODxXrsZxMO17gtsTY2Jpp/JqufhkWK2RpbFxtjhQUu1RT8ppy7LXhmYgm0X+28tns8fYxrX/M34C
        SqFn1LUPqI36mHdqC5iO8V9t5xUPhiFi+GUU1mwwpN+gsZG9HU8E4mtk7OrGuBaDD2a8k8bX1aaQ
        zQar6gqyY/YbAAD//wMAl7wyUzUDAAA=
    headers:
      CF-RAY:
      - 9a17d18c5a8bed42-TLV
      Connection:
      - keep-alive
      Content-Encoding:
      - gzip
      Content-Type:
      - application/json
      Date:
      - Thu, 20 Nov 2025 12:05:58 GMT
      Server:
      - cloudflare
      Set-Cookie:
      - __cf_bm=j1HmyBbmOo_vbqZNBbzZ3YT3rhrsFkgJ9oQuviJq6ec-1763640358-1.0.1.1-7J4DSSib19X13jK70GwaQlYf_aXs.MciMb2ityRo6Xd4o.p0MTU1HBAJJ4CyyHjTl483JuWEIEBFiOpqJrhrgInMMO3f4rIj30FDVB0SntA;
        path=/; expires=Thu, 20-Nov-25 12:35:58 GMT; domain=.api.openai.com; HttpOnly;
        Secure; SameSite=None
      - _cfuvid=b3Ibgiaod9sVeSM84TmRwkxMXvNX_z8qpiHCpV2IaBc-1763640358812-0.0.1.1-604800000;
        path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
      Strict-Transport-Security:
      - max-age=31536000; includeSubDomains; preload
      Transfer-Encoding:
      - chunked
      X-Content-Type-Options:
      - nosniff
      access-control-expose-headers:
      - X-Request-ID
      alt-svc:
      - h3=":443"; ma=86400
      cf-cache-status:
      - DYNAMIC
      openai-organization:
      - traceloop
      openai-processing-ms:
      - '368'
      openai-project:
      - proj_tzz1TbPPOXaf6j9tEkVUBIAa
      openai-version:
      - '2020-10-01'
      x-envoy-upstream-service-time:
      - '471'
      x-openai-proxy-wasm:
      - v0.1
      x-ratelimit-limit-requests:
      - '30000'
      x-ratelimit-limit-tokens:
      - '150000000'
      x-ratelimit-remaining-requests:
      - '29999'
      x-ratelimit-remaining-tokens:
      - '149999990'
      x-ratelimit-reset-requests:
      - 2ms
      x-ratelimit-reset-tokens:
      - 0s
      x-request-id:
      - req_3c4257e04e00489ebf04c0c229286d89
    status:
      code: 200
      message: OK
- request:
    body: '{"session_id":"c4b3dbc5-a39e-466b-9d52-84e1c3ef6fa1","run_id":"bbe01911-2e87-4695-b5de-726489543051","data":{"agent_id":"testagent","db_type":null,"model_provider":"OpenAI","model_name":"OpenAIChat","model_id":"gpt-4o-mini","parser_model":null,"output_model":null,"has_tools":true,"has_memory":false,"has_culture":false,"has_reasoning":false,"has_knowledge":false,"has_input_schema":false,"has_output_schema":false,"has_team":false},"sdk_version":"2.2.13","type":"agent"}'
    headers:
      accept:
      - '*/*'
      accept-encoding:
      - gzip, deflate
      connection:
      - keep-alive
      content-length:
      - '471'
      content-type:
      - application/json
      host:
      - os-api.agno.com
      user-agent:
      - agno/2.2.13
    method: POST
    uri: https://os-api.agno.com/telemetry/runs
  response:
    body:
      string: '{"message":"Run creation acknowledged: bbe01911-2e87-4695-b5de-726489543051","status":"success"}'
    headers:
      Connection:
      - keep-alive
      Content-Length:
      - '96'
      Content-Type:
      - application/json
      Date:
      - Thu, 20 Nov 2025 12:05:59 GMT
      server:
      - uvicorn
    status:
      code: 201
      message: Created
version: 1


================================================
FILE: packages/opentelemetry-instrumentation-agno/tests/cassettes/test_agent/test_agent_run_streaming.yaml
================================================
interactions:
- request:
    body: '{"messages": [{"role": "developer", "content": "A streaming test agent"},
      {"role": "user", "content": "What is 10 + 5?"}], "model": "gpt-4o-mini", "stream":
      true, "stream_options": {"include_usage": true}}'
    headers:
      accept:
      - application/json
      accept-encoding:
      - gzip, deflate
      connection:
      - keep-alive
      content-length:
      - '190'
      content-type:
      - application/json
      host:
      - api.openai.com
      user-agent:
      - O
Download .txt
gitextract_mxgftuci/

├── .cz.toml
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   └── feature_request.yml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── ci.yml
│       └── release.yml
├── .gitignore
├── CHANGELOG.md
├── CLAUDE.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── GOVERNANCE.md
├── LICENSE
├── MAINTAINERS.md
├── README.md
├── SECURITY.md
├── nx.json
├── package.json
├── packages/
│   ├── .gitkeep
│   ├── opentelemetry-instrumentation-agno/
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── agno/
│   │   │           ├── __init__.py
│   │   │           ├── _tool_wrappers.py
│   │   │           ├── config.py
│   │   │           ├── streaming.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_agent/
│   │       │   │   ├── test_agent_arun_basic.yaml
│   │       │   │   ├── test_agent_arun_streaming.yaml
│   │       │   │   ├── test_agent_arun_streaming_with_tools.yaml
│   │       │   │   ├── test_agent_metrics.yaml
│   │       │   │   ├── test_agent_run_basic.yaml
│   │       │   │   ├── test_agent_run_streaming.yaml
│   │       │   │   ├── test_agent_run_streaming_with_tools.yaml
│   │       │   │   └── test_agent_with_tools.yaml
│   │       │   └── test_team/
│   │       │       ├── test_team_basic.yaml
│   │       │       └── test_team_discussion.yaml
│   │       ├── conftest.py
│   │       ├── test_agent.py
│   │       └── test_team.py
│   ├── opentelemetry-instrumentation-alephalpha/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── alephalpha/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   ├── pytest.ini
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   └── test_completion/
│   │       │       ├── test_alephalpha_completion.yaml
│   │       │       ├── test_alephalpha_completion_with_events_with_content.yaml
│   │       │       └── test_alephalpha_completion_with_events_with_no_content.yaml
│   │       ├── conftest.py
│   │       └── test_completion.py
│   ├── opentelemetry-instrumentation-anthropic/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── anthropic/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── streaming.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_bedrock_with_raw_response/
│   │       │   │   ├── test_async_anthropic_bedrock_beta_with_raw_response.yaml
│   │       │   │   ├── test_async_anthropic_bedrock_regular_create.yaml
│   │       │   │   └── test_async_anthropic_bedrock_with_raw_response.yaml
│   │       │   ├── test_completion/
│   │       │   │   ├── test_anthropic_completion_legacy.yaml
│   │       │   │   ├── test_anthropic_completion_with_events_with_content.yaml
│   │       │   │   └── test_anthropic_completion_with_events_with_no_content.yaml
│   │       │   ├── test_messages/
│   │       │   │   ├── test_anthropic_async_multi_modal_legacy.yaml
│   │       │   │   ├── test_anthropic_async_multi_modal_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_async_multi_modal_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_image_with_history.yaml
│   │       │   │   ├── test_anthropic_message_create_legacy.yaml
│   │       │   │   ├── test_anthropic_message_create_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_message_create_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_message_stream_manager_legacy.yaml
│   │       │   │   ├── test_anthropic_message_stream_manager_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_message_stream_manager_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_message_streaming_legacy.yaml
│   │       │   │   ├── test_anthropic_message_streaming_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_message_streaming_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_multi_modal_legacy.yaml
│   │       │   │   ├── test_anthropic_multi_modal_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_multi_modal_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_streaming_helper_methods_legacy.yaml
│   │       │   │   ├── test_anthropic_sync_streaming_helper_methods_legacy.yaml
│   │       │   │   ├── test_anthropic_text_stream_helper_method_legacy.yaml
│   │       │   │   ├── test_anthropic_tools_history_legacy.yaml
│   │       │   │   ├── test_anthropic_tools_history_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_tools_history_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_tools_legacy.yaml
│   │       │   │   ├── test_anthropic_tools_streaming_legacy.yaml
│   │       │   │   ├── test_anthropic_tools_streaming_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_tools_streaming_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_tools_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_tools_with_events_with_no_content.yaml
│   │       │   │   ├── test_async_anthropic_beta_message_stream_manager_legacy.yaml
│   │       │   │   ├── test_async_anthropic_message_create_legacy.yaml
│   │       │   │   ├── test_async_anthropic_message_create_with_events_with_content.yaml
│   │       │   │   ├── test_async_anthropic_message_create_with_events_with_no_content.yaml
│   │       │   │   ├── test_async_anthropic_message_stream_manager_legacy.yaml
│   │       │   │   ├── test_async_anthropic_message_stream_manager_with_events_with_content.yaml
│   │       │   │   ├── test_async_anthropic_message_stream_manager_with_events_with_no_content.yaml
│   │       │   │   ├── test_async_anthropic_message_streaming_legacy.yaml
│   │       │   │   ├── test_async_anthropic_message_streaming_with_events_with_content.yaml
│   │       │   │   ├── test_async_anthropic_message_streaming_with_events_with_no_content.yaml
│   │       │   │   ├── test_with_asyncio_run_legacy.yaml
│   │       │   │   ├── test_with_asyncio_run_with_events_with_content.yaml
│   │       │   │   └── test_with_asyncio_run_with_events_with_no_content.yaml
│   │       │   ├── test_prompt_caching/
│   │       │   │   ├── test_anthropic_prompt_caching_async_legacy.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_async_stream_legacy.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_async_stream_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_async_stream_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_async_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_async_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_legacy.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_stream_legacy.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_stream_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_stream_with_events_with_no_content.yaml
│   │       │   │   ├── test_anthropic_prompt_caching_with_events_with_content.yaml
│   │       │   │   └── test_anthropic_prompt_caching_with_events_with_no_content.yaml
│   │       │   ├── test_structured_outputs/
│   │       │   │   ├── test_anthropic_structured_outputs_legacy.yaml
│   │       │   │   ├── test_anthropic_structured_outputs_with_events_with_content.yaml
│   │       │   │   └── test_anthropic_structured_outputs_with_events_with_no_content.yaml
│   │       │   └── test_thinking/
│   │       │       ├── test_anthropic_thinking_legacy.yaml
│   │       │       ├── test_anthropic_thinking_streaming_legacy.yaml
│   │       │       ├── test_anthropic_thinking_streaming_with_events_with_content.yaml
│   │       │       ├── test_anthropic_thinking_streaming_with_events_with_no_content.yaml
│   │       │       ├── test_anthropic_thinking_with_events_with_content.yaml
│   │       │       ├── test_anthropic_thinking_with_events_with_no_content.yaml
│   │       │       ├── test_async_anthropic_thinking_legacy.yaml
│   │       │       ├── test_async_anthropic_thinking_streaming_legacy.yaml
│   │       │       ├── test_async_anthropic_thinking_streaming_with_events_with_content.yaml
│   │       │       ├── test_async_anthropic_thinking_streaming_with_events_with_no_content.yaml
│   │       │       ├── test_async_anthropic_thinking_with_events_with_content.yaml
│   │       │       └── test_async_anthropic_thinking_with_events_with_no_content.yaml
│   │       ├── conftest.py
│   │       ├── data/
│   │       │   └── 1024+tokens.txt
│   │       ├── test_bedrock_with_raw_response.py
│   │       ├── test_completion.py
│   │       ├── test_messages.py
│   │       ├── test_prompt_caching.py
│   │       ├── test_structured_outputs.py
│   │       ├── test_thinking.py
│   │       └── utils.py
│   ├── opentelemetry-instrumentation-bedrock/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── bedrock/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── guardrail.py
│   │   │           ├── prompt_caching.py
│   │   │           ├── reusable_streaming_body.py
│   │   │           ├── span_utils.py
│   │   │           ├── streaming_wrapper.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── metrics/
│   │       │   ├── __init__.py
│   │       │   ├── cassettes/
│   │       │   │   ├── test_bedrock_guardrails_metrics/
│   │       │   │   │   ├── test_titan_converse_guardrail.yaml
│   │       │   │   │   ├── test_titan_converse_stream_guardrail.yaml
│   │       │   │   │   ├── test_titan_invoke_model_guardrail.yaml
│   │       │   │   │   └── test_titan_invoke_stream_guardrail.yaml
│   │       │   │   ├── test_bedrock_metrics/
│   │       │   │   │   └── test_invoke_model_metrics.yaml
│   │       │   │   └── test_bedrock_prompt_caching_metrics/
│   │       │   │       └── test_prompt_cache.yaml
│   │       │   ├── conftest.py
│   │       │   ├── test_bedrock_guardrails_metrics.py
│   │       │   ├── test_bedrock_metrics.py
│   │       │   └── test_bedrock_prompt_caching_metrics.py
│   │       └── traces/
│   │           ├── __init__.py
│   │           ├── cassettes/
│   │           │   ├── test_ai21/
│   │           │   │   ├── test_ai21_j2_completion_string_content.yaml
│   │           │   │   ├── test_ai21_j2_completion_string_content_with_events_with_content.yaml
│   │           │   │   └── test_ai21_j2_completion_string_content_with_events_with_no_content.yaml
│   │           │   ├── test_anthropic/
│   │           │   │   ├── test_anthropic_2_completion.yaml
│   │           │   │   ├── test_anthropic_2_completion_with_events_with_content.yaml
│   │           │   │   ├── test_anthropic_2_completion_with_events_with_no_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_complex_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_complex_content_with_events_with_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_complex_content_with_events_with_no_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_streaming.yaml
│   │           │   │   ├── test_anthropic_3_completion_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_string_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_string_content_with_events_with_content.yaml
│   │           │   │   ├── test_anthropic_3_completion_string_content_with_events_with_no_content.yaml
│   │           │   │   ├── test_anthropic_converse_stream_with_tool_use.yaml
│   │           │   │   ├── test_anthropic_cross_region.yaml
│   │           │   │   ├── test_anthropic_cross_region_with_events_with_content.yaml
│   │           │   │   ├── test_anthropic_cross_region_with_events_with_no_content.yaml
│   │           │   │   ├── test_prompt_cache.yaml
│   │           │   │   ├── test_prompt_cache_with_events_with_content.yaml
│   │           │   │   └── test_prompt_cache_with_events_with_no_content.yaml
│   │           │   ├── test_cohere/
│   │           │   │   ├── test_cohere_completion.yaml
│   │           │   │   ├── test_cohere_completion_with_events_with_content.yaml
│   │           │   │   └── test_cohere_completion_with_events_with_no_content.yaml
│   │           │   ├── test_guardrails/
│   │           │   │   ├── test_guardrail_converse.yaml
│   │           │   │   ├── test_guardrail_converse_stream.yaml
│   │           │   │   ├── test_guardrail_invoke.yaml
│   │           │   │   └── test_guardrail_invoke_stream.yaml
│   │           │   ├── test_imported_model/
│   │           │   │   ├── test_imported_model_completion.yaml
│   │           │   │   ├── test_imported_model_completion_with_events_with_content.yaml
│   │           │   │   └── test_imported_model_completion_with_events_with_no_content.yaml
│   │           │   ├── test_meta/
│   │           │   │   ├── test_meta_converse.yaml
│   │           │   │   ├── test_meta_converse_stream.yaml
│   │           │   │   ├── test_meta_converse_stream_with_events_with_content.yaml
│   │           │   │   ├── test_meta_converse_stream_with_events_with_no_content.yaml
│   │           │   │   ├── test_meta_converse_with_events_with_content.yaml
│   │           │   │   ├── test_meta_converse_with_events_with_no_content.yaml
│   │           │   │   ├── test_meta_llama2_completion_string_content.yaml
│   │           │   │   ├── test_meta_llama2_completion_string_content_with_events_with_content.yaml
│   │           │   │   ├── test_meta_llama2_completion_string_content_with_events_with_no_content.yaml
│   │           │   │   ├── test_meta_llama3_completion.yaml
│   │           │   │   ├── test_meta_llama3_completion_with_events_with_content.yaml
│   │           │   │   └── test_meta_llama3_completion_with_events_with_no_content.yaml
│   │           │   ├── test_nova/
│   │           │   │   ├── test_nova_completion.yaml
│   │           │   │   ├── test_nova_completion_with_events_with_content.yaml
│   │           │   │   ├── test_nova_completion_with_events_with_no_content.yaml
│   │           │   │   ├── test_nova_converse.yaml
│   │           │   │   ├── test_nova_converse_stream.yaml
│   │           │   │   ├── test_nova_converse_stream_with_events_with_content.yaml
│   │           │   │   ├── test_nova_converse_stream_with_events_with_no_content.yaml
│   │           │   │   ├── test_nova_converse_with_events_with_content.yaml
│   │           │   │   ├── test_nova_converse_with_events_with_no_content.yaml
│   │           │   │   ├── test_nova_cross_region_invoke.yaml
│   │           │   │   ├── test_nova_cross_region_invoke_with_events_with_content.yaml
│   │           │   │   ├── test_nova_cross_region_invoke_with_events_with_no_content.yaml
│   │           │   │   ├── test_nova_invoke_stream.yaml
│   │           │   │   ├── test_nova_invoke_stream_with_events_with_content.yaml
│   │           │   │   └── test_nova_invoke_stream_with_events_with_no_content.yaml
│   │           │   └── test_titan/
│   │           │       ├── test_titan_completion.yaml
│   │           │       ├── test_titan_completion_with_events_with_content.yaml
│   │           │       ├── test_titan_completion_with_events_with_no_content.yaml
│   │           │       ├── test_titan_converse.yaml
│   │           │       ├── test_titan_converse_stream.yaml
│   │           │       ├── test_titan_converse_stream_with_events_with_content.yaml
│   │           │       ├── test_titan_converse_stream_with_events_with_no_content.yaml
│   │           │       ├── test_titan_converse_with_events_with_content.yaml
│   │           │       ├── test_titan_converse_with_events_with_no_content.yaml
│   │           │       ├── test_titan_invoke_stream.yaml
│   │           │       ├── test_titan_invoke_stream_with_events_with_content.yaml
│   │           │       └── test_titan_invoke_stream_with_events_with_no_content.yaml
│   │           ├── test_ai21.py
│   │           ├── test_anthropic.py
│   │           ├── test_cohere.py
│   │           ├── test_guardrails.py
│   │           ├── test_imported_model.py
│   │           ├── test_meta.py
│   │           ├── test_nova.py
│   │           └── test_titan.py
│   ├── opentelemetry-instrumentation-chromadb/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── chromadb/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── utils.py
│   │   │           ├── version.py
│   │   │           └── wrapper.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       └── test_query.py
│   ├── opentelemetry-instrumentation-cohere/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── cohere/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── streaming.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_chat/
│   │       │   │   ├── test_cohere_chat_legacy.yaml
│   │       │   │   ├── test_cohere_chat_legacy_async.yaml
│   │       │   │   ├── test_cohere_chat_legacy_with_streaming.yaml
│   │       │   │   ├── test_cohere_chat_legacy_with_streaming_async.yaml
│   │       │   │   ├── test_cohere_chat_with_events_with_content.yaml
│   │       │   │   ├── test_cohere_chat_with_events_with_content_async.yaml
│   │       │   │   ├── test_cohere_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_cohere_chat_with_events_with_no_content_async.yaml
│   │       │   │   ├── test_cohere_v2_chat_legacy.yaml
│   │       │   │   ├── test_cohere_v2_chat_legacy_with_streaming.yaml
│   │       │   │   ├── test_cohere_v2_chat_legacy_with_streaming_async.yaml
│   │       │   │   ├── test_cohere_v2_chat_legacy_with_tool_calls_and_history.yaml
│   │       │   │   ├── test_cohere_v2_chat_legacy_with_tool_calls_and_history_async.yaml
│   │       │   │   ├── test_cohere_v2_chat_legacy_with_tool_calls_and_streaming.yaml
│   │       │   │   └── test_cohere_v2_chat_legacy_with_tool_calls_and_streaming_async.yaml
│   │       │   ├── test_completion/
│   │       │   │   ├── test_cohere_completion_legacy.yaml
│   │       │   │   ├── test_cohere_completion_with_events_with_content.yaml
│   │       │   │   └── test_cohere_completion_with_events_with_no_content.yaml
│   │       │   ├── test_embed/
│   │       │   │   ├── test_cohere_v2_embed_legacy.yaml
│   │       │   │   └── test_cohere_v2_embed_legacy_async.yaml
│   │       │   └── test_rerank/
│   │       │       ├── test_cohere_rerank_legacy.yaml
│   │       │       ├── test_cohere_rerank_with_events_with_content.yaml
│   │       │       ├── test_cohere_rerank_with_events_with_no_content.yaml
│   │       │       ├── test_cohere_v2_rerank_legacy.yaml
│   │       │       └── test_cohere_v2_rerank_legacy_async.yaml
│   │       ├── conftest.py
│   │       ├── test_chat.py
│   │       ├── test_completion.py
│   │       ├── test_embed.py
│   │       └── test_rerank.py
│   ├── opentelemetry-instrumentation-crewai/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── crewai/
│   │   │           ├── __init__.py
│   │   │           ├── crewai_span_attributes.py
│   │   │           ├── instrumentation.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       └── test_crewai_instrumentation.py
│   ├── opentelemetry-instrumentation-google-generativeai/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── google_generativeai/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_handler.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   └── test_generate_content/
│   │       │       ├── test_client_spans.yaml
│   │       │       └── test_generate_metrics.yaml
│   │       ├── conftest.py
│   │       ├── test_generate_content.py
│   │       └── test_new_library_instrumentation.py
│   ├── opentelemetry-instrumentation-groq/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── groq/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       └── traces/
│   │           ├── cassettes/
│   │           │   └── test_chat_tracing/
│   │           │       ├── test_async_chat_legacy.yaml
│   │           │       ├── test_async_chat_with_events_with_content.yaml
│   │           │       ├── test_async_chat_with_events_with_no_content.yaml
│   │           │       ├── test_chat_legacy.yaml
│   │           │       ├── test_chat_streaming_legacy.yaml
│   │           │       ├── test_chat_streaming_with_events_with_content.yaml
│   │           │       ├── test_chat_streaming_with_events_with_no_content.yaml
│   │           │       ├── test_chat_with_events_with_content.yaml
│   │           │       └── test_chat_with_events_with_no_content.yaml
│   │           ├── conftest.py
│   │           └── test_chat_tracing.py
│   ├── opentelemetry-instrumentation-haystack/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── haystack/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── utils.py
│   │   │           ├── version.py
│   │   │           ├── wrap_node.py
│   │   │           ├── wrap_openai.py
│   │   │           └── wrap_pipeline.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   └── test_simple_pipeline/
│   │       │       └── test_haystack.yaml
│   │       ├── conftest.py
│   │       ├── test_placeholder.py
│   │       └── test_simple_pipeline.py
│   ├── opentelemetry-instrumentation-lancedb/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── lancedb/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── utils.py
│   │   │           ├── version.py
│   │   │           └── wrapper.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       └── test_query.py
│   ├── opentelemetry-instrumentation-langchain/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── langchain/
│   │   │           ├── __init__.py
│   │   │           ├── callback_handler.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── langgraph_utils.py
│   │   │           ├── patch.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           ├── vendor_detection.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_agents/
│   │       │   │   ├── test_agents.yaml
│   │       │   │   ├── test_agents_with_events_with_content.yaml
│   │       │   │   └── test_agents_with_events_with_no_content.yaml
│   │       │   ├── test_chains/
│   │       │   │   ├── test_asequential_chain.yaml
│   │       │   │   ├── test_asequential_chain_with_events_with_content.yaml
│   │       │   │   ├── test_asequential_chain_with_events_with_no_content.yaml
│   │       │   │   ├── test_astream.yaml
│   │       │   │   ├── test_astream_with_events_with_content.yaml
│   │       │   │   ├── test_astream_with_events_with_no_content.yaml
│   │       │   │   ├── test_sequential_chain.yaml
│   │       │   │   ├── test_sequential_chain_with_events_with_content.yaml
│   │       │   │   ├── test_sequential_chain_with_events_with_no_content.yaml
│   │       │   │   ├── test_stream.yaml
│   │       │   │   ├── test_stream_with_events_with_content.yaml
│   │       │   │   └── test_stream_with_events_with_no_content.yaml
│   │       │   ├── test_documents_chains/
│   │       │   │   ├── test_sequential_chain.yaml
│   │       │   │   ├── test_sequential_chain_with_events_with_content.yaml
│   │       │   │   └── test_sequential_chain_with_events_with_no_content.yaml
│   │       │   ├── test_langgraph/
│   │       │   │   ├── test_langgraph_ainvoke.yaml
│   │       │   │   ├── test_langgraph_double_ainvoke.yaml
│   │       │   │   ├── test_langgraph_double_invoke.yaml
│   │       │   │   └── test_langgraph_invoke.yaml
│   │       │   ├── test_lcel/
│   │       │   │   ├── test_async_invoke.yaml
│   │       │   │   ├── test_async_invoke_with_events_with_content.yaml
│   │       │   │   ├── test_async_invoke_with_events_with_no_content.yaml
│   │       │   │   ├── test_async_lcel.yaml
│   │       │   │   ├── test_async_lcel_with_events_with_content.yaml
│   │       │   │   ├── test_async_lcel_with_events_with_no_content.yaml
│   │       │   │   ├── test_invoke.yaml
│   │       │   │   ├── test_invoke_with_events_with_content.yaml
│   │       │   │   ├── test_invoke_with_events_with_no_content.yaml
│   │       │   │   ├── test_lcel_with_datetime.yaml
│   │       │   │   ├── test_lcel_with_datetime_with_events_with_content.yaml
│   │       │   │   ├── test_lcel_with_datetime_with_events_with_no_content.yaml
│   │       │   │   ├── test_simple_lcel.yaml
│   │       │   │   ├── test_simple_lcel_with_events_with_content.yaml
│   │       │   │   ├── test_simple_lcel_with_events_with_no_content.yaml
│   │       │   │   ├── test_stream.yaml
│   │       │   │   ├── test_stream_with_events_with_content.yaml
│   │       │   │   └── test_stream_with_events_with_no_content.yaml
│   │       │   ├── test_llms/
│   │       │   │   ├── test_anthropic.yaml
│   │       │   │   ├── test_anthropic_with_events_with_content.yaml
│   │       │   │   ├── test_anthropic_with_events_with_no_content.yaml
│   │       │   │   ├── test_bedrock.yaml
│   │       │   │   ├── test_bedrock_with_events_with_content.yaml
│   │       │   │   ├── test_bedrock_with_events_with_no_content.yaml
│   │       │   │   ├── test_custom_llm.yaml
│   │       │   │   ├── test_custom_llm_with_events_with_content.yaml
│   │       │   │   ├── test_custom_llm_with_events_with_no_content.yaml
│   │       │   │   ├── test_openai.yaml
│   │       │   │   ├── test_openai_functions.yaml
│   │       │   │   ├── test_openai_functions_with_events_with_content.yaml
│   │       │   │   ├── test_openai_functions_with_events_with_no_content.yaml
│   │       │   │   ├── test_openai_with_events_with_content.yaml
│   │       │   │   ├── test_openai_with_events_with_no_content.yaml
│   │       │   │   ├── test_trace_propagation[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async_with_events_with_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async_with_events_with_content[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async_with_events_with_content[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async_with_events_with_no_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async_with_events_with_no_content[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_async_with_events_with_no_content[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async_with_events_with_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async_with_events_with_content[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async_with_events_with_content[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async_with_events_with_no_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async_with_events_with_no_content[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_async_with_events_with_no_content[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_with_events_with_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_with_events_with_content[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_with_events_with_content[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_with_events_with_no_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_with_events_with_no_content[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_stream_with_events_with_no_content[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_with_events_with_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_with_events_with_content[OpenAI].yaml
│   │       │   │   ├── test_trace_propagation_with_events_with_content[VLLMOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_with_events_with_no_content[ChatOpenAI].yaml
│   │       │   │   ├── test_trace_propagation_with_events_with_no_content[OpenAI].yaml
│   │       │   │   └── test_trace_propagation_with_events_with_no_content[VLLMOpenAI].yaml
│   │       │   ├── test_structured_output/
│   │       │   │   ├── test_structured_output.yaml
│   │       │   │   ├── test_structured_output_with_events_with_content.yaml
│   │       │   │   └── test_structured_output_with_events_with_no_content.yaml
│   │       │   └── test_tool_calls/
│   │       │       ├── test_parallel_tool_calls.yaml
│   │       │       ├── test_parallel_tool_calls_with_events_with_content.yaml
│   │       │       ├── test_parallel_tool_calls_with_events_with_no_content.yaml
│   │       │       ├── test_tool_calls.yaml
│   │       │       ├── test_tool_calls_anthropic_text_block.yaml
│   │       │       ├── test_tool_calls_anthropic_text_block_and_history.yaml
│   │       │       ├── test_tool_calls_anthropic_text_block_and_history_with_events_with_content.yaml
│   │       │       ├── test_tool_calls_anthropic_text_block_and_history_with_events_with_no_content.yaml
│   │       │       ├── test_tool_calls_anthropic_text_block_with_events_with_content.yaml
│   │       │       ├── test_tool_calls_anthropic_text_block_with_events_with_no_content.yaml
│   │       │       ├── test_tool_calls_with_events_with_content.yaml
│   │       │       ├── test_tool_calls_with_events_with_no_content.yaml
│   │       │       ├── test_tool_calls_with_history.yaml
│   │       │       ├── test_tool_calls_with_history_with_events_with_content.yaml
│   │       │       ├── test_tool_calls_with_history_with_events_with_no_content.yaml
│   │       │       └── test_tool_message_with_tool_call_id.yaml
│   │       ├── conftest.py
│   │       ├── metrics/
│   │       │   ├── cassettes/
│   │       │   │   └── test_langchain_metrics/
│   │       │   │       ├── test_langgraph_metrics.yaml
│   │       │   │       ├── test_llm_chain_metrics.yaml
│   │       │   │       ├── test_llm_chain_metrics_with_none_llm_output.yaml
│   │       │   │       └── test_llm_chain_streaming_metrics.yaml
│   │       │   └── test_langchain_metrics.py
│   │       ├── test_agents.py
│   │       ├── test_batch_metadata.py
│   │       ├── test_chains.py
│   │       ├── test_documents_chains.py
│   │       ├── test_generation_role_extraction.py
│   │       ├── test_langgraph.py
│   │       ├── test_lcel.py
│   │       ├── test_llms.py
│   │       ├── test_non_ascii_content.py
│   │       ├── test_structured_output.py
│   │       ├── test_tool_call_content.py
│   │       └── test_tool_calls.py
│   ├── opentelemetry-instrumentation-llamaindex/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── data/
│   │   │   └── paul_graham/
│   │   │       └── paul_graham_essay.txt
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── llamaindex/
│   │   │           ├── __init__.py
│   │   │           ├── base_agent_instrumentor.py
│   │   │           ├── base_embedding_instrumentor.py
│   │   │           ├── base_retriever_instrumentor.py
│   │   │           ├── base_synthesizer_instrumentor.py
│   │   │           ├── base_tool_instrumentor.py
│   │   │           ├── config.py
│   │   │           ├── custom_llm_instrumentor.py
│   │   │           ├── dispatcher_wrapper.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── llamaparse_instrumentor.py
│   │   │           ├── query_pipeline_instrumentor.py
│   │   │           ├── retriever_query_engine_instrumentor.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_agents/
│   │       │   │   ├── test_agent_with_multiple_tools.yaml
│   │       │   │   ├── test_agent_with_multiple_tools_with_events_with_content.yaml
│   │       │   │   ├── test_agent_with_multiple_tools_with_events_with_no_content.yaml
│   │       │   │   ├── test_agent_with_query_tool.yaml
│   │       │   │   ├── test_agent_with_query_tool_with_events_with_content.yaml
│   │       │   │   ├── test_agent_with_query_tool_with_events_with_no_content.yaml
│   │       │   │   ├── test_agents_and_tools.yaml
│   │       │   │   ├── test_agents_and_tools_with_events_with_content.yaml
│   │       │   │   └── test_agents_and_tools_with_events_with_no_content.yaml
│   │       │   ├── test_chroma_vector_store/
│   │       │   │   └── test_rag_with_chroma.yaml
│   │       │   ├── test_llamaparse/
│   │       │   │   ├── test_llamaparse_aload_data_instrumentation.yaml
│   │       │   │   └── test_llamaparse_load_data_instrumentation.yaml
│   │       │   ├── test_query_pipeline/
│   │       │   │   └── test_query_pipeline.yaml
│   │       │   └── test_structured_llm/
│   │       │       ├── test_structured_llm_achat_model_attributes.yaml
│   │       │       └── test_structured_llm_model_attributes.yaml
│   │       ├── conftest.py
│   │       ├── test_agents.py
│   │       ├── test_chroma_vector_store.py
│   │       ├── test_instrumentation.py
│   │       ├── test_llamaparse.py
│   │       └── test_structured_llm.py
│   ├── opentelemetry-instrumentation-marqo/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── marqo/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── utils.py
│   │   │           ├── version.py
│   │   │           └── wrapper.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   └── test_query/
│   │       │       ├── test_marqo_add_documents.yaml
│   │       │       ├── test_marqo_delete_documents.yaml
│   │       │       └── test_marqo_search.yaml
│   │       ├── conftest.py
│   │       └── test_query.py
│   ├── opentelemetry-instrumentation-mcp/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── mcp/
│   │   │           ├── __init__.py
│   │   │           ├── fastmcp_instrumentation.py
│   │   │           ├── instrumentation.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── conftest.py
│   │       ├── test_fastmcp.py
│   │       ├── test_fastmcp_attributes.py
│   │       └── test_fastmcp_server_span.py
│   ├── opentelemetry-instrumentation-milvus/
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── milvus/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── utils.py
│   │   │           ├── version.py
│   │   │           └── wrapper.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── test_error.py
│   │       ├── test_hybrid_search.py
│   │       ├── test_query.py
│   │       ├── test_search.py
│   │       └── utils.py
│   ├── opentelemetry-instrumentation-mistralai/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── mistralai/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_chat/
│   │       │   │   ├── test_mistralai_async_chat_legacy.yaml
│   │       │   │   ├── test_mistralai_async_chat_with_events_with_content.yaml
│   │       │   │   ├── test_mistralai_async_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_mistralai_async_streaming_chat_legacy.yaml
│   │       │   │   ├── test_mistralai_async_streaming_chat_with_events_with_content.yaml
│   │       │   │   ├── test_mistralai_async_streaming_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_mistralai_chat_legacy.yaml
│   │       │   │   ├── test_mistralai_chat_with_events_with_content.yaml
│   │       │   │   ├── test_mistralai_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_mistralai_streaming_chat_legacy.yaml
│   │       │   │   ├── test_mistralai_streaming_chat_with_events_with_content.yaml
│   │       │   │   └── test_mistralai_streaming_chat_with_events_with_no_content.yaml
│   │       │   └── test_embeddings/
│   │       │       ├── test_mistral_async_embeddings_legacy.yaml
│   │       │       ├── test_mistral_async_embeddings_with_events_with_content.yaml
│   │       │       ├── test_mistral_async_embeddings_with_events_with_no_content.yaml
│   │       │       ├── test_mistral_embeddings_legacy.yaml
│   │       │       ├── test_mistral_embeddings_with_events_with_content.yaml
│   │       │       └── test_mistral_embeddings_with_events_with_no_content.yaml
│   │       ├── conftest.py
│   │       ├── test_chat.py
│   │       └── test_embeddings.py
│   ├── opentelemetry-instrumentation-ollama/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── ollama/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_chat/
│   │       │   │   ├── test_ollama_async_chat_legacy.yaml
│   │       │   │   ├── test_ollama_async_chat_with_events_with_content.yaml
│   │       │   │   ├── test_ollama_async_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_ollama_async_streaming_chat_legacy.yaml
│   │       │   │   ├── test_ollama_async_streaming_chat_with_events_with_content.yaml
│   │       │   │   ├── test_ollama_async_streaming_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_ollama_chat_legacy.yaml
│   │       │   │   ├── test_ollama_chat_tool_calls_legacy.yaml
│   │       │   │   ├── test_ollama_chat_tool_calls_with_events_with_content.yaml
│   │       │   │   ├── test_ollama_chat_tool_calls_with_events_with_no_content.yaml
│   │       │   │   ├── test_ollama_chat_with_events_with_content.yaml
│   │       │   │   ├── test_ollama_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_ollama_streaming_chat_legacy.yaml
│   │       │   │   ├── test_ollama_streaming_chat_with_events_with_content.yaml
│   │       │   │   └── test_ollama_streaming_chat_with_events_with_no_content.yaml
│   │       │   ├── test_embeddings/
│   │       │   │   ├── test_ollama_embeddings_legacy.yaml
│   │       │   │   ├── test_ollama_embeddings_with_events_with_content.yaml
│   │       │   │   └── test_ollama_embeddings_with_events_with_no_content.yaml
│   │       │   ├── test_generation/
│   │       │   │   ├── test_ollama_async_generation_legacy.yaml
│   │       │   │   ├── test_ollama_async_generation_with_events_with_content.yaml
│   │       │   │   ├── test_ollama_async_generation_with_events_with_no_content.yaml
│   │       │   │   ├── test_ollama_async_streaming_generation_legacy.yaml
│   │       │   │   ├── test_ollama_async_streaming_generation_with_events_with_content.yaml
│   │       │   │   ├── test_ollama_async_streaming_generation_with_events_with_no_content.yaml
│   │       │   │   ├── test_ollama_generation_legacy.yaml
│   │       │   │   ├── test_ollama_generation_with_events_with_content.yaml
│   │       │   │   ├── test_ollama_generation_with_events_with_no_content.yaml
│   │       │   │   ├── test_ollama_streaming_generation_legacy.yaml
│   │       │   │   ├── test_ollama_streaming_generation_with_events_with_content.yaml
│   │       │   │   └── test_ollama_streaming_generation_with_events_with_no_content.yaml
│   │       │   └── test_ollama_metrics/
│   │       │       ├── test_ollama_operation_duration_includes_model_attribute.yaml
│   │       │       ├── test_ollama_streaming_metrics.yaml
│   │       │       └── test_ollama_streaming_time_to_generate_metrics.yaml
│   │       ├── conftest.py
│   │       ├── test_chat.py
│   │       ├── test_embeddings.py
│   │       ├── test_generation.py
│   │       └── test_ollama_metrics.py
│   ├── opentelemetry-instrumentation-openai/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── openai/
│   │   │           ├── __init__.py
│   │   │           ├── shared/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── chat_wrappers.py
│   │   │           │   ├── completion_wrappers.py
│   │   │           │   ├── config.py
│   │   │           │   ├── embeddings_wrappers.py
│   │   │           │   ├── event_emitter.py
│   │   │           │   ├── event_models.py
│   │   │           │   ├── image_gen_wrappers.py
│   │   │           │   └── span_utils.py
│   │   │           ├── utils.py
│   │   │           ├── v0/
│   │   │           │   └── __init__.py
│   │   │           ├── v1/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── assistant_wrappers.py
│   │   │           │   ├── event_handler_wrapper.py
│   │   │           │   ├── realtime_wrappers.py
│   │   │           │   └── responses_wrappers.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   ├── pytest.ini
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── data/
│   │       │   └── 1024+tokens.txt
│   │       ├── metrics/
│   │       │   ├── __init__.py
│   │       │   ├── cassettes/
│   │       │   │   └── test_openai_metrics/
│   │       │   │       ├── test_chat_completion_metrics.yaml
│   │       │   │       ├── test_chat_completion_metrics_stream.yaml
│   │       │   │       ├── test_chat_parsed_completion_metrics.yaml
│   │       │   │       ├── test_chat_streaming_metrics.yaml
│   │       │   │       ├── test_embeddings_metrics.yaml
│   │       │   │       └── test_image_gen_metrics.yaml
│   │       │   ├── conftest.py
│   │       │   └── test_openai_metrics.py
│   │       └── traces/
│   │           ├── __init__.py
│   │           ├── cassettes/
│   │           │   ├── test_assistant/
│   │           │   │   ├── test_existing_assistant.yaml
│   │           │   │   ├── test_existing_assistant_with_events_with_content.yaml
│   │           │   │   ├── test_existing_assistant_with_events_with_no_content.yaml
│   │           │   │   ├── test_new_assistant.yaml
│   │           │   │   ├── test_new_assistant_with_events_with_content.yaml
│   │           │   │   ├── test_new_assistant_with_events_with_no_content.yaml
│   │           │   │   ├── test_new_assistant_with_polling.yaml
│   │           │   │   ├── test_new_assistant_with_polling_with_events_with_content.yaml
│   │           │   │   ├── test_new_assistant_with_polling_with_events_with_no_content.yaml
│   │           │   │   ├── test_streaming_existing_assistant.yaml
│   │           │   │   ├── test_streaming_existing_assistant_with_events_with_content.yaml
│   │           │   │   ├── test_streaming_existing_assistant_with_events_with_no_content.yaml
│   │           │   │   ├── test_streaming_new_assistant.yaml
│   │           │   │   ├── test_streaming_new_assistant_with_events_with_content.yaml
│   │           │   │   └── test_streaming_new_assistant_with_events_with_no_content.yaml
│   │           │   ├── test_azure/
│   │           │   │   ├── test_chat.yaml
│   │           │   │   ├── test_chat_async_streaming.yaml
│   │           │   │   ├── test_chat_async_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_chat_async_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_content_filtering.yaml
│   │           │   │   ├── test_chat_content_filtering_with_events_with_content.yaml
│   │           │   │   ├── test_chat_content_filtering_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_reasoning.yaml
│   │           │   │   ├── test_chat_streaming.yaml
│   │           │   │   ├── test_chat_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_chat_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_with_events_with_content.yaml
│   │           │   │   ├── test_chat_with_events_with_no_content.yaml
│   │           │   │   ├── test_prompt_content_filtering.yaml
│   │           │   │   ├── test_prompt_content_filtering_with_events_with_content.yaml
│   │           │   │   └── test_prompt_content_filtering_with_events_with_no_content.yaml
│   │           │   ├── test_chat/
│   │           │   │   ├── test_chat.yaml
│   │           │   │   ├── test_chat_async_context_propagation.yaml
│   │           │   │   ├── test_chat_async_context_propagation_with_events_with_content.yaml
│   │           │   │   ├── test_chat_async_context_propagation_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_async_streaming.yaml
│   │           │   │   ├── test_chat_async_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_chat_async_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_context_propagation.yaml
│   │           │   │   ├── test_chat_context_propagation_with_events_with_content.yaml
│   │           │   │   ├── test_chat_context_propagation_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_history_message_dict.yaml
│   │           │   │   ├── test_chat_history_message_pydantic.yaml
│   │           │   │   ├── test_chat_pydantic_based_tool_calls.yaml
│   │           │   │   ├── test_chat_pydantic_based_tool_calls_with_events_with_content.yaml
│   │           │   │   ├── test_chat_pydantic_based_tool_calls_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_reasoning.yaml
│   │           │   │   ├── test_chat_streaming.yaml
│   │           │   │   ├── test_chat_streaming_exception_during_consumption.yaml
│   │           │   │   ├── test_chat_streaming_memory_leak_prevention.yaml
│   │           │   │   ├── test_chat_streaming_not_consumed.yaml
│   │           │   │   ├── test_chat_streaming_partial_consumption.yaml
│   │           │   │   ├── test_chat_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_chat_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_tool_calls.yaml
│   │           │   │   ├── test_chat_tool_calls_with_events_with_content.yaml
│   │           │   │   ├── test_chat_tool_calls_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_tools.yaml
│   │           │   │   ├── test_chat_tools_async_streaming.yaml
│   │           │   │   ├── test_chat_tools_async_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_chat_tools_async_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_tools_streaming.yaml
│   │           │   │   ├── test_chat_tools_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_chat_tools_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_tools_with_events_with_content.yaml
│   │           │   │   ├── test_chat_tools_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_with_events_with_content.yaml
│   │           │   │   ├── test_chat_with_events_with_no_content.yaml
│   │           │   │   ├── test_chat_with_service_tier.yaml
│   │           │   │   ├── test_with_asyncio_run.yaml
│   │           │   │   ├── test_with_asyncio_run_with_events_with_content.yaml
│   │           │   │   └── test_with_asyncio_run_with_events_with_no_content.yaml
│   │           │   ├── test_chat_parse/
│   │           │   │   ├── test_async_parsed_completion.yaml
│   │           │   │   ├── test_async_parsed_completion_with_events_with_content.yaml
│   │           │   │   ├── test_async_parsed_completion_with_events_with_no_content.yaml
│   │           │   │   ├── test_async_parsed_refused_completion.yaml
│   │           │   │   ├── test_async_parsed_refused_completion_with_events_with_content.yaml
│   │           │   │   ├── test_async_parsed_refused_completion_with_events_with_no_content.yaml
│   │           │   │   ├── test_parsed_completion.yaml
│   │           │   │   ├── test_parsed_completion_with_events_with_content.yaml
│   │           │   │   ├── test_parsed_completion_with_events_with_no_content.yaml
│   │           │   │   ├── test_parsed_refused_completion.yaml
│   │           │   │   ├── test_parsed_refused_completion_with_events_with_content.yaml
│   │           │   │   └── test_parsed_refused_completion_with_events_with_no_content.yaml
│   │           │   ├── test_chat_response_format/
│   │           │   │   ├── test_async_chat_response_format.yaml
│   │           │   │   └── test_chat_response_format.yaml
│   │           │   ├── test_completions/
│   │           │   │   ├── test_async_completion.yaml
│   │           │   │   ├── test_async_completion_context_propagation.yaml
│   │           │   │   ├── test_async_completion_context_propagation_with_events_with_content.yaml
│   │           │   │   ├── test_async_completion_context_propagation_with_events_with_no_content.yaml
│   │           │   │   ├── test_async_completion_streaming.yaml
│   │           │   │   ├── test_async_completion_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_async_completion_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_async_completion_with_events_with_content.yaml
│   │           │   │   ├── test_async_completion_with_events_with_no_content.yaml
│   │           │   │   ├── test_completion.yaml
│   │           │   │   ├── test_completion_context_propagation.yaml
│   │           │   │   ├── test_completion_context_propagation_with_events_with_content.yaml
│   │           │   │   ├── test_completion_context_propagation_with_events_with_no_content.yaml
│   │           │   │   ├── test_completion_langchain_style.yaml
│   │           │   │   ├── test_completion_langchain_style_with_events_with_content.yaml
│   │           │   │   ├── test_completion_langchain_style_with_events_with_no_content.yaml
│   │           │   │   ├── test_completion_streaming.yaml
│   │           │   │   ├── test_completion_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_completion_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_completion_with_events_with_content.yaml
│   │           │   │   └── test_completion_with_events_with_no_content.yaml
│   │           │   ├── test_embeddings/
│   │           │   │   ├── test_async_embeddings_context_propagation.yaml
│   │           │   │   ├── test_async_embeddings_context_propagation_with_events_with_content.yaml
│   │           │   │   ├── test_async_embeddings_context_propagation_with_events_with_no_content.yaml
│   │           │   │   ├── test_azure_openai_embeddings.yaml
│   │           │   │   ├── test_azure_openai_embeddings_with_events_with_content.yaml
│   │           │   │   ├── test_azure_openai_embeddings_with_events_with_no_content.yaml
│   │           │   │   ├── test_embeddings.yaml
│   │           │   │   ├── test_embeddings_context_propagation.yaml
│   │           │   │   ├── test_embeddings_context_propagation_with_events_with_content.yaml
│   │           │   │   ├── test_embeddings_context_propagation_with_events_with_no_content.yaml
│   │           │   │   ├── test_embeddings_with_events_with_content.yaml
│   │           │   │   ├── test_embeddings_with_events_with_no_content.yaml
│   │           │   │   ├── test_embeddings_with_raw_response.yaml
│   │           │   │   ├── test_embeddings_with_raw_response_with_events_with_content.yaml
│   │           │   │   └── test_embeddings_with_raw_response_with_events_with_no_content.yaml
│   │           │   ├── test_exceptions/
│   │           │   │   └── test_exception_in_instrumentation_suppressed.yaml
│   │           │   ├── test_functions/
│   │           │   │   ├── test_open_ai_function_calls.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_parallel.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_parallel_with_events_with_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_parallel_with_events_with_no_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_streaming.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_streaming_parallel.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_streaming_parallel_with_events_with_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_streaming_parallel_with_events_with_no_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_streaming_with_events_with_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_streaming_with_events_with_no_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_with_events_with_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_tools_with_events_with_no_content.yaml
│   │           │   │   ├── test_open_ai_function_calls_with_events_with_content.yaml
│   │           │   │   └── test_open_ai_function_calls_with_events_with_no_content.yaml
│   │           │   ├── test_prompt_caching/
│   │           │   │   ├── test_openai_prompt_caching.yaml
│   │           │   │   ├── test_openai_prompt_caching_async.yaml
│   │           │   │   ├── test_openai_prompt_caching_async_with_events_with_content.yaml
│   │           │   │   ├── test_openai_prompt_caching_async_with_events_with_no_content.yaml
│   │           │   │   ├── test_openai_prompt_caching_with_events_with_content.yaml
│   │           │   │   └── test_openai_prompt_caching_with_events_with_no_content.yaml
│   │           │   ├── test_responses/
│   │           │   │   ├── test_responses.yaml
│   │           │   │   ├── test_responses_reasoning.yaml
│   │           │   │   ├── test_responses_reasoning_dict_issue.yaml
│   │           │   │   ├── test_responses_streaming.yaml
│   │           │   │   ├── test_responses_streaming_async.yaml
│   │           │   │   ├── test_responses_streaming_async_with_context_manager.yaml
│   │           │   │   ├── test_responses_streaming_async_with_parent_span.yaml
│   │           │   │   ├── test_responses_streaming_with_content.yaml
│   │           │   │   ├── test_responses_streaming_with_context_manager.yaml
│   │           │   │   ├── test_responses_streaming_with_parent_span.yaml
│   │           │   │   ├── test_responses_tool_calls.yaml
│   │           │   │   ├── test_responses_with_input_history.yaml
│   │           │   │   ├── test_responses_with_request_params.yaml
│   │           │   │   └── test_responses_with_service_tier.yaml
│   │           │   ├── test_streaming_with_api_usage/
│   │           │   │   ├── test_streaming_with_api_usage_and_events.yaml
│   │           │   │   └── test_streaming_with_api_usage_capture.yaml
│   │           │   └── test_vision/
│   │           │       ├── test_vision.yaml
│   │           │       ├── test_vision_base64.yaml
│   │           │       ├── test_vision_base64_with_events_with_content.yaml
│   │           │       ├── test_vision_base64_with_events_with_no_content.yaml
│   │           │       ├── test_vision_with_events_with_content.yaml
│   │           │       └── test_vision_with_events_with_no_content.yaml
│   │           ├── conftest.py
│   │           ├── test_assistant.py
│   │           ├── test_azure.py
│   │           ├── test_chat.py
│   │           ├── test_chat_parse.py
│   │           ├── test_chat_response_format.py
│   │           ├── test_completions.py
│   │           ├── test_embedding_metrics_handler.py
│   │           ├── test_embeddings.py
│   │           ├── test_exceptions.py
│   │           ├── test_functions.py
│   │           ├── test_prompt_caching.py
│   │           ├── test_realtime.py
│   │           ├── test_responses.py
│   │           ├── test_span_context_propagation.py
│   │           ├── test_streaming_with_api_usage.py
│   │           ├── test_vision.py
│   │           └── utils.py
│   ├── opentelemetry-instrumentation-openai-agents/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── openai_agents/
│   │   │           ├── __init__.py
│   │   │           ├── _hooks.py
│   │   │           ├── _realtime_wrappers.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_complete_handoff_with_tools/
│   │       │   │   └── test_router_analytics_complete_workflow.yaml
│   │       │   ├── test_openai_agents/
│   │       │   │   ├── test_agent_name_propagation_to_agent_spans.yaml
│   │       │   │   ├── test_agent_spans.yaml
│   │       │   │   ├── test_agent_with_function_tool_spans.yaml
│   │       │   │   ├── test_agent_with_handoff_spans.yaml
│   │       │   │   ├── test_agent_with_web_search_tool_spans.yaml
│   │       │   │   ├── test_dict_content_serialization.yaml
│   │       │   │   ├── test_generate_metrics.yaml
│   │       │   │   ├── test_music_composer_handoff_hierarchy.yaml
│   │       │   │   ├── test_recipe_workflow_agent_handoffs_with_function_tools.yaml
│   │       │   │   └── test_tool_call_and_result_attributes.yaml
│   │       │   └── test_recipe_agents_hierarchy/
│   │       │       └── test_recipe_agents_hierarchy.yaml
│   │       ├── conftest.py
│   │       ├── test_complete_handoff_with_tools.py
│   │       ├── test_openai_agents.py
│   │       ├── test_realtime.py
│   │       ├── test_realtime_session.py
│   │       └── test_recipe_agents_hierarchy.py
│   ├── opentelemetry-instrumentation-pinecone/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── pinecone/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── query_handlers.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   └── test_query/
│   │       │       └── test_pinecone_retrieval.yaml
│   │       ├── conftest.py
│   │       └── test_query.py
│   ├── opentelemetry-instrumentation-qdrant/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── qdrant/
│   │   │           ├── __init__.py
│   │   │           ├── async_qdrant_client_methods.json
│   │   │           ├── config.py
│   │   │           ├── qdrant_client_methods.json
│   │   │           ├── utils.py
│   │   │           ├── version.py
│   │   │           └── wrapper.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       └── test_qdrant_instrumentation.py
│   ├── opentelemetry-instrumentation-replicate/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── replicate/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_image_generation/
│   │       │   │   ├── test_replicate_image_generation_legacy.yaml
│   │       │   │   ├── test_replicate_image_generation_predictions_legacy.yaml
│   │       │   │   ├── test_replicate_image_generation_predictions_with_events_with_content.yaml
│   │       │   │   ├── test_replicate_image_generation_predictions_with_events_with_no_content.yaml
│   │       │   │   ├── test_replicate_image_generation_with_events_with_content.yaml
│   │       │   │   └── test_replicate_image_generation_with_events_with_no_content.yaml
│   │       │   └── test_llama/
│   │       │       ├── test_replicate_llama_stream_legacy.yaml
│   │       │       ├── test_replicate_llama_stream_with_events_with_content.yaml
│   │       │       └── test_replicate_llama_stream_with_events_with_no_content.yaml
│   │       ├── conftest.py
│   │       ├── test_image_generation.py
│   │       └── test_llama.py
│   ├── opentelemetry-instrumentation-sagemaker/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── sagemaker/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_handler.py
│   │   │           ├── event_models.py
│   │   │           ├── reusable_streaming_body.py
│   │   │           ├── span_utils.py
│   │   │           ├── streaming_wrapper.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   └── test_invocation/
│   │       │       ├── test_sagemaker_completion_string_content_legacy.yaml
│   │       │       ├── test_sagemaker_completion_string_content_with_events_with_content.yaml
│   │       │       └── test_sagemaker_completion_string_content_with_events_with_no_content.yaml
│   │       ├── conftest.py
│   │       └── test_invocation.py
│   ├── opentelemetry-instrumentation-together/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── together/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_handler.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   ├── pytest.ini
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_chat/
│   │       │   │   ├── test_together_chat_legacy.yaml
│   │       │   │   ├── test_together_chat_with_events_with_content.yaml
│   │       │   │   └── test_together_chat_with_events_with_no_content.yaml
│   │       │   └── test_completion/
│   │       │       ├── test_together_completion_legacy.yaml
│   │       │       ├── test_together_completion_with_events_with_content.yaml
│   │       │       └── test_together_completion_with_events_with_no_content.yaml
│   │       ├── conftest.py
│   │       ├── test_chat.py
│   │       └── test_completion.py
│   ├── opentelemetry-instrumentation-transformers/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── transformers/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── text_generation_pipeline_wrapper.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       └── test_pipeline.py
│   ├── opentelemetry-instrumentation-vertexai/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── vertexai/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── disabled_test_bison.py
│   │       ├── disabled_test_gemini.py
│   │       ├── test_placeholder.py
│   │       └── test_role_attributes.py
│   ├── opentelemetry-instrumentation-voyageai/
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── voyageai/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_embed/
│   │       │   │   ├── test_voyageai_embed_async_legacy.yaml
│   │       │   │   └── test_voyageai_embed_legacy.yaml
│   │       │   └── test_rerank/
│   │       │       ├── test_voyageai_rerank_async_legacy.yaml
│   │       │       └── test_voyageai_rerank_legacy.yaml
│   │       ├── conftest.py
│   │       ├── test_embed.py
│   │       └── test_rerank.py
│   ├── opentelemetry-instrumentation-watsonx/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── watsonx/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── metrics/
│   │       │   ├── __init__.py
│   │       │   ├── cassettes/
│   │       │   │   └── test_watsonx_metrics/
│   │       │   │       ├── test_generate_metrics.yaml
│   │       │   │       └── test_generate_stream_metrics.yaml
│   │       │   ├── conftest.py
│   │       │   └── test_watsonx_metrics.py
│   │       └── traces/
│   │           ├── __init__.py
│   │           ├── cassettes/
│   │           │   └── test_generate/
│   │           │       ├── test_generate.yaml
│   │           │       └── test_generate_text_stream.yaml
│   │           ├── conftest.py
│   │           └── test_generate.py
│   ├── opentelemetry-instrumentation-weaviate/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── weaviate/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── utils.py
│   │   │           ├── version.py
│   │   │           └── wrapper.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_weaviate_instrumentation/
│   │       │   │   ├── test_weaviate_create_batch.yaml
│   │       │   │   ├── test_weaviate_create_collection.yaml
│   │       │   │   ├── test_weaviate_create_collection_from_dict.yaml
│   │       │   │   ├── test_weaviate_delete_all.yaml
│   │       │   │   ├── test_weaviate_delete_collection.yaml
│   │       │   │   ├── test_weaviate_get_collection.yaml
│   │       │   │   ├── test_weaviate_insert_data.yaml
│   │       │   │   ├── test_weaviate_query_aggregate.yaml
│   │       │   │   └── test_weaviate_query_raw.yaml
│   │       │   └── test_weaviate_instrumentation_v3/
│   │       │       ├── test_weaviate_create_batch.yaml
│   │       │       ├── test_weaviate_create_data_object.yaml
│   │       │       ├── test_weaviate_create_schema.yaml
│   │       │       ├── test_weaviate_create_schemas.yaml
│   │       │       ├── test_weaviate_delete_all.yaml
│   │       │       ├── test_weaviate_delete_schema.yaml
│   │       │       ├── test_weaviate_get_schema.yaml
│   │       │       ├── test_weaviate_query_aggregate.yaml
│   │       │       ├── test_weaviate_query_get.yaml
│   │       │       └── test_weaviate_query_raw.yaml
│   │       ├── conftest.py
│   │       ├── test_weaviate_instrumentation.py
│   │       └── test_weaviate_instrumentation_v3.py
│   ├── opentelemetry-instrumentation-writer/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── instrumentation/
│   │   │       └── writer/
│   │   │           ├── __init__.py
│   │   │           ├── config.py
│   │   │           ├── event_emitter.py
│   │   │           ├── event_models.py
│   │   │           ├── span_utils.py
│   │   │           ├── utils.py
│   │   │           └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── cassettes/
│   │       │   ├── test_chat/
│   │       │   │   ├── test_writer_async_chat_legacy.yaml
│   │       │   │   ├── test_writer_async_chat_multiple_choices_legacy.yaml
│   │       │   │   ├── test_writer_async_chat_multiple_choices_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_chat_multiple_choices_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_chat_multiple_tool_call_requests_legacy.yaml
│   │       │   │   ├── test_writer_async_chat_multiple_tool_call_requests_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_chat_multiple_tool_call_requests_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_chat_tool_call_request_legacy.yaml
│   │       │   │   ├── test_writer_async_chat_tool_call_request_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_chat_tool_call_request_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_chat_tool_calls_legacy.yaml
│   │       │   │   ├── test_writer_async_chat_tool_calls_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_chat_tool_calls_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_chat_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_legacy.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_multiple_choices_legacy.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_multiple_choices_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_multiple_choices_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_multiple_tool_call_requests_legacy.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_multiple_tool_call_requests_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_multiple_tool_call_requests_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_tool_call_request_legacy.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_tool_call_request_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_tool_call_request_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_tool_calls_legacy.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_tool_calls_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_tool_calls_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_streaming_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_chat_legacy.yaml
│   │       │   │   ├── test_writer_chat_multiple_choices_legacy.yaml
│   │       │   │   ├── test_writer_chat_multiple_choices_with_events_with_content.yaml
│   │       │   │   ├── test_writer_chat_multiple_choices_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_chat_multiple_tool_call_requests_legacy.yaml
│   │       │   │   ├── test_writer_chat_multiple_tool_call_requests_with_events_with_content.yaml
│   │       │   │   ├── test_writer_chat_multiple_tool_call_requests_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_chat_tool_call_request_legacy.yaml
│   │       │   │   ├── test_writer_chat_tool_call_request_with_events_with_content.yaml
│   │       │   │   ├── test_writer_chat_tool_call_request_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_chat_tool_calls_legacy.yaml
│   │       │   │   ├── test_writer_chat_tool_calls_with_events_with_content.yaml
│   │       │   │   ├── test_writer_chat_tool_calls_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_chat_with_events_with_content.yaml
│   │       │   │   ├── test_writer_chat_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_legacy.yaml
│   │       │   │   ├── test_writer_streaming_chat_multiple_choices_legacy.yaml
│   │       │   │   ├── test_writer_streaming_chat_multiple_choices_with_events_with_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_multiple_choices_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_multiple_tool_call_requests_legacy.yaml
│   │       │   │   ├── test_writer_streaming_chat_multiple_tool_call_requests_with_events_with_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_multiple_tool_call_requests_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_tool_call_request_legacy.yaml
│   │       │   │   ├── test_writer_streaming_chat_tool_call_request_with_events_with_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_tool_call_request_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_tool_calls_legacy.yaml
│   │       │   │   ├── test_writer_streaming_chat_tool_calls_with_events_with_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_tool_calls_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_streaming_chat_with_events_with_content.yaml
│   │       │   │   └── test_writer_streaming_chat_with_events_with_no_content.yaml
│   │       │   ├── test_completions/
│   │       │   │   ├── test_writer_async_completions_legacy.yaml
│   │       │   │   ├── test_writer_async_completions_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_completions_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_async_streaming_completions_legacy.yaml
│   │       │   │   ├── test_writer_async_streaming_completions_with_events_with_content.yaml
│   │       │   │   ├── test_writer_async_streaming_completions_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_completions_legacy.yaml
│   │       │   │   ├── test_writer_completions_with_events_with_content.yaml
│   │       │   │   ├── test_writer_completions_with_events_with_no_content.yaml
│   │       │   │   ├── test_writer_streaming_completions_legacy.yaml
│   │       │   │   ├── test_writer_streaming_completions_with_events_with_content.yaml
│   │       │   │   └── test_writer_streaming_completions_with_events_with_no_content.yaml
│   │       │   └── test_metrics/
│   │       │       ├── test_writer_async_metrics.yaml
│   │       │       ├── test_writer_async_streaming_metrics.yaml
│   │       │       ├── test_writer_metrics.yaml
│   │       │       └── test_writer_streaming_metrics.yaml
│   │       ├── conftest.py
│   │       ├── test_chat.py
│   │       ├── test_completions.py
│   │       └── test_metrics.py
│   ├── opentelemetry-semantic-conventions-ai/
│   │   ├── .python-version
│   │   ├── MIGRATION.md
│   │   ├── README.md
│   │   ├── opentelemetry/
│   │   │   └── semconv_ai/
│   │   │       ├── __init__.py
│   │   │       ├── _testing.py
│   │   │       ├── utils.py
│   │   │       └── version.py
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── test_placeholder.py
│   │       ├── test_semconv_compliance.py
│   │       └── test_span_attributes.py
│   ├── sample-app/
│   │   ├── .python-version
│   │   ├── README.md
│   │   ├── data/
│   │   │   ├── paul_graham/
│   │   │   │   └── paul_graham_essay.txt
│   │   │   ├── scifact/
│   │   │   │   ├── scifact_claims.jsonl
│   │   │   │   └── scifact_corpus.jsonl
│   │   │   └── sherlock/
│   │   │       └── firstchapter.txt
│   │   ├── poetry.toml
│   │   ├── project.json
│   │   ├── pyproject.toml
│   │   ├── sample_app/
│   │   │   ├── __init__.py
│   │   │   ├── agents/
│   │   │   │   └── travel_agent_example.py
│   │   │   ├── agno_async_example.py
│   │   │   ├── agno_discussion_team.py
│   │   │   ├── agno_example.py
│   │   │   ├── agno_streaming_example.py
│   │   │   ├── agno_team_example.py
│   │   │   ├── anthropic_joke_example.py
│   │   │   ├── anthropic_joke_streaming_example.py
│   │   │   ├── anthropic_structured_outputs_demo.py
│   │   │   ├── anthropic_vision_base64_example.py
│   │   │   ├── async_anthropic_example.py
│   │   │   ├── async_anthropic_joke_streaming.py
│   │   │   ├── async_methods_decorated_app.py
│   │   │   ├── azure_openai.py
│   │   │   ├── bedrock_example_app.py
│   │   │   ├── chats/
│   │   │   │   ├── chatbot_with_tools_example.py
│   │   │   │   └── gemini_chatbot.py
│   │   │   ├── chroma_app.py
│   │   │   ├── chroma_sentence_transformer_app.py
│   │   │   ├── classes_decorated_app.py
│   │   │   ├── cohere_example.py
│   │   │   ├── crewai_example.py
│   │   │   ├── dataset_attachments_example.py
│   │   │   ├── dataset_example.py
│   │   │   ├── dataset_override_example.py
│   │   │   ├── experiment/
│   │   │   │   ├── experiment_example.py
│   │   │   │   ├── made_by_traceloop/
│   │   │   │   │   ├── agent_tool_trajectory.py
│   │   │   │   │   ├── agents_exp.py
│   │   │   │   │   ├── compliance_exp.py
│   │   │   │   │   ├── correctness_exp.py
│   │   │   │   │   ├── formatting_exp.py
│   │   │   │   │   ├── quality_exp.py
│   │   │   │   │   ├── security_exp.py
│   │   │   │   │   ├── style_exp.py
│   │   │   │   │   └── travel_agent_exp.py
│   │   │   │   ├── medical_prompts.py
│   │   │   │   └── run_research_experiment.py
│   │   │   ├── gemini.py
│   │   │   ├── gemini_structured_outputs_demo.py
│   │   │   ├── google_genai_image_example.py
│   │   │   ├── groq_example.py
│   │   │   ├── guardrail_medical_chat_example.py
│   │   │   ├── guardrail_travel_agent_example.py
│   │   │   ├── haystack_app.py
│   │   │   ├── langchain_agent.py
│   │   │   ├── langchain_app.py
│   │   │   ├── langchain_lcel.py
│   │   │   ├── langchain_watsonx.py
│   │   │   ├── langgraph_example.py
│   │   │   ├── langgraph_openai.py
│   │   │   ├── litellm_example.py
│   │   │   ├── llama_index_chroma_app.py
│   │   │   ├── llama_index_chroma_huggingface_app.py
│   │   │   ├── llama_index_workflow_app.py
│   │   │   ├── llama_parse_app.py
│   │   │   ├── manual_logging_example.py
│   │   │   ├── mcp_dev_assistant_demo.py
│   │   │   ├── mcp_dev_assistant_server.py
│   │   │   ├── mcp_sonnet_example.py
│   │   │   ├── methods_decorated_app.py
│   │   │   ├── multiple_span_processors.py
│   │   │   ├── ollama_streaming.py
│   │   │   ├── openai_agents_example.py
│   │   │   ├── openai_agents_realtime_example.py
│   │   │   ├── openai_agents_using_litellm.py
│   │   │   ├── openai_assistant.py
│   │   │   ├── openai_functions.py
│   │   │   ├── openai_guardrails_example.py
│   │   │   ├── openai_realtime_example.py
│   │   │   ├── openai_streaming.py
│   │   │   ├── openai_streaming_assistant.py
│   │   │   ├── openai_structured_outputs.py
│   │   │   ├── openai_structured_outputs_demo.py
│   │   │   ├── openai_vision_base64_example.py
│   │   │   ├── pinecone_app.py
│   │   │   ├── pinecone_app_sentence_transformers.py
│   │   │   ├── prompt_registry_example_app.py
│   │   │   ├── prompt_registry_vision.py
│   │   │   ├── qdrant_app.py
│   │   │   ├── redis_rag_app.py
│   │   │   ├── replicate_functions.py
│   │   │   ├── replicate_streaming.py
│   │   │   ├── sample_handoff_app.py
│   │   │   ├── simple_handoff_demo.py
│   │   │   ├── thread_pool_example.py
│   │   │   ├── vertex_gemini_vision_example.py
│   │   │   ├── vertexai_streaming.py
│   │   │   ├── voyageai_example.py
│   │   │   ├── watsonx-langchain.py
│   │   │   ├── watsonx_flow.py
│   │   │   ├── watsonx_generate.py
│   │   │   ├── weaviate_v3.py
│   │   │   ├── weaviate_v4.py
│   │   │   └── writer_example.py
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       └── test_placeholder.py
│   └── traceloop-sdk/
│       ├── .python-version
│       ├── README.md
│       ├── poetry.toml
│       ├── project.json
│       ├── pyproject.toml
│       ├── tests/
│       │   ├── __init__.py
│       │   ├── cassettes/
│       │   │   ├── test_association_properties/
│       │   │   │   ├── test_langchain_and_external_association_properties.yaml
│       │   │   │   └── test_langchain_association_properties.yaml
│       │   │   ├── test_privacy_no_prompts/
│       │   │   │   └── test_simple_workflow.yaml
│       │   │   ├── test_prompt_management/
│       │   │   │   ├── test_prompt_management.yaml
│       │   │   │   ├── test_prompt_management_with_response_format.yaml
│       │   │   │   └── test_prompt_management_with_tools.yaml
│       │   │   ├── test_sdk_initialization/
│       │   │   │   ├── test_resource_attributes.yaml
│       │   │   │   ├── test_resource_includes_sdk_attributes.yaml
│       │   │   │   └── test_span_postprocess_callback.yaml
│       │   │   ├── test_tasks/
│       │   │   │   └── test_task_io_serialization_with_langchain.yaml
│       │   │   └── test_workflows/
│       │   │       ├── test_simple_aworkflow.yaml
│       │   │       ├── test_simple_workflow.yaml
│       │   │       └── test_streaming_workflow.yaml
│       │   ├── conftest.py
│       │   ├── datasets/
│       │   │   ├── __init__.py
│       │   │   ├── cassettes/
│       │   │   │   ├── test_columns_operations/
│       │   │   │   │   ├── test_create_dataset_with_columns.yaml
│       │   │   │   │   ├── test_dataset_operations_errors.yaml
│       │   │   │   │   └── test_get_dataset_with_columns.yaml
│       │   │   │   ├── test_create_dataset/
│       │   │   │   │   ├── test_create_dataset_from_csv.yaml
│       │   │   │   │   ├── test_create_dataset_from_dataframe.yaml
│       │   │   │   │   ├── test_create_dataset_from_dataframe_with_duplicate_slug.yaml
│       │   │   │   │   └── test_create_dataset_with_duplicate_slug.yaml
│       │   │   │   ├── test_dataset_operations/
│       │   │   │   │   ├── test_get_dataset_by_version.yaml
│       │   │   │   │   └── test_publish_dataset.yaml
│       │   │   │   ├── test_dataset_with_attachments/
│       │   │   │   │   ├── test_create_dataset_with_external_attachments.yaml
│       │   │   │   │   ├── test_create_dataset_with_file_attachments_mocked.yaml
│       │   │   │   │   ├── test_create_dataset_with_in_memory_attachment.yaml
│       │   │   │   │   ├── test_create_dataset_with_mixed_attachments.yaml
│       │   │   │   │   └── test_create_dataset_without_attachments.yaml
│       │   │   │   ├── test_datasets_operations/
│       │   │   │   │   ├── test_delete_by_slug.yaml
│       │   │   │   │   ├── test_delete_by_slug_failure.yaml
│       │   │   │   │   ├── test_get_all_datasets.yaml
│       │   │   │   │   ├── test_get_all_datasets_with_invalid_credentials.yaml
│       │   │   │   │   ├── test_get_dataset_by_slug.yaml
│       │   │   │   │   ├── test_get_dataset_by_slug_failure.yaml
│       │   │   │   │   ├── test_get_version_csv.yaml
│       │   │   │   │   └── test_get_version_csv_failure.yaml
│       │   │   │   └── test_rows_operations/
│       │   │   │       ├── test_add_rows.yaml
│       │   │   │       ├── test_create_dataset_and_add_rows.yaml
│       │   │   │       ├── test_dataset_deletion.yaml
│       │   │   │       └── test_dataset_row_operations_api_errors.yaml
│       │   │   ├── test_columns_operations.py
│       │   │   ├── test_constants.py
│       │   │   ├── test_create_dataset.py
│       │   │   ├── test_dataset_operations.py
│       │   │   ├── test_dataset_with_attachments.py
│       │   │   ├── test_datasets_operations.py
│       │   │   └── test_rows_operations.py
│       │   ├── evaluator/
│       │   │   ├── test_evaluator.py
│       │   │   └── test_field_mapping.py
│       │   ├── experiment/
│       │   │   ├── test_experiment.py
│       │   │   └── test_export.py
│       │   ├── test_association_properties.py
│       │   ├── test_associations.py
│       │   ├── test_class_tasks.py
│       │   ├── test_client.py
│       │   ├── test_conversation_id.py
│       │   ├── test_manual.py
│       │   ├── test_nested_tasks.py
│       │   ├── test_privacy_no_prompts.py
│       │   ├── test_prompt_management.py
│       │   ├── test_sampler_initialization.py
│       │   ├── test_sdk_initialization.py
│       │   ├── test_tasks.py
│       │   ├── test_user_feedback.py
│       │   └── test_workflows.py
│       └── traceloop/
│           └── sdk/
│               ├── __init__.py
│               ├── annotation/
│               │   ├── __init__.py
│               │   ├── base_annotation.py
│               │   └── user_feedback.py
│               ├── associations/
│               │   ├── __init__.py
│               │   └── associations.py
│               ├── client/
│               │   ├── __init__.py
│               │   ├── client.py
│               │   └── http.py
│               ├── config/
│               │   └── __init__.py
│               ├── datasets/
│               │   ├── __init__.py
│               │   ├── attachment.py
│               │   ├── base.py
│               │   ├── column.py
│               │   ├── dataset.py
│               │   ├── datasets.py
│               │   ├── model.py
│               │   └── row.py
│               ├── decorators/
│               │   ├── __init__.py
│               │   └── base.py
│               ├── evaluator/
│               │   ├── __init__.py
│               │   ├── config.py
│               │   ├── evaluator.py
│               │   ├── field_mapping.py
│               │   ├── model.py
│               │   └── stream_client.py
│               ├── experiment/
│               │   ├── __init__.py
│               │   ├── experiment.py
│               │   ├── model.py
│               │   └── utils.py
│               ├── fetcher.py
│               ├── generated/
│               │   ├── __init__.py
│               │   └── evaluators/
│               │       ├── __init__.py
│               │       ├── definitions.py
│               │       ├── registry.py
│               │       ├── request.py
│               │       └── response.py
│               ├── guardrails/
│               │   ├── __init__.py
│               │   ├── guardrails.py
│               │   └── types.py
│               ├── images/
│               │   └── image_uploader.py
│               ├── instruments.py
│               ├── logging/
│               │   ├── __init__.py
│               │   └── logging.py
│               ├── metrics/
│               │   ├── __init__.py
│               │   └── metrics.py
│               ├── prompts/
│               │   ├── __init__.py
│               │   ├── client.py
│               │   ├── model.py
│               │   └── registry.py
│               ├── py.typed
│               ├── tracing/
│               │   ├── __init__.py
│               │   ├── content_allow_list.py
│               │   ├── context_manager.py
│               │   ├── manual.py
│               │   └── tracing.py
│               ├── utils/
│               │   ├── __init__.py
│               │   ├── in_memory_span_exporter.py
│               │   ├── json_encoder.py
│               │   └── package_check.py
│               └── version.py
└── scripts/
    ├── build-release.sh
    ├── codegen/
    │   └── generate_evaluator_models.py
    └── generate-models.sh
Download .txt
Showing preview only (402K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3911 symbols across 503 files)

FILE: packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/__init__.py
  function _get_agno_version (line 35) | def _get_agno_version():
  class AgnoInstrumentor (line 42) | class AgnoInstrumentor(BaseInstrumentor):
    method __init__ (line 45) | def __init__(self, exception_logger=None, enrich_token_usage: bool = F...
    method instrumentation_dependencies (line 50) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 53) | def _instrument(self, **kwargs):
    method _uninstrument (line 121) | def _uninstrument(self, **kwargs):
  class _AgentRunWrapper (line 136) | class _AgentRunWrapper:
    method __init__ (line 139) | def __init__(self, tracer, duration_histogram, token_histogram):
    method __call__ (line 146) | def __call__(self, wrapped, instance, args, kwargs):
  class _AgentARunWrapper (line 285) | class _AgentARunWrapper:
    method __init__ (line 288) | def __init__(self, tracer, duration_histogram, token_histogram):
    method __call__ (line 295) | def __call__(self, wrapped, instance, args, kwargs):
  class _TeamRunWrapper (line 437) | class _TeamRunWrapper:
    method __init__ (line 440) | def __init__(self, tracer, duration_histogram, token_histogram):
    method __call__ (line 447) | def __call__(self, wrapped, instance, args, kwargs):
  class _TeamARunWrapper (line 510) | class _TeamARunWrapper:
    method __init__ (line 513) | def __init__(self, tracer, duration_histogram, token_histogram):
    method __call__ (line 520) | async def __call__(self, wrapped, instance, args, kwargs):

FILE: packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/_tool_wrappers.py
  class _FunctionCallExecuteWrapper (line 14) | class _FunctionCallExecuteWrapper:
    method __init__ (line 17) | def __init__(self, tracer, duration_histogram, token_histogram):
    method __call__ (line 24) | def __call__(self, wrapped, instance, args, kwargs):
  class _FunctionCallAExecuteWrapper (line 83) | class _FunctionCallAExecuteWrapper:
    method __init__ (line 86) | def __init__(self, tracer, duration_histogram, token_histogram):
    method __call__ (line 93) | async def __call__(self, wrapped, instance, args, kwargs):

FILE: packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/config.py
  class Config (line 1) | class Config:

FILE: packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/streaming.py
  class AgnoAsyncStream (line 16) | class AgnoAsyncStream(ObjectProxy):
    method __init__ (line 19) | def __init__(
    method __aiter__ (line 39) | def __aiter__(self):
    method __anext__ (line 42) | async def __anext__(self):
    method _complete_instrumentation (line 65) | def _complete_instrumentation(self):
  class AgnoStream (line 119) | class AgnoStream(ObjectProxy):
    method __init__ (line 122) | def __init__(
    method __iter__ (line 142) | def __iter__(self):
    method __next__ (line 145) | def __next__(self):
    method _complete_instrumentation (line 168) | def _complete_instrumentation(self):

FILE: packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/utils.py
  function dont_throw (line 10) | def dont_throw(func):
  function set_span_attribute (line 30) | def set_span_attribute(span: Span, name: str, value: Any) -> None:
  function should_send_prompts (line 43) | def should_send_prompts() -> bool:

FILE: packages/opentelemetry-instrumentation-agno/tests/conftest.py
  function fixture_span_exporter (line 21) | def fixture_span_exporter():
  function fixture_tracer_provider (line 27) | def fixture_tracer_provider(span_exporter):
  function fixture_reader (line 34) | def fixture_reader():
  function fixture_meter_provider (line 42) | def fixture_meter_provider(reader):
  function instrument (line 49) | def instrument(reader, tracer_provider, meter_provider):
  function environment (line 62) | def environment():
  function vcr_config (line 68) | def vcr_config():

FILE: packages/opentelemetry-instrumentation-agno/tests/test_agent.py
  function test_agent_run_basic (line 11) | def test_agent_run_basic(instrument, span_exporter, reader):
  function test_agent_arun_basic (line 39) | async def test_agent_arun_basic(instrument, span_exporter, reader):
  function test_agent_with_tools (line 62) | def test_agent_with_tools(instrument, span_exporter, reader):
  function test_agent_metrics (line 95) | def test_agent_metrics(instrument, span_exporter, reader):
  function test_agent_run_streaming (line 123) | def test_agent_run_streaming(instrument, span_exporter, reader):
  function test_agent_run_streaming_with_tools (line 151) | def test_agent_run_streaming_with_tools(instrument, span_exporter, reader):
  function test_agent_arun_streaming (line 187) | async def test_agent_arun_streaming(instrument, span_exporter, reader):
  function test_agent_arun_streaming_with_tools (line 216) | async def test_agent_arun_streaming_with_tools(instrument, span_exporter...

FILE: packages/opentelemetry-instrumentation-agno/tests/test_team.py
  function test_team_discussion (line 12) | def test_team_discussion(instrument, span_exporter, reader):
  function test_team_basic (line 57) | def test_team_basic(instrument, span_exporter, reader):

FILE: packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/__init__.py
  function should_send_prompts (line 53) | def should_send_prompts():
  function should_emit_events (line 59) | def should_emit_events():
  function _set_span_attribute (line 63) | def _set_span_attribute(span, name, value):
  function _handle_message_event (line 71) | def _handle_message_event(
  function _handle_completion_event (line 83) | def _handle_completion_event(event: CompletionEvent, span, event_logger,...
  function _with_tracer_wrapper (line 102) | def _with_tracer_wrapper(func):
  function _llm_request_type_by_method (line 114) | def _llm_request_type_by_method(method_name):
  function _parse_prompt_event (line 121) | def _parse_prompt_event(args, kwargs) -> PromptEvent:
  function _parse_completion_event (line 130) | def _parse_completion_event(response) -> List[CompletionEvent]:
  function _wrap (line 142) | def _wrap(
  class AlephAlphaInstrumentor (line 182) | class AlephAlphaInstrumentor(BaseInstrumentor):
    method __init__ (line 185) | def __init__(self, exception_logger=None, use_legacy_attributes=True):
    method instrumentation_dependencies (line 190) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 193) | def _instrument(self, **kwargs):
    method _uninstrument (line 215) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/config.py
  class Config (line 1) | class Config:

FILE: packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/event_emitter.py
  class Roles (line 14) | class Roles(Enum):
  function emit_event (line 28) | def emit_event(event: Union[PromptEvent, CompletionEvent], event_logger)...
  function _emit_prompt_event (line 50) | def _emit_prompt_event(event: PromptEvent, event_logger) -> None:
  function _emit_completion_event (line 90) | def _emit_completion_event(event: CompletionEvent, event_logger) -> None:

FILE: packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/event_models.py
  class _FunctionToolCall (line 5) | class _FunctionToolCall(TypedDict):
  class ToolCall (line 10) | class ToolCall(TypedDict):
  class CompletionMessage (line 18) | class CompletionMessage(TypedDict):
  class PromptEvent (line 26) | class PromptEvent:
  class CompletionEvent (line 35) | class CompletionEvent:
    method total_tokens (line 44) | def total_tokens(self) -> Optional[int]:

FILE: packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/span_utils.py
  function set_prompt_attributes (line 11) | def set_prompt_attributes(event: PromptEvent, span: Span):
  function set_completion_attributes (line 29) | def set_completion_attributes(event: CompletionEvent, span: Span):

FILE: packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/utils.py
  function dont_throw (line 7) | def dont_throw(func):

FILE: packages/opentelemetry-instrumentation-alephalpha/tests/conftest.py
  function fixture_span_exporter (line 24) | def fixture_span_exporter():
  function fixture_tracer_provider (line 30) | def fixture_tracer_provider(span_exporter):
  function fixture_log_exporter (line 37) | def fixture_log_exporter():
  function fixture_logger_provider (line 43) | def fixture_logger_provider(log_exporter):
  function aleph_alpha_client (line 50) | def aleph_alpha_client():
  function instrument_legacy (line 55) | def instrument_legacy(tracer_provider):
  function instrument_with_content (line 67) | def instrument_with_content(tracer_provider, logger_provider):
  function instrument_with_no_content (line 83) | def instrument_with_no_content(tracer_provider, logger_provider):
  function environment (line 99) | def environment():
  function vcr_config (line 105) | def vcr_config():

FILE: packages/opentelemetry-instrumentation-alephalpha/tests/test_completion.py
  function test_alephalpha_completion (line 10) | def test_alephalpha_completion(
  function test_alephalpha_completion_with_events_with_content (line 49) | def test_alephalpha_completion_with_events_with_content(
  function test_alephalpha_completion_with_events_with_no_content (line 99) | def test_alephalpha_completion_with_events_with_no_content(
  function assert_message_in_logs (line 139) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py
  function is_streaming_response (line 163) | def is_streaming_response(response):
  function is_stream_manager (line 167) | def is_stream_manager(response):
  function _aset_token_usage (line 185) | async def _aset_token_usage(
  function _set_token_usage (line 302) | def _set_token_usage(
  function _with_chat_telemetry_wrapper (line 415) | def _with_chat_telemetry_wrapper(func):
  function _create_metrics (line 447) | def _create_metrics(meter: Meter):
  function _handle_input (line 476) | def _handle_input(span: Span, event_logger: Optional[Logger], kwargs):
  function _ahandle_input (line 486) | async def _ahandle_input(span: Span, event_logger: Optional[Logger], kwa...
  function _ahandle_response (line 496) | async def _ahandle_response(span: Span, event_logger: Optional[Logger], ...
  function _handle_response (line 510) | def _handle_response(span: Span, event_logger: Optional[Logger], response):
  function _wrap (line 520) | def _wrap(
  function _awrap (line 644) | async def _awrap(
  function is_metrics_enabled (line 761) | def is_metrics_enabled() -> bool:
  class AnthropicInstrumentor (line 765) | class AnthropicInstrumentor(BaseInstrumentor):
    method __init__ (line 768) | def __init__(
    method instrumentation_dependencies (line 785) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 788) | def _instrument(self, **kwargs):
    method _uninstrument (line 869) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/config.py
  class Config (line 6) | class Config:

FILE: packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/event_emitter.py
  class Roles (line 21) | class Roles(Enum):
  function emit_input_events (line 37) | def emit_input_events(event_logger: Optional[Logger], kwargs):
  function emit_response_events (line 60) | def emit_response_events(event_logger: Optional[Logger], response):
  function emit_streaming_response_events (line 127) | def emit_streaming_response_events(
  function emit_event (line 167) | def emit_event(
  function _emit_message_event (line 187) | def _emit_message_event(event: MessageEvent, event_logger: Logger) -> None:
  function _emit_choice_event (line 219) | def _emit_choice_event(event: ChoiceEvent, event_logger: Logger) -> None:

FILE: packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/event_models.py
  class _FunctionToolCall (line 5) | class _FunctionToolCall(TypedDict):
  class ToolCall (line 10) | class ToolCall(TypedDict):
  class CompletionMessage (line 18) | class CompletionMessage(TypedDict):
  class MessageEvent (line 26) | class MessageEvent:
  class ChoiceEvent (line 35) | class ChoiceEvent:

FILE: packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/span_utils.py
  function _is_base64_image (line 21) | def _is_base64_image(item: Dict[str, Any]) -> bool:
  function _process_image_item (line 34) | async def _process_image_item(item, trace_id, span_id, message_index, co...
  function _dump_content (line 46) | async def _dump_content(message_index, content, span):
  function aset_input_attributes (line 74) | async def aset_input_attributes(span, kwargs):
  function _aset_span_completions (line 182) | async def _aset_span_completions(span, response):
  function _set_span_completions (line 251) | def _set_span_completions(span, response):
  function aset_response_attributes (line 320) | async def aset_response_attributes(span, response):
  function set_response_attributes (line 345) | def set_response_attributes(span, response):
  function set_streaming_response_attributes (line 369) | def set_streaming_response_attributes(span, complete_response_events):

FILE: packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py
  function _process_response_item (line 33) | def _process_response_item(item, complete_response):
  function _set_token_usage (line 72) | def _set_token_usage(
  function _handle_streaming_response (line 139) | def _handle_streaming_response(span, event_logger, complete_response):
  class AnthropicStream (line 148) | class AnthropicStream(ObjectProxy):
    method __init__ (line 151) | def __init__(
    method __getattr__ (line 179) | def __getattr__(self, name):
    method _instrumented_get_final_message (line 190) | def _instrumented_get_final_message(self):
    method _instrumented_text_stream (line 198) | def _instrumented_text_stream(self):
    method _instrumented_until_done (line 209) | def _instrumented_until_done(self):
    method __iter__ (line 214) | def __iter__(self):
    method __next__ (line 217) | def __next__(self):
    method _handle_completion (line 233) | def _handle_completion(self):
    method _complete_instrumentation (line 296) | def _complete_instrumentation(self):
  class AnthropicAsyncStream (line 303) | class AnthropicAsyncStream(ObjectProxy):
    method __init__ (line 306) | def __init__(
    method __getattr__ (line 334) | def __getattr__(self, name):
    method _instrumented_get_final_message (line 345) | async def _instrumented_get_final_message(self):
    method _instrumented_text_stream (line 356) | def _instrumented_text_stream(self):
    method _instrumented_until_done (line 367) | async def _instrumented_until_done(self):
    method __aiter__ (line 372) | def __aiter__(self):
    method __anext__ (line 375) | async def __anext__(self):
    method _complete_instrumentation (line 399) | def _complete_instrumentation(self):
  class WrappedMessageStreamManager (line 457) | class WrappedMessageStreamManager:
    method __init__ (line 460) | def __init__(
    method __enter__ (line 484) | def __enter__(self):
    method __exit__ (line 501) | def __exit__(self, exc_type, exc_val, exc_tb):
    method __getattr__ (line 504) | def __getattr__(self, name):
    method _complete_instrumentation (line 509) | def _complete_instrumentation(self):
  class WrappedAsyncMessageStreamManager (line 514) | class WrappedAsyncMessageStreamManager:
    method __init__ (line 517) | def __init__(
    method __aenter__ (line 541) | async def __aenter__(self):
    method __aexit__ (line 558) | async def __aexit__(self, exc_type, exc_val, exc_tb):
    method __getattr__ (line 561) | def __getattr__(self, name):
    method _complete_instrumentation (line 566) | def _complete_instrumentation(self):

FILE: packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/utils.py
  function set_span_attribute (line 21) | def set_span_attribute(span, name, value):
  function should_send_prompts (line 28) | def should_send_prompts():
  function dont_throw (line 34) | def dont_throw(func):
  function _aextract_response_data (line 65) | async def _aextract_response_data(response):
  function _extract_response_data (line 103) | def _extract_response_data(response):
  function ashared_metrics_attributes (line 139) | async def ashared_metrics_attributes(response):
  function shared_metrics_attributes (line 182) | def shared_metrics_attributes(response):
  function error_metrics_attributes (line 222) | def error_metrics_attributes(exception):
  function count_prompt_tokens_from_request (line 230) | def count_prompt_tokens_from_request(anthropic, request):
  function acount_prompt_tokens_from_request (line 252) | async def acount_prompt_tokens_from_request(anthropic, request):
  function run_async (line 273) | def run_async(method):
  function should_emit_events (line 287) | def should_emit_events() -> bool:
  class JSONEncoder (line 295) | class JSONEncoder(json.JSONEncoder):
    method default (line 296) | def default(self, o):
  function model_as_dict (line 311) | def model_as_dict(model):

FILE: packages/opentelemetry-instrumentation-anthropic/tests/conftest.py
  function fixture_span_exporter (line 28) | def fixture_span_exporter():
  function fixture_tracer_provider (line 34) | def fixture_tracer_provider(span_exporter):
  function fixture_log_exporter (line 41) | def fixture_log_exporter():
  function fixture_logger_provider (line 47) | def fixture_logger_provider(log_exporter):
  function fixture_reader (line 54) | def fixture_reader():
  function fixture_meter_provider (line 62) | def fixture_meter_provider(reader):
  function anthropic_client (line 70) | def anthropic_client():
  function async_anthropic_client (line 75) | def async_anthropic_client():
  function instrument_legacy (line 80) | def instrument_legacy(reader, tracer_provider, meter_provider):
  function instrument_with_content (line 99) | def instrument_with_content(
  function instrument_with_no_content (line 125) | def instrument_with_no_content(
  function environment (line 151) | def environment():
  function vcr_config (line 157) | def vcr_config():

FILE: packages/opentelemetry-instrumentation-anthropic/tests/test_bedrock_with_raw_response.py
  function async_anthropic_bedrock_client (line 15) | def async_anthropic_bedrock_client(instrument_legacy):
  function test_async_anthropic_bedrock_with_raw_response (line 34) | async def test_async_anthropic_bedrock_with_raw_response(
  function test_async_anthropic_bedrock_regular_create (line 89) | async def test_async_anthropic_bedrock_regular_create(
  function test_async_anthropic_bedrock_beta_with_raw_response (line 138) | async def test_async_anthropic_bedrock_beta_with_raw_response(

FILE: packages/opentelemetry-instrumentation-anthropic/tests/test_completion.py
  function test_anthropic_completion_legacy (line 12) | def test_anthropic_completion_legacy(
  function test_anthropic_completion_with_events_with_content (line 56) | def test_anthropic_completion_with_events_with_content(
  function test_anthropic_completion_with_events_with_no_content (line 101) | def test_anthropic_completion_with_events_with_no_content(
  function assert_message_in_logs (line 143) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-anthropic/tests/test_messages.py
  function test_anthropic_message_create_legacy (line 68) | def test_anthropic_message_create_legacy(
  function test_anthropic_message_create_with_events_with_content (line 128) | def test_anthropic_message_create_with_events_with_content(
  function test_anthropic_message_create_with_events_with_no_content (line 193) | def test_anthropic_message_create_with_events_with_no_content(
  function test_anthropic_multi_modal_legacy (line 246) | def test_anthropic_multi_modal_legacy(
  function test_anthropic_multi_modal_with_events_with_content (line 306) | def test_anthropic_multi_modal_with_events_with_content(
  function test_anthropic_multi_modal_with_events_with_no_content (line 366) | def test_anthropic_multi_modal_with_events_with_no_content(
  function test_anthropic_image_with_history (line 428) | def test_anthropic_image_with_history(
  function test_anthropic_async_multi_modal_legacy (line 527) | async def test_anthropic_async_multi_modal_legacy(
  function test_anthropic_async_multi_modal_with_events_with_content (line 588) | async def test_anthropic_async_multi_modal_with_events_with_content(
  function test_anthropic_async_multi_modal_with_events_with_no_content (line 649) | async def test_anthropic_async_multi_modal_with_events_with_no_content(
  function test_anthropic_message_streaming_legacy (line 710) | def test_anthropic_message_streaming_legacy(
  function test_anthropic_message_streaming_with_events_with_content (line 777) | def test_anthropic_message_streaming_with_events_with_content(
  function test_anthropic_message_streaming_with_events_with_no_content (line 842) | def test_anthropic_message_streaming_with_events_with_no_content(
  function test_async_anthropic_message_create_legacy (line 903) | async def test_async_anthropic_message_create_legacy(
  function test_async_anthropic_message_create_with_events_with_content (line 964) | async def test_async_anthropic_message_create_with_events_with_content(
  function test_async_anthropic_message_create_with_events_with_no_content (line 1017) | async def test_async_anthropic_message_create_with_events_with_no_content(
  function test_async_anthropic_message_streaming_legacy (line 1075) | async def test_async_anthropic_message_streaming_legacy(
  function test_async_anthropic_message_streaming_with_events_with_content (line 1142) | async def test_async_anthropic_message_streaming_with_events_with_content(
  function test_async_anthropic_message_streaming_with_events_with_no_content (line 1202) | async def test_async_anthropic_message_streaming_with_events_with_no_con...
  function test_anthropic_tools_legacy (line 1265) | def test_anthropic_tools_legacy(
  function test_anthropic_tools_with_events_with_content (line 1406) | def test_anthropic_tools_with_events_with_content(
  function test_anthropic_tools_with_events_with_no_content (line 1507) | def test_anthropic_tools_with_events_with_no_content(
  function test_anthropic_tools_history_legacy (line 1603) | def test_anthropic_tools_history_legacy(
  function test_anthropic_tools_history_with_events_with_content (line 1761) | def test_anthropic_tools_history_with_events_with_content(
  function test_anthropic_tools_history_with_events_with_no_content (line 1863) | def test_anthropic_tools_history_with_events_with_no_content(
  function test_anthropic_tools_streaming_legacy (line 1963) | def test_anthropic_tools_streaming_legacy(
  function test_anthropic_tools_streaming_with_events_with_content (line 2090) | def test_anthropic_tools_streaming_with_events_with_content(
  function test_anthropic_tools_streaming_with_events_with_no_content (line 2202) | def test_anthropic_tools_streaming_with_events_with_no_content(
  function test_with_asyncio_run_legacy (line 2303) | def test_with_asyncio_run_legacy(
  function test_with_asyncio_run_with_events_with_content (line 2337) | def test_with_asyncio_run_with_events_with_content(
  function test_with_asyncio_run_with_events_with_no_content (line 2395) | def test_with_asyncio_run_with_events_with_no_content(
  function assert_message_in_logs (line 2442) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...
  function test_anthropic_message_stream_manager_legacy (line 2457) | def test_anthropic_message_stream_manager_legacy(
  function test_anthropic_message_stream_manager_with_events_with_content (line 2523) | def test_anthropic_message_stream_manager_with_events_with_content(
  function test_anthropic_message_stream_manager_with_events_with_no_content (line 2587) | def test_anthropic_message_stream_manager_with_events_with_no_content(
  function test_async_anthropic_message_stream_manager_legacy (line 2647) | async def test_async_anthropic_message_stream_manager_legacy(
  function test_async_anthropic_message_stream_manager_with_events_with_content (line 2713) | async def test_async_anthropic_message_stream_manager_with_events_with_c...
  function test_async_anthropic_message_stream_manager_with_events_with_no_content (line 2772) | async def test_async_anthropic_message_stream_manager_with_events_with_n...
  function test_anthropic_streaming_helper_methods_legacy (line 2835) | async def test_anthropic_streaming_helper_methods_legacy(
  function test_anthropic_text_stream_helper_method_legacy (line 2866) | async def test_anthropic_text_stream_helper_method_legacy(
  function test_anthropic_sync_streaming_helper_methods_legacy (line 2892) | def test_anthropic_sync_streaming_helper_methods_legacy(
  function test_async_anthropic_beta_message_stream_manager_legacy (line 2919) | async def test_async_anthropic_beta_message_stream_manager_legacy(

FILE: packages/opentelemetry-instrumentation-anthropic/tests/test_prompt_caching.py
  function _verify_caching_attributes (line 13) | def _verify_caching_attributes(
  function test_anthropic_prompt_caching_legacy (line 51) | def test_anthropic_prompt_caching_legacy(
  function test_anthropic_prompt_caching_with_events_with_content (line 142) | def test_anthropic_prompt_caching_with_events_with_content(
  function test_anthropic_prompt_caching_with_events_with_no_content (line 304) | def test_anthropic_prompt_caching_with_events_with_no_content(
  function test_anthropic_prompt_caching_async_legacy (line 388) | async def test_anthropic_prompt_caching_async_legacy(
  function test_anthropic_prompt_caching_async_with_events_with_content (line 475) | async def test_anthropic_prompt_caching_async_with_events_with_content(
  function test_anthropic_prompt_caching_async_with_events_with_no_content (line 639) | async def test_anthropic_prompt_caching_async_with_events_with_no_content(
  function test_anthropic_prompt_caching_stream_legacy (line 731) | def test_anthropic_prompt_caching_stream_legacy(
  function test_anthropic_prompt_caching_stream_with_events_with_content (line 821) | def test_anthropic_prompt_caching_stream_with_events_with_content(
  function test_anthropic_prompt_caching_stream_with_events_with_no_content (line 994) | def test_anthropic_prompt_caching_stream_with_events_with_no_content(
  function test_anthropic_prompt_caching_async_stream_legacy (line 1082) | async def test_anthropic_prompt_caching_async_stream_legacy(
  function test_anthropic_prompt_caching_async_stream_with_events_with_content (line 1172) | async def test_anthropic_prompt_caching_async_stream_with_events_with_co...
  function test_anthropic_prompt_caching_async_stream_with_events_with_no_content (line 1352) | async def test_anthropic_prompt_caching_async_stream_with_events_with_no...
  function assert_message_in_logs (line 1442) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-anthropic/tests/test_structured_outputs.py
  function test_anthropic_structured_outputs_legacy (line 32) | def test_anthropic_structured_outputs_legacy(
  function test_anthropic_structured_outputs_with_events_with_content (line 89) | def test_anthropic_structured_outputs_with_events_with_content(
  function test_anthropic_structured_outputs_with_events_with_no_content (line 118) | def test_anthropic_structured_outputs_with_events_with_no_content(

FILE: packages/opentelemetry-instrumentation-anthropic/tests/test_thinking.py
  function test_anthropic_thinking_legacy (line 11) | def test_anthropic_thinking_legacy(
  function test_anthropic_thinking_with_events_with_content (line 73) | def test_anthropic_thinking_with_events_with_content(
  function test_anthropic_thinking_with_events_with_no_content (line 147) | def test_anthropic_thinking_with_events_with_no_content(
  function test_async_anthropic_thinking_legacy (line 214) | async def test_async_anthropic_thinking_legacy(
  function test_async_anthropic_thinking_with_events_with_content (line 277) | async def test_async_anthropic_thinking_with_events_with_content(
  function test_async_anthropic_thinking_with_events_with_no_content (line 351) | async def test_async_anthropic_thinking_with_events_with_no_content(
  function test_anthropic_thinking_streaming_legacy (line 421) | def test_anthropic_thinking_streaming_legacy(
  function test_anthropic_thinking_streaming_with_events_with_content (line 488) | def test_anthropic_thinking_streaming_with_events_with_content(
  function test_anthropic_thinking_streaming_with_events_with_no_content (line 580) | def test_anthropic_thinking_streaming_with_events_with_no_content(
  function test_async_anthropic_thinking_streaming_legacy (line 659) | async def test_async_anthropic_thinking_streaming_legacy(
  function test_async_anthropic_thinking_streaming_with_events_with_content (line 727) | async def test_async_anthropic_thinking_streaming_with_events_with_content(
  function test_async_anthropic_thinking_streaming_with_events_with_no_content (line 821) | async def test_async_anthropic_thinking_streaming_with_events_with_no_co...
  function assert_message_in_logs (line 902) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-anthropic/tests/utils.py
  function verify_metrics (line 7) | def verify_metrics(

FILE: packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py
  class MetricParams (line 59) | class MetricParams:
    method __init__ (line 60) | def __init__(
  function is_metrics_enabled (line 111) | def is_metrics_enabled() -> bool:
  function _with_tracer_wrapper (line 115) | def _with_tracer_wrapper(func):
  function _wrap (line 142) | def _wrap(
  function _instrumented_model_invoke (line 197) | def _instrumented_model_invoke(fn, tracer, metric_params, event_logger):
  function _instrumented_model_invoke_with_response_stream (line 213) | def _instrumented_model_invoke_with_response_stream(
  function _instrumented_converse (line 231) | def _instrumented_converse(fn, tracer, metric_params, event_logger):
  function _instrumented_converse_stream (line 251) | def _instrumented_converse_stream(fn, tracer, metric_params, event_logger):
  function _handle_stream_call (line 268) | def _handle_stream_call(span, kwargs, response, metric_params, event_log...
  function _handle_call (line 314) | def _handle_call(span: Span, kwargs, response, metric_params, event_logg...
  function _handle_converse (line 354) | def _handle_converse(span, kwargs, response, metric_params, event_logger):
  function _handle_converse_stream (line 371) | def _handle_converse_stream(span, kwargs, response, metric_params, event...
  function _get_vendor_model (line 420) | def _get_vendor_model(modelId):
  function _cross_region_check (line 440) | def _cross_region_check(value):
  class GuardrailMeters (line 452) | class GuardrailMeters:
  class PromptCaching (line 462) | class PromptCaching:
  function _create_metrics (line 467) | def _create_metrics(meter: Meter):
  class BedrockInstrumentor (line 559) | class BedrockInstrumentor(BaseInstrumentor):
    method __init__ (line 562) | def __init__(
    method instrumentation_dependencies (line 573) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 576) | def _instrument(self, **kwargs):
    method _uninstrument (line 652) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/config.py
  class Config (line 1) | class Config:

FILE: packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/event_emitter.py
  class Roles (line 17) | class Roles(Enum):
  function emit_message_events (line 33) | def emit_message_events(event_logger: Optional[Logger], kwargs):
  function emit_choice_events (line 64) | def emit_choice_events(event_logger: Optional[Logger], response):
  function emit_input_events_converse (line 157) | def emit_input_events_converse(kwargs, event_logger):
  function emit_response_event_converse (line 179) | def emit_response_event_converse(response, event_logger):
  function emit_streaming_response_event (line 193) | def emit_streaming_response_event(response_body, event_logger):
  function emit_streaming_converse_response_event (line 209) | def emit_streaming_converse_response_event(
  function emit_event (line 226) | def emit_event(
  function _emit_message_event (line 246) | def _emit_message_event(
  function _emit_choice_event (line 280) | def _emit_choice_event(event: ChoiceEvent, event_logger: Optional[Logger...

FILE: packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/event_models.py
  class _FunctionToolCall (line 5) | class _FunctionToolCall(TypedDict):
  class ToolCall (line 10) | class ToolCall(TypedDict):
  class CompletionMessage (line 18) | class CompletionMessage(TypedDict):
  class MessageEvent (line 26) | class MessageEvent:
  class ChoiceEvent (line 35) | class ChoiceEvent:

FILE: packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/guardrail.py
  class Type (line 8) | class Type(Enum):
  class GuardrailAttributes (line 13) | class GuardrailAttributes:
  function is_guardrail_activated (line 24) | def is_guardrail_activated(response):
  function handle_invoke_metrics (line 34) | def handle_invoke_metrics(t: Type, guardrail, attrs, metric_params):
  function handle_sensitive (line 57) | def handle_sensitive(t: Type, guardrail, attrs, metric_params):
  function handle_topic (line 91) | def handle_topic(t: Type, guardrail, attrs, metric_params):
  function handle_content (line 108) | def handle_content(t: Type, guardrail, attrs, metric_params):
  function handle_words (line 126) | def handle_words(t: Type, guardrail, attrs, metric_params):
  function guardrail_converse (line 155) | def guardrail_converse(span, response, vendor, model, metric_params):
  function guardrail_handling (line 181) | def guardrail_handling(span, response_body, vendor, model, metric_params):
  function _handle (line 211) | def _handle(t: Type, guardrail_info, attrs, metric_params):

FILE: packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/prompt_caching.py
  class CachingHeaders (line 4) | class CachingHeaders:
  class CacheSpanAttrs (line 9) | class CacheSpanAttrs:  # TODO: move it under SemConv pkg
  function prompt_caching_handling (line 14) | def prompt_caching_handling(headers, vendor, model, metric_params):

FILE: packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/reusable_streaming_body.py
  class ReusableStreamingBody (line 10) | class ReusableStreamingBody(StreamingBody):
    method __init__ (line 13) | def __init__(self, raw_stream, content_length):
    method read (line 18) | def read(self, amt=None):

FILE: packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/span_utils.py
  function _set_span_attribute (line 24) | def _set_span_attribute(span, name, value):
  function set_model_message_span_attributes (line 31) | def set_model_message_span_attributes(model_vendor, span, request_body):
  function set_model_choice_span_attributes (line 61) | def set_model_choice_span_attributes(model_vendor, span, response_body):
  function set_model_span_attributes (line 78) | def set_model_span_attributes(
  function _guardrail_value (line 124) | def _guardrail_value(request_body):
  function set_guardrail_attributes (line 132) | def set_guardrail_attributes(span, input_filters, output_filters):
  function _set_prompt_span_attributes (line 147) | def _set_prompt_span_attributes(span, request_body):
  function _set_cohere_span_attributes (line 153) | def _set_cohere_span_attributes(span, request_body, response_body, metri...
  function _set_generations_span_attributes (line 185) | def _set_generations_span_attributes(span, response_body):
  function _set_anthropic_completion_span_attributes (line 194) | def _set_anthropic_completion_span_attributes(
  function _set_anthropic_response_span_attributes (line 249) | def _set_anthropic_response_span_attributes(span, response_body):
  function _set_anthropic_messages_span_attributes (line 267) | def _set_anthropic_messages_span_attributes(
  function _count_anthropic_tokens (line 322) | def _count_anthropic_tokens(messages: list[str]):
  function _set_ai21_span_attributes (line 349) | def _set_ai21_span_attributes(span, request_body, response_body, metric_...
  function _set_span_completions_attributes (line 371) | def _set_span_completions_attributes(span, response_body):
  function _set_llama_span_attributes (line 380) | def _set_llama_span_attributes(span, request_body, response_body, metric...
  function _set_llama_prompt_span_attributes (line 402) | def _set_llama_prompt_span_attributes(span, request_body):
  function _set_llama_response_span_attributes (line 409) | def _set_llama_response_span_attributes(span, response_body):
  function _set_amazon_span_attributes (line 429) | def _set_amazon_span_attributes(
  function _set_amazon_input_span_attributes (line 485) | def _set_amazon_input_span_attributes(span, request_body):
  function _set_amazon_response_span_attributes (line 520) | def _set_amazon_response_span_attributes(span, response_body):
  function _set_imported_model_span_attributes (line 544) | def _set_imported_model_span_attributes(
  function _set_imported_model_response_span_attributes (line 576) | def _set_imported_model_response_span_attributes(span, response_body):
  function _set_imported_model_prompt_span_attributes (line 584) | def _set_imported_model_prompt_span_attributes(span, request_body):
  function _record_usage_to_span (line 590) | def _record_usage_to_span(span, prompt_tokens, completion_tokens, metric...
  function _metric_shared_attributes (line 644) | def _metric_shared_attributes(
  function set_converse_model_span_attributes (line 655) | def set_converse_model_span_attributes(span, provider, model, kwargs):
  function set_converse_input_prompt_span_attributes (line 679) | def set_converse_input_prompt_span_attributes(kwargs, span):
  function set_converse_response_span_attributes (line 710) | def set_converse_response_span_attributes(response, span):
  function set_converse_streaming_response_span_attributes (line 726) | def set_converse_streaming_response_span_attributes(response, role, span):
  function converse_usage_record (line 735) | def converse_usage_record(span, response, metric_params):

FILE: packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/streaming_wrapper.py
  class StreamingWrapper (line 9) | class StreamingWrapper(ObjectProxy):
    method __init__ (line 10) | def __init__(
    method __iter__ (line 20) | def __iter__(self):
    method _process_event (line 34) | def _process_event(self, event):
    method _accumulate_events (line 58) | def _accumulate_events(self, event):

FILE: packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/utils.py
  function dont_throw (line 11) | def dont_throw(func):
  function should_send_prompts (line 36) | def should_send_prompts():
  function should_emit_events (line 42) | def should_emit_events() -> bool:

FILE: packages/opentelemetry-instrumentation-bedrock/tests/conftest.py
  function environment (line 28) | def environment():
  function brt (line 35) | def brt():
  function fixture_span_exporter (line 45) | def fixture_span_exporter():
  function fixture_tracer_provider (line 51) | def fixture_tracer_provider(span_exporter):
  function fixture_log_exporter (line 58) | def fixture_log_exporter():
  function fixture_logger_provider (line 64) | def fixture_logger_provider(log_exporter):
  function fixture_reader (line 71) | def fixture_reader():
  function fixture_meter_provider (line 79) | def fixture_meter_provider(reader):
  function instrument_legacy (line 87) | def instrument_legacy(reader, tracer_provider, meter_provider):
  function instrument_with_content (line 103) | def instrument_with_content(
  function instrument_with_no_content (line 124) | def instrument_with_no_content(
  function vcr_config (line 145) | def vcr_config():

FILE: packages/opentelemetry-instrumentation-bedrock/tests/metrics/conftest.py
  function environment (line 18) | def environment():
  function brt (line 25) | def brt():
  function test_context (line 35) | def test_context():
  function instrument (line 51) | def instrument(test_context):
  function clear_test_context (line 64) | def clear_test_context(test_context):

FILE: packages/opentelemetry-instrumentation-bedrock/tests/metrics/test_bedrock_guardrails_metrics.py
  function test_titan_invoke_model_guardrail (line 12) | def test_titan_invoke_model_guardrail(test_context, brt):
  function test_titan_invoke_stream_guardrail (line 26) | def test_titan_invoke_stream_guardrail(test_context, brt):
  function test_titan_converse_guardrail (line 42) | def test_titan_converse_guardrail(test_context, brt):
  function test_titan_converse_stream_guardrail (line 61) | def test_titan_converse_stream_guardrail(test_context, brt):
  function assert_guardrails (line 83) | def assert_guardrails(reader):

FILE: packages/opentelemetry-instrumentation-bedrock/tests/metrics/test_bedrock_metrics.py
  function test_invoke_model_metrics (line 11) | def test_invoke_model_metrics(test_context, brt):

FILE: packages/opentelemetry-instrumentation-bedrock/tests/metrics/test_bedrock_prompt_caching_metrics.py
  function call (line 9) | def call(brt):
  function get_metric (line 41) | def get_metric(resource_metrics, name):
  function assert_metric (line 50) | def assert_metric(reader, usage):
  function test_prompt_cache (line 68) | def test_prompt_cache(test_context, brt):

FILE: packages/opentelemetry-instrumentation-bedrock/tests/traces/test_ai21.py
  function test_ai21_j2_completion_string_content (line 12) | def test_ai21_j2_completion_string_content(
  function test_ai21_j2_completion_string_content_with_events_with_content (line 65) | def test_ai21_j2_completion_string_content_with_events_with_content(
  function test_ai21_j2_completion_string_content_with_events_with_no_content (line 128) | def test_ai21_j2_completion_string_content_with_events_with_no_content(
  function assert_message_in_logs (line 186) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-bedrock/tests/traces/test_anthropic.py
  function test_anthropic_2_completion (line 13) | def test_anthropic_2_completion(instrument_legacy, brt, span_exporter, l...
  function test_anthropic_2_completion_with_events_with_content (line 61) | def test_anthropic_2_completion_with_events_with_content(
  function test_anthropic_2_completion_with_events_with_no_content (line 117) | def test_anthropic_2_completion_with_events_with_no_content(
  function test_anthropic_3_completion_complex_content (line 169) | def test_anthropic_3_completion_complex_content(
  function test_anthropic_3_completion_complex_content_with_events_with_content (line 233) | def test_anthropic_3_completion_complex_content_with_events_with_content(
  function test_anthropic_3_completion_complex_content_with_events_with_no_content (line 303) | def test_anthropic_3_completion_complex_content_with_events_with_no_cont...
  function test_anthropic_3_completion_streaming (line 365) | def test_anthropic_3_completion_streaming(
  function test_anthropic_3_completion_streaming_with_events_with_content (line 436) | def test_anthropic_3_completion_streaming_with_events_with_content(
  function test_anthropic_3_completion_streaming_with_events_with_no_content (line 507) | def test_anthropic_3_completion_streaming_with_events_with_no_content(
  function test_anthropic_3_completion_string_content (line 574) | def test_anthropic_3_completion_string_content(
  function test_anthropic_3_completion_string_content_with_events_with_content (line 635) | def test_anthropic_3_completion_string_content_with_events_with_content(
  function test_anthropic_3_completion_string_content_with_events_with_no_content (line 699) | def test_anthropic_3_completion_string_content_with_events_with_no_content(
  function test_anthropic_cross_region (line 758) | def test_anthropic_cross_region(instrument_legacy, brt, span_exporter, l...
  function test_anthropic_cross_region_with_events_with_content (line 813) | def test_anthropic_cross_region_with_events_with_content(
  function test_anthropic_cross_region_with_events_with_no_content (line 879) | def test_anthropic_cross_region_with_events_with_no_content(
  function test_prompt_cache (line 937) | def test_prompt_cache(instrument_legacy, brt, span_exporter, log_exporter):
  function test_anthropic_converse_stream_with_tool_use (line 978) | def test_anthropic_converse_stream_with_tool_use(
  function assert_message_in_logs (line 1063) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-bedrock/tests/traces/test_cohere.py
  function test_cohere_completion (line 12) | def test_cohere_completion(instrument_legacy, brt, span_exporter, log_ex...
  function test_cohere_completion_with_events_with_no_content (line 76) | def test_cohere_completion_with_events_with_no_content(
  function test_cohere_completion_with_events_with_content (line 140) | def test_cohere_completion_with_events_with_content(
  function assert_message_in_logs (line 208) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-bedrock/tests/traces/test_guardrails.py
  function test_guardrail_invoke (line 15) | def test_guardrail_invoke(instrument_legacy, brt, span_exporter, log_exp...
  function test_guardrail_invoke_stream (line 83) | def test_guardrail_invoke_stream(instrument_legacy, brt, span_exporter, ...
  function test_guardrail_converse (line 145) | def test_guardrail_converse(
  function test_guardrail_converse_stream (line 223) | def test_guardrail_converse_stream(

FILE: packages/opentelemetry-instrumentation-bedrock/tests/traces/test_imported_model.py
  function test_imported_model_completion (line 12) | def test_imported_model_completion(instrument_legacy, brt, span_exporter...
  function test_imported_model_completion_with_events_with_content (line 52) | def test_imported_model_completion_with_events_with_content(
  function test_imported_model_completion_with_events_with_no_content (line 100) | def test_imported_model_completion_with_events_with_no_content(
  function assert_message_in_logs (line 147) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-bedrock/tests/traces/test_meta.py
  function test_meta_llama2_completion_string_content (line 12) | def test_meta_llama2_completion_string_content(
  function test_meta_llama2_completion_string_content_with_events_with_content (line 59) | def test_meta_llama2_completion_string_content_with_events_with_content(
  function test_meta_llama2_completion_string_content_with_events_with_no_content (line 116) | def test_meta_llama2_completion_string_content_with_events_with_no_content(
  function test_meta_llama3_completion (line 173) | def test_meta_llama3_completion(instrument_legacy, brt, span_exporter, l...
  function test_meta_llama3_completion_with_events_with_content (line 215) | def test_meta_llama3_completion_with_events_with_content(
  function test_meta_llama3_completion_with_events_with_no_content (line 264) | def test_meta_llama3_completion_with_events_with_no_content(
  function test_meta_converse (line 313) | def test_meta_converse(instrument_legacy, brt, span_exporter, log_export...
  function test_meta_converse_with_events_with_content (line 376) | def test_meta_converse_with_events_with_content(
  function test_meta_converse_with_events_with_no_content (line 444) | def test_meta_converse_with_events_with_no_content(
  function test_meta_converse_stream (line 505) | def test_meta_converse_stream(instrument_legacy, brt, span_exporter, log...
  function test_meta_converse_stream_with_events_with_content (line 583) | def test_meta_converse_stream_with_events_with_content(
  function test_meta_converse_stream_with_events_with_no_content (line 663) | def test_meta_converse_stream_with_events_with_no_content(
  function assert_message_in_logs (line 740) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-bedrock/tests/traces/test_nova.py
  function test_nova_completion (line 12) | def test_nova_completion(instrument_legacy, brt, span_exporter, log_expo...
  function test_nova_completion_with_events_with_content (line 87) | def test_nova_completion_with_events_with_content(
  function test_nova_completion_with_events_with_no_content (line 168) | def test_nova_completion_with_events_with_no_content(
  function test_nova_invoke_stream (line 236) | def test_nova_invoke_stream(instrument_legacy, brt, span_exporter, log_e...
  function test_nova_invoke_stream_with_events_with_content (line 327) | def test_nova_invoke_stream_with_events_with_content(
  function test_nova_invoke_stream_with_events_with_no_content (line 425) | def test_nova_invoke_stream_with_events_with_no_content(
  function test_nova_converse (line 512) | def test_nova_converse(instrument_legacy, brt, span_exporter, log_export...
  function test_nova_converse_with_events_with_content (line 604) | def test_nova_converse_with_events_with_content(
  function test_nova_converse_with_events_with_no_content (line 700) | def test_nova_converse_with_events_with_no_content(
  function test_nova_converse_stream (line 789) | def test_nova_converse_stream(instrument_legacy, brt, span_exporter, log...
  function test_nova_converse_stream_with_events_with_content (line 917) | def test_nova_converse_stream_with_events_with_content(
  function test_nova_converse_stream_with_events_with_no_content (line 1042) | def test_nova_converse_stream_with_events_with_no_content(
  function test_nova_cross_region_invoke (line 1161) | def test_nova_cross_region_invoke(instrument_legacy, brt, span_exporter,...
  function test_nova_cross_region_invoke_with_events_with_content (line 1230) | def test_nova_cross_region_invoke_with_events_with_content(
  function test_nova_cross_region_invoke_with_events_with_no_content (line 1299) | def test_nova_cross_region_invoke_with_events_with_no_content(
  function assert_message_in_logs (line 1362) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-bedrock/tests/traces/test_titan.py
  function test_titan_completion (line 12) | def test_titan_completion(instrument_legacy, brt, span_exporter, log_exp...
  function test_titan_completion_with_events_with_content (line 85) | def test_titan_completion_with_events_with_content(
  function test_titan_completion_with_events_with_no_content (line 161) | def test_titan_completion_with_events_with_no_content(
  function test_titan_invoke_stream (line 225) | def test_titan_invoke_stream(instrument_legacy, brt, span_exporter, log_...
  function test_titan_invoke_stream_with_events_with_content (line 308) | def test_titan_invoke_stream_with_events_with_content(
  function test_titan_invoke_stream_with_events_with_no_content (line 393) | def test_titan_invoke_stream_with_events_with_no_content(
  function test_titan_converse (line 471) | def test_titan_converse(instrument_legacy, brt, span_exporter, log_expor...
  function test_titan_converse_with_events_with_content (line 547) | def test_titan_converse_with_events_with_content(
  function test_titan_converse_with_events_with_no_content (line 624) | def test_titan_converse_with_events_with_no_content(
  function test_titan_converse_stream (line 698) | def test_titan_converse_stream(instrument_legacy, brt, span_exporter, lo...
  function test_titan_converse_stream_with_events_with_content (line 812) | def test_titan_converse_stream_with_events_with_content(
  function test_titan_converse_stream_with_events_with_no_content (line 920) | def test_titan_converse_stream_with_events_with_no_content(
  function assert_message_in_logs (line 1025) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/__init__.py
  class ChromaInstrumentor (line 81) | class ChromaInstrumentor(BaseInstrumentor):
    method __init__ (line 84) | def __init__(self, exception_logger=None):
    method instrumentation_dependencies (line 88) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 91) | def _instrument(self, **kwargs):
    method _uninstrument (line 105) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/config.py
  class Config (line 1) | class Config:

FILE: packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/utils.py
  function dont_throw (line 6) | def dont_throw(func):

FILE: packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/wrapper.py
  function _with_tracer_wrapper (line 14) | def _with_tracer_wrapper(func):
  function _set_span_attribute (line 26) | def _set_span_attribute(span, name, value):
  function _wrap (line 34) | def _wrap(tracer, to_wrap, wrapped, instance, args, kwargs):
  function _encode_where (line 71) | def _encode_where(where):
  function _encode_where_document (line 79) | def _encode_where_document(where_document):
  function _encode_include (line 87) | def _encode_include(include):
  function count_or_none (line 95) | def count_or_none(obj):
  function _set_add_attributes (line 103) | def _set_add_attributes(span, kwargs):
  function _set_get_attributes (line 125) | def _set_get_attributes(span, kwargs):
  function _set_peek_attributes (line 149) | def _set_peek_attributes(span, kwargs):
  function _set_query_attributes (line 154) | def _set_query_attributes(span, kwargs):
  function _set_segment_query_attributes (line 184) | def _set_segment_query_attributes(span, kwargs, args=None):
  function _add_segment_query_embeddings_events (line 197) | def _add_segment_query_embeddings_events(span, kwargs, args=None):
  function _add_query_result_events (line 214) | def _add_query_result_events(span, kwargs):
  function _set_modify_attributes (line 281) | def _set_modify_attributes(span, kwargs):
  function _set_update_attributes (line 287) | def _set_update_attributes(span, kwargs):
  function _set_upsert_attributes (line 311) | def _set_upsert_attributes(span, kwargs):
  function _set_delete_attributes (line 330) | def _set_delete_attributes(span, kwargs):

FILE: packages/opentelemetry-instrumentation-chromadb/tests/conftest.py
  function exporter (line 14) | def exporter():
  function clear_exporter (line 28) | def clear_exporter(exporter):

FILE: packages/opentelemetry-instrumentation-chromadb/tests/test_query.py
  function collection (line 12) | def collection():
  function add_documents (line 17) | def add_documents(collection, with_metadata=False):
  function test_chroma_add (line 55) | def test_chroma_add(exporter, collection):
  function test_chroma_query (line 68) | def test_chroma_query(exporter, collection):
  function test_chroma_query_with_metadata (line 100) | def test_chroma_query_with_metadata(exporter, collection):
  function test_chroma_query_segment_query (line 137) | def test_chroma_query_segment_query(exporter, collection):

FILE: packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/__init__.py
  function _with_tracer_wrapper (line 167) | def _with_tracer_wrapper(func):
  function _llm_request_type_by_method (line 179) | def _llm_request_type_by_method(method_name):
  function _handle_input_content (line 193) | def _handle_input_content(span, event_logger, llm_request_type, kwargs):
  function _handle_response_content (line 200) | def _handle_response_content(span, event_logger, llm_request_type, respo...
  function _wrap (line 207) | def _wrap(
  function _awrap (line 256) | async def _awrap(
  class CohereInstrumentor (line 299) | class CohereInstrumentor(BaseInstrumentor):
    method __init__ (line 302) | def __init__(self, exception_logger=None, use_legacy_attributes=True):
    method instrumentation_dependencies (line 307) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 310) | def _instrument(self, **kwargs):
    method _uninstrument (line 346) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/config.py
  class Config (line 1) | class Config:

FILE: packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/event_emitter.py
  class Roles (line 19) | class Roles(Enum):
  function emit_input_event (line 35) | def emit_input_event(event_logger, llm_request_type: str, kwargs):
  function emit_response_events (line 56) | def emit_response_events(event_logger, llm_request_type: str, response):
  function emit_event (line 70) | def emit_event(
  function _emit_message_event (line 90) | def _emit_message_event(event: MessageEvent, event_logger: Logger) -> None:
  function _emit_choice_event (line 122) | def _emit_choice_event(event: ChoiceEvent, event_logger: Logger) -> None:
  function _parse_response_event (line 147) | def _parse_response_event(index: int, llm_request_type: str, response) -...

FILE: packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/event_models.py
  class _FunctionToolCall (line 5) | class _FunctionToolCall(TypedDict):
  class ToolCall (line 10) | class ToolCall(TypedDict):
  class CompletionMessage (line 18) | class CompletionMessage(TypedDict):
  class MessageEvent (line 26) | class MessageEvent:
  class ChoiceEvent (line 35) | class ChoiceEvent:

FILE: packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/span_utils.py
  function _set_span_attribute (line 18) | def _set_span_attribute(span, name, value):
  function set_input_content_attributes (line 26) | def set_input_content_attributes(span, llm_request_type, kwargs):
  function set_response_content_attributes (line 117) | def set_response_content_attributes(span, llm_request_type, response):
  function set_span_request_attributes (line 132) | def set_span_request_attributes(span, kwargs):
  function set_span_response_attributes (line 159) | def set_span_response_attributes(span, response):
  function _set_span_chat_response (line 242) | def _set_span_chat_response(span, response):
  function _set_span_generations_response (line 286) | def _set_span_generations_response(span, response):
  function _set_span_rerank_response (line 299) | def _set_span_rerank_response(span, response):

FILE: packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/streaming.py
  function process_chat_v1_streaming_response (line 22) | def process_chat_v1_streaming_response(span, event_logger, llm_request_t...
  function aprocess_chat_v1_streaming_response (line 47) | async def aprocess_chat_v1_streaming_response(span, event_logger, llm_re...
  function process_chat_v2_streaming_response (line 71) | def process_chat_v2_streaming_response(span, event_logger, llm_request_t...
  function aprocess_chat_v2_streaming_response (line 111) | async def aprocess_chat_v2_streaming_response(span, event_logger, llm_re...
  function _accumulate_stream_item (line 148) | def _accumulate_stream_item(item, current_content_item, current_tool_cal...

FILE: packages/opentelemetry-instrumentation-cohere/opentelemetry/instrumentation/cohere/utils.py
  function dont_throw (line 13) | def dont_throw(func):
  function should_send_prompts (line 38) | def should_send_prompts():
  function should_emit_events (line 44) | def should_emit_events() -> bool:
  function dump_object (line 52) | def dump_object(obj):
  function to_dict (line 64) | def to_dict(obj):

FILE: packages/opentelemetry-instrumentation-cohere/tests/conftest.py
  function fixture_span_exporter (line 22) | def fixture_span_exporter():
  function fixture_tracer_provider (line 28) | def fixture_tracer_provider(span_exporter):
  function fixture_log_exporter (line 35) | def fixture_log_exporter():
  function fixture_logger_provider (line 41) | def fixture_logger_provider(log_exporter):
  function cohere_client (line 48) | def cohere_client():
  function async_cohere_client (line 53) | def async_cohere_client():
  function cohere_client_v2 (line 58) | def cohere_client_v2():
  function async_cohere_client_v2 (line 63) | def async_cohere_client_v2():
  function instrument_legacy (line 68) | def instrument_legacy(tracer_provider):
  function instrument_with_content (line 80) | def instrument_with_content(tracer_provider, logger_provider):
  function instrument_with_no_content (line 96) | def instrument_with_no_content(tracer_provider, logger_provider):
  function environment (line 112) | def environment():
  function vcr_config (line 118) | def vcr_config():

FILE: packages/opentelemetry-instrumentation-cohere/tests/test_chat.py
  function test_cohere_chat_legacy (line 49) | def test_cohere_chat_legacy(
  function test_cohere_v2_chat_legacy (line 86) | def test_cohere_v2_chat_legacy(
  function test_cohere_chat_legacy_with_streaming (line 130) | def test_cohere_chat_legacy_with_streaming(
  function test_cohere_v2_chat_legacy_with_streaming (line 172) | def test_cohere_v2_chat_legacy_with_streaming(
  function test_cohere_v2_chat_legacy_with_tool_calls_and_history (line 222) | def test_cohere_v2_chat_legacy_with_tool_calls_and_history(
  function test_cohere_v2_chat_legacy_with_tool_calls_and_streaming (line 414) | def test_cohere_v2_chat_legacy_with_tool_calls_and_streaming(
  function test_cohere_chat_with_events_with_content (line 515) | def test_cohere_chat_with_events_with_content(
  function test_cohere_chat_with_events_with_no_content (line 544) | def test_cohere_chat_with_events_with_no_content(
  function test_cohere_chat_legacy_async (line 574) | async def test_cohere_chat_legacy_async(
  function test_cohere_chat_with_events_with_content_async (line 612) | async def test_cohere_chat_with_events_with_content_async(
  function test_cohere_chat_with_events_with_no_content_async (line 642) | async def test_cohere_chat_with_events_with_no_content_async(
  function test_cohere_chat_legacy_with_streaming_async (line 672) | async def test_cohere_chat_legacy_with_streaming_async(
  function test_cohere_v2_chat_legacy_with_streaming_async (line 715) | async def test_cohere_v2_chat_legacy_with_streaming_async(
  function test_cohere_v2_chat_legacy_with_tool_calls_and_history_async (line 766) | async def test_cohere_v2_chat_legacy_with_tool_calls_and_history_async(
  function test_cohere_v2_chat_legacy_with_tool_calls_and_streaming_async (line 918) | async def test_cohere_v2_chat_legacy_with_tool_calls_and_streaming_async(
  function assert_message_in_logs (line 1018) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-cohere/tests/test_completion.py
  function test_cohere_completion_legacy (line 10) | def test_cohere_completion_legacy(
  function test_cohere_completion_with_events_with_content (line 41) | def test_cohere_completion_with_events_with_content(
  function test_cohere_completion_with_events_with_no_content (line 70) | def test_cohere_completion_with_events_with_no_content(
  function assert_message_in_logs (line 97) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-cohere/tests/test_embed.py
  function test_cohere_v2_embed_legacy (line 7) | def test_cohere_v2_embed_legacy(
  function test_cohere_v2_embed_legacy_async (line 66) | async def test_cohere_v2_embed_legacy_async(

FILE: packages/opentelemetry-instrumentation-cohere/tests/test_rerank.py
  function test_cohere_rerank_legacy (line 10) | def test_cohere_rerank_legacy(
  function test_cohere_rerank_with_events_with_content (line 90) | def test_cohere_rerank_with_events_with_content(
  function test_cohere_rerank_with_events_with_no_content (line 154) | def test_cohere_rerank_with_events_with_no_content(
  function test_cohere_v2_rerank_legacy (line 205) | def test_cohere_v2_rerank_legacy(
  function test_cohere_v2_rerank_legacy_async (line 286) | async def test_cohere_v2_rerank_legacy_async(
  function assert_message_in_logs (line 365) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/crewai_span_attributes.py
  function set_span_attribute (line 6) | def set_span_attribute(span: Span, name, value):
  class CrewAISpanAttributes (line 13) | class CrewAISpanAttributes:
    method __init__ (line 14) | def __init__(self, span: Span, instance) -> None:
    method process_instance (line 20) | def process_instance(self):
    method _process_crew (line 32) | def _process_crew(self):
    method _process_agent (line 37) | def _process_agent(self):
    method _process_task (line 42) | def _process_task(self):
    method _process_llm (line 47) | def _process_llm(self):
    method _populate_crew_attributes (line 80) | def _populate_crew_attributes(self):
    method _populate_agent_attributes (line 91) | def _populate_agent_attributes(self):
    method _populate_task_attributes (line 94) | def _populate_task_attributes(self):
    method _populate_llm_attributes (line 100) | def _populate_llm_attributes(self):
    method _parse_agents (line 103) | def _parse_agents(self, agents):
    method _parse_tasks (line 108) | def _parse_tasks(self, tasks):
    method _extract_agent_data (line 122) | def _extract_agent_data(self, agent):
    method _extract_attributes (line 142) | def _extract_attributes(self, obj):
    method _serialize_tools (line 153) | def _serialize_tools(self, tools):
    method _set_attribute (line 161) | def _set_attribute(self, key, value):

FILE: packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py
  class CrewAIInstrumentor (line 21) | class CrewAIInstrumentor(BaseInstrumentor):
    method instrumentation_dependencies (line 23) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 26) | def _instrument(self, **kwargs):
    method _uninstrument (line 47) | def _uninstrument(self, **kwargs):
  function with_tracer_wrapper (line 54) | def with_tracer_wrapper(func):
  function wrap_kickoff (line 65) | def wrap_kickoff(tracer: Tracer, duration_histogram: Histogram, token_hi...
  function wrap_agent_execute_task (line 92) | def wrap_agent_execute_task(tracer, duration_histogram, token_histogram,...
  function wrap_task_execute (line 132) | def wrap_task_execute(tracer, duration_histogram, token_histogram, wrapp...
  function wrap_llm_call (line 154) | def wrap_llm_call(tracer, duration_histogram, token_histogram, wrapped, ...
  function is_metrics_enabled (line 184) | def is_metrics_enabled() -> bool:
  function _create_metrics (line 188) | def _create_metrics(meter: Meter):

FILE: packages/opentelemetry-instrumentation-crewai/tests/test_crewai_instrumentation.py
  function mock_instrumentor (line 9) | def mock_instrumentor():
  function mock_crew (line 17) | def mock_crew():
  function test_crewai_instrumentation (line 44) | def test_crewai_instrumentation(mock_crew, mock_instrumentor):
  function test_trace_status (line 57) | def test_trace_status(mock_crew, mock_instrumentor):

FILE: packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/__init__.py
  function is_streaming_response (line 73) | def is_streaming_response(response):
  function is_async_streaming_response (line 77) | def is_async_streaming_response(response):
  function _build_from_streaming_response (line 81) | def _build_from_streaming_response(
  function _abuild_from_streaming_response (line 107) | async def _abuild_from_streaming_response(
  function _handle_request (line 130) | def _handle_request(span, args, kwargs, llm_model, event_logger):
  function _handle_response (line 140) | def _handle_response(span, response, llm_model, event_logger, token_hist...
  function _with_tracer_wrapper (line 149) | def _with_tracer_wrapper(func):
  function _awrap (line 174) | async def _awrap(
  function _wrap (line 250) | def _wrap(
  function is_metrics_enabled (line 326) | def is_metrics_enabled() -> bool:
  function _create_metrics (line 330) | def _create_metrics(meter: Meter):
  class GoogleGenerativeAiInstrumentor (line 346) | class GoogleGenerativeAiInstrumentor(BaseInstrumentor):
    method __init__ (line 349) | def __init__(
    method instrumentation_dependencies (line 361) | def instrumentation_dependencies(self) -> Collection[str]:
    method _wrapped_methods (line 364) | def _wrapped_methods(self):
    method _instrument (line 367) | def _instrument(self, **kwargs):
    method _uninstrument (line 412) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/config.py
  class Config (line 4) | class Config:

FILE: packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/event_emitter.py
  class Roles (line 21) | class Roles(Enum):
  function emit_message_events (line 35) | def emit_message_events(args, kwargs, event_logger: Logger):
  function emit_choice_events (line 57) | def emit_choice_events(
  function emit_event (line 74) | def emit_event(
  function _emit_message_event (line 94) | def _emit_message_event(event: MessageEvent, event_logger: Logger) -> None:
  function _emit_choice_event (line 127) | def _emit_choice_event(event: ChoiceEvent, event_logger: Logger) -> None:

FILE: packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/event_models.py
  class _FunctionToolCall (line 5) | class _FunctionToolCall(TypedDict):
  class ToolCall (line 10) | class ToolCall(TypedDict):
  class CompletionMessage (line 18) | class CompletionMessage(TypedDict):
  class MessageEvent (line 26) | class MessageEvent:
  class ChoiceEvent (line 35) | class ChoiceEvent:

FILE: packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/span_utils.py
  function _set_span_attribute (line 23) | def _set_span_attribute(span, name, value):
  function _is_image_part (line 30) | def _is_image_part(item):
  function _process_image_part (line 47) | async def _process_image_part(item, trace_id, span_id, content_index):
  function run_async (line 75) | def run_async(method):
  function _process_image_part_sync (line 90) | def _process_image_part_sync(item, trace_id, span_id, content_index):
  function _process_content_item (line 123) | async def _process_content_item(content_item, span):
  function _process_content_part (line 150) | async def _process_content_part(part, span, part_index):
  function _set_prompt_attributes (line 163) | def _set_prompt_attributes(span, prompt_index, processed_content, conten...
  function _process_argument (line 177) | async def _process_argument(argument, span):
  function set_input_attributes (line 208) | async def set_input_attributes(span, args, kwargs, llm_model):
  function set_input_attributes_sync (line 263) | def set_input_attributes_sync(span, args, kwargs, llm_model):
  function set_model_request_attributes (line 376) | def set_model_request_attributes(span, kwargs, llm_model):
  function set_response_attributes (line 418) | def set_response_attributes(span, response, llm_model):
  function set_model_response_attributes (line 449) | def set_model_response_attributes(span, response, llm_model, token_histo...

FILE: packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/utils.py
  function dont_throw (line 13) | def dont_throw(func):
  function should_send_prompts (line 38) | def should_send_prompts():
  function should_emit_events (line 44) | def should_emit_events() -> bool:
  function part_to_dict (line 53) | def part_to_dict(part):
  function is_package_installed (line 74) | def is_package_installed(package_name: str) -> bool:

FILE: packages/opentelemetry-instrumentation-google-generativeai/tests/conftest.py
  function exporter (line 37) | def exporter(metrics_test_context):
  function tracer_provider (line 52) | def tracer_provider():
  function fixture_log_exporter (line 58) | def fixture_log_exporter():
  function fixture_logger_provider (line 64) | def fixture_logger_provider(log_exporter):
  function genai_client (line 71) | def genai_client():
  function instrument_legacy (line 77) | def instrument_legacy(tracer_provider):
  function metrics_test_context (line 89) | def metrics_test_context():
  function clear_metrics_test_context (line 98) | def clear_metrics_test_context(metrics_test_context):
  function instrument_with_content (line 106) | def instrument_with_content(tracer_provider, logger_provider):
  function instrument_with_no_content (line 122) | def instrument_with_no_content(tracer_provider, logger_provider):
  function vcr_config (line 138) | def vcr_config():
  function environment (line 143) | def environment():

FILE: packages/opentelemetry-instrumentation-google-generativeai/tests/test_generate_content.py
  function assert_message_in_logs (line 14) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...
  function test_client_spans (line 26) | def test_client_spans(exporter, genai_client):
  function test_generate_metrics (line 60) | def test_generate_metrics(metrics_test_context, genai_client):

FILE: packages/opentelemetry-instrumentation-google-generativeai/tests/test_new_library_instrumentation.py
  function _is_instrumented (line 9) | def _is_instrumented(func):
  function test_google_genai_instrumentation_lifecycle (line 20) | def test_google_genai_instrumentation_lifecycle():
  function test_instrumentation_dependencies (line 54) | def test_instrumentation_dependencies():
  function test_wrapped_methods (line 63) | def test_wrapped_methods():

FILE: packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/__init__.py
  function is_streaming_response (line 71) | def is_streaming_response(response):
  function _with_chat_telemetry_wrapper (line 75) | def _with_chat_telemetry_wrapper(func):
  function _create_metrics (line 105) | def _create_metrics(meter: Meter):
  function _process_streaming_chunk (line 127) | def _process_streaming_chunk(chunk):
  function _handle_streaming_response (line 144) | def _handle_streaming_response(
  function _create_stream_processor (line 156) | def _create_stream_processor(response, span, event_logger):
  function _create_async_stream_processor (line 182) | async def _create_async_stream_processor(response, span, event_logger):
  function _handle_input (line 208) | def _handle_input(span, kwargs, event_logger):
  function _handle_response (line 216) | def _handle_response(span, response, token_histogram, event_logger):
  function _wrap (line 225) | def _wrap(
  function _awrap (line 307) | async def _awrap(
  function is_metrics_enabled (line 382) | def is_metrics_enabled() -> bool:
  class GroqInstrumentor (line 386) | class GroqInstrumentor(BaseInstrumentor):
    method __init__ (line 389) | def __init__(
    method instrumentation_dependencies (line 400) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 403) | def _instrument(self, **kwargs):
    method _uninstrument (line 472) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/config.py
  class Config (line 4) | class Config:

FILE: packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/event_emitter.py
  class Roles (line 19) | class Roles(Enum):
  function emit_message_events (line 37) | def emit_message_events(kwargs: dict, event_logger):
  function emit_choice_events (line 48) | def emit_choice_events(response: ChatCompletion, event_logger):
  function emit_streaming_response_events (line 64) | def emit_streaming_response_events(
  function emit_event (line 78) | def emit_event(
  function _emit_message_event (line 98) | def _emit_message_event(event: MessageEvent, event_logger: Logger) -> None:
  function _emit_choice_event (line 130) | def _emit_choice_event(event: ChoiceEvent, event_logger: Logger) -> None:

FILE: packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/event_models.py
  class _FunctionToolCall (line 5) | class _FunctionToolCall(TypedDict):
  class ToolCall (line 10) | class ToolCall(TypedDict):
  class CompletionMessage (line 18) | class CompletionMessage(TypedDict):
  class MessageEvent (line 26) | class MessageEvent:
  class ChoiceEvent (line 35) | class ChoiceEvent:

FILE: packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/span_utils.py
  function set_input_attributes (line 23) | def set_input_attributes(span, kwargs):
  function set_model_input_attributes (line 46) | def set_model_input_attributes(span, kwargs):
  function set_streaming_response_attributes (line 69) | def set_streaming_response_attributes(
  function set_model_streaming_response_attributes (line 83) | def set_model_streaming_response_attributes(span, usage):
  function set_model_response_attributes (line 100) | def set_model_response_attributes(span, response, token_histogram):
  function set_response_attributes (line 146) | def set_response_attributes(span, response):
  function _set_completions (line 154) | def _set_completions(span, choices):
  function _dump_content (line 215) | def _dump_content(content):

FILE: packages/opentelemetry-instrumentation-groq/opentelemetry/instrumentation/groq/utils.py
  function set_span_attribute (line 20) | def set_span_attribute(span, name, value):
  function should_send_prompts (line 25) | def should_send_prompts():
  function dont_throw (line 31) | def dont_throw(func):
  function shared_metrics_attributes (line 57) | def shared_metrics_attributes(response):
  function error_metrics_attributes (line 70) | def error_metrics_attributes(exception):
  function model_as_dict (line 77) | def model_as_dict(model):
  function should_emit_events (line 88) | def should_emit_events() -> bool:

FILE: packages/opentelemetry-instrumentation-groq/tests/traces/conftest.py
  function fixture_span_exporter (line 26) | def fixture_span_exporter():
  function fixture_tracer_provider (line 32) | def fixture_tracer_provider(span_exporter):
  function fixture_log_exporter (line 39) | def fixture_log_exporter():
  function fixture_logger_provider (line 45) | def fixture_logger_provider(log_exporter):
  function fixture_reader (line 52) | def fixture_reader():
  function fixture_meter_provider (line 60) | def fixture_meter_provider(reader):
  function groq_client (line 68) | def groq_client():
  function async_groq_client (line 75) | def async_groq_client():
  function instrument_legacy (line 82) | def instrument_legacy(reader, tracer_provider, meter_provider):
  function instrument_with_content (line 95) | def instrument_with_content(
  function instrument_with_no_content (line 116) | def instrument_with_no_content(
  function environment (line 137) | def environment():
  function vcr_config (line 143) | def vcr_config():

FILE: packages/opentelemetry-instrumentation-groq/tests/traces/test_chat_tracing.py
  function test_chat_legacy (line 10) | def test_chat_legacy(instrument_legacy, groq_client, span_exporter, log_...
  function test_chat_with_events_with_content (line 43) | def test_chat_with_events_with_content(
  function test_chat_with_events_with_no_content (line 90) | def test_chat_with_events_with_no_content(
  function test_async_chat_legacy (line 131) | async def test_async_chat_legacy(
  function test_async_chat_with_events_with_content (line 167) | async def test_async_chat_with_events_with_content(
  function test_async_chat_with_events_with_no_content (line 216) | async def test_async_chat_with_events_with_no_content(
  function test_chat_streaming_legacy (line 256) | def test_chat_streaming_legacy(
  function test_chat_streaming_with_events_with_content (line 296) | def test_chat_streaming_with_events_with_content(
  function test_chat_streaming_with_events_with_no_content (line 346) | def test_chat_streaming_with_events_with_no_content(
  function assert_message_in_logs (line 387) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-haystack/opentelemetry/instrumentation/haystack/__init__.py
  class HaystackInstrumentor (line 43) | class HaystackInstrumentor(BaseInstrumentor):
    method __init__ (line 46) | def __init__(self, exception_logger=None):
    method instrumentation_dependencies (line 50) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 53) | def _instrument(self, **kwargs):
    method _uninstrument (line 67) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-haystack/opentelemetry/instrumentation/haystack/config.py
  class Config (line 1) | class Config:

FILE: packages/opentelemetry-instrumentation-haystack/opentelemetry/instrumentation/haystack/utils.py
  class EnhancedJSONEncoder (line 12) | class EnhancedJSONEncoder(json.JSONEncoder):
    method default (line 13) | def default(self, o):
  function should_send_prompts (line 21) | def should_send_prompts():
  function dont_throw (line 27) | def dont_throw(func):
  function process_request (line 51) | def process_request(span, args, kwargs):
  function process_response (line 67) | def process_response(span, response):
  function set_span_attribute (line 75) | def set_span_attribute(span, name, value):
  function with_tracer_wrapper (line 82) | def with_tracer_wrapper(func):
  function dont_throw (line 98) | def dont_throw(func):

FILE: packages/opentelemetry-instrumentation-haystack/opentelemetry/instrumentation/haystack/wrap_node.py
  function wrap (line 14) | def wrap(tracer, to_wrap, wrapped, instance, args, kwargs):

FILE: packages/opentelemetry-instrumentation-haystack/opentelemetry/instrumentation/haystack/wrap_openai.py
  function _set_input_attributes (line 22) | def _set_input_attributes(span, llm_request_type, kwargs):
  function _set_span_completions (line 67) | def _set_span_completions(span, llm_request_type, choices):
  function _set_response_attributes (line 83) | def _set_response_attributes(span, llm_request_type, response):
  function _llm_request_type_by_object (line 87) | def _llm_request_type_by_object(object_name):
  function wrap (line 97) | def wrap(tracer, to_wrap, wrapped, instance, args, kwargs):

FILE: packages/opentelemetry-instrumentation-haystack/opentelemetry/instrumentation/haystack/wrap_pipeline.py
  function wrap (line 18) | def wrap(tracer, to_wrap, wrapped, instance, args, kwargs):

FILE: packages/opentelemetry-instrumentation-haystack/tests/conftest.py
  function exporter (line 15) | def exporter():
  function environment (line 29) | def environment():
  function clear_exporter (line 35) | def clear_exporter(exporter):
  function vcr_config (line 40) | def vcr_config():

FILE: packages/opentelemetry-instrumentation-haystack/tests/test_placeholder.py
  function test_placeholder (line 1) | def test_placeholder():

FILE: packages/opentelemetry-instrumentation-haystack/tests/test_simple_pipeline.py
  function test_haystack (line 12) | def test_haystack(exporter):

FILE: packages/opentelemetry-instrumentation-lancedb/opentelemetry/instrumentation/lancedb/__init__.py
  class LanceInstrumentor (line 44) | class LanceInstrumentor(BaseInstrumentor):
    method __init__ (line 47) | def __init__(self, exception_logger=None):
    method instrumentation_dependencies (line 51) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 54) | def _instrument(self, **kwargs):
    method _uninstrument (line 68) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-lancedb/opentelemetry/instrumentation/lancedb/config.py
  class Config (line 1) | class Config:

FILE: packages/opentelemetry-instrumentation-lancedb/opentelemetry/instrumentation/lancedb/utils.py
  function dont_throw (line 6) | def dont_throw(func):

FILE: packages/opentelemetry-instrumentation-lancedb/opentelemetry/instrumentation/lancedb/wrapper.py
  function _with_tracer_wrapper (line 11) | def _with_tracer_wrapper(func):
  function _set_span_attribute (line 23) | def _set_span_attribute(span, name, value):
  function _wrap (line 31) | def _wrap(tracer, to_wrap, wrapped, instance, args, kwargs):
  function _encode_query (line 53) | def _encode_query(_query):
  function _count_or_none (line 61) | def _count_or_none(obj):
  function _set_add_attributes (line 69) | def _set_add_attributes(span, kwargs):
  function _set_search_attributes (line 76) | def _set_search_attributes(span, kwargs):
  function _set_delete_attributes (line 83) | def _set_delete_attributes(span, kwargs):

FILE: packages/opentelemetry-instrumentation-lancedb/tests/conftest.py
  function exporter (line 14) | def exporter():
  function clear_exporter (line 28) | def clear_exporter(exporter):

FILE: packages/opentelemetry-instrumentation-lancedb/tests/test_query.py
  function collection (line 9) | def collection():
  function add_data (line 18) | def add_data(collection):
  function test_lancedb_add (line 27) | def test_lancedb_add(exporter, collection):
  function test_lancedb_search (line 39) | def test_lancedb_search(exporter, collection):
  function test_lancedb_delete (line 52) | def test_lancedb_delete(exporter, collection):

FILE: packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py
  class LangchainInstrumentor (line 39) | class LangchainInstrumentor(BaseInstrumentor):
    method __init__ (line 42) | def __init__(
    method instrumentation_dependencies (line 66) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 69) | def _instrument(self, **kwargs):
    method _wrap_openai_functions_for_tracing (line 112) | def _wrap_openai_functions_for_tracing(self, traceloopCallbackHandler):
    method _wrap_langgraph_components (line 192) | def _wrap_langgraph_components(self, tracer):
    method _wrap_agent_factories (line 227) | def _wrap_agent_factories(self, tracer):
    method _wrap_middleware_hooks (line 273) | def _wrap_middleware_hooks(self, tracer):
    method _uninstrument (line 299) | def _uninstrument(self, **kwargs):
  class _BaseCallbackManagerInitWrapper (line 363) | class _BaseCallbackManagerInitWrapper:
    method __init__ (line 364) | def __init__(self, callback_handler: "TraceloopCallbackHandler"):
    method __call__ (line 367) | def __call__(
  class _OpenAITracingWrapper (line 393) | class _OpenAITracingWrapper:
    method __init__ (line 394) | def __init__(self, callback_manager: "TraceloopCallbackHandler"):
    method __call__ (line 397) | def __call__(

FILE: packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py
  function _extract_class_name_from_serialized (line 89) | def _extract_class_name_from_serialized(serialized: Optional[dict[str, A...
  function _sanitize_metadata_value (line 108) | def _sanitize_metadata_value(value: Any) -> Any:
  function valid_role (line 120) | def valid_role(role: str) -> bool:
  function get_message_role (line 124) | def get_message_role(message: Type[BaseMessage]) -> str:
  function _extract_tool_call_data (line 137) | def _extract_tool_call_data(
  class TraceloopCallbackHandler (line 163) | class TraceloopCallbackHandler(BaseCallbackHandler):
    method __init__ (line 164) | def __init__(
    method _get_name_from_callback (line 176) | def _get_name_from_callback(
    method _get_span (line 194) | def _get_span(self, run_id: UUID) -> Span:
    method _end_span (line 197) | def _end_span(self, span: Span, run_id: UUID) -> None:
    method _safe_attach_context (line 210) | def _safe_attach_context(self, span: Span):
    method _safe_detach_context (line 224) | def _safe_detach_context(self, token):
    method _create_span (line 257) | def _create_span(
    method _create_task_span (line 340) | def _create_task_span(
    method _create_llm_span (line 428) | def _create_llm_span(
    method on_chain_start (line 477) | def on_chain_start(
    method on_chain_end (line 568) | def on_chain_end(
    method on_chat_model_start (line 609) | def on_chat_model_start(
    method on_llm_start (line 640) | def on_llm_start(
    method on_llm_end (line 671) | def on_llm_end(
    method on_tool_start (line 783) | def on_tool_start(
    method on_tool_end (line 831) | def on_tool_end(
    method on_retriever_start (line 860) | def on_retriever_start(
    method on_retriever_end (line 919) | def on_retriever_end(
    method get_parent_span (line 959) | def get_parent_span(self, parent_run_id: Optional[str] = None):
    method get_workflow_name (line 964) | def get_workflow_name(self, parent_run_id: str):
    method get_entity_path (line 972) | def get_entity_path(self, parent_run_id: str):
    method _handle_error (line 987) | def _handle_error(
    method on_llm_error (line 1006) | def on_llm_error(
    method on_chain_error (line 1018) | def on_chain_error(
    method on_tool_error (line 1030) | def on_tool_error(
    method on_agent_error (line 1044) | def on_agent_error(
    method on_retriever_error (line 1056) | def on_retriever_error(
    method _emit_chat_input_events (line 1067) | def _emit_chat_input_events(self, messages):
    method _emit_llm_end_events (line 1082) | def _emit_llm_end_events(self, response):
    method _emit_generation_choice_event (line 1087) | def _emit_generation_choice_event(

FILE: packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/config.py
  class Config (line 7) | class Config:

FILE: packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/event_emitter.py
  class Roles (line 21) | class Roles(Enum):
  function emit_event (line 35) | def emit_event(event: Union[MessageEvent, ChoiceEvent]) -> None:
  function _emit_message_event (line 53) | def _emit_message_event(event: MessageEvent) -> None:
  function _emit_choice_event (line 85) | def _emit_choice_event(event: ChoiceEvent) -> None:

FILE: packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/event_models.py
  class _FunctionToolCall (line 5) | class _FunctionToolCall(TypedDict):
  class ToolCall (line 10) | class ToolCall(TypedDict):
  class CompletionMessage (line 18) | class CompletionMessage(TypedDict):
  class MessageEvent (line 26) | class MessageEvent:
  class ChoiceEvent (line 35) | class ChoiceEvent:

FILE: packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/langgraph_utils.py
  function extract_graph_structure (line 6) | def extract_graph_structure(graph_instance: Any) -> tuple[list[str], lis...

FILE: packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/patch.py
  function _get_current_node_contextvar (line 18) | def _get_current_node_contextvar():
  function _set_graph_span_attributes (line 31) | def _set_graph_span_attributes(
  function _get_graph_name (line 79) | def _get_graph_name(instance, args, kwargs) -> str:
  function create_graph_invocation_wrapper (line 110) | def create_graph_invocation_wrapper(tracer: Tracer, is_async: bool = Fal...
  function create_command_init_wrapper (line 208) | def create_command_init_wrapper(tracer: Tracer):
  function _extract_goto_destinations (line 268) | def _extract_goto_destinations(goto: Any) -> list[str]:
  function _set_middleware_span_attributes (line 300) | def _set_middleware_span_attributes(
  function create_middleware_hook_wrapper (line 327) | def create_middleware_hook_wrapper(tracer: Tracer, hook_name: str):
  function create_async_middleware_hook_wrapper (line 361) | def create_async_middleware_hook_wrapper(tracer: Tracer, hook_name: str):
  function _extract_tool_definition (line 391) | def _extract_tool_definition(tool: Any) -> dict | None:
  function create_agent_wrapper (line 437) | def create_agent_wrapper(tracer: Tracer, provider_name: str = "langchain"):

FILE: packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py
  class SpanHolder (line 29) | class SpanHolder:
  function _message_type_to_role (line 41) | def _message_type_to_role(message_type: str) -> str:
  function _set_span_attribute (line 54) | def _set_span_attribute(span: Span, key: str, value: Any) -> None:
  function set_request_params (line 62) | def set_request_params(span, kwargs, span_holder: SpanHolder):
  function set_llm_request (line 119) | def set_llm_request(
  function set_chat_request (line 142) | def set_chat_request(
  function set_chat_response (line 206) | def set_chat_response(span: Span, response: LLMResult) -> None:
  function set_chat_response_usage (line 287) | def set_chat_response_usage(
  function extract_model_name_from_response_metadata (line 383) | def extract_model_name_from_response_metadata(response: LLMResult) -> str:
  function _extract_model_name_from_association_metadata (line 394) | def _extract_model_name_from_association_metadata(metadata: Optional[dic...
  function _set_chat_tool_calls (line 400) | def _set_chat_tool_calls(

FILE: packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/utils.py
  class CallbackFilteredJSONEncoder (line 22) | class CallbackFilteredJSONEncoder(json.JSONEncoder):
    method default (line 23) | def default(self, o):
  function should_send_prompts (line 49) | def should_send_prompts():
  function dont_throw (line 55) | def dont_throw(func):
  function should_emit_events (line 80) | def should_emit_events() -> bool:
  function is_package_available (line 90) | def is_package_available(package_name):

FILE: packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/vendor_detection.py
  class VendorRule (line 6) | class VendorRule:
    method matches (line 11) | def matches(self, class_name: str) -> bool:
  function _get_vendor_rules (line 18) | def _get_vendor_rules() -> List[VendorRule]:
  function detect_vendor_from_class (line 100) | def detect_vendor_from_class(class_name: str) -> str:

FILE: packages/opentelemetry-instrumentation-langchain/tests/conftest.py
  function fixture_span_exporter (line 31) | def fixture_span_exporter():
  function fixture_tracer_provider (line 37) | def fixture_tracer_provider(span_exporter):
  function fixture_log_exporter (line 44) | def fixture_log_exporter():
  function fixture_logger_provider (line 50) | def fixture_logger_provider(log_exporter):
  function fixture_reader (line 57) | def fixture_reader():
  function fixture_meter_provider (line 65) | def fixture_meter_provider(reader):
  function instrument_legacy (line 73) | def instrument_legacy(reader, tracer_provider, meter_provider):
  function instrument_with_content (line 95) | def instrument_with_content(instrument_legacy, logger_provider):
  function instrument_with_no_content (line 112) | def instrument_with_no_content(instrument_legacy, logger_provider):
  function clear_exporter (line 129) | def clear_exporter(span_exporter):
  function environment (line 134) | def environment():
  function vcr_config (line 146) | def vcr_config():

FILE: packages/opentelemetry-instrumentation-langchain/tests/metrics/test_langchain_metrics.py
  function openai_client (line 16) | def openai_client():
  function llm (line 21) | def llm():
  function chain (line 26) | def chain(llm):
  function test_llm_chain_metrics (line 35) | def test_llm_chain_metrics(instrument_legacy, reader, chain):
  function test_llm_chain_streaming_metrics (line 80) | def test_llm_chain_streaming_metrics(instrument_legacy, reader, llm):
  function verify_token_metrics (line 131) | def verify_token_metrics(data_points):
  function verify_duration_metrics (line 141) | def verify_duration_metrics(data_points):
  function verify_langchain_metrics (line 148) | def verify_langchain_metrics(reader):
  function test_llm_chain_metrics_with_none_llm_output (line 173) | def test_llm_chain_metrics_with_none_llm_output(instrument_legacy, reade...
  function test_langgraph_metrics (line 197) | def test_langgraph_metrics(instrument_legacy, reader, openai_client):

FILE: packages/opentelemetry-instrumentation-langchain/tests/test_agents.py
  function test_agents (line 25) | def test_agents(instrument_legacy, span_exporter, log_exporter):
  function test_agents_with_events_with_content (line 66) | def test_agents_with_events_with_content(
  function test_agents_with_events_with_no_content (line 161) | def test_agents_with_events_with_no_content(
  function assert_message_in_logs (line 245) | def assert_message_in_logs(

FILE: packages/opentelemetry-instrumentation-langchain/tests/test_batch_metadata.py
  function test_batch_metadata_in_span_attributes (line 8) | def test_batch_metadata_in_span_attributes(instrument_legacy, span_expor...
  function test_async_batch_metadata_in_span_attributes (line 58) | async def test_async_batch_metadata_in_span_attributes(instrument_legacy...

FILE: packages/opentelemetry-instrumentation-langchain/tests/test_chains.py
  function test_sequential_chain (line 17) | def test_sequential_chain(instrument_legacy, span_exporter, log_exporter):
  function test_sequential_chain_with_events_with_content (line 139) | def test_sequential_chain_with_events_with_content(
  function test_sequential_chain_with_events_with_no_content (line 260) | def test_sequential_chain_with_events_with_no_content(
  function test_asequential_chain (line 362) | async def test_asequential_chain(instrument_legacy, span_exporter, log_e...
  function test_asequential_chain_with_events_with_content (line 448) | async def test_asequential_chain_with_events_with_content(
  function test_asequential_chain_with_events_with_no_content (line 533) | async def test_asequential_chain_with_events_with_no_content(
  function test_stream (line 601) | def test_stream(instrument_legacy, span_exporter, log_exporter):
  function test_stream_with_events_with_content (line 628) | def test_stream_with_events_with_content(
  function test_stream_with_events_with_no_content (line 671) | def test_stream_with_events_with_no_content(
  function test_astream (line 710) | async def test_astream(instrument_legacy, span_exporter, log_exporter):
  function test_astream_with_events_with_content (line 740) | async def test_astream_with_events_with_content(
  function test_astream_with_events_with_no_content (line 784) | async def test_astream_with_events_with_no_content(
  function assert_message_in_logs (line 819) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-langchain/tests/test_documents_chains.py
  function test_sequential_chain (line 38) | def test_sequential_chain(instrument_legacy, span_exporter, log_exporter):
  function test_sequential_chain_with_events_with_content (line 73) | def test_sequential_chain_with_events_with_content(
  function test_sequential_chain_with_events_with_no_content (line 119) | def test_sequential_chain_with_events_with_no_content(
  function assert_message_in_logs (line 156) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-langchain/tests/test_generation_role_extraction.py
  class TestCompletionRoleExtraction (line 17) | class TestCompletionRoleExtraction:
    method mock_span (line 21) | def mock_span(self):
    method test_chat_generation_with_ai_message_role (line 33) | def test_chat_generation_with_ai_message_role(self, mock_span, monkeyp...
    method test_chat_generation_with_tool_message_role (line 53) | def test_chat_generation_with_tool_message_role(self, mock_span, monke...
    method test_generation_without_message_defaults_to_assistant (line 75) | def test_generation_without_message_defaults_to_assistant(self, mock_s...
    method test_multiple_generations_with_different_roles (line 95) | def test_multiple_generations_with_different_roles(self, mock_span, mo...
    method test_generation_type_attribute_is_not_used (line 118) | def test_generation_type_attribute_is_not_used(self, mock_span, monkey...

FILE: packages/opentelemetry-instrumentation-langchain/tests/test_langgraph.py
  function test_langgraph_invoke (line 17) | def test_langgraph_invoke(instrument_legacy, span_exporter):
  function test_langgraph_ainvoke (line 84) | async def test_langgraph_ainvoke(instrument_legacy, span_exporter):
  function test_langgraph_double_invoke (line 126) | def test_langgraph_double_invoke(instrument_legacy, span_exporter):
  function test_langgraph_double_ainvoke (line 177) | async def test_langgraph_double_ainvoke(instrument_legacy, span_exporter):
  function test_nesting_of_langgraph_spans (line 223) | def test_nesting_of_langgraph_spans(instrument_legacy, span_exporter, tr...
  function test_context_detachment_error_handling (line 386) | def test_context_detachment_error_handling(
  function test_create_react_agent_span (line 527) | def test_create_react_agent_span(instrument_legacy, span_exporter):
  function test_retriever_span_attributes (line 561) | def test_retriever_span_attributes(instrument_legacy, span_exporter):
  function test_middleware_hook_span_attributes (line 586) | def test_middleware_hook_span_attributes(instrument_legacy, span_exporter):
  function test_langgraph_custom_name (line 606) | def test_langgraph_custom_name(instrument_legacy, span_exporter):
  function test_command_with_goto (line 635) | def test_command_with_goto(instrument_legacy, span_exporter):
  function test_send_extraction (line 679) | def test_send_extraction():
  function test_create_agent_with_system_prompt (line 708) | def test_create_agent_with_system_prompt(instrument_legacy, span_exporter):
  function test_async_middleware_hook (line 749) | async def test_async_middleware_hook(instrument_legacy, span_exporter):
  function test_middleware_super_call_succeeds_despite_outer_failure (line 771) | def test_middleware_super_call_succeeds_despite_outer_failure(instrument...

FILE: packages/opentelemetry-instrumentation-langchain/tests/test_lcel.py
  function test_simple_lcel (line 21) | def test_simple_lcel(instrument_legacy, span_exporter, log_exporter):
  function test_simple_lcel_with_events_with_content (line 137) | def test_simple_lcel_with_events_with_content(
  function test_simple_lcel_with_events_with_no_content (line 221) | def test_simple_lcel_with_events_with_no_content(
  function test_async_lcel (line 292) | async def test_async_lcel(instrument_legacy, span_exporter, log_exporter):
  function test_async_lcel_with_events_with_content (line 349) | async def test_async_lcel_with_events_with_content(
  function test_async_lcel_with_events_with_no_content (line 407) | async def test_async_lcel_with_events_with_no_content(
  function test_invoke (line 459) | def test_invoke(instrument_legacy, span_exporter, log_exporter):
  function test_invoke_with_events_with_content (line 488) | def test_invoke_with_events_with_content(
  function test_invoke_with_events_with_no_content (line 531) | def test_invoke_with_events_with_no_content(
  function test_stream (line 571) | def test_stream(instrument_legacy, span_exporter, log_exporter):
  function test_stream_with_events_with_content (line 604) | def test_stream_with_events_with_content(
  function test_stream_with_events_with_no_content (line 650) | def test_stream_with_events_with_no_content(
  function test_async_invoke (line 695) | async def test_async_invoke(instrument_legacy, span_exporter, log_export...
  function test_async_invoke_with_events_with_content (line 725) | async def test_async_invoke_with_events_with_content(
  function test_async_invoke_with_events_with_no_content (line 769) | async def test_async_invoke_with_events_with_no_content(
  function test_lcel_with_datetime (line 809) | def test_lcel_with_datetime(instrument_legacy, span_exporter, log_export...
  function test_lcel_with_datetime_with_events_with_content (line 867) | def test_lcel_with_datetime_with_events_with_content(
  function test_lcel_with_datetime_with_events_with_no_content (line 943) | def test_lcel_with_datetime_with_events_with_no_content(
  function assert_message_in_logs (line 1004) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-langchain/tests/test_llms.py
  function open_ai_prompt (line 42) | def open_ai_prompt():
  function test_custom_llm (line 127) | def test_custom_llm(instrument_legacy, span_exporter, log_exporter):
  function test_custom_llm_with_events_with_content (line 170) | def test_custom_llm_with_events_with_content(
  function test_custom_llm_with_events_with_no_content (line 221) | def test_custom_llm_with_events_with_no_content(
  function test_openai (line 265) | def test_openai(instrument_legacy, span_exporter, log_exporter):
  function test_openai_with_events_with_content (line 318) | def test_openai_with_events_with_content(
  function test_openai_with_events_with_no_content (line 369) | def test_openai_with_events_with_no_content(
  function test_openai_functions (line 418) | def test_openai_functions(instrument_legacy, span_exporter, log_exporter):
  function test_openai_functions_with_events_with_content (line 506) | def test_openai_functions_with_events_with_content(
  function test_openai_functions_with_events_with_no_content (line 579) | def test_openai_functions_with_events_with_no_content(
  function test_anthropic (line 639) | def test_anthropic(instrument_legacy, span_exporter, log_exporter):
  function test_anthropic_with_events_with_content (line 707) | def test_anthropic_with_events_with_content(
  function test_anthropic_with_events_with_no_content (line 763) | def test_anthropic_with_events_with_no_content(
  function test_bedrock (line 815) | def test_bedrock(instrument_legacy, span_exporter, log_exporter):
  function test_bedrock_with_events_with_content (line 887) | def test_bedrock_with_events_with_content(
  function test_bedrock_with_events_with_no_content (line 950) | def test_bedrock_with_events_with_no_content(
  function spy_decorator (line 1008) | def spy_decorator(method_to_decorate):
  function assert_request_contains_tracecontext (line 1019) | def assert_request_contains_tracecontext(request: httpx.Request, expecte...
  function test_trace_propagation (line 1031) | def test_trace_propagation(instrument_legacy, span_exporter, log_exporte...
  function test_trace_propagation_with_events_with_content (line 1068) | def test_trace_propagation_with_events_with_content(
  function test_trace_propagation_with_events_with_no_content (line 1145) | def test_trace_propagation_with_events_with_no_content(
  function test_trace_propagation_stream (line 1209) | def test_trace_propagation_stream(instrument_legacy, span_exporter, log_...
  function test_trace_propagation_stream_with_events_with_content (line 1243) | def test_trace_propagation_stream_with_events_with_content(
  function test_trace_propagation_stream_with_events_with_no_content (line 1297) | def test_trace_propagation_stream_with_events_with_no_content(
  function test_trace_propagation_async (line 1345) | async def test_trace_propagation_async(
  function test_trace_propagation_async_with_events_with_content (line 1378) | async def test_trace_propagation_async_with_events_with_content(
  function test_trace_propagation_async_with_events_with_no_content (line 1457) | async def test_trace_propagation_async_with_events_with_no_content(
  function test_trace_propagation_stream_async (line 1522) | async def test_trace_propagation_stream_async(
  function test_trace_propagation_stream_async_with_events_with_content (line 1559) | async def test_trace_propagation_stream_async_with_events_with_content(
  function test_trace_propagation_stream_async_with_events_with_no_content (line 1614) | async def test_trace_propagation_stream_async_with_events_with_no_content(
  function assert_message_in_logs (line 1659) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-langchain/tests/test_non_ascii_content.py
  function enable_content_tracing (line 14) | def enable_content_tracing(monkeypatch):
  function callback_handler (line 19) | def callback_handler(tracer_provider):
  function _start_chain (line 24) | def _start_chain(handler, run_id, inputs=None, parent_run_id=None, name=...
  function test_chain_start_preserves_non_ascii_in_entity_input (line 35) | def test_chain_start_preserves_non_ascii_in_entity_input(callback_handle...
  function test_chain_end_preserves_non_ascii_in_entity_output (line 48) | def test_chain_end_preserves_non_ascii_in_entity_output(callback_handler...
  function test_chain_with_cjk_characters (line 61) | def test_chain_with_cjk_characters(callback_handler, span_exporter):
  function test_tool_start_preserves_non_ascii_in_entity_input (line 78) | def test_tool_start_preserves_non_ascii_in_entity_input(callback_handler...
  function test_tool_end_preserves_non_ascii_in_entity_output (line 100) | def test_tool_end_preserves_non_ascii_in_entity_output(callback_handler,...
  function test_tool_with_arabic_characters (line 122) | def test_tool_with_arabic_characters(callback_handler, span_exporter):
  function test_chain_with_mixed_ascii_and_non_ascii (line 148) | def test_chain_with_mixed_ascii_and_non_ascii(callback_handler, span_exp...

FILE: packages/opentelemetry-instrumentation-langchain/tests/test_structured_output.py
  class FoodAnalysis (line 13) | class FoodAnalysis(BaseModel):
  function test_structured_output (line 21) | def test_structured_output(instrument_legacy, span_exporter, log_exporter):
  function test_structured_output_with_events_with_content (line 44) | def test_structured_output_with_events_with_content(
  function test_structured_output_with_events_with_no_content (line 76) | def test_structured_output_with_events_with_no_content(
  function assert_message_in_logs (line 105) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-langchain/tests/test_tool_call_content.py
  function test_assistant_message_with_tool_calls_includes_content (line 17) | def test_assistant_message_with_tool_calls_includes_content():
  function test_assistant_message_with_only_tool_calls_no_content (line 98) | def test_assistant_message_with_only_tool_calls_no_content():
  function test_assistant_message_with_only_content_no_tool_calls (line 136) | def test_assistant_message_with_only_content_no_tool_calls():

FILE: packages/opentelemetry-instrumentation-langchain/tests/test_tool_calls.py
  function food_analysis (line 21) | def food_analysis(
  function test_tool_calls (line 28) | def test_tool_calls(instrument_legacy, span_exporter, log_exporter):
  function test_tool_calls_with_events_with_content (line 81) | def test_tool_calls_with_events_with_content(
  function test_tool_calls_with_events_with_no_content (line 127) | def test_tool_calls_with_events_with_no_content(
  function test_tool_calls_with_history (line 165) | def test_tool_calls_with_history(instrument_legacy, span_exporter, log_e...
  function test_tool_calls_with_history_with_events_with_content (line 278) | def test_tool_calls_with_history_with_events_with_content(
  function test_tool_calls_with_history_with_events_with_no_content (line 377) | def test_tool_calls_with_history_with_events_with_no_content(
  function test_tool_calls_anthropic_text_block (line 458) | def test_tool_calls_anthropic_text_block(
  function test_tool_calls_anthropic_text_block_with_events_with_content (line 538) | def test_tool_calls_anthropic_text_block_with_events_with_content(
  function test_tool_calls_anthropic_text_block_with_events_with_no_content (line 598) | def test_tool_calls_anthropic_text_block_with_events_with_no_content(
  function test_tool_calls_anthropic_text_block_and_history (line 649) | def test_tool_calls_anthropic_text_block_and_history(
  function test_tool_calls_anthropic_text_block_and_history_with_events_with_content (line 781) | def test_tool_calls_anthropic_text_block_and_history_with_events_with_co...
  function test_tool_message_with_tool_call_id (line 887) | def test_tool_message_with_tool_call_id(instrument_legacy, span_exporter...
  function test_tool_calls_anthropic_text_block_and_history_with_events_with_no_content (line 932) | def test_tool_calls_anthropic_text_block_and_history_with_events_with_no...
  function test_parallel_tool_calls (line 1027) | def test_parallel_tool_calls(instrument_legacy, span_exporter, log_expor...
  function test_parallel_tool_calls_with_events_with_content (line 1112) | def test_parallel_tool_calls_with_events_with_content(
  function test_parallel_tool_calls_with_events_with_no_content (line 1175) | def test_parallel_tool_calls_with_events_with_no_content(
  function assert_message_in_logs (line 1227) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py
  class LlamaIndexInstrumentor (line 49) | class LlamaIndexInstrumentor(BaseInstrumentor):
    method __init__ (line 52) | def __init__(self, exception_logger=None, use_legacy_attributes=True):
    method instrumentation_dependencies (line 57) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 60) | def _instrument(self, **kwargs):
    method _uninstrument (line 69) | def _uninstrument(self, **kwargs):
    method apply_instrumentation (line 74) | def apply_instrumentation(name, **kwargs):
  class LlamaIndexInstrumentorCore (line 103) | class LlamaIndexInstrumentorCore(BaseInstrumentor):
    method __init__ (line 106) | def __init__(self, exception_logger=None):
    method instrumentation_dependencies (line 110) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 113) | def _instrument(self, **kwargs):
    method _uninstrument (line 116) | def _uninstrument(self, **kwargs):
  class LlamaIndexInstrumentorFull (line 120) | class LlamaIndexInstrumentorFull(BaseInstrumentor):
    method __init__ (line 123) | def __init__(self, exception_logger=None):
    method instrumentation_dependencies (line 127) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 130) | def _instrument(self, **kwargs):
    method _uninstrument (line 133) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/base_agent_instrumentor.py
  class BaseAgentInstrumentor (line 28) | class BaseAgentInstrumentor:
    method __init__ (line 29) | def __init__(self, tracer):
    method instrument (line 32) | def instrument(self):
    method _instrument_module (line 42) | def _instrument_module(self, module_name, class_name):
  function query_wrapper (line 52) | def query_wrapper(tracer, wrapped, instance, args, kwargs):
  function aquery_wrapper (line 68) | async def aquery_wrapper(tracer, wrapped, instance, args, kwargs):

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/base_embedding_instrumentor.py
  class BaseEmbeddingInstrumentor (line 19) | class BaseEmbeddingInstrumentor:
    method __init__ (line 20) | def __init__(self, tracer):
    method instrument (line 23) | def instrument(self):
    method _instrument_module (line 32) | def _instrument_module(self, module_name):
  function get_query_embedding_wrapper (line 46) | def get_query_embedding_wrapper(tracer, wrapped, instance, args, kwargs):
  function aget_query_embedding_wrapper (line 58) | async def aget_query_embedding_wrapper(tracer, wrapped, instance, args, ...

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/base_retriever_instrumentor.py
  class BaseRetrieverInstrumentor (line 22) | class BaseRetrieverInstrumentor:
    method __init__ (line 23) | def __init__(self, tracer):
    method instrument (line 26) | def instrument(self):
    method _instrument_module (line 35) | def _instrument_module(self, module_name):
  function retrieve_wrapper (line 45) | def retrieve_wrapper(tracer, wrapped, instance, args, kwargs):
  function aretrieve_wrapper (line 60) | async def aretrieve_wrapper(tracer, wrapped, instance, args, kwargs):

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/base_synthesizer_instrumentor.py
  class BaseSynthesizerInstrumentor (line 21) | class BaseSynthesizerInstrumentor:
    method __init__ (line 22) | def __init__(self, tracer):
    method instrument (line 25) | def instrument(self):
    method _instrument_module (line 34) | def _instrument_module(self, module_name):
  function synthesize_wrapper (line 44) | def synthesize_wrapper(tracer, wrapped, instance, args, kwargs):
  function asynthesize_wrapper (line 59) | async def asynthesize_wrapper(tracer, wrapped, instance, args, kwargs):

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/base_tool_instrumentor.py
  class BaseToolInstrumentor (line 30) | class BaseToolInstrumentor:
    method __init__ (line 31) | def __init__(self, tracer):
    method instrument (line 34) | def instrument(self):
    method _instrument_module (line 44) | def _instrument_module(self, module_name, class_name):
  function query_wrapper (line 54) | def query_wrapper(tracer, wrapped, instance, args, kwargs):
  function aquery_wrapper (line 70) | async def aquery_wrapper(tracer, wrapped, instance, args, kwargs):

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/config.py
  class Config (line 6) | class Config:

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/custom_llm_instrumentor.py
  class CustomLLMInstrumentor (line 33) | class CustomLLMInstrumentor:
    method __init__ (line 34) | def __init__(self, tracer):
    method instrument (line 37) | def instrument(self):
    method unistrument (line 67) | def unistrument(self):
  function _set_span_attribute (line 71) | def _set_span_attribute(span, name, value):
  function chat_wrapper (line 79) | def chat_wrapper(tracer, wrapped, instance: CustomLLM, args, kwargs):
  function achat_wrapper (line 96) | async def achat_wrapper(tracer, wrapped, instance: CustomLLM, args, kwar...
  function complete_wrapper (line 113) | def complete_wrapper(tracer, wrapped, instance: CustomLLM, args, kwargs):
  function acomplete_wrapper (line 130) | async def acomplete_wrapper(tracer, wrapped, instance: CustomLLM, args, ...
  function _handle_request (line 147) | def _handle_request(span, llm_request_type, args, kwargs, instance: Cust...
  function _handle_response (line 175) | def _handle_response(span, llm_request_type, instance, response):
  function snake_case_class_name (line 189) | def snake_case_class_name(instance):

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/dispatcher_wrapper.py
  function instrument_with_dispatcher (line 73) | def instrument_with_dispatcher(tracer: Tracer):
  class SpanHolder (line 81) | class SpanHolder:
    method process_event (line 91) | def process_event(self, event: BaseEvent) -> List["SpanHolder"]:
    method notify_parent (line 100) | def notify_parent(self) -> List["SpanHolder"]:
    method end (line 106) | def end(self, should_detach_context: bool = True):
    method update_span_for_event (line 117) | def update_span_for_event(self, event: BaseEvent):
    method _ (line 121) | def _(self, event: LLMChatStartEvent):
    method _ (line 129) | def _(self, event: LLMChatEndEvent):
    method _ (line 137) | def _(self, event: LLMPredictEndEvent):
    method _ (line 142) | def _(self, event: EmbeddingStartEvent):
    method _ (line 146) | def _(self, event: ReRankStartEvent):
    method _ (line 154) | def _(self, event: AgentToolCallEvent):
  class OpenLLMetrySpanHandler (line 158) | class OpenLLMetrySpanHandler(BaseSpanHandler[SpanHolder]):
    method __init__ (line 162) | def __init__(self, tracer: Tracer):
    method new_span (line 166) | def new_span(
    method prepare_to_exit_span (line 248) | def prepare_to_exit_span(
    method prepare_to_drop_span (line 284) | def prepare_to_drop_span(
  class OpenLLMetryEventHandler (line 295) | class OpenLLMetryEventHandler(BaseEventHandler):
    method __init__ (line 298) | def __init__(self, span_handler: OpenLLMetrySpanHandler):
    method handle (line 302) | def handle(self, event: BaseEvent, **kwargs) -> Any:

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/event_emitter.py
  class Roles (line 27) | class Roles(Enum):
  function emit_chat_message_events (line 41) | def emit_chat_message_events(event: LLMChatStartEvent):
  function emit_chat_response_events (line 46) | def emit_chat_response_events(event: LLMChatEndEvent):
  function emit_rerank_message_event (line 62) | def emit_rerank_message_event(event: ReRankStartEvent):
  function emit_message_event (line 70) | def emit_message_event(*, content, role: str):
  function emit_choice_event (line 74) | def emit_choice_event(
  function emit_event (line 90) | def emit_event(event: Union[MessageEvent, ChoiceEvent]) -> None:
  function _emit_message_event (line 108) | def _emit_message_event(event: MessageEvent) -> None:
  function _emit_choice_event (line 140) | def _emit_choice_event(event: ChoiceEvent) -> None:

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/event_models.py
  class _FunctionToolCall (line 5) | class _FunctionToolCall(TypedDict):
  class ToolCall (line 10) | class ToolCall(TypedDict):
  class CompletionMessage (line 18) | class CompletionMessage(TypedDict):
  class MessageEvent (line 26) | class MessageEvent:
  class ChoiceEvent (line 35) | class ChoiceEvent:

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/llamaparse_instrumentor.py
  class LlamaParseInstrumentor (line 16) | class LlamaParseInstrumentor:
    method __init__ (line 17) | def __init__(self, tracer):
    method instrument (line 20) | def instrument(self):
  function get_json_wrapper (line 45) | def get_json_wrapper(tracer, wrapped, instance, args, kwargs):
  function aget_json_wrapper (line 60) | async def aget_json_wrapper(tracer, wrapped, instance, args, kwargs):
  function get_images_wrapper (line 77) | def get_images_wrapper(tracer, wrapped, instance, args, kwargs):
  function aget_images_wrapper (line 92) | async def aget_images_wrapper(tracer, wrapped, instance, args, kwargs):
  function get_charts_wrapper (line 109) | def get_charts_wrapper(tracer, wrapped, instance, args, kwargs):
  function aget_charts_wrapper (line 124) | async def aget_charts_wrapper(tracer, wrapped, instance, args, kwargs):
  function load_data_wrapper (line 141) | def load_data_wrapper(tracer, wrapped, instance, args, kwargs):
  function aload_data_wrapper (line 156) | async def aload_data_wrapper(tracer, wrapped, instance, args, kwargs):

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/query_pipeline_instrumentor.py
  class QueryPipelineInstrumentor (line 21) | class QueryPipelineInstrumentor:
    method __init__ (line 22) | def __init__(self, tracer):
    method instrument (line 25) | def instrument(self):
    method _instrument_module (line 34) | def _instrument_module(self, module_name):
  function set_workflow_context (line 43) | def set_workflow_context():
  function run_wrapper (line 48) | def run_wrapper(tracer, wrapped, instance, args, kwargs):
  function arun_wrapper (line 65) | async def arun_wrapper(tracer, wrapped, instance, args, kwargs):

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/retriever_query_engine_instrumentor.py
  class RetrieverQueryEngineInstrumentor (line 22) | class RetrieverQueryEngineInstrumentor:
    method __init__ (line 23) | def __init__(self, tracer):
    method instrument (line 26) | def instrument(self):
    method _instrument_module (line 35) | def _instrument_module(self, module_name):
  function set_workflow_context (line 44) | def set_workflow_context():
  function query_wrapper (line 49) | def query_wrapper(tracer, wrapped, instance, args, kwargs):
  function aquery_wrapper (line 66) | async def aquery_wrapper(tracer, wrapped, instance, args, kwargs):

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/span_utils.py
  function set_llm_chat_request (line 16) | def set_llm_chat_request(event, span) -> None:
  function set_llm_chat_request_model_attributes (line 31) | def set_llm_chat_request_model_attributes(event, span):
  function set_llm_chat_response (line 49) | def set_llm_chat_response(event, span) -> None:
  function set_llm_chat_response_model_attributes (line 73) | def set_llm_chat_response_model_attributes(event, span):
  function set_llm_predict_response (line 155) | def set_llm_predict_response(event, span) -> None:
  function set_embedding (line 168) | def set_embedding(event, span) -> None:
  function set_rerank (line 177) | def set_rerank(event, span) -> None:
  function set_rerank_model_attributes (line 188) | def set_rerank_model_attributes(event, span):
  function set_tool (line 202) | def set_tool(event, span) -> None:

FILE: packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/utils.py
  function _with_tracer_wrapper (line 16) | def _with_tracer_wrapper(func):
  function start_as_current_span_async (line 27) | async def start_as_current_span_async(tracer, *args, **kwargs):
  function should_send_prompts (line 32) | def should_send_prompts():
  function dont_throw (line 38) | def dont_throw(func):
  class JSONEncoder (line 63) | class JSONEncoder(json.JSONEncoder):
    method default (line 64) | def default(self, o):
  function process_request (line 75) | def process_request(span, args, kwargs):
  function process_response (line 84) | def process_response(span, res):
  function is_role_valid (line 92) | def is_role_valid(role: str) -> bool:
  function should_emit_events (line 96) | def should_emit_events() -> bool:

FILE: packages/opentelemetry-instrumentation-llamaindex/tests/conftest.py
  function fixture_span_exporter (line 26) | def fixture_span_exporter():
  function fixture_tracer_provider (line 32) | def fixture_tracer_provider(span_exporter):
  function fixture_log_exporter (line 39) | def fixture_log_exporter():
  function fixture_logger_provider (line 45) | def fixture_logger_provider(log_exporter):
  function instrument_legacy (line 52) | def instrument_legacy(tracer_provider):
  function instrument_with_content (line 72) | def instrument_with_content(instrument_legacy, logger_provider):
  function instrument_with_no_content (line 89) | def instrument_with_no_content(instrument_legacy, logger_provider):
  function clear_exporter (line 106) | def clear_exporter(span_exporter):
  function environment (line 111) | def environment():
  function vcr_config (line 122) | def vcr_config():
  function pytest_collection_modifyitems (line 129) | def pytest_collection_modifyitems(items):

FILE: packages/opentelemetry-instrumentation-llamaindex/tests/test_agents.py
  function make_sql_table (line 15) | def make_sql_table():
  function test_agents_and_tools (line 41) | async def test_agents_and_tools(instrument_legacy, span_exporter, log_ex...
  function test_agent_with_multiple_tools (line 122) | async def test_agent_with_multiple_tools(

FILE: packages/opentelemetry-instrumentation-llamaindex/tests/test_chroma_vector_store.py
  function test_rag_with_chroma (line 19) | def test_rag_with_chroma(instrument_legacy, span_exporter):

FILE: packages/opentelemetry-instrumentation-llamaindex/tests/test_instrumentation.py
  function test_instrumentation_llamaindex (line 4) | def test_instrumentation_llamaindex():
  function test_instrumentation_llamaindex_core (line 17) | def test_instrumentation_llamaindex_core(monkeypatch):

FILE: packages/opentelemetry-instrumentation-llamaindex/tests/test_llamaparse.py
  function test_llamaparse_load_data_instrumentation (line 13) | def test_llamaparse_load_data_instrumentation(instrument_legacy, span_ex...
  function test_llamaparse_aload_data_instrumentation (line 36) | async def test_llamaparse_aload_data_instrumentation(instrument_legacy, ...
  function test_llamaparse_api_methods_exist (line 57) | def test_llamaparse_api_methods_exist():
  function test_llamaparse_parse_methods_exist (line 76) | def test_llamaparse_parse_methods_exist():

FILE: packages/opentelemetry-instrumentation-llamaindex/tests/test_structured_llm.py
  class Invoice (line 8) | class Invoice(BaseModel):
  function test_structured_llm_model_attributes (line 17) | def test_structured_llm_model_attributes(instrument_with_content, span_e...
  function test_structured_llm_achat_model_attributes (line 63) | async def test_structured_llm_achat_model_attributes(

FILE: packages/opentelemetry-instrumentation-marqo/opentelemetry/instrumentation/marqo/__init__.py
  class MarqoInstrumentor (line 44) | class MarqoInstrumentor(BaseInstrumentor):
    method __init__ (line 47) | def __init__(self, exception_logger=None):
    method instrumentation_dependencies (line 51) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 54) | def _instrument(self, **kwargs):
    method _uninstrument (line 68) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-marqo/opentelemetry/instrumentation/marqo/config.py
  class Config (line 1) | class Config:

FILE: packages/opentelemetry-instrumentation-marqo/opentelemetry/instrumentation/marqo/utils.py
  function dont_throw (line 6) | def dont_throw(func):

FILE: packages/opentelemetry-instrumentation-marqo/opentelemetry/instrumentation/marqo/wrapper.py
  function _with_tracer_wrapper (line 12) | def _with_tracer_wrapper(func):
  function _set_span_attribute (line 24) | def _set_span_attribute(span, name, value):
  function _wrap (line 32) | def _wrap(tracer, to_wrap, wrapped, instance, args, kwargs):
  function count_or_none (line 60) | def count_or_none(obj):
  function _set_add_documents_attributes (line 68) | def _set_add_documents_attributes(span, kwargs):
  function _set_search_attributes (line 84) | def _set_search_attributes(span, kwargs):
  function _set_delete_documents_attributes (line 89) | def _set_delete_documents_attributes(span, kwargs):
  function _set_search_result_attributes (line 96) | def _set_search_result_attributes(span, kwargs):
  function _set_delete_documents_response_attributes (line 107) | def _set_delete_documents_response_attributes(span, kwargs):

FILE: packages/opentelemetry-instrumentation-marqo/tests/conftest.py
  function exporter (line 14) | def exporter():
  function clear_exporter (line 28) | def clear_exporter(exporter):

FILE: packages/opentelemetry-instrumentation-marqo/tests/test_query.py
  function collection (line 10) | def collection():
  function add_documents (line 16) | def add_documents(collection):
  function test_marqo_add_documents (line 35) | def test_marqo_add_documents(exporter, collection):
  function test_marqo_search (line 47) | def test_marqo_search(exporter, collection):
  function test_marqo_delete_documents (line 83) | def test_marqo_delete_documents(exporter, collection):

FILE: packages/opentelemetry-instrumentation-mcp/opentelemetry/instrumentation/mcp/fastmcp_instrumentation.py
  class FastMCPInstrumentor (line 15) | class FastMCPInstrumentor:
    method __init__ (line 18) | def __init__(self):
    method instrument (line 22) | def instrument(self, tracer: Tracer):
    method uninstrument (line 42) | def uninstrument(self):
    method _fastmcp_init_wrapper (line 48) | def _fastmcp_init_wrapper(self):
    method _fastmcp_tool_wrapper (line 63) | def _fastmcp_tool_wrapper(self):
    method _should_send_prompts (line 156) | def _should_send_prompts(self):
    method _get_json_encoder (line 162) | def _get_json_encoder(self):
    method _truncate_json_if_needed (line 166) | def _truncate_json_if_needed(self, json_str: str) -> str:

FILE: packages/opentelemetry-instrumentation-mcp/opentelemetry/instrumentation/mcp/instrumentation.py
  class McpInstrumentor (line 26) | class McpInstrumentor(BaseInstrumentor):
    method __init__ (line 27) | def __init__(self, exception_logger=None):
    method instrumentation_dependencies (line 32) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 35) | def _instrument(self, **kwargs):
    method _uninstrument (line 116) | def _uninstrument(self, **kwargs):
    method _transport_wrapper (line 121) | def _transport_wrapper(self, tracer):
    method _base_session_init_wrapper (line 159) | def _base_session_init_wrapper(self, tracer):
    method patch_mcp_client (line 180) | def patch_mcp_client(self, tracer: Tracer):
    method _fastmcp_client_enter_wrapper (line 213) | def _fastmcp_client_enter_wrapper(self, tracer):
    method _fastmcp_client_exit_wrapper (line 241) | def _fastmcp_client_exit_wrapper(self, tracer):
    method _handle_tool_call (line 269) | async def _handle_tool_call(self, tracer, method, params, args, kwargs...
    method _handle_mcp_method (line 308) | async def _handle_mcp_method(self, tracer, method, args, kwargs, wrapp...
    method _execute_and_handle_result (line 318) | async def _execute_and_handle_result(
    method _extract_clean_input (line 357) | def _extract_clean_input(self, method: str, params: Any) -> dict:
    method _extract_clean_output (line 399) | def _extract_clean_output(self, method: str, result: Any) -> dict:
  function serialize (line 450) | def serialize(request, depth=0, max_depth=4):
  class InstrumentedStreamReader (line 492) | class InstrumentedStreamReader(ObjectProxy):  # type: ignore
    method __init__ (line 494) | def __init__(self, wrapped, tracer):
    method __aenter__ (line 498) | async def __aenter__(self) -> Any:
    method __aexit__ (line 501) | async def __aexit__(self, exc_type: Any, exc_value: Any, traceback: An...
    method __aiter__ (line 505) | async def __aiter__(self) -> AsyncGenerator[Any, None]:
  class InstrumentedStreamWriter (line 538) | class InstrumentedStreamWriter(ObjectProxy):  # type: ignore
    method __init__ (line 540) | def __init__(self, wrapped, tracer):
    method __aenter__ (line 544) | async def __aenter__(self) -> Any:
    method __aexit__ (line 547) | async def __aexit__(self, exc_type: Any, exc_value: Any, traceback: An...
    method send (line 551) | async def send(self, item: Any) -> Any:
  class ItemWithContext (line 593) | class ItemWithContext:
  class ContextSavingStreamWriter (line 598) | class ContextSavingStreamWriter(ObjectProxy):  # type: ignore
    method __init__ (line 600) | def __init__(self, wrapped, tracer):
    method __aenter__ (line 604) | async def __aenter__(self) -> Any:
    method __aexit__ (line 607) | async def __aexit__(self, exc_type: Any, exc_value: Any, traceback: An...
    method send (line 611) | async def send(self, item: Any) -> Any:
  class ContextAttachingStreamReader (line 617) | class ContextAttachingStreamReader(ObjectProxy):  # type: ignore
    method __init__ (line 619) | def __init__(self, wrapped, tracer):
    method __aenter__ (line 623) | async def __aenter__(self) -> Any:
    method __aexit__ (line 626) | async def __aexit__(self, exc_type: Any, exc_value: Any, traceback: An...
    method __aiter__ (line 629) | async def __aiter__(self) -> AsyncGenerator[Any, None]:

FILE: packages/opentelemetry-instrumentation-mcp/opentelemetry/instrumentation/mcp/utils.py
  class Config (line 8) | class Config:
  function dont_throw (line 12) | def dont_throw(func):

FILE: packages/opentelemetry-instrumentation-mcp/tests/conftest.py
  function fixture_span_exporter (line 11) | def fixture_span_exporter():
  function fixture_tracer_provider (line 17) | def fixture_tracer_provider(span_exporter):
  function instrument_mcp (line 25) | def instrument_mcp(tracer_provider, span_exporter):

FILE: packages/opentelemetry-instrumentation-mcp/tests/test_fastmcp.py
  function test_fastmcp_instrumentor (line 1) | async def test_fastmcp_instrumentor(span_exporter, tracer_provider) -> N...

FILE: packages/opentelemetry-instrumentation-mcp/tests/test_fastmcp_attributes.py
  function test_fastmcp_comprehensive_attributes (line 6) | async def test_fastmcp_comprehensive_attributes(span_exporter, tracer_pr...
  function test_fastmcp_error_handling (line 126) | async def test_fastmcp_error_handling(span_exporter, tracer_provider) ->...

FILE: packages/opentelemetry-instrumentation-mcp/tests/test_fastmcp_server_span.py
  function test_fastmcp_server_mcp_parent_span (line 1) | async def test_fastmcp_server_mcp_parent_span(span_exporter, tracer_prov...

FILE: packages/opentelemetry-instrumentation-milvus/opentelemetry/instrumentation/milvus/__init__.py
  class MilvusInstrumentor (line 77) | class MilvusInstrumentor(BaseInstrumentor):
    method __init__ (line 80) | def __init__(self, exception_logger=None):
    method instrumentation_dependencies (line 84) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 87) | def _instrument(self, **kwargs):
    method _uninstrument (line 147) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-milvus/opentelemetry/instrumentation/milvus/config.py
  class Config (line 1) | class Config:

FILE: packages/opentelemetry-instrumentation-milvus/opentelemetry/instrumentation/milvus/utils.py
  function dont_throw (line 7) | def dont_throw(func):
  function is_metrics_enabled (line 32) | def is_metrics_enabled() -> bool:

FILE: packages/opentelemetry-instrumentation-milvus/opentelemetry/instrumentation/milvus/wrapper.py
  function _with_tracer_wrapper (line 24) | def _with_tracer_wrapper(func):
  function _set_span_attribute (line 53) | def _set_span_attribute(span, name, value):
  function _wrap (line 61) | def _wrap(
  function _encode_filter (line 140) | def _encode_filter(_filter):
  function _encode_partition_name (line 148) | def _encode_partition_name(partition_name):
  function _encode_include (line 156) | def _encode_include(include):
  function count_or_none (line 164) | def count_or_none(obj):
  function _set_response_attributes (line 172) | def _set_response_attributes(
  function _set_create_collection_attributes (line 196) | def _set_create_collection_attributes(span, kwargs):
  function _set_insert_attributes (line 235) | def _set_insert_attributes(span, kwargs):
  function _set_get_attributes (line 257) | def _set_get_attributes(span, kwargs):
  function _set_search_attributes (line 280) | def _set_search_attributes(span, kwargs):
  function _set_hybrid_search_attributes (line 332) | def _set_hybrid_search_attributes(span, kwargs):
  function _set_query_attributes (line 384) | def _set_query_attributes(span, kwargs):
  function _add_query_result_events (line 413) | def _add_query_result_events(span, kwargs):
  function _add_search_result_events (line 419) | def _add_search_result_events(span, kwargs):
  function _set_upsert_attributes (line 472) | def _set_upsert_attributes(span, kwargs):
  function _set_delete_attributes (line 496) | def _set_delete_attributes(span, kwargs):
  function set_search_response (line 523) | def set_search_response(distance_metric, shared_attributes, response):

FILE: packages/opentelemetry-instrumentation-milvus/tests/conftest.py
  function exporter (line 20) | def exporter():
  function clear_exporter (line 32) | def clear_exporter(exporter):
  function reader (line 37) | def reader():
  function meter_provider (line 45) | def meter_provider(reader):
  function instrument (line 54) | def instrument(exporter, reader, meter_provider):
  function clear_exporter_reader (line 64) | def clear_exporter_reader(exporter, reader):

FILE: packages/opentelemetry-instrumentation-milvus/tests/test_error.py
  function collection (line 13) | def collection():
  function insert_data (line 20) | def insert_data(collection):
  function test_milvus_single_vector_search (line 67) | def test_milvus_single_vector_search(exporter, collection):

FILE: packages/opentelemetry-instrumentation-milvus/tests/test_hybrid_search.py
  function collection (line 12) | def collection():
  function insert_data (line 50) | def insert_data(collection):
  function test_hybrid_search_with_rrf (line 76) | def test_hybrid_search_with_rrf(exporter, collection):

FILE: packages/opentelemetry-instrumentation-milvus/tests/test_query.py
  function collection (line 14) | def collection():
  function insert_data (line 21) | def insert_data(collection):
  function test_milvus_insert (line 68) | def test_milvus_insert(exporter, collection, reader):
  function test_milvus_upsert (line 85) | def test_milvus_upsert(exporter, collection, reader):
  function test_milvus_query_equal (line 107) | def test_milvus_query_equal(exporter, collection, reader):
  function test_milvus_query_like (line 140) | def test_milvus_query_like(exporter, collection):
  function test_milvus_query_or (line 171) | def test_milvus_query_or(exporter, collection):
  function test_milvus_query_and (line 202) | def test_milvus_query_and(exporter, collection):
  function test_milvus_get_collection (line 233) | def test_milvus_get_collection(exporter, collection):
  function test_milvus_delete_collection (line 254) | def test_milvus_delete_collection(exporter, collection, reader):

FILE: packages/opentelemetry-instrumentation-milvus/tests/test_search.py
  function collection (line 14) | def collection():
  function insert_data (line 21) | def insert_data(collection):
  function test_milvus_single_vector_search (line 68) | def test_milvus_single_vector_search(exporter, collection, reader):
  function test_milvus_multiple_vector_search (line 134) | def test_milvus_multiple_vector_search(exporter, collection):

FILE: packages/opentelemetry-instrumentation-milvus/tests/utils.py
  function find_metrics_by_name (line 1) | def find_metrics_by_name(metrics_data, target_name):

FILE: packages/opentelemetry-instrumentation-mistralai/opentelemetry/instrumentation/mistralai/__init__.py
  function _set_span_attribute (line 74) | def _set_span_attribute(span, name, value):
  function _set_input_attributes (line 82) | def _set_input_attributes(span, llm_request_type, to_wrap, kwargs):
  function _set_model_input_attributes (line 124) | def _set_model_input_attributes(span, to_wrap, kwargs):
  function _set_response_attributes (line 136) | def _set_response_attributes(span, llm_request_type, response):
  function _set_model_response_attributes (line 165) | def _set_model_response_attributes(span, llm_request_type, response):
  function _accumulate_streaming_response (line 200) | def _accumulate_streaming_response(span, event_logger, llm_request_type,...
  function _aaccumulate_streaming_response (line 242) | async def _aaccumulate_streaming_response(
  function _with_tracer_wrapper (line 286) | def _with_tracer_wrapper(func):
  function _llm_request_type_by_method (line 298) | def _llm_request_type_by_method(method_name):
  function _emit_message_events (line 308) | def _emit_message_events(method_wrapped: str, args, kwargs, event_logger):
  function _emit_choice_events (line 333) | def _emit_choice_events(
  function _handle_input (line 367) | def _handle_input(span, event_logger, args, kwargs, to_wrap):
  function _handle_response (line 379) | def _handle_response(span, event_logger, llm_request_type, response):
  function _wrap (line 389) | def _wrap(
  function _awrap (line 435) | async def _awrap(
  class MistralAiInstrumentor (line 483) | class MistralAiInstrumentor(BaseInstrumentor):
    method __init__ (line 486) | def __init__(self, exception_logger=None, use_legacy_attributes=True):
    method instrumentation_dependencies (line 491) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 494) | def _instrument(self, **kwargs):
    method _uninstrument (line 521) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-mistralai/opentelemetry/instrumentation/mistralai/config.py
  class Config (line 1) | class Config:

FILE: packages/opentelemetry-instrumentation-mistralai/opentelemetry/instrumentation/mistralai/event_emitter.py
  class Roles (line 19) | class Roles(Enum):
  function emit_event (line 33) | def emit_event(
  function _emit_message_event (line 53) | def _emit_message_event(event: MessageEvent, event_logger: Logger) -> None:
  function _emit_choice_event (line 85) | def _emit_choice_event(event: ChoiceEvent, event_logger: Logger) -> None:

FILE: packages/opentelemetry-instrumentation-mistralai/opentelemetry/instrumentation/mistralai/event_models.py
  class _FunctionToolCall (line 5) | class _FunctionToolCall(TypedDict):
  class ToolCall (line 10) | class ToolCall(TypedDict):
  class CompletionMessage (line 18) | class CompletionMessage(TypedDict):
  class MessageEvent (line 26) | class MessageEvent:
  class ChoiceEvent (line 35) | class ChoiceEvent:

FILE: packages/opentelemetry-instrumentation-mistralai/opentelemetry/instrumentation/mistralai/utils.py
  function should_send_prompts (line 11) | def should_send_prompts():
  function dont_throw (line 17) | def dont_throw(func):
  function should_emit_events (line 42) | def should_emit_events() -> bool:

FILE: packages/opentelemetry-instrumentation-mistralai/tests/conftest.py
  function fixture_span_exporter (line 22) | def fixture_span_exporter():
  function fixture_tracer_provider (line 28) | def fixture_tracer_provider(span_exporter):
  function fixture_log_exporter (line 35) | def fixture_log_exporter():
  function fixture_logger_provider (line 41) | def fixture_logger_provider(log_exporter):
  function mistralai_client (line 48) | def mistralai_client():
  function mistralai_async_client (line 53) | def mistralai_async_client():
  function instrument_legacy (line 58) | def instrument_legacy(tracer_provider):
  function instrument_with_content (line 70) | def instrument_with_content(tracer_provider, logger_provider):
  function instrument_with_no_content (line 86) | def instrument_with_no_content(tracer_provider, logger_provider):
  function environment (line 102) | def environment():
  function vcr_config (line 108) | def vcr_config():

FILE: packages/opentelemetry-instrumentation-mistralai/tests/test_chat.py
  function test_mistralai_chat_legacy (line 11) | def test_mistralai_chat_legacy(
  function test_mistralai_chat_with_events_with_content (line 57) | def test_mistralai_chat_with_events_with_content(
  function test_mistralai_chat_with_events_with_no_content (line 113) | def test_mistralai_chat_with_events_with_no_content(
  function test_mistralai_streaming_chat_legacy (line 162) | def test_mistralai_streaming_chat_legacy(
  function test_mistralai_streaming_chat_with_events_with_content (line 212) | def test_mistralai_streaming_chat_with_events_with_content(
  function test_mistralai_streaming_chat_with_events_with_no_content (line 271) | def test_mistralai_streaming_chat_with_events_with_no_content(
  function test_mistralai_async_chat_legacy (line 325) | async def test_mistralai_async_chat_legacy(
  function test_mistralai_async_chat_with_events_with_content (line 373) | async def test_mistralai_async_chat_with_events_with_content(
  function test_mistralai_async_chat_with_events_with_no_content (line 435) | async def test_mistralai_async_chat_with_events_with_no_content(
  function test_mistralai_async_streaming_chat_legacy (line 486) | async def test_mistralai_async_streaming_chat_legacy(
  function test_mistralai_async_streaming_chat_with_events_with_content (line 534) | async def test_mistralai_async_streaming_chat_with_events_with_content(
  function test_mistralai_async_streaming_chat_with_events_with_no_content (line 593) | async def test_mistralai_async_streaming_chat_with_events_with_no_content(
  function assert_message_in_logs (line 642) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-mistralai/tests/test_embeddings.py
  function test_mistral_embeddings_legacy (line 10) | def test_mistral_embeddings_legacy(
  function test_mistral_embeddings_with_events_with_content (line 46) | def test_mistral_embeddings_with_events_with_content(
  function test_mistral_embeddings_with_events_with_no_content (line 89) | def test_mistral_embeddings_with_events_with_no_content(
  function test_mistral_async_embeddings_legacy (line 133) | async def test_mistral_async_embeddings_legacy(
  function test_mistral_async_embeddings_with_events_with_content (line 170) | async def test_mistral_async_embeddings_with_events_with_content(
  function test_mistral_async_embeddings_with_events_with_no_content (line 227) | async def test_mistral_async_embeddings_with_events_with_no_content(
  function assert_message_in_logs (line 282) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-ollama/opentelemetry/instrumentation/ollama/__init__.py
  function _sanitize_copy_messages (line 66) | def _sanitize_copy_messages(wrapped, instance, args, kwargs):
  function _accumulate_streaming_response (line 89) | def _accumulate_streaming_response(
  function _aaccumulate_streaming_response (line 153) | async def _aaccumulate_streaming_response(
  function _with_tracer_wrapper (line 217) | def _with_tracer_wrapper(func):
  function _llm_request_type_by_method (line 249) | def _llm_request_type_by_method(method_name):
  function _handle_input (line 261) | def _handle_input(span, event_logger, llm_request_type, args, kwargs):
  function _handle_response (line 270) | def _handle_response(span, event_logger, llm_request_type, token_histogr...
  function _wrap (line 280) | def _wrap(
  function _awrap (line 354) | async def _awrap(
  function _build_metrics (line 427) | def _build_metrics(meter: Meter):
  function is_metrics_collection_enabled (line 455) | def is_metrics_collection_enabled() -> bool:
  class OllamaInstrumentor (line 459) | class OllamaInstrumentor(BaseInstrumentor):
    method __init__ (line 462) | def __init__(self, exception_logger=None, use_legacy_attributes=True):
    method instrumentation_dependencies (line 467) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 470) | def _instrument(self, **kwargs):
    method _uninstrument (line 541) | def _uninstrument(self, **kwargs):
  function _dispatch_wrap (line 555) | def _dispatch_wrap(
  function _dispatch_awrap (line 584) | def _dispatch_awrap(

FILE: packages/opentelemetry-instrumentation-ollama/opentelemetry/instrumentation/ollama/config.py
  class Config (line 1) | class Config:

FILE: packages/opentelemetry-instrumentation-ollama/opentelemetry/instrumentation/ollama/event_emitter.py
  class Roles (line 25) | class Roles(Enum):
  function emit_message_events (line 40) | def emit_message_events(llm_request_type, args, kwargs, event_logger):
  function emit_choice_events (line 82) | def emit_choice_events(llm_request_type, response: dict, event_logger):
  function emit_event (line 121) | def emit_event(event: Union[MessageEvent, ChoiceEvent], event_logger) ->...
  function _emit_message_event (line 139) | def _emit_message_event(event: MessageEvent, event_logger) -> None:
  function _emit_choice_event (line 171) | def _emit_choice_event(event: ChoiceEvent, event_logger) -> None:

FILE: packages/opentelemetry-instrumentation-ollama/opentelemetry/instrumentation/ollama/event_models.py
  class _FunctionToolCall (line 5) | class _FunctionToolCall(TypedDict):
  class ToolCall (line 10) | class ToolCall(TypedDict):
  class CompletionMessage (line 18) | class CompletionMessage(TypedDict):
  class MessageEvent (line 26) | class MessageEvent:
  class ChoiceEvent (line 35) | class ChoiceEvent:

FILE: packages/opentelemetry-instrumentation-ollama/opentelemetry/instrumentation/ollama/span_utils.py
  function _set_span_attribute (line 13) | def _set_span_attribute(span, name, value):
  function set_input_attributes (line 21) | def set_input_attributes(span, llm_request_type, kwargs):
  function set_model_input_attributes (line 51) | def set_model_input_attributes(span, kwargs):
  function set_response_attributes (line 62) | def set_response_attributes(span, token_histogram, llm_request_type, res...
  function set_model_response_attributes (line 88) | def set_model_response_attributes(span, token_histogram, llm_request_typ...
  function set_tools_attributes (line 143) | def set_tools_attributes(span, tools):
  function _set_prompts (line 160) | def _set_prompts(span, messages):

FILE: packages/opentelemetry-instrumentation-ollama/opentelemetry/instrumentation/ollama/utils.py
  function should_send_prompts (line 11) | def should_send_prompts():
  function dont_throw (line 17) | def dont_throw(func):
  function should_emit_events (line 42) | def should_emit_events() -> bool:

FILE: packages/opentelemetry-instrumentation-ollama/tests/conftest.py
  function fixture_span_exporter (line 28) | def fixture_span_exporter():
  function fixture_tracer_provider (line 34) | def fixture_tracer_provider(span_exporter):
  function fixture_log_exporter (line 41) | def fixture_log_exporter():
  function fixture_logger_provider (line 47) | def fixture_logger_provider(log_exporter):
  function fixture_reader (line 54) | def fixture_reader():
  function fixture_meter_provider (line 62) | def fixture_meter_provider(reader):
  function ollama_client (line 70) | def ollama_client():
  function ollama_client_async (line 75) | def ollama_client_async():
  function instrument_legacy (line 80) | def instrument_legacy(reader, tracer_provider, meter_provider):
  function instrument_with_content (line 93) | def instrument_with_content(
  function instrument_with_no_content (line 112) | def instrument_with_no_content(

FILE: packages/opentelemetry-instrumentation-ollama/tests/test_chat.py
  function test_ollama_chat_legacy (line 15) | def test_ollama_chat_legacy(
  function test_ollama_chat_with_events_with_content (line 57) | def test_ollama_chat_with_events_with_content(
  function test_ollama_chat_with_events_with_no_content (line 105) | def test_ollama_chat_with_events_with_no_content(
  function test_ollama_chat_tool_calls_legacy (line 149) | def test_ollama_chat_tool_calls_legacy(
  function test_ollama_chat_tool_calls_with_events_with_content (line 208) | def test_ollama_chat_tool_calls_with_events_with_content(
  function test_ollama_chat_tool_calls_with_events_with_no_content (line 283) | def test_ollama_chat_tool_calls_with_events_with_no_content(
  function test_ollama_streaming_chat_legacy (line 351) | def test_ollama_streaming_chat_legacy(
  function test_ollama_streaming_chat_with_events_with_content (line 398) | def test_ollama_streaming_chat_with_events_with_content(
  function test_ollama_streaming_chat_with_events_with_no_content (line 451) | def test_ollama_streaming_chat_with_events_with_no_content(
  function test_ollama_async_chat_legacy (line 501) | async def test_ollama_async_chat_legacy(
  function test_ollama_async_chat_with_events_with_content (line 545) | async def test_ollama_async_chat_with_events_with_content(
  function test_ollama_async_chat_with_events_with_no_content (line 595) | async def test_ollama_async_chat_with_events_with_no_content(
  function test_ollama_async_streaming_chat_legacy (line 641) | async def test_ollama_async_streaming_chat_legacy(
  function test_ollama_async_streaming_chat_with_events_with_content (line 689) | async def test_ollama_async_streaming_chat_with_events_with_content(
  function test_ollama_async_streaming_chat_with_events_with_no_content (line 743) | async def test_ollama_async_streaming_chat_with_events_with_no_content(
  function test_token_histogram_recording (line 792) | def test_token_histogram_recording():
  function assert_message_in_logs (line 820) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-ollama/tests/test_embeddings.py
  function test_ollama_embeddings_legacy (line 10) | def test_ollama_embeddings_legacy(
  function test_ollama_embeddings_with_events_with_content (line 38) | def test_ollama_embeddings_with_events_with_content(
  function test_ollama_embeddings_with_events_with_no_content (line 76) | def test_ollama_embeddings_with_events_with_no_content(
  function assert_message_in_logs (line 109) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-ollama/tests/test_generation.py
  function test_ollama_generation_legacy (line 10) | def test_ollama_generation_legacy(
  function test_ollama_generation_with_events_with_content (line 48) | def test_ollama_generation_with_events_with_content(
  function test_ollama_generation_with_events_with_no_content (line 92) | def test_ollama_generation_with_events_with_no_content(
  function test_ollama_streaming_generation_legacy (line 130) | def test_ollama_streaming_generation_legacy(
  function test_ollama_streaming_generation_with_events_with_content (line 172) | def test_ollama_streaming_generation_with_events_with_content(
  function test_ollama_streaming_generation_with_events_with_no_content (line 220) | def test_ollama_streaming_generation_with_events_with_no_content(
  function test_ollama_async_generation_legacy (line 265) | async def test_ollama_async_generation_legacy(
  function test_ollama_async_generation_with_events_with_content (line 305) | async def test_ollama_async_generation_with_events_with_content(
  function test_ollama_async_generation_with_events_with_no_content (line 351) | async def test_ollama_async_generation_with_events_with_no_content(
  function test_ollama_async_streaming_generation_legacy (line 393) | async def test_ollama_async_streaming_generation_legacy(
  function test_ollama_async_streaming_generation_with_events_with_content (line 437) | async def test_ollama_async_streaming_generation_with_events_with_content(
  function test_ollama_async_streaming_generation_with_events_with_no_content (line 487) | async def test_ollama_async_streaming_generation_with_events_with_no_con...
  function assert_message_in_logs (line 531) | def assert_message_in_logs(log: ReadableLogRecord, event_name: str, expe...

FILE: packages/opentelemetry-instrumentation-ollama/tests/test_ollama_metrics.py
  function _collect_metrics (line 13) | def _collect_metrics(reader):
  function test_ollama_streaming_metrics (line 26) | def test_ollama_streaming_metrics(instrument_legacy, reader):
  function test_ollama_streaming_time_to_generate_metrics (line 54) | def test_ollama_streaming_time_to_generate_metrics(instrument_legacy, re...
  function test_ollama_operation_duration_includes_model_attribute (line 78) | def test_ollama_operation_duration_includes_model_attribute(instrument_l...

FILE: packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py
  class OpenAIAgentsInstrumentor (line 15) | class OpenAIAgentsInstrumentor(BaseInstrumentor):
    method __init__ (line 18) | def __init__(self, *, replace_existing_processors: bool = False) -> None:
    method instrumentation_dependencies (line 33) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 36) | def _instrument(self, **kwargs) -> None:
    method _uninstrument (line 79) | def _uninstrument(self, **kwargs):
  function is_metrics_enabled (line 88) | def is_metrics_enabled() -> bool:
  function _create_metrics (line 92) | def _create_metrics(meter: Meter):

FILE: packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py
  function _extract_prompt_attributes (line 48) | def _extract_prompt_attributes(otel_span, input_data, trace_content: bool):
  function _extract_response_attributes (line 177) | def _extract_response_attributes(otel_span, response, trace_content: bool):
  class OpenTelemetryTracingProcessor (line 313) | class OpenTelemetryTracingProcessor(TracingProcessor):
    method __init__ (line 321) | def __init__(self, tracer: Tracer):
    method on_trace_start (line 330) | def on_trace_start(self, trace):
    method on_trace_end (line 345) | def on_trace_end(self, trace):
    method on_span_start (line 354) | def on_span_start(self, span):
    method on_span_end (line 608) | def on_span_end(self, span):
    method _find_agent_span (line 781) | def _find_agent_span(self, agent_name: str):
    method _find_current_agent_span (line 789) | def _find_current_agent_span(self):
    method force_flush (line 806) | def force_flush(self):
    method shutdown (line 810) | def shutdown(self):

FILE: packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_realtime_wrappers.py
  function _extract_content_text (line 30) | def _extract_content_text(item_content) -> Optional[str]:
  function _unwrap_raw_event_data (line 50) | def _unwrap_raw_event_data(data) -> Tuple[Optional[str], Any]:
  function _extract_response_and_usage (line 77) | def _extract_response_and_usage(data) -> Tuple[Any, Optional[dict]]:
  class RealtimeTracingState (line 91) | class RealtimeTracingState:
    method __init__ (line 94) | def __init__(self, tracer: Tracer):
    method start_workflow_span (line 114) | def start_workflow_span(self, agent_name: str):
    method end_workflow_span (line 128) | def end_workflow_span(self, error: Optional[Exception] = None):
    method _get_parent_context (line 138) | def _get_parent_context(self, agent_name: Optional[str] = None):
    method start_agent_span (line 157) | def start_agent_span(self, agent_name: str):
    method end_agent_span (line 187) | def end_agent_span(self, agent_name: str, error: Optional[Exception] =...
    method start_tool_span (line 193) | def start_tool_span(self, tool_name: str, agent_name: Optional[str] = ...
    method end_tool_span (line 211) | def end_tool_span(
    method create_handoff_span (line 226) | def create_handoff_span(self, from_agent: str, to_agent: str):
    method start_audio_span (line 251) | def start_audio_span(self, item_id: str, content_index: int):
    method end_audio_span (line 268) | def end_audio_span(self, item_id: str, content_index: int):
    method record_error (line 277) | def record_error(self, error: Any):
    method record_prompt (line 286) | def record_prompt(self, role: str, content: str):
    method record_usage (line 295) | def record_usage(self, usage: Any):
    method record_completion (line 312) | def record_completion(self, role: str, content: str):
    method create_llm_span (line 322) | def create_llm_span(self, completion_content: str):
    method cleanup (line 399) | def cleanup(self):
  function wrap_realtime_session (line 423) | def wrap_realtime_session(tracer: Tracer):
  function unwrap_realtime_session (line 683) | def unwrap_realtime_session():

FILE: packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/utils.py
  function set_span_attribute (line 16) | def set_span_attribute(span, name, value):
  function _is_truthy (line 23) | def _is_truthy(value):
  function should_send_prompts (line 27) | def should_send_prompts() -> bool:
  class JSONEncoder (line 37) | class JSONEncoder(json.JSONEncoder):
    method default (line 38) | def default(self, o):
  function dont_throw (line 56) | def dont_throw(func):

FILE: packages/opentelemetry-instrumentation-openai-agents/tests/conftest.py
  function mock_set_agent_name (line 48) | def mock_set_agent_name():
  function exporter (line 55) | def exporter():
  function environment (line 69) | def environment():
  function clear_exporter (line 77) | def clear_exporter(exporter):
  function metrics_test_context (line 83) | def metrics_test_context():
  function clear_metrics_test_context (line 93) | def clear_metrics_test_context(metrics_test_context):
  function test_agent (line 100) | def test_agent():
  function function_tool_agent (line 111) | def function_tool_agent():
  function web_search_tool_agent (line 128) | def web_search_tool_agent():
  function handoff_agent (line 138) | def handoff_agent():
  function recipe_workflow_agents (line 165) | def recipe_workflow_agents():
  function vcr_config (line 285) | def vcr_config():

FILE: packages/opentelemetry-instrumentation-openai-agents/tests/test_complete_handoff_with_tools.py
  function analyze_data (line 8) | async def analyze_data(data_request: str) -> str:
  function process_results (line 14) | async def process_results(analysis_data: str) -> str:
  function generate_report (line 20) | async def generate_report(processed_data: str) -> str:
  function workflow_agents (line 26) | def workflow_agents():
  function test_router_analytics_complete_workflow (line 53) | async def test_router_analytics_complete_workflow(exporter, workflow_age...

FILE: packages/opentelemetry-instrumentation-openai-agents/tests/test_openai_agents.py
  function mock_instrumentor (line 19) | def mock_instrumentor():
  function test_dict_content_serialization (line 27) | def test_dict_content_serialization(exporter):
  function test_agent_spans (line 75) | def test_agent_spans(exporter, test_agent):
  function test_agent_with_function_tool_spans (line 143) | def test_agent_with_function_tool_spans(exporter, function_tool_agent):
  function test_agent_with_web_search_tool_spans (line 187) | def test_agent_with_web_search_tool_spans(exporter, web_search_tool_agent):
  function test_agent_with_handoff_spans (line 209) | def test_agent_with_handoff_spans(exporter, handoff_agent):
  function test_generate_metrics (line 233) | def test_generate_metrics(metrics_test_context, test_agent):
  function test_recipe_workflow_agent_handoffs_with_function_tools (line 279) | async def test_recipe_workflow_agent_handoffs_with_function_tools(export...
  function test_music_composer_handoff_hierarchy (line 323) | async def test_music_composer_handoff_hierarchy(exporter):
  function test_agent_name_propagation_to_agent_spans (line 385) | def test_agent_name_propagation_to_agent_spans(exporter, test_agent):
  function test_tool_call_and_result_attributes (line 409) | def test_tool_call_and_result_attributes(exporter):

FILE: packages/opentelemetry-instrumentation-openai-agents/tests/test_realtime.py
  class MockSpanData (line 20) | class MockSpanData:
    method __init__ (line 23) | def __init__(self, **kwargs):
  class MockSpeechSpanData (line 28) | class MockSpeechSpanData(MockSpanData):
    method __init__ (line 31) | def __init__(self, **kwargs):
  class MockTranscriptionSpanData (line 36) | class MockTranscriptionSpanData(MockSpanData):
    method __init__ (line 39) | def __init__(self, **kwargs):
  class MockSpeechGroupSpanData (line 44) | class MockSpeechGroupSpanData(MockSpanData):
    method __init__ (line 47) | def __init__(self, **kwargs):
  class MockAgentSpan (line 52) | class MockAgentSpan:
    method __init__ (line 55) | def __init__(self, span_data, trace_id="test-trace-123", error=None):
  function tracer_provider_and_exporter (line 62) | def tracer_provider_and_exporter():
  class TestRealtimeSpeechSpans (line 70) | class TestRealtimeSpeechSpans:
    method test_speech_span_start_creates_otel_span (line 73) | def test_speech_span_start_creates_otel_span(self, tracer_provider_and...
    method test_speech_span_captures_model_and_format (line 125) | def test_speech_span_captures_model_and_format(self, tracer_provider_a...
  class TestRealtimeTranscriptionSpans (line 171) | class TestRealtimeTranscriptionSpans:
    method test_transcription_span_start_creates_otel_span (line 174) | def test_transcription_span_start_creates_otel_span(self, tracer_provi...
    method test_transcription_span_captures_model_and_format (line 220) | def test_transcription_span_captures_model_and_format(self, tracer_pro...
  class TestRealtimeSpeechGroupSpans (line 265) | class TestRealtimeSpeechGroupSpans:
    method test_speech_group_span_creates_otel_span (line 268) | def test_speech_group_span_creates_otel_span(self, tracer_provider_and...
  class TestRealtimeErrorHandling (line 315) | class TestRealtimeErrorHandling:
    method test_speech_span_with_error (line 318) | def test_speech_span_with_error(self, tracer_provider_and_exporter):
  class TestRealtimeSpanHierarchy (line 361) | class TestRealtimeSpanHierarchy:
    method test_realtime_spans_nested_under_workflow (line 364) | def test_realtime_spans_nested_under_workflow(self, tracer_provider_an...

FILE: packages/opentelemetry-instrumentation-openai-agents/tests/test_realtime_session.py
  function tracer_provider (line 16) | def tracer_provider():
  function tracer (line 27) | def tracer(tracer_provider):
  class TestRealtimeTracingState (line 33) | class TestRealtimeTracingState:
    method test_start_workflow_span (line 36) | def test_start_workflow_span(self, tracer, tracer_provider):
    method test_end_workflow_span (line 46) | def test_end_workflow_span(self, tracer, tracer_provider):
    method test_start_agent_span (line 59) | def test_start_agent_span(self, tracer, tracer_provider):
    method test_end_agent_span (line 71) | def test_end_agent_span(self, tracer, tracer_provider):
    method test_start_tool_span (line 93) | def test_start_tool_span(self, tracer, tracer_provider):
    method test_end_tool_span_with_output (line 105) | def test_end_tool_span_with_output(self, tracer, tracer_provider):
    method test_create_handoff_span (line 119) | def test_create_handoff_span(self, tracer, tracer_provider):
    method test_start_audio_span (line 133) | def test_start_audio_span(self, tracer, tracer_provider):
    method test_end_audio_span (line 144) | def test_end_audio_span(self, tracer, tracer_provider):
    method test_record_error_on_agent_span (line 157) | def test_record_error_on_agent_span(self, tracer, tracer_provider):
    method test_record_prompt (line 169) | def test_record_prompt(self, tracer, tracer_provider):
    method test_record_completion_creates_llm_span (line 181) | def test_record_completion_creates_llm_span(self, tracer, tracer_provi...
    method test_multiple_llm_spans (line 207) | def test_multiple_llm_spans(self, tracer, tracer_provider):
    method test_cleanup_ends_all_spans (line 239) | def test_cleanup_ends_all_spans(self, tracer, tracer_provider):
    method test_record_usage_dict (line 258) | def test_record_usage_dict(self, tracer, tracer_provider):
    method test_usage_attributes_on_llm_span (line 277) | def test_usage_attributes_on_llm_span(self, tracer, tracer_provider):
    method test_usage_cleared_after_span (line 303) | def test_usage_cleared_after_span(self, tracer, tracer_provider):
    method test_duplicate_completion_ignored (line 316) | def test_duplicate_completion_ignored(self, tracer, tracer_provider):
  class TestRealtimeSessionWrapping (line 335) | class TestRealtimeSessionWrapping:
    method test_wrap_and_unwrap (line 338) | def test_wrap_and_unwrap(self, tracer):
  class TestSpanTiming (line 345) | class TestSpanTiming:
    method test_llm_span_starts_after_agent_span (line 348) | def test_llm_span_starts_after_agent_span(self, tracer, tracer_provider):
    method test_llm_span_ends_before_agent_span (line 367) | def test_llm_span_ends_before_agent_span(self, tracer, tracer_provider):
    method test_tool_span_within_agent_timeframe (line 386) | def test_tool_span_within_agent_timeframe(self, tracer, tracer_provider):
    method test_llm_span_has_duration (line 406) | def test_llm_span_has_duration(self, tracer, tracer_provider):
  class TestSpanHierarchy (line 429) | class TestSpanHierarchy:
    method test_tool_span_parented_under_agent (line 432) | def test_tool_span_parented_under_agent(self, tracer, tracer_provider):
    method test_audio_span_parented_under_current_agent (line 459) | def test_audio_span_parented_under_current_agent(self, tracer, tracer_...
  class TestDontThrowWraps (line 481) | class TestDontThrowWraps:
    method test_sync_function_preserves_name (line 484) | def test_sync_function_preserves_name(self):
    method test_async_function_preserves_name (line 494) | def test_async_function_preserves_name(self):
    method test_sync_function_preserves_wrapped (line 504) | def test_sync_function_preserves_wrapped(self):
    method test_async_function_preserves_wrapped (line 515) | def test_async_function_preserves_wrapped(self):
    method test_sync_function_preserves_docstring (line 526) | def test_sync_function_preserves_docstring(self):
  class TestTracedPutEventHandlers (line 538) | class TestTracedPutEventHandlers:
    method test_history_updated_captures_assistant_completion (line 541) | def test_history_updated_captures_assistant_completion(self, tracer, t...
    method test_response_done_dict_captures_usage_and_completion (line 589) | def test_response_done_dict_captures_usage_and_completion(self, tracer...
    method test_response_done_without_usage_still_captures_completion (line 651) | def test_response_done_without_usage_still_captures_completion(self, t...

FILE: packages/opentelemetry-instrumentation-openai-agents/tests/test_recipe_agents_hierarchy.py
  class Recipe (line 10) | class Recipe(BaseModel):
  class SearchResponse (line 20) | class SearchResponse(BaseModel):
  class EditResponse (line 28) | class EditResponse(BaseModel):
  class ChatContext (line 37) | class ChatContext:
    method __post_init__ (line 42) | def __post_init__(self):
  function search_recipes (line 79) | async def search_recipes(cw: RunContextWrapper[ChatContext], query: str ...
  function plan_and_apply_recipe_modifications (line 101) | async def plan_and_apply_recipe_modifications(
  function recipe_agents (line 130) | def recipe_agents():
  function test_recipe_agents_hierarchy (line 168) | async def test_recipe_agents_hierarchy(exporter, recipe_agents):

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py
  class OpenAIInstrumentor (line 11) | class OpenAIInstrumentor(BaseInstrumentor):
    method __init__ (line 14) | def __init__(
    method instrumentation_dependencies (line 33) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 36) | def _instrument(self, **kwargs):
    method _uninstrument (line 46) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/__init__.py
  function _set_span_attribute (line 31) | def _set_span_attribute(span, name, value):
  function _set_client_attributes (line 41) | def _set_client_attributes(span, instance):
  function _set_api_attributes (line 59) | def _set_api_attributes(span):
  function _set_functions_attributes (line 75) | def _set_functions_attributes(span, functions):
  function set_tools_attributes (line 88) | def set_tools_attributes(span, tools):
  function _set_request_attributes (line 105) | def _set_request_attributes(span, kwargs, instance=None):
  function _set_response_attributes (line 194) | def _set_response_attributes(span, response):
  function _log_prompt_filter (line 250) | def _log_prompt_filter(span, response_dict):
  function _set_span_stream_usage (line 260) | def _set_span_stream_usage(span, prompt_tokens, completion_tokens):
  function _get_openai_base_url (line 284) | def _get_openai_base_url(instance):
  function _get_vendor_from_url (line 293) | def _get_vendor_from_url(base_url):
  function _cross_region_check (line 309) | def _cross_region_check(value):
  function _extract_model_name_from_provider_format (line 325) | def _extract_model_name_from_provider_format(model_name):
  function is_streaming_response (line 340) | def is_streaming_response(response):
  function model_as_dict (line 351) | def model_as_dict(model):
  function _token_type (line 364) | def _token_type(token_type: str):
  function metric_shared_attributes (line 373) | def metric_shared_attributes(
  function propagate_trace_context (line 389) | def propagate_trace_context(span, kwargs):

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py
  function chat_wrapper (line 68) | def chat_wrapper(
  function achat_wrapper (line 167) | async def achat_wrapper(
  function _handle_request (line 268) | async def _handle_request(span, kwargs, instance):
  function _handle_response (line 301) | def _handle_response(
  function _set_chat_metrics (line 363) | def _set_chat_metrics(
  function _set_choice_counter_metrics (line 394) | def _set_choice_counter_metrics(choice_counter, choices, shared_attribut...
  function _set_token_counter_metrics (line 405) | def _set_token_counter_metrics(token_counter, usage, shared_attributes):
  function _is_base64_image (line 415) | def _is_base64_image(item):
  function _process_image_item (line 428) | async def _process_image_item(item, trace_id, span_id, message_index, co...
  function _set_prompts (line 442) | async def _set_prompts(span, messages):
  function _set_completions (line 494) | def _set_completions(span, choices):
  function _set_streaming_token_metrics (line 564) | def _set_streaming_token_metrics(
  class ChatStream (line 601) | class ChatStream(ObjectProxy):
    method __init__ (line 612) | def __init__(
    method __del__ (line 646) | def __del__(self):
    method __enter__ (line 651) | def __enter__(self):
    method __exit__ (line 654) | def __exit__(self, exc_type, exc_val, exc_tb):
    method __aenter__ (line 671) | async def __aenter__(self):
    method __aexit__ (line 674) | async def __aexit__(self, exc_type, exc_val, exc_tb):
    method __iter__ (line 677) | def __iter__(self):
    method __aiter__ (line 680) | def __aiter__(self):
    method __next__ (line 683) | def __next__(self):
    method __anext__ (line 699) | async def __anext__(self):
    method _process_item (line 715) | def _process_item(self, item):
    method _shared_attributes (line 729) | def _shared_attributes(self):
    method _process_complete_response (line 740) | def _process_complete_response(self):
    method _ensure_cleanup (line 786) | def _ensure_cleanup(self):
    method _record_partial_metrics (line 824) | def _record_partial_metrics(self):
  function _build_from_streaming_response (line 860) | def _build_from_streaming_response(
  function _abuild_from_streaming_response (line 931) | async def _abuild_from_streaming_response(
  function _parse_tool_calls (line 1003) | def _parse_tool_calls(
  function _is_chat_message_function_tool_call (line 1037) | def _is_chat_message_function_tool_call(model: Union[dict, pydantic.Base...
  function _is_function_call (line 1057) | def _is_function_call(model: Union[dict, pydantic.BaseModel]) -> bool:
  function _parse_choice_event (line 1066) | def _parse_choice_event(choice) -> ChoiceEvent:
  function _ (line 1094) | def _(choice: dict) -> ChoiceEvent:
  function _accumulate_stream_items (line 1127) | def _accumulate_stream_items(item, complete_response):

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/completion_wrappers.py
  function completion_wrapper (line 49) | def completion_wrapper(tracer, wrapped, instance, args, kwargs):
  function acompletion_wrapper (line 86) | async def acompletion_wrapper(tracer, wrapped, instance, args, kwargs):
  function _handle_request (line 122) | def _handle_request(span, kwargs, instance):
  function _emit_prompts_events (line 135) | def _emit_prompts_events(kwargs):
  function _handle_response (line 145) | def _handle_response(response, span, instance=None):
  function _set_prompts (line 160) | def _set_prompts(span, prompt):
  function _set_completions (line 172) | def _set_completions(span, choices):
  function _build_from_streaming_response (line 186) | def _build_from_streaming_response(span, request_kwargs, response):
  function _abuild_from_streaming_response (line 207) | async def _abuild_from_streaming_response(span, request_kwargs, response):
  function _emit_streaming_response_events (line 227) | def _emit_streaming_response_events(complete_response):
  function _set_token_usage (line 239) | def _set_token_usage(span, request_kwargs, complete_response):
  function _accumulate_streaming_response (line 256) | def _accumulate_streaming_response(complete_response, item):
  function _parse_choice_event (line 281) | def _parse_choice_event(choice) -> ChoiceEvent:

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/config.py
  class Config (line 6) | class Config:

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/embeddings_wrappers.py
  function embeddings_wrapper (line 55) | def embeddings_wrapper(
  function aembeddings_wrapper (line 119) | async def aembeddings_wrapper(
  function _handle_request (line 184) | def _handle_request(span, kwargs, instance):
  function _handle_response (line 200) | def _handle_response(
  function _set_embeddings_metrics (line 230) | def _set_embeddings_metrics(
  function _set_prompts (line 270) | def _set_prompts(span, prompt):
  function _emit_embeddings_message_event (line 285) | def _emit_embeddings_message_event(embeddings) -> None:
  function _emit_embeddings_choice_event (line 293) | def _emit_embeddings_choice_event(response) -> None:

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py
  class Roles (line 21) | class Roles(Enum):
  function emit_event (line 37) | def emit_event(event: Union[MessageEvent, ChoiceEvent]) -> None:
  function _emit_message_event (line 55) | def _emit_message_event(event: MessageEvent) -> None:
  function _emit_choice_event (line 87) | def _emit_choice_event(event: ChoiceEvent) -> None:

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_models.py
  class _FunctionToolCall (line 5) | class _FunctionToolCall(TypedDict):
  class ToolCall (line 10) | class ToolCall(TypedDict):
  class CompletionMessage (line 18) | class CompletionMessage(TypedDict):
  class MessageEvent (line 26) | class MessageEvent:
  class ChoiceEvent (line 35) | class ChoiceEvent:

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/image_gen_wrappers.py
  function image_gen_metrics_wrapper (line 19) | def image_gen_metrics_wrapper(

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py
  function is_openai_v1 (line 21) | def is_openai_v1():
  function is_reasoning_supported (line 25) | def is_reasoning_supported():
  function is_azure_openai (line 33) | def is_azure_openai(instance):
  function is_metrics_enabled (line 39) | def is_metrics_enabled() -> bool:
  function _with_image_gen_metric_wrapper (line 43) | def _with_image_gen_metric_wrapper(func):
  function _with_embeddings_telemetry_wrapper (line 60) | def _with_embeddings_telemetry_wrapper(func):
  function _with_chat_telemetry_wrapper (line 86) | def _with_chat_telemetry_wrapper(func):
  function _with_tracer_wrapper (line 116) | def _with_tracer_wrapper(func):
  function start_as_current_span_async (line 127) | async def start_as_current_span_async(tracer, *args, **kwargs):
  function dont_throw (line 132) | def dont_throw(func):
  function run_async (line 163) | def run_async(method):
  function _is_truthy (line 177) | def _is_truthy(value):
  function should_send_prompts (line 181) | def should_send_prompts() -> bool:
  function should_emit_events (line 191) | def should_emit_events() -> bool:

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v0/__init__.py
  class OpenAIV0Instrumentor (line 30) | class OpenAIV0Instrumentor(BaseInstrumentor):
    method instrumentation_dependencies (line 31) | def instrumentation_dependencies(self) -> Collection[str]:
    method _instrument (line 34) | def _instrument(self, **kwargs):
    method _uninstrument (line 170) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/__init__.py
  class OpenAIV1Instrumentor (line 52) | class OpenAIV1Instrumentor(BaseInstrumentor):
    method instrumentation_dependencies (line 53) | def instrumentation_dependencies(self) -> Collection[str]:
    method _try_wrap (line 56) | def _try_wrap(self, module, function, wrapper):
    method _instrument (line 72) | def _instrument(self, **kwargs):
    method _uninstrument (line 347) | def _uninstrument(self, **kwargs):

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/assistant_wrappers.py
  function assistants_create_wrapper (line 39) | def assistants_create_wrapper(tracer, wrapped, instance, args, kwargs):
  function runs_create_wrapper (line 54) | def runs_create_wrapper(tracer, wrapped, instance, args, kwargs):
  function runs_retrieve_wrapper (line 82) | def runs_retrieve_wrapper(tracer, wrapped, instance, args, kwargs):
  function messages_list_wrapper (line 113) | def messages_list_wrapper(tracer, wrapped, instance, args, kwargs):
  function runs_create_and_stream_wrapper (line 250) | def runs_create_and_stream_wrapper(tracer, wrapped, instance, args, kwar...

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/event_handler_wrapper.py
  class EventHandleWrapper (line 15) | class EventHandleWrapper(AssistantEventHandler):
    method __init__ (line 20) | def __init__(self, original_handler, span):
    method on_end (line 26) | def on_end(self):
    method on_event (line 41) | def on_event(self, event):
    method on_run_step_created (line 45) | def on_run_step_created(self, run_step):
    method on_run_step_delta (line 49) | def on_run_step_delta(self, delta, snapshot):
    method on_run_step_done (line 53) | def on_run_step_done(self, run_step):
    method on_tool_call_created (line 60) | def on_tool_call_created(self, tool_call):
    method on_tool_call_delta (line 64) | def on_tool_call_delta(self, delta, snapshot):
    method on_tool_call_done (line 68) | def on_tool_call_done(self, tool_call):
    method on_exception (line 72) | def on_exception(self, exception: Exception):
    method on_timeout (line 79) | def on_timeout(self):
    method on_message_created (line 83) | def on_message_created(self, message):
    method on_message_delta (line 87) | def on_message_delta(self, delta, snapshot):
    method on_message_done (line 91) | def on_message_done(self, message):
    method on_text_created (line 110) | def on_text_created(self, text):
    method on_text_delta (line 114) | def on_text_delta(self, delta, snapshot):
    method on_text_done (line 118) | def on_text_done(self, text):
    method on_image_file_done (line 133) | def on_image_file_done(self, image_file):

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/realtime_wrappers.py
  class RealtimeSessionState (line 44) | class RealtimeSessionState:
    method __init__ (line 47) | def __init__(self, tracer: Tracer, model: str):
  class RealtimeEventProcessor (line 62) | class RealtimeEventProcessor:
    method __init__ (line 65) | def __init__(self, state: RealtimeSessionState):
    method process_event (line 69) | def process_event(self, event):
    method handle_session_created (line 93) | def handle_session_created(self, event):
    method handle_session_updated (line 112) | def handle_session_updated(self, event):
    method handle_response_created (line 136) | def handle_response_created(self, event, start_span_if_none: bool = Fa...
    method handle_text_delta (line 146) | def handle_text_delta(self, event):
    method handle_audio_transcript_delta (line 152) | def handle_audio_transcript_delta(self, event):
    method handle_function_call_done (line 158) | def handle_function_call_done(self, event):
    method handle_response_done (line 167) | def handle_response_done(self, event):
    method handle_error_event (line 270) | def handle_error_event(self, event):
    method start_response_span (line 280) | def start_response_span(self, end_existing: bool = False, set_input: b...
    method reset_response_state (line 332) | def reset_response_state(self):
  class RealtimeConnectionWrapper (line 343) | class RealtimeConnectionWrapper:
    method __init__ (line 351) | def __init__(self, connection, state: RealtimeSessionState):
    method __getattr__ (line 357) | def __getattr__(self, name):
    method session (line 362) | def session(self):
    method conversation (line 367) | def conversation(self):
    method response (line 372) | def response(self):
    method recv (line 378) | async def recv(self):
    method recv_bytes (line 384) | def recv_bytes(self):
    method send (line 388) | async def send(self, event):
    method __aiter__ (line 393) | def __aiter__(self):
    method close (line 397) | async def close(self):
    method __aenter__ (line 404) | async def __aenter__(self):
    method __aexit__ (line 408) | async def __aexit__(self, exc_type, exc_val, exc_tb):
    method _process_outgoing_event (line 421) | def _process_outgoing_event(self, event):
    method _track_input (line 434) | def _track_input(self, event):
    method _handle_error (line 451) | def _handle_error(self, error):
    method _end_session_span (line 467) | def _end_session_span(self):
  class RealtimeEventIterator (line 474) | class RealtimeEventIterator:
    method __init__ (line 477) | def __init__(
    method __aiter__ (line 488) | def __aiter__(self):
    method __anext__ (line 491) | async def __anext__(self):
    method _process_event (line 497) | def _process_event(self, event):
  class RealtimeSessionWrapper (line 511) | class RealtimeSessionWrapper:
    method __init__ (line 514) | def __init__(self, session, state: RealtimeSessionState):
    method __getattr__ (line 518) | def __getattr__(self, name):
    method update (line 521) | async def update(self, **kwargs):
  class RealtimeConversationWrapper (line 549) | class RealtimeConversationWrapper:
    method __init__ (line 552) | def __init__(self, conversation, state: RealtimeSessionState):
    method __getattr__ (line 556) | def __getattr__(self, name):
    method item (line 560) | def item(self):
  class RealtimeConversationItemWrapper (line 565) | class RealtimeConversationItemWrapper:
    method __init__ (line 568) | def __init__(self, item, state: RealtimeSessionState):
    method __getattr__ (line 572) | def __getattr__(self, name):
    method create (line 575) | async def create(self, **kwargs):
  class RealtimeResponseWrapper (line 592) | class RealtimeResponseWrapper:
    method __init__ (line 595) | def __init__(
    method __getattr__ (line 605) | def __getattr__(self, name):
    method create (line 608) | async def create(self, **kwargs):
    method cancel (line 615) | async def cancel(self):
  class RealtimeConnectionManagerWrapper (line 631) | class RealtimeConnectionManagerWrapper:
    method __init__ (line 641) | def __init__(self, connection_manager, tracer: Tracer, model: str):
    method __aenter__ (line 648) | async def __aenter__(self):
    method __aexit__ (line 692) | async def __aexit__(self, exc_type, exc_val, exc_tb):
  function realtime_connect_wrapper (line 719) | def realtime_connect_wrapper(tracer: Tracer, wrapped, instance, args, kw...

FILE: packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/responses_wrappers.py
  function _get_openai_sentinel_types (line 35) | def _get_openai_sentinel_types() -> tuple:
  function _sanitize_sentinel_values (line 91) | def _sanitize_sentinel_values(kwargs: dict) -> dict:
  function prepare_input_param (line 109) | def prepare_input_param(input_param: ResponseInputItemParam) -> Response...
  function process_input (line 128) | def process_input(inp: ResponseInputParam) -> ResponseInputParam:
  function is_validator_iterator (line 134) | def is_validator_iterator(content):
  class ResponseOutputMessageParamWithoutId (line 148) | class ResponseOutputMessageParamWithoutId(ResponseOutputMessageParam):
  class TracedData (line 155) | class TracedData(pydantic.BaseModel):
    class Config (line 185) | class Config:
  function parse_response (line 192) | def parse_response(response: Union[LegacyAPIResponse, Response]) -> Resp...
  function get_tools_from_kwargs (line 198) | def get_tools_from_kwargs(kwargs: dict) -> list[ToolParam]:
  function process_content_block (line 216) | def process_content_block(
  function prepare_kwargs_for_shared_attributes (line 240) | def prepare_kwargs_for_shared_attributes(kwargs):
  function set_data_attributes (line 254) | def set_data_attributes(traced_response: TracedData, span: Span):
  function responses_get_or_create_wrapper (line 497) | def responses_get_or_create_wrapper(tracer: Tracer, wrapped, instance, a...
  function async_responses_get_or_create_wrapper (line 661) | async def async_responses_get_or_create_wrapper(
  function responses_cancel_wrapper (line 824) | def responses_cancel_wrapper(tracer: Tracer, wrapped, instance, args, kw...
  function async_responses_cancel_wrapper (line 854) | async def async_responses_cancel_wrapper(
  class ResponseStream (line 884) | class ResponseStream(ObjectProxy):
    method __init__ (line 893) | def __init__(
    method __del__ (line 936) | def __del__(self):
    method __enter__ (line 941) | def __enter__(self):
    method __exit__ (line 947) | def __exit__(self, exc_type, exc_val, exc_tb):
    method __aenter__ (line 960) | async def __aenter__(self):
    method __aexit__ (line 966) | async def __aexit__(self, exc_type, exc_val, exc_tb):
    method close (line 979) | def close(self):
    method aclose (line 986) | async def aclose(self):
    method __iter__ (line 993) | def __iter__(self):
    method __next__ (line 997) | def __next__(self):
    method __aiter__ (line 1011) | def __aiter__(self):
    method __anext__ (line 1015) | async def __anext__(self):
    method _process_chunk (line 1029) | def _process_chunk(self, chunk):
    method _process_complete_response (line 1046) | def _process_complete_response(self):
    method _handle_exception (line 1083) | def _handle_exception(self, exception):
    method _ensure_cleanup (line 1098) | def _ensure_cleanup(self):

FILE: packages/opentelemetry-instrumentation-openai/tests/conftest.py
  function environment (line 31) | def environment():
  function openai_client (line 41) | def openai_client():
  function mock_openai_client (line 46) | def mock_openai_client():
  function deepseek_client (line 54) | def deepseek_client():
  function vllm_openai_client (line 62) | def vllm_openai_client():
  function azure_openai_client (line 67) | def azure_openai_client():
  function async_azure_openai_client (line 74) | def async_azure_openai_client():
  function async_openai_client (line 81) | def async_openai_client():
  function async_vllm_openai_client (line 86) | def async_vllm_openai_client():
  function fixture_span_exporter (line 91) | def fixture_span_exporter():
  function fixture_tracer_provider (line 97) | def fixture_tracer_provider(span_exporter):
  function fixture_log_exporter (line 104) | def fixture_log_exporter():
  function fixture_logger_provider (line 110) | def fixture_logger_provider(log_exporter):
  function fixture_reader (line 118) | def fixture_reader():
  function fixture_meter_provider (line 126) | def fixture_meter_provider(reader):
  function instrument_legacy (line 134) | def instrument_legacy(reader, tracer_provider, meter_provider):
  function instrument_with_content (line 153) | def instrument_with_content(
  function instrument_with_no_content (line 173) | def instrument_with_no_content(
  function clear_exporter (line 193) | def clear_exporter(span_exporter):
  function vcr_config (line 198) | def vcr_config():

FILE: packages/opentelemetry-instrumentation-openai/tests/metrics/conftest.py
  function vcr_config (line 5) | def vcr_config():

FILE: packages/opentelemetry-instrumentation-openai/tests/metrics/test_openai_metrics.py
  function openai_client (line 14) | def openai_client():
  function test_chat_completion_metrics (line 19) | def test_chat_completion_metrics(instrument_legacy, reader, openai_client):
  function test_chat_parsed_completion_metrics (line 81) | def test_chat_parsed_completion_metrics(instrument_legacy, reader, opena...
  function test_chat_streaming_metrics (line 137) | def test_chat_streaming_metrics(instrument_legacy, reader, deepseek_clie...
  function test_embeddings_metrics (line 232) | def test_embeddings_metrics(instrument_legacy, reader, openai_client):
  function test_image_gen_metrics (line 280) | def test_image_gen_metrics(instrument_legacy, reader, openai_client):

FILE: packages/opentelemetry-instrumentation-openai/tests/traces/conftest.py
  function vcr_config (line 5) | def vcr_config():

FILE: packages/opentelemetry-instrumentation-openai/tests/traces/test_assistant.py
  function assistant (line 12) | def assistant(openai_client):
  function test_new_assistant (line 22) | def test_new_assistant(
  function test_new_assistant_with_events_with_content (line 116) | def test_new_assistant_with_events_with_content(
  function test_new_assistant_with_events_with_no_content (line 202) | def test_new_assistant_with_events_with_no_content(
  function test_new_assistant_with_polling (line 269) | def test_new_assistant_with_polling(
  function test_new_assistant_with_polling_with_events_with_content (line 349) | def test_new_assistant_with_polling_with_events_with_content(
  function test_new_assistant_with_polling_with_events_with_no_content (line 425) | def test_new_assistant_with_polling_with_events_with_no_content(
  function test_existing_assistant (line 481) | def test_existing_assistant(
  function test_existing_assistant_with_events_with_content (line 571) | def test_existing_assistant_with_events_with_content(
  function test_existing_assistant_with_events_with_no_content (line 668) | def test_existing_assistant_with_events_wi
Copy disabled (too large) Download .json
Condensed preview — 1538 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (37,754K chars).
[
  {
    "path": ".cz.toml",
    "chars": 6000,
    "preview": "[tool.commitizen]\nname = \"cz_conventional_commits\"\ntag_format = \"v$version\"\nversion_scheme = \"pep440\"\nmajor_version_zero"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 3489,
    "preview": "name: \"🐛 Bug Report\"\ndescription: \"Submit a bug report to help us improve\"\ntitle: \"🐛 Bug Report: \"\nlabels: [\"type: bug\"]"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 3145,
    "preview": "name: 🚀 Feature\ndescription: \"Submit a proposal for a new feature\"\ntitle: \"🚀 Feature: \"\nlabels: [feature]\nbody:\n  - type"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 493,
    "preview": "<!-- Thanks for submitting a PR! To make sure this gets merged quickly, make sure to check the following checkboxes. -->"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 5454,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: \"npm\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n  - package-e"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 6314,
    "preview": "name: CI\n\non:\n  pull_request:\n    branches:\n      - \"main\"\n  push:\n    branches:\n      - \"main\"\n\nenv:\n  PIP_NO_CACHE_DIR"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 3830,
    "preview": "name: Release - Traceloop SDK & Standalone Instrumentations\n\non:\n  workflow_dispatch:\n\njobs:\n  bump-version:\n    runs-on"
  },
  {
    "path": ".gitignore",
    "chars": 2207,
    "preview": "# See http://help.github.com/ignore-files/ for more about ignoring files.\n\n# compiled output\ndist\ntmp\n/out-tsc\n\n# depend"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 44887,
    "preview": "## v0.53.3 (2026-03-19)\n\n### Fix\n\n- **langchain**: release and use semconv 0.4.16 version (#3829)\n\n## v0.53.2 (2026-03-1"
  },
  {
    "path": "CLAUDE.md",
    "chars": 2838,
    "preview": "# OpenLLMetry Repository Guide\n\n## Repository Structure\nThis repository contains multiple PyPI-publishable packages orga"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 5222,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1069,
    "preview": "# Contributing to OpenLLMetry\n\nThanks for taking the time to contribute! 😃 🚀\n\nPlease refer to our [Contributing Guide](h"
  },
  {
    "path": "GOVERNANCE.md",
    "chars": 2382,
    "preview": "# OpenLLMetry Governance\n\nThis document defines the governance policies of OpenLLMetry.\n\n## Contributors\n\nAnyone can con"
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "MAINTAINERS.md",
    "chars": 696,
    "preview": "## Overview\n\nThis document contains a list of maintainers in this repo.\nIf you're interested in contributing, and becomi"
  },
  {
    "path": "README.md",
    "chars": 10623,
    "preview": "<p align=\"center\">\n<a href=\"https://www.traceloop.com/openllmetry#gh-light-mode-only\">\n<img width=\"600\" src=\"https://raw"
  },
  {
    "path": "SECURITY.md",
    "chars": 2775,
    "preview": "# Security\n\nContact: security@traceloop.com\n\nBased on [https://supabase.com/.well-known/security.txt](https://supabase.c"
  },
  {
    "path": "nx.json",
    "chars": 127,
    "preview": "{\n  \"extends\": \"nx/presets/npm.json\",\n  \"$schema\": \"./node_modules/nx/schemas/nx-schema.json\",\n  \"plugins\": [\"@nxlv/pyth"
  },
  {
    "path": "package.json",
    "chars": 225,
    "preview": "{\n  \"name\": \"openllmetry\",\n  \"version\": \"0.0.0\",\n  \"license\": \"MIT\",\n  \"scripts\": {},\n  \"private\": true,\n  \"devDependenc"
  },
  {
    "path": "packages/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/README.md",
    "chars": 621,
    "preview": "# OpenTelemetry Agno Instrumentation\n\nThis library provides automatic instrumentation for the [Agno](https://github.com/"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/__init__.py",
    "chars": 21791,
    "preview": "\"\"\"OpenTelemetry Agno instrumentation\"\"\"\n\nimport logging\nfrom typing import Collection\nfrom importlib.metadata import ve"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/_tool_wrappers.py",
    "chars": 6287,
    "preview": "\"\"\"Wrapper classes for FunctionCall tool execution instrumentation.\"\"\"\n\nimport json\nimport time\n\nfrom opentelemetry impo"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/config.py",
    "chars": 479,
    "preview": "class Config:\n    \"\"\"Global configuration for Agno instrumentation.\"\"\"\n\n    exception_logger = None\n    \"\"\"Optional logg"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/streaming.py",
    "chars": 8105,
    "preview": "import logging\nimport time\n\nfrom opentelemetry.instrumentation.agno.utils import should_send_prompts\nfrom opentelemetry."
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/utils.py",
    "chars": 1511,
    "preview": "import logging\nfrom typing import Any\nfrom functools import wraps\nimport asyncio\nfrom opentelemetry.trace import Span\n\nl"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/opentelemetry/instrumentation/agno/version.py",
    "chars": 23,
    "preview": "__version__ = \"0.53.3\"\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/poetry.toml",
    "chars": 32,
    "preview": "[virtualenvs]\nin-project = true\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/project.json",
    "chars": 2090,
    "preview": "{\n  \"name\": \"opentelemetry-instrumentation-agno\",\n  \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n  \"p"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/pyproject.toml",
    "chars": 1748,
    "preview": "[project]\nname = \"opentelemetry-instrumentation-agno\"\nversion = \"0.53.3\"\ndescription = \"OpenTelemetry Agno instrumentati"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/tests/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/tests/cassettes/test_agent/test_agent_arun_basic.yaml",
    "chars": 4660,
    "preview": "interactions:\n- request:\n    body: '{\"messages\":[{\"role\":\"developer\",\"content\":\"A simple async test agent\"},{\"role\":\"use"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/tests/cassettes/test_agent/test_agent_arun_streaming.yaml",
    "chars": 8089,
    "preview": "interactions:\n- request:\n    body: '{\"messages\": [{\"role\": \"developer\", \"content\": \"An async streaming test\n      agent\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/tests/cassettes/test_agent/test_agent_arun_streaming_with_tools.yaml",
    "chars": 15936,
    "preview": "interactions:\n- request:\n    body: '{\"messages\": [{\"role\": \"developer\", \"content\": \"A streaming agent with\n      tools\"}"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/tests/cassettes/test_agent/test_agent_metrics.yaml",
    "chars": 4624,
    "preview": "interactions:\n- request:\n    body: '{\"messages\":[{\"role\":\"user\",\"content\":\"Tell me a short joke\"}],\"model\":\"gpt-4o-mini\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/tests/cassettes/test_agent/test_agent_run_basic.yaml",
    "chars": 4610,
    "preview": "interactions:\n- request:\n    body: '{\"messages\":[{\"role\":\"developer\",\"content\":\"A simple test agent\"},{\"role\":\"user\",\"co"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/tests/cassettes/test_agent/test_agent_run_streaming.yaml",
    "chars": 8065,
    "preview": "interactions:\n- request:\n    body: '{\"messages\": [{\"role\": \"developer\", \"content\": \"A streaming test agent\"},\n      {\"ro"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/tests/cassettes/test_agent/test_agent_run_streaming_with_tools.yaml",
    "chars": 15929,
    "preview": "interactions:\n- request:\n    body: '{\"messages\": [{\"role\": \"developer\", \"content\": \"A sync streaming agent\n      with to"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/tests/cassettes/test_agent/test_agent_with_tools.yaml",
    "chars": 8489,
    "preview": "interactions:\n- request:\n    body: '{\"messages\":[{\"role\":\"user\",\"content\":\"Add 5 and 7\"}],\"model\":\"gpt-4o-mini\",\"tools\":"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/tests/cassettes/test_team/test_team_basic.yaml",
    "chars": 6867,
    "preview": "interactions:\n- request:\n    body: '{\"messages\":[{\"role\":\"developer\",\"content\":\"You are the leader of a team\n      and s"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/tests/cassettes/test_team/test_team_discussion.yaml",
    "chars": 30829,
    "preview": "interactions:\n- request:\n    body: '{\"messages\":[{\"role\":\"developer\",\"content\":\"You are the leader of a team\n      and s"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/tests/conftest.py",
    "chars": 2178,
    "preview": "\"\"\"Unit tests configuration module.\"\"\"\n\nimport os\n\nimport pytest\nfrom opentelemetry.instrumentation.agno import AgnoInst"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/tests/test_agent.py",
    "chars": 8541,
    "preview": "import pytest\nfrom agno.agent import Agent\nfrom agno.models.openai import OpenAIChat\nfrom opentelemetry.semconv._incubat"
  },
  {
    "path": "packages/opentelemetry-instrumentation-agno/tests/test_team.py",
    "chars": 2382,
    "preview": "import pytest\nfrom textwrap import dedent\nfrom agno.agent import Agent\nfrom agno.models.openai import OpenAIChat\nfrom ag"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/.python-version",
    "chars": 5,
    "preview": "3.10\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/README.md",
    "chars": 1187,
    "preview": "# OpenTelemetry Aleph Alpha Instrumentation\n\n<a href=\"https://pypi.org/project/opentelemetry-instrumentation-alephalpha/"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/__init__.py",
    "chars": 6709,
    "preview": "\"\"\"OpenTelemetry Aleph Alpha instrumentation\"\"\"\n\nimport logging\nimport os\nfrom typing import Collection, List, Optional,"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/config.py",
    "chars": 75,
    "preview": "class Config:\n    exception_logger = None\n    use_legacy_attributes = True\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/event_emitter.py",
    "chars": 3627,
    "preview": "from enum import Enum\nfrom typing import Union\n\nfrom opentelemetry._logs import LogRecord\nfrom opentelemetry.instrumenta"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/event_models.py",
    "chars": 1153,
    "preview": "from dataclasses import dataclass\nfrom typing import Any, List, Literal, Optional, TypedDict\n\n\nclass _FunctionToolCall(T"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/span_utils.py",
    "chars": 1302,
    "preview": "from opentelemetry.instrumentation.alephalpha.event_models import (\n    CompletionEvent,\n    PromptEvent,\n)\nfrom opentel"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/utils.py",
    "chars": 811,
    "preview": "import logging\nimport traceback\n\nfrom opentelemetry.instrumentation.alephalpha.config import Config\n\n\ndef dont_throw(fun"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/opentelemetry/instrumentation/alephalpha/version.py",
    "chars": 23,
    "preview": "__version__ = \"0.53.3\"\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/poetry.toml",
    "chars": 32,
    "preview": "[virtualenvs]\nin-project = true\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/project.json",
    "chars": 2156,
    "preview": "{\n  \"name\": \"opentelemetry-instrumentation-alephalpha\",\n  \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/pyproject.toml",
    "chars": 1821,
    "preview": "[project]\nname = \"opentelemetry-instrumentation-alephalpha\"\nversion = \"0.53.3\"\ndescription = \"OpenTelemetry Aleph Alpha "
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/pytest.ini",
    "chars": 27,
    "preview": "[pytest]\nasyncio_mode=auto\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/tests/__init__.py",
    "chars": 18,
    "preview": "\"\"\"unit tests.\"\"\"\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/tests/cassettes/test_completion/test_alephalpha_completion.yaml",
    "chars": 5316,
    "preview": "interactions:\n- request:\n    body: '{\"prompt\": [{\"type\": \"text\", \"data\": \"Tell me a joke about OpenTelemetry.\",\n      \"c"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/tests/cassettes/test_completion/test_alephalpha_completion_with_events_with_content.yaml",
    "chars": 5316,
    "preview": "interactions:\n- request:\n    body: '{\"prompt\": [{\"type\": \"text\", \"data\": \"Tell me a joke about OpenTelemetry.\",\n      \"c"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/tests/cassettes/test_completion/test_alephalpha_completion_with_events_with_no_content.yaml",
    "chars": 5316,
    "preview": "interactions:\n- request:\n    body: '{\"prompt\": [{\"type\": \"text\", \"data\": \"Tell me a joke about OpenTelemetry.\",\n      \"c"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/tests/conftest.py",
    "chars": 2901,
    "preview": "\"\"\"Unit tests configuration module.\"\"\"\n\nimport os\n\nimport pytest\nfrom aleph_alpha_client import Client\nfrom opentelemetr"
  },
  {
    "path": "packages/opentelemetry-instrumentation-alephalpha/tests/test_completion.py",
    "chars": 5395,
    "preview": "import pytest\nfrom aleph_alpha_client import CompletionRequest, Prompt\nfrom opentelemetry.sdk._logs import ReadableLogRe"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/.python-version",
    "chars": 5,
    "preview": "3.10\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/README.md",
    "chars": 1173,
    "preview": "# OpenTelemetry Anthropic Instrumentation\n\n<a href=\"https://pypi.org/project/opentelemetry-instrumentation-anthropic/\">\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
    "chars": 28132,
    "preview": "\"\"\"OpenTelemetry Anthropic instrumentation\"\"\"\n\nimport logging\nimport os\nimport time\nfrom typing import Callable, Collect"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/config.py",
    "chars": 369,
    "preview": "from typing import Callable, Optional\n\nfrom typing_extensions import Coroutine\n\n\nclass Config:\n    enrich_token_usage = "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/event_emitter.py",
    "chars": 7785,
    "preview": "from dataclasses import asdict\nfrom enum import Enum\nimport json\nfrom typing import Optional, Union\n\nfrom opentelemetry."
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/event_models.py",
    "chars": 876,
    "preview": "from dataclasses import dataclass\nfrom typing import Any, List, Literal, Optional, TypedDict\n\n\nclass _FunctionToolCall(T"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/span_utils.py",
    "chars": 16097,
    "preview": "import json\nimport logging\nfrom typing import Any, Dict\n\nfrom opentelemetry.instrumentation.anthropic.config import Conf"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py",
    "chars": 21380,
    "preview": "import logging\nimport time\nfrom typing import Optional\n\nfrom opentelemetry._logs import Logger\nfrom opentelemetry.instru"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/utils.py",
    "chars": 10696,
    "preview": "import asyncio\nimport json\nimport logging\nimport os\nimport threading\nimport traceback\nfrom importlib.metadata import ver"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/version.py",
    "chars": 23,
    "preview": "__version__ = \"0.53.3\"\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/poetry.toml",
    "chars": 32,
    "preview": "[virtualenvs]\nin-project = true\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/project.json",
    "chars": 2145,
    "preview": "{\n  \"name\": \"opentelemetry-instrumentation-anthropic\",\n  \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\","
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/pyproject.toml",
    "chars": 1801,
    "preview": "[project]\nname = \"opentelemetry-instrumentation-anthropic\"\nversion = \"0.53.3\"\ndescription = \"OpenTelemetry Anthropic ins"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/__init__.py",
    "chars": 18,
    "preview": "\"\"\"unit tests.\"\"\"\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_bedrock_with_raw_response/test_async_anthropic_bedrock_beta_with_raw_response.yaml",
    "chars": 3106,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_bedrock_with_raw_response/test_async_anthropic_bedrock_regular_create.yaml",
    "chars": 2545,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_bedrock_with_raw_response/test_async_anthropic_bedrock_with_raw_response.yaml",
    "chars": 3357,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_completion/test_anthropic_completion_legacy.yaml",
    "chars": 1730,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens_to_sample\": 2048, \"model\": \"claude-instant-1.2\", \"prompt\":\n      \"\\n\\nH"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_completion/test_anthropic_completion_with_events_with_content.yaml",
    "chars": 1730,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens_to_sample\": 2048, \"model\": \"claude-instant-1.2\", \"prompt\":\n      \"\\n\\nH"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_completion/test_anthropic_completion_with_events_with_no_content.yaml",
    "chars": 1730,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens_to_sample\": 2048, \"model\": \"claude-instant-1.2\", \"prompt\":\n      \"\\n\\nH"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_async_multi_modal_legacy.yaml",
    "chars": 136003,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_async_multi_modal_with_events_with_content.yaml",
    "chars": 136003,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_async_multi_modal_with_events_with_no_content.yaml",
    "chars": 136003,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_image_with_history.yaml",
    "chars": 140850,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Are you\n      capable"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_message_create_legacy.yaml",
    "chars": 2904,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_message_create_with_events_with_content.yaml",
    "chars": 2904,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_message_create_with_events_with_no_content.yaml",
    "chars": 2904,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_message_stream_manager_legacy.yaml",
    "chars": 12550,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_message_stream_manager_with_events_with_content.yaml",
    "chars": 10641,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_message_stream_manager_with_events_with_no_content.yaml",
    "chars": 11051,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_message_streaming_legacy.yaml",
    "chars": 13741,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_message_streaming_with_events_with_content.yaml",
    "chars": 13741,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_message_streaming_with_events_with_no_content.yaml",
    "chars": 13741,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_multi_modal_legacy.yaml",
    "chars": 136411,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_multi_modal_with_events_with_content.yaml",
    "chars": 136411,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_multi_modal_with_events_with_no_content.yaml",
    "chars": 136411,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_streaming_helper_methods_legacy.yaml",
    "chars": 4179,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Say hello\n      there"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_sync_streaming_helper_methods_legacy.yaml",
    "chars": 3986,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Say hello\n      there"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_text_stream_helper_method_legacy.yaml",
    "chars": 3986,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Say hello\n      there"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_tools_history_legacy.yaml",
    "chars": 4026,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\":1024,\"messages\":[{\"role\":\"user\",\"content\":\"What is the weather\n      a"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_tools_history_with_events_with_content.yaml",
    "chars": 4137,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"What is\n      the wea"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_tools_history_with_events_with_no_content.yaml",
    "chars": 4129,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"What is\n      the wea"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_tools_legacy.yaml",
    "chars": 3368,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"What is\n      the wea"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_tools_streaming_legacy.yaml",
    "chars": 8899,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\":1024,\"messages\":[{\"role\":\"user\",\"content\":\"What is the weather\n      a"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_tools_streaming_with_events_with_content.yaml",
    "chars": 9021,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"What is\n      the wea"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_tools_streaming_with_events_with_no_content.yaml",
    "chars": 9976,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"What is\n      the wea"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_tools_with_events_with_content.yaml",
    "chars": 3368,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"What is\n      the wea"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_anthropic_tools_with_events_with_no_content.yaml",
    "chars": 3368,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"What is\n      the wea"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_async_anthropic_beta_message_stream_manager_legacy.yaml",
    "chars": 4795,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_async_anthropic_message_create_legacy.yaml",
    "chars": 2841,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_async_anthropic_message_create_with_events_with_content.yaml",
    "chars": 2841,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_async_anthropic_message_create_with_events_with_no_content.yaml",
    "chars": 2841,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_async_anthropic_message_stream_manager_legacy.yaml",
    "chars": 9898,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_async_anthropic_message_stream_manager_with_events_with_content.yaml",
    "chars": 9766,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_async_anthropic_message_stream_manager_with_events_with_no_content.yaml",
    "chars": 9133,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_async_anthropic_message_streaming_legacy.yaml",
    "chars": 9138,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_async_anthropic_message_streaming_with_events_with_content.yaml",
    "chars": 9138,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_async_anthropic_message_streaming_with_events_with_no_content.yaml",
    "chars": 9138,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Tell me\n      a joke "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_with_asyncio_run_legacy.yaml",
    "chars": 2309,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"What is\n      the wea"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_with_asyncio_run_with_events_with_content.yaml",
    "chars": 2309,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"What is\n      the wea"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_messages/test_with_asyncio_run_with_events_with_no_content.yaml",
    "chars": 2309,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"What is\n      the wea"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_prompt_caching/test_anthropic_prompt_caching_async_legacy.yaml",
    "chars": 19743,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_prompt_caching/test_anthropic_prompt_caching_async_stream_legacy.yaml",
    "chars": 34589,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_prompt_caching/test_anthropic_prompt_caching_async_stream_with_events_with_content.yaml",
    "chars": 34589,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_prompt_caching/test_anthropic_prompt_caching_async_stream_with_events_with_no_content.yaml",
    "chars": 34589,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_prompt_caching/test_anthropic_prompt_caching_async_with_events_with_content.yaml",
    "chars": 19743,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_prompt_caching/test_anthropic_prompt_caching_async_with_events_with_no_content.yaml",
    "chars": 19743,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_prompt_caching/test_anthropic_prompt_caching_legacy.yaml",
    "chars": 19604,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_prompt_caching/test_anthropic_prompt_caching_stream_legacy.yaml",
    "chars": 32055,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_prompt_caching/test_anthropic_prompt_caching_stream_with_events_with_content.yaml",
    "chars": 32055,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_prompt_caching/test_anthropic_prompt_caching_stream_with_events_with_no_content.yaml",
    "chars": 32055,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_prompt_caching/test_anthropic_prompt_caching_with_events_with_content.yaml",
    "chars": 19604,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_prompt_caching/test_anthropic_prompt_caching_with_events_with_no_content.yaml",
    "chars": 19604,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_structured_outputs/test_anthropic_structured_outputs_legacy.yaml",
    "chars": 3345,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\":1024,\"messages\":[{\"role\":\"user\",\"content\":\"Tell me a joke\n      about "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_structured_outputs/test_anthropic_structured_outputs_with_events_with_content.yaml",
    "chars": 3361,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\":1024,\"messages\":[{\"role\":\"user\",\"content\":\"Tell me a joke\n      about "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_structured_outputs/test_anthropic_structured_outputs_with_events_with_no_content.yaml",
    "chars": 3377,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\":1024,\"messages\":[{\"role\":\"user\",\"content\":\"Tell me a joke\n      about "
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_thinking/test_anthropic_thinking_legacy.yaml",
    "chars": 3553,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 2048, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_thinking/test_anthropic_thinking_streaming_legacy.yaml",
    "chars": 7509,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 2048, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_thinking/test_anthropic_thinking_streaming_with_events_with_content.yaml",
    "chars": 7509,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 2048, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_thinking/test_anthropic_thinking_streaming_with_events_with_no_content.yaml",
    "chars": 7509,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 2048, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_thinking/test_anthropic_thinking_with_events_with_content.yaml",
    "chars": 3553,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 2048, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_thinking/test_anthropic_thinking_with_events_with_no_content.yaml",
    "chars": 3553,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 2048, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_thinking/test_async_anthropic_thinking_legacy.yaml",
    "chars": 3552,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 2048, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_thinking/test_async_anthropic_thinking_streaming_legacy.yaml",
    "chars": 7828,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 2048, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_thinking/test_async_anthropic_thinking_streaming_with_events_with_content.yaml",
    "chars": 7828,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 2048, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_thinking/test_async_anthropic_thinking_streaming_with_events_with_no_content.yaml",
    "chars": 7828,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 2048, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_thinking/test_async_anthropic_thinking_with_events_with_content.yaml",
    "chars": 3552,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 2048, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/cassettes/test_thinking/test_async_anthropic_thinking_with_events_with_no_content.yaml",
    "chars": 3552,
    "preview": "interactions:\n- request:\n    body: '{\"max_tokens\": 2048, \"messages\": [{\"role\": \"user\", \"content\": [{\"type\":\n      \"text\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/conftest.py",
    "chars": 4308,
    "preview": "\"\"\"Unit tests configuration module.\"\"\"\n\nimport os\n\nimport pytest\nfrom anthropic import Anthropic, AsyncAnthropic\nfrom op"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/data/1024+tokens.txt",
    "chars": 5384,
    "preview": "Open-Source Library OpenLLMetry Brings LLM Functionality to OpenTelemetry\nTraceloop, a YCombinator-backed company, has a"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/test_bedrock_with_raw_response.py",
    "chars": 6530,
    "preview": "import os\nimport pytest\nfrom opentelemetry.semconv._incubating.attributes import (\n    gen_ai_attributes as GenAIAttribu"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/test_completion.py",
    "chars": 4647,
    "preview": "import pytest\nfrom anthropic import AI_PROMPT, HUMAN_PROMPT\nfrom opentelemetry.sdk._logs import ReadableLogRecord\nfrom o"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/test_messages.py",
    "chars": 95003,
    "preview": "import asyncio\nimport base64\nimport json\nfrom pathlib import Path\n\nimport pytest\nfrom opentelemetry.sdk._logs import Rea"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/test_prompt_caching.py",
    "chars": 53748,
    "preview": "from pathlib import Path\n\nimport pytest\nfrom opentelemetry.sdk._logs import ReadableLogRecord\nfrom opentelemetry.sdk.tra"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/test_structured_outputs.py",
    "chars": 4392,
    "preview": "import json\n\nimport pytest\nfrom opentelemetry.semconv._incubating.attributes import (\n    gen_ai_attributes as GenAIAttr"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/test_thinking.py",
    "chars": 27337,
    "preview": "import pytest\nfrom opentelemetry.sdk._logs import ReadableLogRecord\nfrom opentelemetry.semconv._incubating.attributes im"
  },
  {
    "path": "packages/opentelemetry-instrumentation-anthropic/tests/utils.py",
    "chars": 3006,
    "preview": "from opentelemetry.semconv._incubating.attributes import (\n    gen_ai_attributes as GenAIAttributes,\n)\nfrom opentelemetr"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/.python-version",
    "chars": 5,
    "preview": "3.10\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/README.md",
    "chars": 1142,
    "preview": "# OpenTelemetry Bedrock Instrumentation\n\n<a href=\"https://pypi.org/project/opentelemetry-instrumentation-bedrock/\">\n    "
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py",
    "chars": 22208,
    "preview": "\"\"\"OpenTelemetry Bedrock instrumentation\"\"\"\n\nimport json\nimport logging\nimport os\nimport time\nfrom functools import part"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/config.py",
    "chars": 106,
    "preview": "class Config:\n    enrich_token_usage = False\n    exception_logger = None\n    use_legacy_attributes = True\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/event_emitter.py",
    "chars": 9904,
    "preview": "import json\nfrom dataclasses import asdict\nfrom enum import Enum\nfrom typing import List, Optional, Union\n\nfrom opentele"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/event_models.py",
    "chars": 876,
    "preview": "from dataclasses import dataclass\nfrom typing import Any, List, Literal, Optional, TypedDict\n\n\nclass _FunctionToolCall(T"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/guardrail.py",
    "chars": 8745,
    "preview": "from enum import Enum\nfrom opentelemetry.semconv._incubating.attributes import (\n    gen_ai_attributes as GenAIAttribute"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/prompt_caching.py",
    "chars": 1362,
    "preview": "from opentelemetry import trace\n\n\nclass CachingHeaders:\n    READ = \"x-amzn-bedrock-cache-read-input-token-count\"\n    WRI"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/reusable_streaming_body.py",
    "chars": 1670,
    "preview": "from botocore.response import StreamingBody\nfrom botocore.exceptions import (\n    ReadTimeoutError,\n    ResponseStreamin"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/span_utils.py",
    "chars": 26934,
    "preview": "import json\nimport time\n\nimport anthropic\nfrom opentelemetry.instrumentation.bedrock.config import Config\nfrom opentelem"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/streaming_wrapper.py",
    "chars": 2518,
    "preview": "import json\n\nfrom opentelemetry.instrumentation.bedrock.utils import (\n    dont_throw,\n)\nfrom wrapt import ObjectProxy\n\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/utils.py",
    "chars": 1305,
    "preview": "import logging\nimport os\nimport traceback\n\nfrom opentelemetry import context as context_api\nfrom opentelemetry.instrumen"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/version.py",
    "chars": 23,
    "preview": "__version__ = \"0.53.3\"\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/poetry.toml",
    "chars": 32,
    "preview": "[virtualenvs]\nin-project = true\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/project.json",
    "chars": 2123,
    "preview": "{\n  \"name\": \"opentelemetry-instrumentation-bedrock\",\n  \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n "
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/pyproject.toml",
    "chars": 1713,
    "preview": "[project]\nname = \"opentelemetry-instrumentation-bedrock\"\nversion = \"0.53.3\"\ndescription = \"OpenTelemetry Bedrock instrum"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/__init__.py",
    "chars": 18,
    "preview": "\"\"\"unit tests.\"\"\"\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/conftest.py",
    "chars": 4141,
    "preview": "\"\"\"Unit tests configuration module.\"\"\"\n\nimport os\n\nimport boto3\nimport pytest\nfrom opentelemetry.instrumentation.bedrock"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/metrics/__init__.py",
    "chars": 18,
    "preview": "\"\"\"unit tests.\"\"\"\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/metrics/cassettes/test_bedrock_guardrails_metrics/test_titan_converse_guardrail.yaml",
    "chars": 3463,
    "preview": "interactions:\n- request:\n    body: '{\"messages\": [{\"role\": \"user\", \"content\": [{\"guardContent\": {\"text\": {\"text\":\n      "
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/metrics/cassettes/test_bedrock_guardrails_metrics/test_titan_converse_stream_guardrail.yaml",
    "chars": 4869,
    "preview": "interactions:\n- request:\n    body: '{\"messages\": [{\"role\": \"user\", \"content\": [{\"guardContent\": {\"text\": {\"text\":\n      "
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/metrics/cassettes/test_bedrock_guardrails_metrics/test_titan_invoke_model_guardrail.yaml",
    "chars": 4830,
    "preview": "interactions:\n- request:\n    body: '{\"inputText\": \"Tell me a joke about opentelemetry\", \"textGenerationConfig\": {\"maxTok"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/metrics/cassettes/test_bedrock_guardrails_metrics/test_titan_invoke_stream_guardrail.yaml",
    "chars": 8369,
    "preview": "interactions:\n- request:\n    body: '{\"inputText\": \"tell me a very two sentence story and put the string 1234561666\n     "
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/metrics/cassettes/test_bedrock_metrics/test_invoke_model_metrics.yaml",
    "chars": 1651,
    "preview": "interactions:\n- request:\n    body: '{\"inputText\": \"Tell me a joke about opentelemetry\", \"textGenerationConfig\":\n      {\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/metrics/cassettes/test_bedrock_prompt_caching_metrics/test_prompt_cache.yaml",
    "chars": 4595,
    "preview": "interactions:\n- request:\n    body: '{\"anthropic_version\": \"bedrock-2023-05-31\", \"system\": \"very very long system prompt\""
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/metrics/conftest.py",
    "chars": 1942,
    "preview": "import os\n\nimport boto3\nimport pytest\nfrom opentelemetry import metrics, trace\nfrom opentelemetry.instrumentation.bedroc"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/metrics/test_bedrock_guardrails_metrics.py",
    "chars": 3790,
    "preview": "import json\n\nimport pytest\nfrom opentelemetry.semconv._incubating.attributes import (\n    gen_ai_attributes as GenAIAttr"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/metrics/test_bedrock_metrics.py",
    "chars": 2170,
    "preview": "import json\n\nimport pytest\nfrom opentelemetry.semconv._incubating.attributes import (\n    gen_ai_attributes as GenAIAttr"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/metrics/test_bedrock_prompt_caching_metrics.py",
    "chars": 2868,
    "preview": "import json\n\nimport pytest\n\nfrom opentelemetry.instrumentation.bedrock import PromptCaching\nfrom opentelemetry.instrumen"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/traces/__init__.py",
    "chars": 18,
    "preview": "\"\"\"unit tests.\"\"\"\n"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/traces/cassettes/test_ai21/test_ai21_j2_completion_string_content.yaml",
    "chars": 13065,
    "preview": "interactions:\n- request:\n    body: '{\"prompt\": \"Translate to spanish: ''Amazon Bedrock is the easiest way to\n      build"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/traces/cassettes/test_ai21/test_ai21_j2_completion_string_content_with_events_with_content.yaml",
    "chars": 13065,
    "preview": "interactions:\n- request:\n    body: '{\"prompt\": \"Translate to spanish: ''Amazon Bedrock is the easiest way to\n      build"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/traces/cassettes/test_ai21/test_ai21_j2_completion_string_content_with_events_with_no_content.yaml",
    "chars": 13065,
    "preview": "interactions:\n- request:\n    body: '{\"prompt\": \"Translate to spanish: ''Amazon Bedrock is the easiest way to\n      build"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/traces/cassettes/test_anthropic/test_anthropic_2_completion.yaml",
    "chars": 1929,
    "preview": "interactions:\n- request:\n    body: '{\"prompt\": \"Human: Tell me a joke about opentelemetry Assistant:\", \"max_tokens_to_sa"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/traces/cassettes/test_anthropic/test_anthropic_2_completion_with_events_with_content.yaml",
    "chars": 1929,
    "preview": "interactions:\n- request:\n    body: '{\"prompt\": \"Human: Tell me a joke about opentelemetry Assistant:\", \"max_tokens_to_sa"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/traces/cassettes/test_anthropic/test_anthropic_2_completion_with_events_with_no_content.yaml",
    "chars": 1929,
    "preview": "interactions:\n- request:\n    body: '{\"prompt\": \"Human: Tell me a joke about opentelemetry Assistant:\", \"max_tokens_to_sa"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/traces/cassettes/test_anthropic/test_anthropic_3_completion_complex_content.yaml",
    "chars": 1930,
    "preview": "interactions:\n- request:\n    body: '{\"messages\": [{\"role\": \"user\", \"content\": [{\"type\": \"text\", \"text\": \"Tell\n      me a"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/traces/cassettes/test_anthropic/test_anthropic_3_completion_complex_content_with_events_with_content.yaml",
    "chars": 1930,
    "preview": "interactions:\n- request:\n    body: '{\"messages\": [{\"role\": \"user\", \"content\": [{\"type\": \"text\", \"text\": \"Tell\n      me a"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/traces/cassettes/test_anthropic/test_anthropic_3_completion_complex_content_with_events_with_no_content.yaml",
    "chars": 1930,
    "preview": "interactions:\n- request:\n    body: '{\"messages\": [{\"role\": \"user\", \"content\": [{\"type\": \"text\", \"text\": \"Tell\n      me a"
  },
  {
    "path": "packages/opentelemetry-instrumentation-bedrock/tests/traces/cassettes/test_anthropic/test_anthropic_3_completion_streaming.yaml",
    "chars": 9385,
    "preview": "interactions:\n- request:\n    body: '{\"messages\": [{\"role\": \"user\", \"content\": [{\"type\": \"text\", \"text\": \"Tell\n      me a"
  }
]

// ... and 1338 more files (download for full content)

About this extraction

This page contains the full source code of the traceloop/openllmetry GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1538 files (34.4 MB), approximately 9.1M tokens, and a symbol index with 3911 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!