From 6ffaf9e505858323ec54aeb2546780bc734fa6f2 Mon Sep 17 00:00:00 2001
From: Nasser <42423897+Abdulnaser97@users.noreply.github.com>
Date: Thu, 30 Oct 2025 15:49:13 -0400
Subject: [PATCH 1/3] CodeCanvas: Save
---
openllmetry.CodeCanvas | 7946 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 7946 insertions(+)
create mode 100644 openllmetry.CodeCanvas
diff --git a/openllmetry.CodeCanvas b/openllmetry.CodeCanvas
new file mode 100644
index 0000000000..c67ec2ee55
--- /dev/null
+++ b/openllmetry.CodeCanvas
@@ -0,0 +1,7946 @@
+{
+ "drawioXML": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n",
+ "fileName": "openllmetry.CodeCanvas",
+ "fileURL": "github",
+ "diagramTemplateVersion": 0.2,
+ "filePath": "openllmetry.CodeCanvas",
+ "repoData": {
+ "README.md": {
+ "path": "README.md",
+ "fileName": "README.md",
+ "cellName": "README.md",
+ "cellId": "b2894781-4928-449b-83e8-904a5a1bd8c4",
+ "visible": true,
+ "children": [
+ "README.md-simstep-4f66b0b8-c794-415f-aa35-41e61aca6922"
+ ]
+ },
+ "packages": {
+ "path": "packages",
+ "fileName": "packages",
+ "cellName": "packages",
+ "cellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f",
+ "visible": true,
+ "children": [
+ "packages/traceloop-sdk",
+ "packages/opentelemetry-instrumentation-openai",
+ "packages/opentelemetry-instrumentation-anthropic",
+ "packages/opentelemetry-instrumentation-bedrock",
+ "packages/opentelemetry-instrumentation-langchain",
+ "packages/opentelemetry-instrumentation-llamaindex",
+ "packages/opentelemetry-instrumentation-crewai",
+ "packages/opentelemetry-instrumentation-chromadb",
+ "packages/opentelemetry-instrumentation-pinecone",
+ "packages/opentelemetry-instrumentation-qdrant",
+ "packages/sample-app",
+ "packages/opentelemetry-instrumentation-openai-agents"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-anthropic": {
+ "path": "packages/opentelemetry-instrumentation-anthropic",
+ "fileName": "opentelemetry-instrumentation-anthropic",
+ "cellName": "opentelemetry-instrumentation-anthropic",
+ "cellId": "8b27c45b-fe94-47a4-8117-44eb7264e94a",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f",
+ "children": [
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry": {
+ "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry",
+ "fileName": "opentelemetry",
+ "cellName": "opentelemetry",
+ "cellId": "d4252b21-7378-4253-a6bc-f49dede0230d",
+ "visible": true,
+ "parentCellId": "8b27c45b-fe94-47a4-8117-44eb7264e94a",
+ "children": [
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation": {
+ "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation",
+ "fileName": "instrumentation",
+ "cellName": "instrumentation",
+ "cellId": "df5baabd-f000-4c50-821c-8c979f32dc8f",
+ "visible": true,
+ "parentCellId": "d4252b21-7378-4253-a6bc-f49dede0230d",
+ "children": [
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic": {
+ "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic",
+ "fileName": "anthropic",
+ "cellName": "anthropic",
+ "cellId": "0d7cfaeb-2446-444d-b6c4-067b346e6c7f",
+ "visible": true,
+ "parentCellId": "df5baabd-f000-4c50-821c-8c979f32dc8f",
+ "children": [
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py": {
+ "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "fileName": "__init__.py",
+ "cellName": "__init__.py",
+ "cellId": "5dbda6a0-dc8e-4379-b875-b67ab081bb6a",
+ "visible": true,
+ "parentCellId": "0d7cfaeb-2446-444d-b6c4-067b346e6c7f",
+ "children": [
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-718546e8-1e30-40b8-ab1e-6334e5aab49a",
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-47783bce-dc5a-4446-91ba-e500f774296c",
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-68a032ec-1c86-4f00-9bf4-b2a18e092429",
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-b97542d0-b032-42e6-be56-4e1f4ee65d2f"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py": {
+ "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py",
+ "fileName": "streaming.py",
+ "cellName": "streaming.py",
+ "cellId": "9418a7de-e3b5-41f4-a9b4-a957cf7f2e24",
+ "visible": true,
+ "parentCellId": "0d7cfaeb-2446-444d-b6c4-067b346e6c7f",
+ "children": [
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py-simstep-2ee1ef8b-02a3-4096-ab3d-879112cdea20"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-bedrock": {
+ "path": "packages/opentelemetry-instrumentation-bedrock",
+ "fileName": "opentelemetry-instrumentation-bedrock",
+ "cellName": "opentelemetry-instrumentation-bedrock",
+ "cellId": "8012c2d4-2a1c-4604-b2e3-618154ae3862",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f",
+ "children": [
+ "packages/opentelemetry-instrumentation-bedrock/opentelemetry"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-bedrock/opentelemetry": {
+ "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry",
+ "fileName": "opentelemetry",
+ "cellName": "opentelemetry",
+ "cellId": "6693b9d3-8ea7-45e1-b8e3-e23d69fd56c3",
+ "visible": true,
+ "parentCellId": "8012c2d4-2a1c-4604-b2e3-618154ae3862",
+ "children": [
+ "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation": {
+ "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation",
+ "fileName": "instrumentation",
+ "cellName": "instrumentation",
+ "cellId": "10358afc-4691-4678-9b62-0ce3618abdd3",
+ "visible": true,
+ "parentCellId": "6693b9d3-8ea7-45e1-b8e3-e23d69fd56c3",
+ "children": [
+ "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock": {
+ "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock",
+ "fileName": "bedrock",
+ "cellName": "bedrock",
+ "cellId": "fc38820f-4358-43e3-b393-14b93337f4ad",
+ "visible": true,
+ "parentCellId": "10358afc-4691-4678-9b62-0ce3618abdd3",
+ "children": [
+ "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py": {
+ "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py",
+ "fileName": "__init__.py",
+ "cellName": "__init__.py",
+ "cellId": "3b3a8547-5c50-4499-9fdd-97ceaf01056c",
+ "visible": true,
+ "parentCellId": "fc38820f-4358-43e3-b393-14b93337f4ad",
+ "children": [
+ "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py-simstep-d45a74dd-3e81-4f2f-b039-ce4e5d6531ee",
+ "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py-simstep-76bcb28b-c60e-4cb8-beb8-357e3ae22ab0"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-chromadb": {
+ "path": "packages/opentelemetry-instrumentation-chromadb",
+ "fileName": "opentelemetry-instrumentation-chromadb",
+ "cellName": "opentelemetry-instrumentation-chromadb",
+ "cellId": "97938336-6f5a-4d26-a1e1-13fe956d3bc8",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f",
+ "children": [
+ "packages/opentelemetry-instrumentation-chromadb/opentelemetry"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-chromadb/opentelemetry": {
+ "path": "packages/opentelemetry-instrumentation-chromadb/opentelemetry",
+ "fileName": "opentelemetry",
+ "cellName": "opentelemetry",
+ "cellId": "4a2d9cf8-307b-4d31-ab07-a4850b8ae40c",
+ "visible": true,
+ "parentCellId": "97938336-6f5a-4d26-a1e1-13fe956d3bc8",
+ "children": [
+ "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation": {
+ "path": "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation",
+ "fileName": "instrumentation",
+ "cellName": "instrumentation",
+ "cellId": "34ec46b7-c471-4695-8f73-2a99ad332e17",
+ "visible": true,
+ "parentCellId": "4a2d9cf8-307b-4d31-ab07-a4850b8ae40c",
+ "children": [
+ "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb": {
+ "path": "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb",
+ "fileName": "chromadb",
+ "cellName": "chromadb",
+ "cellId": "50b248e1-4251-495e-aca5-d77f38d8e03a",
+ "visible": true,
+ "parentCellId": "34ec46b7-c471-4695-8f73-2a99ad332e17",
+ "children": [
+ "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/__init__.py"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/__init__.py": {
+ "path": "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/__init__.py",
+ "fileName": "__init__.py",
+ "cellName": "__init__.py",
+ "cellId": "baa445ec-a609-4492-9959-85ddae577015",
+ "visible": true,
+ "parentCellId": "50b248e1-4251-495e-aca5-d77f38d8e03a",
+ "children": [
+ "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/__init__.py-simstep-29380ecc-2470-4bdf-ad76-231ece83df82"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-crewai": {
+ "path": "packages/opentelemetry-instrumentation-crewai",
+ "fileName": "opentelemetry-instrumentation-crewai",
+ "cellName": "opentelemetry-instrumentation-crewai",
+ "cellId": "17feddf2-1efa-4a12-bfba-e97afd0b4a14",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f",
+ "children": [
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry": {
+ "path": "packages/opentelemetry-instrumentation-crewai/opentelemetry",
+ "fileName": "opentelemetry",
+ "cellName": "opentelemetry",
+ "cellId": "6aadd755-683a-49ef-888b-fea2022afbd6",
+ "visible": true,
+ "parentCellId": "17feddf2-1efa-4a12-bfba-e97afd0b4a14",
+ "children": [
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation": {
+ "path": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation",
+ "fileName": "instrumentation",
+ "cellName": "instrumentation",
+ "cellId": "5245ae12-00ff-45dd-9865-cf94704687c3",
+ "visible": true,
+ "parentCellId": "6aadd755-683a-49ef-888b-fea2022afbd6",
+ "children": [
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai": {
+ "path": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai",
+ "fileName": "crewai",
+ "cellName": "crewai",
+ "cellId": "aec07ceb-62c7-41c8-b1f4-63f27657579c",
+ "visible": true,
+ "parentCellId": "5245ae12-00ff-45dd-9865-cf94704687c3",
+ "children": [
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py": {
+ "path": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py",
+ "fileName": "instrumentation.py",
+ "cellName": "instrumentation.py",
+ "cellId": "e9c03ccd-8218-454a-9d5b-8e7dbcc0f824",
+ "visible": true,
+ "parentCellId": "aec07ceb-62c7-41c8-b1f4-63f27657579c",
+ "children": [
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-4009f1e6-115e-4e60-a77e-8b71fd9df89a",
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-940f766b-13fe-4e2f-a4d5-792832e71f51",
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-85bc8477-e13d-491b-9eba-d0cc075fdaa3",
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-7ddd8861-6a29-484e-ae68-0910533aa1f9"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-langchain": {
+ "path": "packages/opentelemetry-instrumentation-langchain",
+ "fileName": "opentelemetry-instrumentation-langchain",
+ "cellName": "opentelemetry-instrumentation-langchain",
+ "cellId": "c0f17def-c8a7-416a-8ba6-2c8ba97fdbcb",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f",
+ "children": [
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry": {
+ "path": "packages/opentelemetry-instrumentation-langchain/opentelemetry",
+ "fileName": "opentelemetry",
+ "cellName": "opentelemetry",
+ "cellId": "dfa71bc6-3d37-4409-abde-04cf4918ab1e",
+ "visible": true,
+ "parentCellId": "c0f17def-c8a7-416a-8ba6-2c8ba97fdbcb",
+ "children": [
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation": {
+ "path": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation",
+ "fileName": "instrumentation",
+ "cellName": "instrumentation",
+ "cellId": "21bc113f-6070-4c47-a60d-177b0e6016a1",
+ "visible": true,
+ "parentCellId": "dfa71bc6-3d37-4409-abde-04cf4918ab1e",
+ "children": [
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain": {
+ "path": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain",
+ "fileName": "langchain",
+ "cellName": "langchain",
+ "cellId": "9e9f8d3c-b3a3-41cf-b0cc-6d33f59e4d09",
+ "visible": true,
+ "parentCellId": "21bc113f-6070-4c47-a60d-177b0e6016a1",
+ "children": [
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py",
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py",
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py": {
+ "path": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py",
+ "fileName": "__init__.py",
+ "cellName": "__init__.py",
+ "cellId": "89270499-1074-43bc-a448-2f1079fdd5e0",
+ "visible": true,
+ "parentCellId": "9e9f8d3c-b3a3-41cf-b0cc-6d33f59e4d09",
+ "children": [
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py-simstep-332a3676-5b6f-4316-8c62-7f5ab27c927c",
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py-simstep-d2bfc7f7-0f5c-4a88-94cc-3153b1ef30f2"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py": {
+ "path": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py",
+ "fileName": "callback_handler.py",
+ "cellName": "callback_handler.py",
+ "cellId": "85945ed1-ff45-4435-b33c-989e99134357",
+ "visible": true,
+ "parentCellId": "9e9f8d3c-b3a3-41cf-b0cc-6d33f59e4d09",
+ "children": [
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py-simstep-3d50ce44-7c00-45be-8de9-11602f582651"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py": {
+ "path": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py",
+ "fileName": "span_utils.py",
+ "cellName": "span_utils.py",
+ "cellId": "a7fafc87-8af0-4599-80bb-8db890b1a6bd",
+ "visible": true,
+ "parentCellId": "9e9f8d3c-b3a3-41cf-b0cc-6d33f59e4d09",
+ "children": [
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-bb6744e0-d46b-4138-ab2f-c9602d4f89a7",
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-e4145c42-50e7-495e-8fae-5c95b565c632",
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-284f0da4-bbcf-488d-998e-f8fc1cd9f758",
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-53b799ca-6785-424f-8f89-a416f0c9bdac"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-llamaindex": {
+ "path": "packages/opentelemetry-instrumentation-llamaindex",
+ "fileName": "opentelemetry-instrumentation-llamaindex",
+ "cellName": "opentelemetry-instrumentation-llamaindex",
+ "cellId": "5188cd58-29b0-49cd-b791-5b66a57c5828",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f",
+ "children": [
+ "packages/opentelemetry-instrumentation-llamaindex/opentelemetry"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-llamaindex/opentelemetry": {
+ "path": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry",
+ "fileName": "opentelemetry",
+ "cellName": "opentelemetry",
+ "cellId": "af75d677-c433-4790-8544-5f600893b301",
+ "visible": true,
+ "parentCellId": "5188cd58-29b0-49cd-b791-5b66a57c5828",
+ "children": [
+ "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation": {
+ "path": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation",
+ "fileName": "instrumentation",
+ "cellName": "instrumentation",
+ "cellId": "122f09e0-551a-4df7-8762-855262ba337c",
+ "visible": true,
+ "parentCellId": "af75d677-c433-4790-8544-5f600893b301",
+ "children": [
+ "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex": {
+ "path": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex",
+ "fileName": "llamaindex",
+ "cellName": "llamaindex",
+ "cellId": "5cc954ea-dc04-487f-88bd-c4ca000e52b0",
+ "visible": true,
+ "parentCellId": "122f09e0-551a-4df7-8762-855262ba337c",
+ "children": [
+ "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py": {
+ "path": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py",
+ "fileName": "__init__.py",
+ "cellName": "__init__.py",
+ "cellId": "d4e9e31f-0972-4748-9f45-46ae0601f647",
+ "visible": true,
+ "parentCellId": "5cc954ea-dc04-487f-88bd-c4ca000e52b0",
+ "children": [
+ "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py-simstep-0677a566-758c-4170-90e2-92e4b43d453d",
+ "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py-simstep-16f67a4b-07b8-4c96-809e-d6fc3bff09a1"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-openai-agents": {
+ "path": "packages/opentelemetry-instrumentation-openai-agents",
+ "fileName": "opentelemetry-instrumentation-openai-agents",
+ "cellName": "opentelemetry-instrumentation-openai-agents",
+ "cellId": "30865560-7c1a-4a32-a339-465fa1aa1302",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f",
+ "children": [
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry": {
+ "path": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry",
+ "fileName": "opentelemetry",
+ "cellName": "opentelemetry",
+ "cellId": "ba88a4f4-d2b7-4e55-b080-1f1c6b6039ae",
+ "visible": true,
+ "parentCellId": "30865560-7c1a-4a32-a339-465fa1aa1302",
+ "children": [
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation": {
+ "path": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation",
+ "fileName": "instrumentation",
+ "cellName": "instrumentation",
+ "cellId": "ce5a3913-3b99-4e91-a528-b6cd2afc5f4e",
+ "visible": true,
+ "parentCellId": "ba88a4f4-d2b7-4e55-b080-1f1c6b6039ae",
+ "children": [
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents": {
+ "path": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents",
+ "fileName": "openai_agents",
+ "cellName": "openai_agents",
+ "cellId": "4c400e14-33fc-4f6c-b757-e39e08712cb0",
+ "visible": true,
+ "parentCellId": "ce5a3913-3b99-4e91-a528-b6cd2afc5f4e",
+ "children": [
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py",
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py": {
+ "path": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py",
+ "fileName": "__init__.py",
+ "cellName": "__init__.py",
+ "cellId": "d5707ec2-17c7-408e-91a8-7b891d55a2ba",
+ "visible": true,
+ "parentCellId": "4c400e14-33fc-4f6c-b757-e39e08712cb0",
+ "children": [
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py-simstep-14f1ee9d-05ad-487b-a770-0cce9057c9c0"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py": {
+ "path": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py",
+ "fileName": "_hooks.py",
+ "cellName": "_hooks.py",
+ "cellId": "398d7f9a-d241-4917-90fd-dfbfad1bb4fe",
+ "visible": true,
+ "parentCellId": "4c400e14-33fc-4f6c-b757-e39e08712cb0",
+ "children": [
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py-simstep-3dcdc2ef-f984-446b-831a-25d8cc3c6309",
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py-simstep-914f0757-94ea-4d3d-8fce-0cd4c885b6e1"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-openai": {
+ "path": "packages/opentelemetry-instrumentation-openai",
+ "fileName": "opentelemetry-instrumentation-openai",
+ "cellName": "opentelemetry-instrumentation-openai",
+ "cellId": "a93c64b7-593d-46d0-b44c-51863129e1a7",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f",
+ "children": [
+ "packages/opentelemetry-instrumentation-openai/opentelemetry"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-openai/opentelemetry": {
+ "path": "packages/opentelemetry-instrumentation-openai/opentelemetry",
+ "fileName": "opentelemetry",
+ "cellName": "opentelemetry",
+ "cellId": "18ed9a31-7cd7-4a0f-b200-41d54e8dd353",
+ "visible": true,
+ "parentCellId": "a93c64b7-593d-46d0-b44c-51863129e1a7",
+ "children": [
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation": {
+ "path": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation",
+ "fileName": "instrumentation",
+ "cellName": "instrumentation",
+ "cellId": "4c8b52a3-c61e-48ee-9fdb-72d6dfa151ad",
+ "visible": true,
+ "parentCellId": "18ed9a31-7cd7-4a0f-b200-41d54e8dd353",
+ "children": [
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai": {
+ "path": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai",
+ "fileName": "openai",
+ "cellName": "openai",
+ "cellId": "1cdd7ac2-6148-4861-8505-26c0ba9db123",
+ "visible": true,
+ "parentCellId": "4c8b52a3-c61e-48ee-9fdb-72d6dfa151ad",
+ "children": [
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py",
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared",
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py": {
+ "path": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py",
+ "fileName": "__init__.py",
+ "cellName": "__init__.py",
+ "cellId": "14c111b0-0e7a-4f30-9baf-79c29c6d4cf8",
+ "visible": true,
+ "parentCellId": "1cdd7ac2-6148-4861-8505-26c0ba9db123",
+ "children": [
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py-simstep-c4181fa3-547f-4786-a301-7bb3a4edff81",
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py-simstep-cf56fb6c-c377-42d6-a5fd-fd80104f6e0c"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared": {
+ "path": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared",
+ "fileName": "shared",
+ "cellName": "shared",
+ "cellId": "99e901b3-bd6c-4cc4-a911-f3da77b4cbd2",
+ "visible": true,
+ "parentCellId": "1cdd7ac2-6148-4861-8505-26c0ba9db123",
+ "children": [
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py",
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py": {
+ "path": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py",
+ "fileName": "chat_wrappers.py",
+ "cellName": "chat_wrappers.py",
+ "cellId": "e850f5ad-f9cd-4d3d-8894-d24ca38dce6d",
+ "visible": true,
+ "parentCellId": "99e901b3-bd6c-4cc4-a911-f3da77b4cbd2",
+ "children": [
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py-simstep-25ad4da4-fa4b-40d9-a1bd-6ebac6aeffb4",
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py-simstep-463c9e3f-53d7-4b44-bfc0-d8d4e710586e"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py": {
+ "path": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py",
+ "fileName": "event_emitter.py",
+ "cellName": "event_emitter.py",
+ "cellId": "4b1e411d-3b8d-4f22-999b-ae9f9bef3187",
+ "visible": true,
+ "parentCellId": "99e901b3-bd6c-4cc4-a911-f3da77b4cbd2",
+ "children": [
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py-simstep-a6d5dfa3-82f2-485a-aa05-83a239ace92c",
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py-simstep-1c00335e-9318-4735-90a9-147ff9280626"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py": {
+ "path": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py",
+ "fileName": "utils.py",
+ "cellName": "utils.py",
+ "cellId": "01398b8a-89f4-4b89-b45c-a4e9a9b69c84",
+ "visible": true,
+ "parentCellId": "1cdd7ac2-6148-4861-8505-26c0ba9db123",
+ "children": [
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py-simstep-e75273c2-4fe4-4a5a-a4c8-1026297adf5f"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-pinecone": {
+ "path": "packages/opentelemetry-instrumentation-pinecone",
+ "fileName": "opentelemetry-instrumentation-pinecone",
+ "cellName": "opentelemetry-instrumentation-pinecone",
+ "cellId": "ba4f1513-b864-45ec-8e17-9e0e3468ea32",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f",
+ "children": [
+ "packages/opentelemetry-instrumentation-pinecone/opentelemetry"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-pinecone/opentelemetry": {
+ "path": "packages/opentelemetry-instrumentation-pinecone/opentelemetry",
+ "fileName": "opentelemetry",
+ "cellName": "opentelemetry",
+ "cellId": "c93bef8b-e6db-4775-96dc-a3f7837d0506",
+ "visible": true,
+ "parentCellId": "ba4f1513-b864-45ec-8e17-9e0e3468ea32",
+ "children": [
+ "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation": {
+ "path": "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation",
+ "fileName": "instrumentation",
+ "cellName": "instrumentation",
+ "cellId": "66a6fe54-dad8-4ec9-af89-4962cd828c49",
+ "visible": true,
+ "parentCellId": "c93bef8b-e6db-4775-96dc-a3f7837d0506",
+ "children": [
+ "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone": {
+ "path": "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone",
+ "fileName": "pinecone",
+ "cellName": "pinecone",
+ "cellId": "542396bc-0ee1-4696-b033-4f92f188049a",
+ "visible": true,
+ "parentCellId": "66a6fe54-dad8-4ec9-af89-4962cd828c49",
+ "children": [
+ "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone/__init__.py"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone/__init__.py": {
+ "path": "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone/__init__.py",
+ "fileName": "__init__.py",
+ "cellName": "__init__.py",
+ "cellId": "71ce4636-69a5-43e0-bc81-701063516493",
+ "visible": true,
+ "parentCellId": "542396bc-0ee1-4696-b033-4f92f188049a",
+ "children": [
+ "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone/__init__.py-simstep-990b2b77-7290-4afd-ae10-257191e37e28"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-qdrant": {
+ "path": "packages/opentelemetry-instrumentation-qdrant",
+ "fileName": "opentelemetry-instrumentation-qdrant",
+ "cellName": "opentelemetry-instrumentation-qdrant",
+ "cellId": "e18f25cb-137a-4a5e-8de2-81322a7818f5",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f",
+ "children": [
+ "packages/opentelemetry-instrumentation-qdrant/opentelemetry"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-qdrant/opentelemetry": {
+ "path": "packages/opentelemetry-instrumentation-qdrant/opentelemetry",
+ "fileName": "opentelemetry",
+ "cellName": "opentelemetry",
+ "cellId": "2beffdd9-b84b-4306-a8bb-30fc452420c6",
+ "visible": true,
+ "parentCellId": "e18f25cb-137a-4a5e-8de2-81322a7818f5",
+ "children": [
+ "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation": {
+ "path": "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation",
+ "fileName": "instrumentation",
+ "cellName": "instrumentation",
+ "cellId": "30f72244-b0c5-4b95-a0b6-c65aa1c98215",
+ "visible": true,
+ "parentCellId": "2beffdd9-b84b-4306-a8bb-30fc452420c6",
+ "children": [
+ "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant": {
+ "path": "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant",
+ "fileName": "qdrant",
+ "cellName": "qdrant",
+ "cellId": "53ee72b3-70a8-4506-ae78-8fcab85f4062",
+ "visible": true,
+ "parentCellId": "30f72244-b0c5-4b95-a0b6-c65aa1c98215",
+ "children": [
+ "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant/__init__.py"
+ ]
+ },
+ "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant/__init__.py": {
+ "path": "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant/__init__.py",
+ "fileName": "__init__.py",
+ "cellName": "__init__.py",
+ "cellId": "1d39487a-1ef4-4ae3-9951-91254fa3ce64",
+ "visible": true,
+ "parentCellId": "53ee72b3-70a8-4506-ae78-8fcab85f4062",
+ "children": [
+ "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant/__init__.py-simstep-98d3d71b-93e8-43ec-ba55-e0f8979feaf9"
+ ]
+ },
+ "packages/sample-app": {
+ "path": "packages/sample-app",
+ "fileName": "sample-app",
+ "cellName": "sample-app",
+ "cellId": "09ef5c7d-14e1-4729-8b92-80a782ba835c",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f",
+ "children": [
+ "packages/sample-app/sample_app"
+ ]
+ },
+ "packages/sample-app/sample_app": {
+ "path": "packages/sample-app/sample_app",
+ "fileName": "sample_app",
+ "cellName": "sample_app",
+ "cellId": "7e0df8f9-9881-4666-b79c-bd8c0572b439",
+ "visible": true,
+ "parentCellId": "09ef5c7d-14e1-4729-8b92-80a782ba835c",
+ "children": [
+ "packages/sample-app/sample_app/methods_decorated_app.py",
+ "packages/sample-app/sample_app/prompt_registry_example_app.py"
+ ]
+ },
+ "packages/sample-app/sample_app/methods_decorated_app.py": {
+ "path": "packages/sample-app/sample_app/methods_decorated_app.py",
+ "fileName": "methods_decorated_app.py",
+ "cellName": "methods_decorated_app.py",
+ "cellId": "77db505c-56f6-4a04-94b9-92da1f5ec73d",
+ "visible": true,
+ "parentCellId": "7e0df8f9-9881-4666-b79c-bd8c0572b439",
+ "children": [
+ "packages/sample-app/sample_app/methods_decorated_app.py-simstep-91f00c4f-6f41-454f-95ee-803a341fb7cd"
+ ]
+ },
+ "packages/sample-app/sample_app/prompt_registry_example_app.py": {
+ "path": "packages/sample-app/sample_app/prompt_registry_example_app.py",
+ "fileName": "prompt_registry_example_app.py",
+ "cellName": "prompt_registry_example_app.py",
+ "cellId": "87332ef7-f6b1-4175-ab31-1feed304fdd7",
+ "visible": true,
+ "parentCellId": "7e0df8f9-9881-4666-b79c-bd8c0572b439",
+ "children": [
+ "packages/sample-app/sample_app/prompt_registry_example_app.py-simstep-afc6f083-1099-4fac-9882-3c04399a7ce6",
+ "packages/sample-app/sample_app/prompt_registry_example_app.py-simstep-ad46ed98-e542-4032-a6ca-ee43c5ae0ee8"
+ ]
+ },
+ "packages/traceloop-sdk": {
+ "path": "packages/traceloop-sdk",
+ "fileName": "traceloop-sdk",
+ "cellName": "traceloop-sdk",
+ "cellId": "3048bd2c-20b1-4054-ac5f-d5e13531d71a",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f",
+ "children": [
+ "packages/traceloop-sdk/traceloop"
+ ]
+ },
+ "packages/traceloop-sdk/traceloop": {
+ "path": "packages/traceloop-sdk/traceloop",
+ "fileName": "traceloop",
+ "cellName": "traceloop",
+ "cellId": "e7b8bf0a-a068-4d3d-b90e-2a8d0ba4dda6",
+ "visible": true,
+ "parentCellId": "3048bd2c-20b1-4054-ac5f-d5e13531d71a",
+ "children": [
+ "packages/traceloop-sdk/traceloop/sdk"
+ ]
+ },
+ "packages/traceloop-sdk/traceloop/sdk": {
+ "path": "packages/traceloop-sdk/traceloop/sdk",
+ "fileName": "sdk",
+ "cellName": "sdk",
+ "cellId": "a85538e0-fc7e-4231-914f-e84dcdb1e303",
+ "visible": true,
+ "parentCellId": "e7b8bf0a-a068-4d3d-b90e-2a8d0ba4dda6",
+ "children": [
+ "packages/traceloop-sdk/traceloop/sdk/tracing",
+ "packages/traceloop-sdk/traceloop/sdk/decorators",
+ "packages/traceloop-sdk/traceloop/sdk/__init__.py",
+ "packages/traceloop-sdk/traceloop/sdk/fetcher.py",
+ "packages/traceloop-sdk/traceloop/sdk/prompts"
+ ]
+ },
+ "packages/traceloop-sdk/traceloop/sdk/__init__.py": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/__init__.py",
+ "fileName": "__init__.py",
+ "cellName": "__init__.py",
+ "cellId": "140e603f-00ee-46b7-8c70-92c5d4b9d6ef",
+ "visible": true,
+ "parentCellId": "a85538e0-fc7e-4231-914f-e84dcdb1e303",
+ "children": [
+ "packages/traceloop-sdk/traceloop/sdk/__init__.py-simstep-6eaec5d5-9f51-404c-b8df-eed4b4a64f21"
+ ]
+ },
+ "packages/traceloop-sdk/traceloop/sdk/decorators": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/decorators",
+ "fileName": "decorators",
+ "cellName": "decorators",
+ "cellId": "6dae2e41-2f66-4192-8b2d-554477c4ea43",
+ "visible": true,
+ "parentCellId": "a85538e0-fc7e-4231-914f-e84dcdb1e303",
+ "children": [
+ "packages/traceloop-sdk/traceloop/sdk/decorators/__init__.py",
+ "packages/traceloop-sdk/traceloop/sdk/decorators/base.py"
+ ]
+ },
+ "packages/traceloop-sdk/traceloop/sdk/decorators/__init__.py": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/decorators/__init__.py",
+ "fileName": "__init__.py",
+ "cellName": "__init__.py",
+ "cellId": "c8adf835-e657-4edd-8f70-609a65d5a69e",
+ "visible": true,
+ "parentCellId": "6dae2e41-2f66-4192-8b2d-554477c4ea43",
+ "children": [
+ "packages/traceloop-sdk/traceloop/sdk/decorators/__init__.py-simstep-f658c721-fee2-4863-b972-0d7ab32a1255"
+ ]
+ },
+ "packages/traceloop-sdk/traceloop/sdk/decorators/base.py": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py",
+ "fileName": "base.py",
+ "cellName": "base.py",
+ "cellId": "32508e61-1a03-4370-b824-4fb4dceae19c",
+ "visible": true,
+ "parentCellId": "6dae2e41-2f66-4192-8b2d-554477c4ea43",
+ "children": [
+ "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-42922f6c-d7cb-4d5b-a1c0-f5248a75358f",
+ "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-4e2fbcfc-4005-4154-865d-2562818e1625",
+ "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-d9b6467b-971a-4f1f-bdb6-cfb504802a00",
+ "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-8f425a02-9bcc-4dba-b5bb-493eb3a4c2b7"
+ ]
+ },
+ "packages/traceloop-sdk/traceloop/sdk/fetcher.py": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/fetcher.py",
+ "fileName": "fetcher.py",
+ "cellName": "fetcher.py",
+ "cellId": "c32f5b07-95b0-4ebc-ab5d-682a5ca49169",
+ "visible": true,
+ "parentCellId": "a85538e0-fc7e-4231-914f-e84dcdb1e303",
+ "children": [
+ "packages/traceloop-sdk/traceloop/sdk/fetcher.py-simstep-43824714-6bc6-4a0f-9561-ca91d337a105",
+ "packages/traceloop-sdk/traceloop/sdk/fetcher.py-simstep-4be04162-faaf-4944-a6ff-deaba16f4ad7"
+ ]
+ },
+ "packages/traceloop-sdk/traceloop/sdk/prompts": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/prompts",
+ "fileName": "prompts",
+ "cellName": "prompts",
+ "cellId": "8945e002-d804-4ed2-9c0f-7ca143134ea7",
+ "visible": true,
+ "parentCellId": "a85538e0-fc7e-4231-914f-e84dcdb1e303",
+ "children": [
+ "packages/traceloop-sdk/traceloop/sdk/prompts/registry.py",
+ "packages/traceloop-sdk/traceloop/sdk/prompts/__init__.py",
+ "packages/traceloop-sdk/traceloop/sdk/prompts/client.py"
+ ]
+ },
+ "packages/traceloop-sdk/traceloop/sdk/prompts/__init__.py": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/prompts/__init__.py",
+ "fileName": "__init__.py",
+ "cellName": "__init__.py",
+ "cellId": "baedb6bc-5499-4e00-a015-cb7d5411d591",
+ "visible": true,
+ "parentCellId": "8945e002-d804-4ed2-9c0f-7ca143134ea7"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/prompts/client.py": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/prompts/client.py",
+ "fileName": "client.py",
+ "cellName": "client.py",
+ "cellId": "e9518cef-9824-46d5-bdc4-dbc71345f8b5",
+ "visible": true,
+ "parentCellId": "8945e002-d804-4ed2-9c0f-7ca143134ea7",
+ "children": [
+ "packages/traceloop-sdk/traceloop/sdk/prompts/client.py-simstep-ef975e4f-00ff-473c-bdab-eb4f74a037cd",
+ "packages/traceloop-sdk/traceloop/sdk/prompts/client.py-simstep-723adab6-f01a-4d16-bc53-dbf769e77358"
+ ]
+ },
+ "packages/traceloop-sdk/traceloop/sdk/prompts/registry.py": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/prompts/registry.py",
+ "fileName": "registry.py",
+ "cellName": "registry.py",
+ "cellId": "c6430bd1-3ec6-4ec1-a192-c4388c6b3102",
+ "visible": true,
+ "parentCellId": "8945e002-d804-4ed2-9c0f-7ca143134ea7",
+ "children": [
+ "packages/traceloop-sdk/traceloop/sdk/prompts/registry.py-simstep-769bcc27-2c77-4aac-a8ce-7675bf8c5daf"
+ ]
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing",
+ "fileName": "tracing",
+ "cellName": "tracing",
+ "cellId": "7d6fb94b-42fd-4e55-bb83-f96f0e593ac5",
+ "visible": true,
+ "parentCellId": "a85538e0-fc7e-4231-914f-e84dcdb1e303",
+ "children": [
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py"
+ ]
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "fileName": "tracing.py",
+ "cellName": "tracing.py",
+ "cellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "visible": true,
+ "parentCellId": "7d6fb94b-42fd-4e55-bb83-f96f0e593ac5",
+ "children": [
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-495eb957-b386-4fe2-96d2-404854587293",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-b93f443f-1915-4295-852b-53d37f1c0040",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-38901d04-f97e-4a98-a76d-8e3e66f30979",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-d90f30fb-795e-457e-b213-4ba0b604e994",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-b6f9d65c-d2a8-424c-8c41-c25d6b181c3f",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-56392a21-e44f-45d7-a1c5-699d61dece4c",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-94592627-18e0-463a-b652-bed9f38b08af",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-be7997db-5caa-4d42-942c-2b998740fad0",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-f62525ea-9862-4259-bf73-a79f9533679d",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-38d4e5e9-96c0-4516-aa1f-929713a6d6e2",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-c96e2f40-1e60-4bc0-93cb-867b85be3dcb",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-f8883f84-707f-4496-957a-37d8bb381fc5",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-7d34f0d6-28ad-47f2-a2fa-ad4005fd12da",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-f8547631-0825-4565-92c0-3867da912807",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-d7f74d81-0cc2-493b-947f-0fb528d2c681",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-9b33ddbe-e447-4131-9ef4-e56766873cf3",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-155de5d7-ad9b-4d73-b296-5f9b809e5f3c",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-31bb4e40-def3-4c05-b3a2-41e8475718e3",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-9b0270ac-a093-412b-82e5-03544bd5baee",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-7b3c5e50-ce02-48d3-87eb-ace7adc657f2",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-5e1b6ee8-b41b-4b49-980c-324f4103c104",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-91298448-8999-4885-9e99-fe9d87a44b54",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-dd22a434-ede4-43ee-822e-5ccec319eb26",
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-9eabc020-4c8f-436c-8c4d-2323eff67c40"
+ ]
+ },
+ "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f": {
+ "path": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f",
+ "cellName": "packages",
+ "cellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f",
+ "visible": true
+ },
+ "3048bd2c-20b1-4054-ac5f-d5e13531d71a": {
+ "path": "3048bd2c-20b1-4054-ac5f-d5e13531d71a",
+ "cellName": "traceloop-sdk",
+ "cellId": "3048bd2c-20b1-4054-ac5f-d5e13531d71a",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "a93c64b7-593d-46d0-b44c-51863129e1a7": {
+ "path": "a93c64b7-593d-46d0-b44c-51863129e1a7",
+ "cellName": "opentelemetry-instrumentation-openai",
+ "cellId": "a93c64b7-593d-46d0-b44c-51863129e1a7",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "8b27c45b-fe94-47a4-8117-44eb7264e94a": {
+ "path": "8b27c45b-fe94-47a4-8117-44eb7264e94a",
+ "cellName": "opentelemetry-instrumentation-anthropic",
+ "cellId": "8b27c45b-fe94-47a4-8117-44eb7264e94a",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "8012c2d4-2a1c-4604-b2e3-618154ae3862": {
+ "path": "8012c2d4-2a1c-4604-b2e3-618154ae3862",
+ "cellName": "opentelemetry-instrumentation-bedrock",
+ "cellId": "8012c2d4-2a1c-4604-b2e3-618154ae3862",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "e7b8bf0a-a068-4d3d-b90e-2a8d0ba4dda6": {
+ "path": "e7b8bf0a-a068-4d3d-b90e-2a8d0ba4dda6",
+ "cellName": "traceloop",
+ "cellId": "e7b8bf0a-a068-4d3d-b90e-2a8d0ba4dda6",
+ "visible": true,
+ "parentCellId": "3048bd2c-20b1-4054-ac5f-d5e13531d71a"
+ },
+ "18ed9a31-7cd7-4a0f-b200-41d54e8dd353": {
+ "path": "18ed9a31-7cd7-4a0f-b200-41d54e8dd353",
+ "cellName": "opentelemetry",
+ "cellId": "18ed9a31-7cd7-4a0f-b200-41d54e8dd353",
+ "visible": true,
+ "parentCellId": "a93c64b7-593d-46d0-b44c-51863129e1a7"
+ },
+ "d4252b21-7378-4253-a6bc-f49dede0230d": {
+ "path": "d4252b21-7378-4253-a6bc-f49dede0230d",
+ "cellName": "opentelemetry",
+ "cellId": "d4252b21-7378-4253-a6bc-f49dede0230d",
+ "visible": true,
+ "parentCellId": "8b27c45b-fe94-47a4-8117-44eb7264e94a"
+ },
+ "6693b9d3-8ea7-45e1-b8e3-e23d69fd56c3": {
+ "path": "6693b9d3-8ea7-45e1-b8e3-e23d69fd56c3",
+ "cellName": "opentelemetry",
+ "cellId": "6693b9d3-8ea7-45e1-b8e3-e23d69fd56c3",
+ "visible": true,
+ "parentCellId": "8012c2d4-2a1c-4604-b2e3-618154ae3862"
+ },
+ "a85538e0-fc7e-4231-914f-e84dcdb1e303": {
+ "path": "a85538e0-fc7e-4231-914f-e84dcdb1e303",
+ "cellName": "sdk",
+ "cellId": "a85538e0-fc7e-4231-914f-e84dcdb1e303",
+ "visible": true,
+ "parentCellId": "e7b8bf0a-a068-4d3d-b90e-2a8d0ba4dda6"
+ },
+ "4c8b52a3-c61e-48ee-9fdb-72d6dfa151ad": {
+ "path": "4c8b52a3-c61e-48ee-9fdb-72d6dfa151ad",
+ "cellName": "instrumentation",
+ "cellId": "4c8b52a3-c61e-48ee-9fdb-72d6dfa151ad",
+ "visible": true,
+ "parentCellId": "18ed9a31-7cd7-4a0f-b200-41d54e8dd353"
+ },
+ "df5baabd-f000-4c50-821c-8c979f32dc8f": {
+ "path": "df5baabd-f000-4c50-821c-8c979f32dc8f",
+ "cellName": "instrumentation",
+ "cellId": "df5baabd-f000-4c50-821c-8c979f32dc8f",
+ "visible": true,
+ "parentCellId": "d4252b21-7378-4253-a6bc-f49dede0230d"
+ },
+ "10358afc-4691-4678-9b62-0ce3618abdd3": {
+ "path": "10358afc-4691-4678-9b62-0ce3618abdd3",
+ "cellName": "instrumentation",
+ "cellId": "10358afc-4691-4678-9b62-0ce3618abdd3",
+ "visible": true,
+ "parentCellId": "6693b9d3-8ea7-45e1-b8e3-e23d69fd56c3"
+ },
+ "7d6fb94b-42fd-4e55-bb83-f96f0e593ac5": {
+ "path": "7d6fb94b-42fd-4e55-bb83-f96f0e593ac5",
+ "cellName": "tracing",
+ "cellId": "7d6fb94b-42fd-4e55-bb83-f96f0e593ac5",
+ "visible": true,
+ "parentCellId": "a85538e0-fc7e-4231-914f-e84dcdb1e303"
+ },
+ "1cdd7ac2-6148-4861-8505-26c0ba9db123": {
+ "path": "1cdd7ac2-6148-4861-8505-26c0ba9db123",
+ "cellName": "openai",
+ "cellId": "1cdd7ac2-6148-4861-8505-26c0ba9db123",
+ "visible": true,
+ "parentCellId": "4c8b52a3-c61e-48ee-9fdb-72d6dfa151ad"
+ },
+ "0d7cfaeb-2446-444d-b6c4-067b346e6c7f": {
+ "path": "0d7cfaeb-2446-444d-b6c4-067b346e6c7f",
+ "cellName": "anthropic",
+ "cellId": "0d7cfaeb-2446-444d-b6c4-067b346e6c7f",
+ "visible": true,
+ "parentCellId": "df5baabd-f000-4c50-821c-8c979f32dc8f"
+ },
+ "fc38820f-4358-43e3-b393-14b93337f4ad": {
+ "path": "fc38820f-4358-43e3-b393-14b93337f4ad",
+ "cellName": "bedrock",
+ "cellId": "fc38820f-4358-43e3-b393-14b93337f4ad",
+ "visible": true,
+ "parentCellId": "10358afc-4691-4678-9b62-0ce3618abdd3"
+ },
+ "899581ef-1635-481c-951a-2d940bfb9f63": {
+ "path": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "cellName": "tracing.py",
+ "cellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "visible": true,
+ "parentCellId": "7d6fb94b-42fd-4e55-bb83-f96f0e593ac5"
+ },
+ "14c111b0-0e7a-4f30-9baf-79c29c6d4cf8": {
+ "path": "14c111b0-0e7a-4f30-9baf-79c29c6d4cf8",
+ "cellName": "__init__.py",
+ "cellId": "14c111b0-0e7a-4f30-9baf-79c29c6d4cf8",
+ "visible": true,
+ "parentCellId": "1cdd7ac2-6148-4861-8505-26c0ba9db123"
+ },
+ "5dbda6a0-dc8e-4379-b875-b67ab081bb6a": {
+ "path": "5dbda6a0-dc8e-4379-b875-b67ab081bb6a",
+ "cellName": "__init__.py",
+ "cellId": "5dbda6a0-dc8e-4379-b875-b67ab081bb6a",
+ "visible": true,
+ "parentCellId": "0d7cfaeb-2446-444d-b6c4-067b346e6c7f"
+ },
+ "3b3a8547-5c50-4499-9fdd-97ceaf01056c": {
+ "path": "3b3a8547-5c50-4499-9fdd-97ceaf01056c",
+ "cellName": "__init__.py",
+ "cellId": "3b3a8547-5c50-4499-9fdd-97ceaf01056c",
+ "visible": true,
+ "parentCellId": "fc38820f-4358-43e3-b393-14b93337f4ad"
+ },
+ "a5064ce5-ce04-4763-b886-c3f1cdaadcf3": {
+ "path": "a5064ce5-ce04-4763-b886-c3f1cdaadcf3",
+ "cellName": "OpenAI Instrumentation Flow: Initialization Loop - tracing.py:L525-527",
+ "cellId": "a5064ce5-ce04-4763-b886-c3f1cdaadcf3",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-495eb957-b386-4fe2-96d2-404854587293": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-495eb957-b386-4fe2-96d2-404854587293",
+ "fileName": "tracing.py",
+ "wiki": "During `Traceloop.init()`, the `init_instrumentations` function iterates through a set of supported libraries. When it finds the OpenAI instrument, it calls `init_openai_instrumentor` to begin the instrumentation process.",
+ "cellName": "OpenAI Instrumentation Flow: Initialization Loop - tracing.py:L525-527",
+ "cellId": "a5064ce5-ce04-4763-b886-c3f1cdaadcf3",
+ "visible": true,
+ "startLine": 525,
+ "endLine": 527,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "495eb957-b386-4fe2-96d2-404854587293"
+ }
+ ]
+ },
+ "a64bd23e-a768-4ace-bac3-106b25bbd62e": {
+ "path": "a64bd23e-a768-4ace-bac3-106b25bbd62e",
+ "cellName": "OpenAI Instrumentation Flow: Instrumentor Creation - tracing.py:L579-585",
+ "cellId": "a64bd23e-a768-4ace-bac3-106b25bbd62e",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-b93f443f-1915-4295-852b-53d37f1c0040": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-b93f443f-1915-4295-852b-53d37f1c0040",
+ "fileName": "tracing.py",
+ "wiki": "The `init_openai_instrumentor` function checks if the `openai` package is installed, then creates an instance of `OpenAIInstrumentor`, passing in configuration.",
+ "cellName": "OpenAI Instrumentation Flow: Instrumentor Creation - tracing.py:L579-585",
+ "cellId": "a64bd23e-a768-4ace-bac3-106b25bbd62e",
+ "visible": true,
+ "startLine": 579,
+ "endLine": 585,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "b93f443f-1915-4295-852b-53d37f1c0040"
+ }
+ ]
+ },
+ "9de2976a-ee82-4f8e-a21e-025d9b0f3419": {
+ "path": "9de2976a-ee82-4f8e-a21e-025d9b0f3419",
+ "cellName": "OpenAI Instrumentation Flow: Applying Instrumentation (Monkey-Patching) - tracing.py:L588-589",
+ "cellId": "9de2976a-ee82-4f8e-a21e-025d9b0f3419",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-38901d04-f97e-4a98-a76d-8e3e66f30979": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-38901d04-f97e-4a98-a76d-8e3e66f30979",
+ "fileName": "tracing.py",
+ "wiki": "The `instrument()` method is called on the `OpenAIInstrumentor` instance. This action 'monkey-patches' the OpenAI client library, wrapping its methods (like `chat.completions.create`) with custom logic to create OpenTelemetry spans.",
+ "cellName": "OpenAI Instrumentation Flow: Applying Instrumentation (Monkey-Patching) - tracing.py:L588-589",
+ "cellId": "9de2976a-ee82-4f8e-a21e-025d9b0f3419",
+ "visible": true,
+ "startLine": 588,
+ "endLine": 589,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "38901d04-f97e-4a98-a76d-8e3e66f30979"
+ }
+ ]
+ },
+ "8f7dccf0-ce3d-49b8-9f70-34da41ac2e79": {
+ "path": "8f7dccf0-ce3d-49b8-9f70-34da41ac2e79",
+ "cellName": "OpenAI Instrumentation Flow: Span Creation on API Call - __init__.py:L8-22",
+ "cellId": "8f7dccf0-ce3d-49b8-9f70-34da41ac2e79",
+ "visible": true,
+ "parentCellId": "14c111b0-0e7a-4f30-9baf-79c29c6d4cf8"
+ },
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py-simstep-c4181fa3-547f-4786-a301-7bb3a4edff81": {
+ "path": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py-simstep-c4181fa3-547f-4786-a301-7bb3a4edff81",
+ "fileName": "__init__.py",
+ "wiki": "When the application calls an instrumented OpenAI method (e.g., `client.chat.completions.create`), the wrapper function executes. It starts a new OpenTelemetry span and sets initial attributes like the model name and prompt messages.",
+ "cellName": "OpenAI Instrumentation Flow: Span Creation on API Call - __init__.py:L8-22",
+ "cellId": "8f7dccf0-ce3d-49b8-9f70-34da41ac2e79",
+ "visible": true,
+ "startLine": 8,
+ "endLine": 22,
+ "parentCellId": "14c111b0-0e7a-4f30-9baf-79c29c6d4cf8",
+ "parentPath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "c4181fa3-547f-4786-a301-7bb3a4edff81"
+ }
+ ]
+ },
+ "c97e2e00-aa3b-45f0-80ba-58a9e42b2c12": {
+ "path": "c97e2e00-aa3b-45f0-80ba-58a9e42b2c12",
+ "cellName": "OpenAI Instrumentation Flow: Finalize Span - __init__.py:L8-22",
+ "cellId": "c97e2e00-aa3b-45f0-80ba-58a9e42b2c12",
+ "visible": true,
+ "parentCellId": "14c111b0-0e7a-4f30-9baf-79c29c6d4cf8"
+ },
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py-simstep-cf56fb6c-c377-42d6-a5fd-fd80104f6e0c": {
+ "path": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py-simstep-cf56fb6c-c377-42d6-a5fd-fd80104f6e0c",
+ "fileName": "__init__.py",
+ "wiki": "The wrapper function processes the response, adding completion content and token usage to the span's attributes. It then sets the span's status to OK and ends the span, making it available for export.",
+ "cellName": "OpenAI Instrumentation Flow: Finalize Span - __init__.py:L8-22",
+ "cellId": "c97e2e00-aa3b-45f0-80ba-58a9e42b2c12",
+ "visible": true,
+ "startLine": 8,
+ "endLine": 22,
+ "parentCellId": "14c111b0-0e7a-4f30-9baf-79c29c6d4cf8",
+ "parentPath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "cf56fb6c-c377-42d6-a5fd-fd80104f6e0c"
+ }
+ ]
+ },
+ "e75ebc36-3823-486a-99cb-00401cd83ef1": {
+ "path": "e75ebc36-3823-486a-99cb-00401cd83ef1",
+ "cellName": "Anthropic Instrumentation Flow: Initialization Loop - tracing.py:L459-462",
+ "cellId": "e75ebc36-3823-486a-99cb-00401cd83ef1",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-d90f30fb-795e-457e-b213-4ba0b604e994": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-d90f30fb-795e-457e-b213-4ba0b604e994",
+ "fileName": "tracing.py",
+ "wiki": "During `Traceloop.init()`, the `init_instrumentations` function finds the Anthropic instrument and calls `init_anthropic_instrumentor` to start the instrumentation process.",
+ "cellName": "Anthropic Instrumentation Flow: Initialization Loop - tracing.py:L459-462",
+ "cellId": "e75ebc36-3823-486a-99cb-00401cd83ef1",
+ "visible": true,
+ "startLine": 459,
+ "endLine": 462,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "d90f30fb-795e-457e-b213-4ba0b604e994"
+ }
+ ]
+ },
+ "7c30c912-6f5b-4b0b-afa7-e951758a032e": {
+ "path": "7c30c912-6f5b-4b0b-afa7-e951758a032e",
+ "cellName": "Anthropic Instrumentation Flow: Instrumentor Creation - tracing.py:L603-609",
+ "cellId": "7c30c912-6f5b-4b0b-afa7-e951758a032e",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-b6f9d65c-d2a8-424c-8c41-c25d6b181c3f": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-b6f9d65c-d2a8-424c-8c41-c25d6b181c3f",
+ "fileName": "tracing.py",
+ "wiki": "The `init_anthropic_instrumentor` function checks if the `anthropic` package is installed and then creates an instance of `AnthropicInstrumentor`.",
+ "cellName": "Anthropic Instrumentation Flow: Instrumentor Creation - tracing.py:L603-609",
+ "cellId": "7c30c912-6f5b-4b0b-afa7-e951758a032e",
+ "visible": true,
+ "startLine": 603,
+ "endLine": 609,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "b6f9d65c-d2a8-424c-8c41-c25d6b181c3f"
+ }
+ ]
+ },
+ "0e19005c-8529-4600-a9fe-e771ecaafd1b": {
+ "path": "0e19005c-8529-4600-a9fe-e771ecaafd1b",
+ "cellName": "Anthropic Instrumentation Flow: Applying Instrumentation (Monkey-Patching) - tracing.py:L612-613",
+ "cellId": "0e19005c-8529-4600-a9fe-e771ecaafd1b",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-56392a21-e44f-45d7-a1c5-699d61dece4c": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-56392a21-e44f-45d7-a1c5-699d61dece4c",
+ "fileName": "tracing.py",
+ "wiki": "The `instrument()` method is called on the `AnthropicInstrumentor` instance, which patches the Anthropic client library to intercept its method calls.",
+ "cellName": "Anthropic Instrumentation Flow: Applying Instrumentation (Monkey-Patching) - tracing.py:L612-613",
+ "cellId": "0e19005c-8529-4600-a9fe-e771ecaafd1b",
+ "visible": true,
+ "startLine": 612,
+ "endLine": 613,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "56392a21-e44f-45d7-a1c5-699d61dece4c"
+ }
+ ]
+ },
+ "c449391d-7ab6-403a-89b1-1c3faebc22a1": {
+ "path": "c449391d-7ab6-403a-89b1-1c3faebc22a1",
+ "cellName": "Anthropic Instrumentation Flow: Span Creation on API Call - __init__.py:L758-771",
+ "cellId": "c449391d-7ab6-403a-89b1-1c3faebc22a1",
+ "visible": true,
+ "parentCellId": "5dbda6a0-dc8e-4379-b875-b67ab081bb6a"
+ },
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-718546e8-1e30-40b8-ab1e-6334e5aab49a": {
+ "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-718546e8-1e30-40b8-ab1e-6334e5aab49a",
+ "fileName": "__init__.py",
+ "wiki": "When the application calls an instrumented Anthropic method (e.g., `client.messages.create`), the wrapper function starts a new OpenTelemetry span and records request attributes.",
+ "cellName": "Anthropic Instrumentation Flow: Span Creation on API Call - __init__.py:L758-771",
+ "cellId": "c449391d-7ab6-403a-89b1-1c3faebc22a1",
+ "visible": true,
+ "startLine": 758,
+ "endLine": 771,
+ "parentCellId": "5dbda6a0-dc8e-4379-b875-b67ab081bb6a",
+ "parentPath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "718546e8-1e30-40b8-ab1e-6334e5aab49a"
+ }
+ ]
+ },
+ "cf82d493-e1c7-4ff8-a276-a2fbb171f8b9": {
+ "path": "cf82d493-e1c7-4ff8-a276-a2fbb171f8b9",
+ "cellName": "Anthropic Instrumentation Flow: Finalize Span - __init__.py:L758-771",
+ "cellId": "cf82d493-e1c7-4ff8-a276-a2fbb171f8b9",
+ "visible": true,
+ "parentCellId": "5dbda6a0-dc8e-4379-b875-b67ab081bb6a"
+ },
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-47783bce-dc5a-4446-91ba-e500f774296c": {
+ "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-47783bce-dc5a-4446-91ba-e500f774296c",
+ "fileName": "__init__.py",
+ "wiki": "The wrapper adds response details and token usage to the span, sets its status to OK, and ends it.",
+ "cellName": "Anthropic Instrumentation Flow: Finalize Span - __init__.py:L758-771",
+ "cellId": "cf82d493-e1c7-4ff8-a276-a2fbb171f8b9",
+ "visible": true,
+ "startLine": 758,
+ "endLine": 771,
+ "parentCellId": "5dbda6a0-dc8e-4379-b875-b67ab081bb6a",
+ "parentPath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "47783bce-dc5a-4446-91ba-e500f774296c"
+ }
+ ]
+ },
+ "23293abe-08a0-44cc-b736-0374ca417793": {
+ "path": "23293abe-08a0-44cc-b736-0374ca417793",
+ "cellName": "Bedrock Instrumentation Flow: Initialization Loop - tracing.py:L463-465",
+ "cellId": "23293abe-08a0-44cc-b736-0374ca417793",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-94592627-18e0-463a-b652-bed9f38b08af": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-94592627-18e0-463a-b652-bed9f38b08af",
+ "fileName": "tracing.py",
+ "wiki": "The `init_instrumentations` function in `Traceloop.init()` finds the Bedrock instrument and calls `init_bedrock_instrumentor`.",
+ "cellName": "Bedrock Instrumentation Flow: Initialization Loop - tracing.py:L463-465",
+ "cellId": "23293abe-08a0-44cc-b736-0374ca417793",
+ "visible": true,
+ "startLine": 463,
+ "endLine": 465,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "94592627-18e0-463a-b652-bed9f38b08af"
+ }
+ ]
+ },
+ "699c001a-7428-42f8-b5e1-afeeda1c92ff": {
+ "path": "699c001a-7428-42f8-b5e1-afeeda1c92ff",
+ "cellName": "Bedrock Instrumentation Flow: Instrumentor Creation - tracing.py:L906-912",
+ "cellId": "699c001a-7428-42f8-b5e1-afeeda1c92ff",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-be7997db-5caa-4d42-942c-2b998740fad0": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-be7997db-5caa-4d42-942c-2b998740fad0",
+ "fileName": "tracing.py",
+ "wiki": "The `init_bedrock_instrumentor` function checks if the `boto3` package is installed and then creates an instance of `BedrockInstrumentor`.",
+ "cellName": "Bedrock Instrumentation Flow: Instrumentor Creation - tracing.py:L906-912",
+ "cellId": "699c001a-7428-42f8-b5e1-afeeda1c92ff",
+ "visible": true,
+ "startLine": 906,
+ "endLine": 912,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "be7997db-5caa-4d42-942c-2b998740fad0"
+ }
+ ]
+ },
+ "6c067d9e-53bf-463b-89e7-5817c167d613": {
+ "path": "6c067d9e-53bf-463b-89e7-5817c167d613",
+ "cellName": "Bedrock Instrumentation Flow: Applying Instrumentation (Monkey-Patching) - tracing.py:L914-915",
+ "cellId": "6c067d9e-53bf-463b-89e7-5817c167d613",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-f62525ea-9862-4259-bf73-a79f9533679d": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-f62525ea-9862-4259-bf73-a79f9533679d",
+ "fileName": "tracing.py",
+ "wiki": "The `instrument()` method is called on the `BedrockInstrumentor` instance, which patches the `boto3` client to intercept calls to the Bedrock service.",
+ "cellName": "Bedrock Instrumentation Flow: Applying Instrumentation (Monkey-Patching) - tracing.py:L914-915",
+ "cellId": "6c067d9e-53bf-463b-89e7-5817c167d613",
+ "visible": true,
+ "startLine": 914,
+ "endLine": 915,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "f62525ea-9862-4259-bf73-a79f9533679d"
+ }
+ ]
+ },
+ "1d826639-4304-4fd1-b2ef-6a7f00803df2": {
+ "path": "1d826639-4304-4fd1-b2ef-6a7f00803df2",
+ "cellName": "Bedrock Instrumentation Flow: Span Creation on API Call - __init__.py:L558-568",
+ "cellId": "1d826639-4304-4fd1-b2ef-6a7f00803df2",
+ "visible": true,
+ "parentCellId": "3b3a8547-5c50-4499-9fdd-97ceaf01056c"
+ },
+ "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py-simstep-d45a74dd-3e81-4f2f-b039-ce4e5d6531ee": {
+ "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py-simstep-d45a74dd-3e81-4f2f-b039-ce4e5d6531ee",
+ "fileName": "__init__.py",
+ "wiki": "When the application calls `boto3_bedrock_client.invoke_model`, the wrapper function starts a new OpenTelemetry span, parsing the model ID and request body to set as attributes.",
+ "cellName": "Bedrock Instrumentation Flow: Span Creation on API Call - __init__.py:L558-568",
+ "cellId": "1d826639-4304-4fd1-b2ef-6a7f00803df2",
+ "visible": true,
+ "startLine": 558,
+ "endLine": 568,
+ "parentCellId": "3b3a8547-5c50-4499-9fdd-97ceaf01056c",
+ "parentPath": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "d45a74dd-3e81-4f2f-b039-ce4e5d6531ee"
+ }
+ ]
+ },
+ "45445a1a-a22b-4535-8be0-a630cd9940d4": {
+ "path": "45445a1a-a22b-4535-8be0-a630cd9940d4",
+ "cellName": "Bedrock Instrumentation Flow: Finalize Span - __init__.py:L558-568",
+ "cellId": "45445a1a-a22b-4535-8be0-a630cd9940d4",
+ "visible": true,
+ "parentCellId": "3b3a8547-5c50-4499-9fdd-97ceaf01056c"
+ },
+ "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py-simstep-76bcb28b-c60e-4cb8-beb8-357e3ae22ab0": {
+ "path": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py-simstep-76bcb28b-c60e-4cb8-beb8-357e3ae22ab0",
+ "fileName": "__init__.py",
+ "wiki": "The wrapper reads the streaming body, parses the completion and token usage, adds them to the span, sets the status to OK, and ends the span.",
+ "cellName": "Bedrock Instrumentation Flow: Finalize Span - __init__.py:L558-568",
+ "cellId": "45445a1a-a22b-4535-8be0-a630cd9940d4",
+ "visible": true,
+ "startLine": 558,
+ "endLine": 568,
+ "parentCellId": "3b3a8547-5c50-4499-9fdd-97ceaf01056c",
+ "parentPath": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "76bcb28b-c60e-4cb8-beb8-357e3ae22ab0"
+ }
+ ]
+ },
+ "aafb13cc-ecc7-4107-ba2c-496d4693d9be": {
+ "path": "aafb13cc-ecc7-4107-ba2c-496d4693d9be",
+ "cellName": "OpenAI Instrumentation\nFlow: Config\nPropagation",
+ "cellId": "aafb13cc-ecc7-4107-ba2c-496d4693d9be",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "generated-edge-simstep-fa73c3d9-6992-4283-b094-035b424b33df-aafb13cc-ecc7-4107-ba2c-496d4693d9be": {
+ "path": "generated-edge-simstep-fa73c3d9-6992-4283-b094-035b424b33df-aafb13cc-ecc7-4107-ba2c-496d4693d9be",
+ "fileName": "tracing.py",
+ "cellName": "OpenAI Instrumentation Flow: Config Propagation",
+ "cellId": "aafb13cc-ecc7-4107-ba2c-496d4693d9be",
+ "visible": true,
+ "startLine": 526,
+ "endLine": 526,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "fa73c3d9-6992-4283-b094-035b424b33df"
+ }
+ ]
+ },
+ "767057a5-983b-465e-b9d4-347a346f4c5c": {
+ "path": "767057a5-983b-465e-b9d4-347a346f4c5c",
+ "cellName": "OpenAI Instrumentation\nFlow: Instrumentor\nInstance Transfer",
+ "cellId": "767057a5-983b-465e-b9d4-347a346f4c5c",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "generated-edge-simstep-d295e11a-a3a9-4840-b972-463d7b53a9a5-767057a5-983b-465e-b9d4-347a346f4c5c": {
+ "path": "generated-edge-simstep-d295e11a-a3a9-4840-b972-463d7b53a9a5-767057a5-983b-465e-b9d4-347a346f4c5c",
+ "fileName": "tracing.py",
+ "cellName": "OpenAI Instrumentation Flow: Instrumentor Instance Transfer",
+ "cellId": "767057a5-983b-465e-b9d4-347a346f4c5c",
+ "visible": true,
+ "startLine": 587,
+ "endLine": 587,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "d295e11a-a3a9-4840-b972-463d7b53a9a5"
+ }
+ ]
+ },
+ "5167e00f-7c6f-4ebd-9ec0-c1131e74b1f6": {
+ "path": "5167e00f-7c6f-4ebd-9ec0-c1131e74b1f6",
+ "cellName": "OpenAI Instrumentation\nFlow: Instrumented\nFunction Ready",
+ "cellId": "5167e00f-7c6f-4ebd-9ec0-c1131e74b1f6",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-e5eada1b-1318-4e26-87f7-7b3b041e1eab-5167e00f-7c6f-4ebd-9ec0-c1131e74b1f6": {
+ "path": "generated-edge-simstep-e5eada1b-1318-4e26-87f7-7b3b041e1eab-5167e00f-7c6f-4ebd-9ec0-c1131e74b1f6",
+ "fileName": "tracing.py",
+ "cellName": "OpenAI Instrumentation Flow: Instrumented Function Ready",
+ "cellId": "5167e00f-7c6f-4ebd-9ec0-c1131e74b1f6",
+ "visible": true,
+ "startLine": 8,
+ "endLine": 11,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "e5eada1b-1318-4e26-87f7-7b3b041e1eab"
+ }
+ ]
+ },
+ "0af91fc6-e00c-4e2b-aaf3-1adc6d70f785": {
+ "path": "0af91fc6-e00c-4e2b-aaf3-1adc6d70f785",
+ "cellName": "OpenAI Instrumentation\nFlow: Return\nOpenAI Response",
+ "cellId": "0af91fc6-e00c-4e2b-aaf3-1adc6d70f785",
+ "visible": true,
+ "parentCellId": "14c111b0-0e7a-4f30-9baf-79c29c6d4cf8"
+ },
+ "generated-edge-simstep-9fbd826f-3f23-40a8-96f0-06373b2680e1-0af91fc6-e00c-4e2b-aaf3-1adc6d70f785": {
+ "path": "generated-edge-simstep-9fbd826f-3f23-40a8-96f0-06373b2680e1-0af91fc6-e00c-4e2b-aaf3-1adc6d70f785",
+ "fileName": "__init__.py",
+ "cellName": "OpenAI Instrumentation Flow: Return OpenAI Response",
+ "cellId": "0af91fc6-e00c-4e2b-aaf3-1adc6d70f785",
+ "visible": true,
+ "startLine": 8,
+ "endLine": 22,
+ "parentPath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "9fbd826f-3f23-40a8-96f0-06373b2680e1"
+ }
+ ]
+ },
+ "13d0986e-7572-48f9-9d67-b95bbf9da40b": {
+ "path": "13d0986e-7572-48f9-9d67-b95bbf9da40b",
+ "cellName": "Anthropic Instrumentation\nFlow: Config\nPropagation",
+ "cellId": "13d0986e-7572-48f9-9d67-b95bbf9da40b",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "generated-edge-simstep-244b3bf5-7a0f-49a1-8597-ace1b9b6e9fc-13d0986e-7572-48f9-9d67-b95bbf9da40b": {
+ "path": "generated-edge-simstep-244b3bf5-7a0f-49a1-8597-ace1b9b6e9fc-13d0986e-7572-48f9-9d67-b95bbf9da40b",
+ "fileName": "tracing.py",
+ "cellName": "Anthropic Instrumentation Flow: Config Propagation",
+ "cellId": "13d0986e-7572-48f9-9d67-b95bbf9da40b",
+ "visible": true,
+ "startLine": 460,
+ "endLine": 460,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "244b3bf5-7a0f-49a1-8597-ace1b9b6e9fc"
+ }
+ ]
+ },
+ "aa1bcafd-33eb-4953-9e61-0df40ce54d44": {
+ "path": "aa1bcafd-33eb-4953-9e61-0df40ce54d44",
+ "cellName": "Anthropic Instrumentation\nFlow: Instrumentor\nInstance Transfer",
+ "cellId": "aa1bcafd-33eb-4953-9e61-0df40ce54d44",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "generated-edge-simstep-2c71ace1-f523-4142-a738-5dee224bb516-aa1bcafd-33eb-4953-9e61-0df40ce54d44": {
+ "path": "generated-edge-simstep-2c71ace1-f523-4142-a738-5dee224bb516-aa1bcafd-33eb-4953-9e61-0df40ce54d44",
+ "fileName": "tracing.py",
+ "cellName": "Anthropic Instrumentation Flow: Instrumentor Instance Transfer",
+ "cellId": "aa1bcafd-33eb-4953-9e61-0df40ce54d44",
+ "visible": true,
+ "startLine": 611,
+ "endLine": 611,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "2c71ace1-f523-4142-a738-5dee224bb516"
+ }
+ ]
+ },
+ "85b1dcf0-c001-4766-95b8-a382c5242f00": {
+ "path": "85b1dcf0-c001-4766-95b8-a382c5242f00",
+ "cellName": "Anthropic Instrumentation\nFlow: Instrumented\nFunction Ready",
+ "cellId": "85b1dcf0-c001-4766-95b8-a382c5242f00",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-ea3614e2-7fcf-444f-8606-5d8185131fbe-85b1dcf0-c001-4766-95b8-a382c5242f00": {
+ "path": "generated-edge-simstep-ea3614e2-7fcf-444f-8606-5d8185131fbe-85b1dcf0-c001-4766-95b8-a382c5242f00",
+ "fileName": "tracing.py",
+ "cellName": "Anthropic Instrumentation Flow: Instrumented Function Ready",
+ "cellId": "85b1dcf0-c001-4766-95b8-a382c5242f00",
+ "visible": true,
+ "startLine": 758,
+ "endLine": 761,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "ea3614e2-7fcf-444f-8606-5d8185131fbe"
+ }
+ ]
+ },
+ "7e6ba2a9-0576-4fe1-b6ce-833559168460": {
+ "path": "7e6ba2a9-0576-4fe1-b6ce-833559168460",
+ "cellName": "Anthropic Instrumentation\nFlow: Return\nAnthropic Response",
+ "cellId": "7e6ba2a9-0576-4fe1-b6ce-833559168460",
+ "visible": true,
+ "parentCellId": "5dbda6a0-dc8e-4379-b875-b67ab081bb6a"
+ },
+ "generated-edge-simstep-abe1bc6a-e1f4-4d2f-a283-c2e05a4b9a20-7e6ba2a9-0576-4fe1-b6ce-833559168460": {
+ "path": "generated-edge-simstep-abe1bc6a-e1f4-4d2f-a283-c2e05a4b9a20-7e6ba2a9-0576-4fe1-b6ce-833559168460",
+ "fileName": "__init__.py",
+ "cellName": "Anthropic Instrumentation Flow: Return Anthropic Response",
+ "cellId": "7e6ba2a9-0576-4fe1-b6ce-833559168460",
+ "visible": true,
+ "startLine": 758,
+ "endLine": 771,
+ "parentPath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "abe1bc6a-e1f4-4d2f-a283-c2e05a4b9a20"
+ }
+ ]
+ },
+ "1d4ce2b3-0fcd-45f6-92d0-e5647892e5dc": {
+ "path": "1d4ce2b3-0fcd-45f6-92d0-e5647892e5dc",
+ "cellName": "Bedrock Instrumentation\nFlow: Config\nPropagation",
+ "cellId": "1d4ce2b3-0fcd-45f6-92d0-e5647892e5dc",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "generated-edge-simstep-8457ca36-d791-4545-9996-16829c932a28-1d4ce2b3-0fcd-45f6-92d0-e5647892e5dc": {
+ "path": "generated-edge-simstep-8457ca36-d791-4545-9996-16829c932a28-1d4ce2b3-0fcd-45f6-92d0-e5647892e5dc",
+ "fileName": "tracing.py",
+ "cellName": "Bedrock Instrumentation Flow: Config Propagation",
+ "cellId": "1d4ce2b3-0fcd-45f6-92d0-e5647892e5dc",
+ "visible": true,
+ "startLine": 464,
+ "endLine": 464,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "8457ca36-d791-4545-9996-16829c932a28"
+ }
+ ]
+ },
+ "537e494b-8651-4ff0-a889-308cbba5a8be": {
+ "path": "537e494b-8651-4ff0-a889-308cbba5a8be",
+ "cellName": "Bedrock Instrumentation\nFlow: Instrumentor\nInstance Transfer",
+ "cellId": "537e494b-8651-4ff0-a889-308cbba5a8be",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "generated-edge-simstep-a8d267c1-c2a8-4e43-91b7-6af6fae001aa-537e494b-8651-4ff0-a889-308cbba5a8be": {
+ "path": "generated-edge-simstep-a8d267c1-c2a8-4e43-91b7-6af6fae001aa-537e494b-8651-4ff0-a889-308cbba5a8be",
+ "fileName": "tracing.py",
+ "cellName": "Bedrock Instrumentation Flow: Instrumentor Instance Transfer",
+ "cellId": "537e494b-8651-4ff0-a889-308cbba5a8be",
+ "visible": true,
+ "startLine": 913,
+ "endLine": 913,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "a8d267c1-c2a8-4e43-91b7-6af6fae001aa"
+ }
+ ]
+ },
+ "ceddc138-8470-4898-bba2-1a0b5512ea50": {
+ "path": "ceddc138-8470-4898-bba2-1a0b5512ea50",
+ "cellName": "Bedrock Instrumentation\nFlow: Instrumented\nFunction Ready",
+ "cellId": "ceddc138-8470-4898-bba2-1a0b5512ea50",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-ad7ebde3-faf9-416b-b7f6-77f20931668c-ceddc138-8470-4898-bba2-1a0b5512ea50": {
+ "path": "generated-edge-simstep-ad7ebde3-faf9-416b-b7f6-77f20931668c-ceddc138-8470-4898-bba2-1a0b5512ea50",
+ "fileName": "tracing.py",
+ "cellName": "Bedrock Instrumentation Flow: Instrumented Function Ready",
+ "cellId": "ceddc138-8470-4898-bba2-1a0b5512ea50",
+ "visible": true,
+ "startLine": 558,
+ "endLine": 561,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "ad7ebde3-faf9-416b-b7f6-77f20931668c"
+ }
+ ]
+ },
+ "09f03b4f-0394-4d98-acd1-33119a159cca": {
+ "path": "09f03b4f-0394-4d98-acd1-33119a159cca",
+ "cellName": "Bedrock Instrumentation\nFlow: Return\nBedrock Response",
+ "cellId": "09f03b4f-0394-4d98-acd1-33119a159cca",
+ "visible": true,
+ "parentCellId": "3b3a8547-5c50-4499-9fdd-97ceaf01056c"
+ },
+ "generated-edge-simstep-098f8aa3-9fb1-47b6-bc00-9bf0050000a5-09f03b4f-0394-4d98-acd1-33119a159cca": {
+ "path": "generated-edge-simstep-098f8aa3-9fb1-47b6-bc00-9bf0050000a5-09f03b4f-0394-4d98-acd1-33119a159cca",
+ "fileName": "__init__.py",
+ "cellName": "Bedrock Instrumentation Flow: Return Bedrock Response",
+ "cellId": "09f03b4f-0394-4d98-acd1-33119a159cca",
+ "visible": true,
+ "startLine": 558,
+ "endLine": 568,
+ "parentPath": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simStepId": "098f8aa3-9fb1-47b6-bc00-9bf0050000a5"
+ }
+ ]
+ },
+ "c0f17def-c8a7-416a-8ba6-2c8ba97fdbcb": {
+ "path": "c0f17def-c8a7-416a-8ba6-2c8ba97fdbcb",
+ "cellName": "opentelemetry-instrumentation-langchain",
+ "cellId": "c0f17def-c8a7-416a-8ba6-2c8ba97fdbcb",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "5188cd58-29b0-49cd-b791-5b66a57c5828": {
+ "path": "5188cd58-29b0-49cd-b791-5b66a57c5828",
+ "cellName": "opentelemetry-instrumentation-llamaindex",
+ "cellId": "5188cd58-29b0-49cd-b791-5b66a57c5828",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "17feddf2-1efa-4a12-bfba-e97afd0b4a14": {
+ "path": "17feddf2-1efa-4a12-bfba-e97afd0b4a14",
+ "cellName": "opentelemetry-instrumentation-crewai",
+ "cellId": "17feddf2-1efa-4a12-bfba-e97afd0b4a14",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "dfa71bc6-3d37-4409-abde-04cf4918ab1e": {
+ "path": "dfa71bc6-3d37-4409-abde-04cf4918ab1e",
+ "cellName": "opentelemetry",
+ "cellId": "dfa71bc6-3d37-4409-abde-04cf4918ab1e",
+ "visible": true,
+ "parentCellId": "c0f17def-c8a7-416a-8ba6-2c8ba97fdbcb"
+ },
+ "af75d677-c433-4790-8544-5f600893b301": {
+ "path": "af75d677-c433-4790-8544-5f600893b301",
+ "cellName": "opentelemetry",
+ "cellId": "af75d677-c433-4790-8544-5f600893b301",
+ "visible": true,
+ "parentCellId": "5188cd58-29b0-49cd-b791-5b66a57c5828"
+ },
+ "6aadd755-683a-49ef-888b-fea2022afbd6": {
+ "path": "6aadd755-683a-49ef-888b-fea2022afbd6",
+ "cellName": "opentelemetry",
+ "cellId": "6aadd755-683a-49ef-888b-fea2022afbd6",
+ "visible": true,
+ "parentCellId": "17feddf2-1efa-4a12-bfba-e97afd0b4a14"
+ },
+ "21bc113f-6070-4c47-a60d-177b0e6016a1": {
+ "path": "21bc113f-6070-4c47-a60d-177b0e6016a1",
+ "cellName": "instrumentation",
+ "cellId": "21bc113f-6070-4c47-a60d-177b0e6016a1",
+ "visible": true,
+ "parentCellId": "dfa71bc6-3d37-4409-abde-04cf4918ab1e"
+ },
+ "122f09e0-551a-4df7-8762-855262ba337c": {
+ "path": "122f09e0-551a-4df7-8762-855262ba337c",
+ "cellName": "instrumentation",
+ "cellId": "122f09e0-551a-4df7-8762-855262ba337c",
+ "visible": true,
+ "parentCellId": "af75d677-c433-4790-8544-5f600893b301"
+ },
+ "5245ae12-00ff-45dd-9865-cf94704687c3": {
+ "path": "5245ae12-00ff-45dd-9865-cf94704687c3",
+ "cellName": "instrumentation",
+ "cellId": "5245ae12-00ff-45dd-9865-cf94704687c3",
+ "visible": true,
+ "parentCellId": "6aadd755-683a-49ef-888b-fea2022afbd6"
+ },
+ "9e9f8d3c-b3a3-41cf-b0cc-6d33f59e4d09": {
+ "path": "9e9f8d3c-b3a3-41cf-b0cc-6d33f59e4d09",
+ "cellName": "langchain",
+ "cellId": "9e9f8d3c-b3a3-41cf-b0cc-6d33f59e4d09",
+ "visible": true,
+ "parentCellId": "21bc113f-6070-4c47-a60d-177b0e6016a1"
+ },
+ "5cc954ea-dc04-487f-88bd-c4ca000e52b0": {
+ "path": "5cc954ea-dc04-487f-88bd-c4ca000e52b0",
+ "cellName": "llamaindex",
+ "cellId": "5cc954ea-dc04-487f-88bd-c4ca000e52b0",
+ "visible": true,
+ "parentCellId": "122f09e0-551a-4df7-8762-855262ba337c"
+ },
+ "aec07ceb-62c7-41c8-b1f4-63f27657579c": {
+ "path": "aec07ceb-62c7-41c8-b1f4-63f27657579c",
+ "cellName": "crewai",
+ "cellId": "aec07ceb-62c7-41c8-b1f4-63f27657579c",
+ "visible": true,
+ "parentCellId": "5245ae12-00ff-45dd-9865-cf94704687c3"
+ },
+ "89270499-1074-43bc-a448-2f1079fdd5e0": {
+ "path": "89270499-1074-43bc-a448-2f1079fdd5e0",
+ "cellName": "__init__.py",
+ "cellId": "89270499-1074-43bc-a448-2f1079fdd5e0",
+ "visible": true,
+ "parentCellId": "9e9f8d3c-b3a3-41cf-b0cc-6d33f59e4d09"
+ },
+ "d4e9e31f-0972-4748-9f45-46ae0601f647": {
+ "path": "d4e9e31f-0972-4748-9f45-46ae0601f647",
+ "cellName": "__init__.py",
+ "cellId": "d4e9e31f-0972-4748-9f45-46ae0601f647",
+ "visible": true,
+ "parentCellId": "5cc954ea-dc04-487f-88bd-c4ca000e52b0"
+ },
+ "e9c03ccd-8218-454a-9d5b-8e7dbcc0f824": {
+ "path": "e9c03ccd-8218-454a-9d5b-8e7dbcc0f824",
+ "cellName": "instrumentation.py",
+ "cellId": "e9c03ccd-8218-454a-9d5b-8e7dbcc0f824",
+ "visible": true,
+ "parentCellId": "aec07ceb-62c7-41c8-b1f4-63f27657579c"
+ },
+ "97432fe9-bb52-43b2-9b07-7931040683c7": {
+ "path": "97432fe9-bb52-43b2-9b07-7931040683c7",
+ "cellName": "LangChain Flow: Instrumentation Initialization - tracing.py:L734-744",
+ "cellId": "97432fe9-bb52-43b2-9b07-7931040683c7",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-38d4e5e9-96c0-4516-aa1f-929713a6d6e2": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-38d4e5e9-96c0-4516-aa1f-929713a6d6e2",
+ "fileName": "tracing.py",
+ "wiki": "When `Traceloop.init()` is called, the SDK's `init_instrumentations` function iterates through available instrumentations. If the 'langchain' package is detected, it calls `init_langchain_instrumentor` to begin the instrumentation process.",
+ "cellName": "LangChain Flow: Instrumentation Initialization - tracing.py:L734-744",
+ "cellId": "97432fe9-bb52-43b2-9b07-7931040683c7",
+ "visible": true,
+ "startLine": 734,
+ "endLine": 744,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Instrumentation of High-Level AI Frameworks",
+ "simStepId": "38d4e5e9-96c0-4516-aa1f-929713a6d6e2"
+ }
+ ]
+ },
+ "e168c2b2-986c-4875-9d24-5c590363ae3c": {
+ "path": "e168c2b2-986c-4875-9d24-5c590363ae3c",
+ "cellName": "LangChain Flow: Injecting Callback Handler - __init__.py:L88-92",
+ "cellId": "e168c2b2-986c-4875-9d24-5c590363ae3c",
+ "visible": true,
+ "parentCellId": "89270499-1074-43bc-a448-2f1079fdd5e0"
+ },
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py-simstep-332a3676-5b6f-4316-8c62-7f5ab27c927c": {
+ "path": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py-simstep-332a3676-5b6f-4316-8c62-7f5ab27c927c",
+ "fileName": "__init__.py",
+ "wiki": "The `_instrument` method within `LangchainInstrumentor` patches LangChain's `BaseCallbackManager`. It wraps the `__init__` method to automatically inject `TraceloopCallbackHandler` into every LangChain component (like chains, agents, tools), enabling event capture.",
+ "cellName": "LangChain Flow: Injecting Callback Handler - __init__.py:L88-92",
+ "cellId": "e168c2b2-986c-4875-9d24-5c590363ae3c",
+ "visible": true,
+ "startLine": 88,
+ "endLine": 92,
+ "parentCellId": "89270499-1074-43bc-a448-2f1079fdd5e0",
+ "parentPath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Instrumentation of High-Level AI Frameworks",
+ "simStepId": "332a3676-5b6f-4316-8c62-7f5ab27c927c"
+ }
+ ]
+ },
+ "b1d1424d-eb5d-46f2-aa8c-35d5a9d0496c": {
+ "path": "b1d1424d-eb5d-46f2-aa8c-35d5a9d0496c",
+ "cellName": "LangChain Flow: Span Creation - __init__.py:L88-90",
+ "cellId": "b1d1424d-eb5d-46f2-aa8c-35d5a9d0496c",
+ "visible": true,
+ "parentCellId": "89270499-1074-43bc-a448-2f1079fdd5e0"
+ },
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py-simstep-d2bfc7f7-0f5c-4a88-94cc-3153b1ef30f2": {
+ "path": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py-simstep-d2bfc7f7-0f5c-4a88-94cc-3153b1ef30f2",
+ "fileName": "__init__.py",
+ "wiki": "The `TraceloopCallbackHandler` receives data from LangChain events and uses the OpenTelemetry tracer to create and manage spans. For example, `on_chain_start` creates a new span representing the chain's execution, which becomes the parent for subsequent LLM calls or tool uses within that chain.",
+ "cellName": "LangChain Flow: Span Creation - __init__.py:L88-90",
+ "cellId": "b1d1424d-eb5d-46f2-aa8c-35d5a9d0496c",
+ "visible": true,
+ "startLine": 88,
+ "endLine": 90,
+ "parentCellId": "89270499-1074-43bc-a448-2f1079fdd5e0",
+ "parentPath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Instrumentation of High-Level AI Frameworks",
+ "simStepId": "d2bfc7f7-0f5c-4a88-94cc-3153b1ef30f2"
+ }
+ ]
+ },
+ "b4f85fd1-1ddc-43b8-8d56-dbaa6af4d3ca": {
+ "path": "b4f85fd1-1ddc-43b8-8d56-dbaa6af4d3ca",
+ "cellName": "LlamaIndex Flow: Instrumentation Initialization - tracing.py:L826-836",
+ "cellId": "b4f85fd1-1ddc-43b8-8d56-dbaa6af4d3ca",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-c96e2f40-1e60-4bc0-93cb-867b85be3dcb": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-c96e2f40-1e60-4bc0-93cb-867b85be3dcb",
+ "fileName": "tracing.py",
+ "wiki": "When `Traceloop.init()` is called, the SDK's `init_instrumentations` function detects the 'llama-index' package. It then calls `init_llama_index_instrumentor` to start the instrumentation process for LlamaIndex.",
+ "cellName": "LlamaIndex Flow: Instrumentation Initialization - tracing.py:L826-836",
+ "cellId": "b4f85fd1-1ddc-43b8-8d56-dbaa6af4d3ca",
+ "visible": true,
+ "startLine": 826,
+ "endLine": 836,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Instrumentation of High-Level AI Frameworks",
+ "simStepId": "c96e2f40-1e60-4bc0-93cb-867b85be3dcb"
+ }
+ ]
+ },
+ "ad409adb-66a2-4bdf-ad9f-f44f4fefb487": {
+ "path": "ad409adb-66a2-4bdf-ad9f-f44f4fefb487",
+ "cellName": "LlamaIndex Flow: Selecting Core vs. Legacy Instrumentor - __init__.py:L51-54",
+ "cellId": "ad409adb-66a2-4bdf-ad9f-f44f4fefb487",
+ "visible": true,
+ "parentCellId": "d4e9e31f-0972-4748-9f45-46ae0601f647"
+ },
+ "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py-simstep-0677a566-758c-4170-90e2-92e4b43d453d": {
+ "path": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py-simstep-0677a566-758c-4170-90e2-92e4b43d453d",
+ "fileName": "__init__.py",
+ "wiki": "The main `LlamaIndexInstrumentor` acts as a dispatcher. It contains instances of both `LlamaIndexInstrumentorFull` (for legacy versions) and `LlamaIndexInstrumentorCore`. Based on the installed LlamaIndex dependencies, the correct underlying instrumentor is used.",
+ "cellName": "LlamaIndex Flow: Selecting Core vs. Legacy Instrumentor - __init__.py:L51-54",
+ "cellId": "ad409adb-66a2-4bdf-ad9f-f44f4fefb487",
+ "visible": true,
+ "startLine": 51,
+ "endLine": 54,
+ "parentCellId": "d4e9e31f-0972-4748-9f45-46ae0601f647",
+ "parentPath": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Instrumentation of High-Level AI Frameworks",
+ "simStepId": "0677a566-758c-4170-90e2-92e4b43d453d"
+ }
+ ]
+ },
+ "639b1979-276b-4543-b69d-563de2690a01": {
+ "path": "639b1979-276b-4543-b69d-563de2690a01",
+ "cellName": "LlamaIndex Flow: Patching LlamaIndex Components - __init__.py:L68-97",
+ "cellId": "639b1979-276b-4543-b69d-563de2690a01",
+ "visible": true,
+ "parentCellId": "d4e9e31f-0972-4748-9f45-46ae0601f647"
+ },
+ "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py-simstep-16f67a4b-07b8-4c96-809e-d6fc3bff09a1": {
+ "path": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py-simstep-16f67a4b-07b8-4c96-809e-d6fc3bff09a1",
+ "fileName": "__init__.py",
+ "wiki": "The `_instrument` method calls `apply_instrumentation`, which dynamically patches various LlamaIndex components. This includes wrapping the event dispatcher and instrumenting key classes like query engines, retrievers, and agents to intercept their execution.",
+ "cellName": "LlamaIndex Flow: Patching LlamaIndex Components - __init__.py:L68-97",
+ "cellId": "639b1979-276b-4543-b69d-563de2690a01",
+ "visible": true,
+ "startLine": 68,
+ "endLine": 97,
+ "parentCellId": "d4e9e31f-0972-4748-9f45-46ae0601f647",
+ "parentPath": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Instrumentation of High-Level AI Frameworks",
+ "simStepId": "16f67a4b-07b8-4c96-809e-d6fc3bff09a1"
+ }
+ ]
+ },
+ "28047a56-d5c0-4fc8-9649-ace49784dc0c": {
+ "path": "28047a56-d5c0-4fc8-9649-ace49784dc0c",
+ "cellName": "CrewAI Flow: Instrumentation Initialization - tracing.py:L1120-1130",
+ "cellId": "28047a56-d5c0-4fc8-9649-ace49784dc0c",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-f8883f84-707f-4496-957a-37d8bb381fc5": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-f8883f84-707f-4496-957a-37d8bb381fc5",
+ "fileName": "tracing.py",
+ "wiki": "When `Traceloop.init()` is called, the SDK's `init_instrumentations` function detects the 'crewai' package is installed. It proceeds to call `init_crewai_instrumentor` to begin instrumenting the CrewAI framework.",
+ "cellName": "CrewAI Flow: Instrumentation Initialization - tracing.py:L1120-1130",
+ "cellId": "28047a56-d5c0-4fc8-9649-ace49784dc0c",
+ "visible": true,
+ "startLine": 1120,
+ "endLine": 1130,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Instrumentation of High-Level AI Frameworks",
+ "simStepId": "f8883f84-707f-4496-957a-37d8bb381fc5"
+ },
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "9b0270ac-a093-412b-82e5-03544bd5baee"
+ }
+ ]
+ },
+ "650a18e7-ab1a-4e5a-902c-3f5cf334ddf6": {
+ "path": "650a18e7-ab1a-4e5a-902c-3f5cf334ddf6",
+ "cellName": "CrewAI Flow: Patching CrewAI Methods - instrumentation.py:L27-40",
+ "cellId": "650a18e7-ab1a-4e5a-902c-3f5cf334ddf6",
+ "visible": true,
+ "parentCellId": "e9c03ccd-8218-454a-9d5b-8e7dbcc0f824"
+ },
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-4009f1e6-115e-4e60-a77e-8b71fd9df89a": {
+ "path": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-4009f1e6-115e-4e60-a77e-8b71fd9df89a",
+ "fileName": "instrumentation.py",
+ "wiki": "The `_instrument` method in `CrewAIInstrumentor` uses `wrapt.wrap_function_wrapper` to patch key methods that define the CrewAI workflow, such as `Crew.kickoff`, `Agent.execute_task`, and `Task.execute_sync`.",
+ "cellName": "CrewAI Flow: Patching CrewAI Methods - instrumentation.py:L27-40",
+ "cellId": "650a18e7-ab1a-4e5a-902c-3f5cf334ddf6",
+ "visible": true,
+ "startLine": 27,
+ "endLine": 40,
+ "parentCellId": "e9c03ccd-8218-454a-9d5b-8e7dbcc0f824",
+ "parentPath": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py",
+ "simSteps": [
+ {
+ "simulationKey": "Instrumentation of High-Level AI Frameworks",
+ "simStepId": "4009f1e6-115e-4e60-a77e-8b71fd9df89a"
+ },
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "85bc8477-e13d-491b-9eba-d0cc075fdaa3"
+ }
+ ]
+ },
+ "224b7647-773c-4235-adab-a270d8e741c2": {
+ "path": "224b7647-773c-4235-adab-a270d8e741c2",
+ "cellName": "CrewAI Flow: Workflow Span Creation - instrumentation.py:L68-72",
+ "cellId": "224b7647-773c-4235-adab-a270d8e741c2",
+ "visible": true,
+ "parentCellId": "e9c03ccd-8218-454a-9d5b-8e7dbcc0f824"
+ },
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-940f766b-13fe-4e2f-a4d5-792832e71f51": {
+ "path": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-940f766b-13fe-4e2f-a4d5-792832e71f51",
+ "fileName": "instrumentation.py",
+ "wiki": "The `wrap_kickoff` function initiates a top-level span for the entire `crewai.workflow`. It then calls the original `kickoff` method. The other wrappers for agents and tasks create nested spans, resulting in a hierarchical trace that mirrors the CrewAI execution structure.",
+ "cellName": "CrewAI Flow: Workflow Span Creation - instrumentation.py:L68-72",
+ "cellId": "224b7647-773c-4235-adab-a270d8e741c2",
+ "visible": true,
+ "startLine": 68,
+ "endLine": 72,
+ "parentCellId": "e9c03ccd-8218-454a-9d5b-8e7dbcc0f824",
+ "parentPath": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py",
+ "simSteps": [
+ {
+ "simulationKey": "Instrumentation of High-Level AI Frameworks",
+ "simStepId": "940f766b-13fe-4e2f-a4d5-792832e71f51"
+ },
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "e954799a-bc77-47a8-b1c2-da76b2fbdf4b"
+ },
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "7ddd8861-6a29-484e-ae68-0910533aa1f9"
+ }
+ ]
+ },
+ "3efb13e1-d2a0-4c5e-84c0-31fcd671efa1": {
+ "path": "3efb13e1-d2a0-4c5e-84c0-31fcd671efa1",
+ "cellName": "LangChain Flow:\nCall to\ninstrument()",
+ "cellId": "3efb13e1-d2a0-4c5e-84c0-31fcd671efa1",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-f7c075b4-b8c7-4cf5-a8f7-f90cc840b9a7-3efb13e1-d2a0-4c5e-84c0-31fcd671efa1": {
+ "path": "generated-edge-simstep-f7c075b4-b8c7-4cf5-a8f7-f90cc840b9a7-3efb13e1-d2a0-4c5e-84c0-31fcd671efa1",
+ "fileName": "tracing.py",
+ "cellName": "LangChain Flow: Call to instrument()",
+ "cellId": "3efb13e1-d2a0-4c5e-84c0-31fcd671efa1",
+ "visible": true,
+ "startLine": 743,
+ "endLine": 743,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Instrumentation of High-Level AI Frameworks",
+ "simStepId": "f7c075b4-b8c7-4cf5-a8f7-f90cc840b9a7"
+ }
+ ]
+ },
+ "80e6db4a-5a64-4436-8df8-d9c61f897283": {
+ "path": "80e6db4a-5a64-4436-8df8-d9c61f897283",
+ "cellName": "LangChain Flow:\nExecution Triggers\nCallback",
+ "cellId": "80e6db4a-5a64-4436-8df8-d9c61f897283",
+ "visible": true,
+ "parentCellId": "89270499-1074-43bc-a448-2f1079fdd5e0"
+ },
+ "generated-edge-simstep-0745b1bf-72bb-4ea5-ae4a-45406fc15e2f-80e6db4a-5a64-4436-8df8-d9c61f897283": {
+ "path": "generated-edge-simstep-0745b1bf-72bb-4ea5-ae4a-45406fc15e2f-80e6db4a-5a64-4436-8df8-d9c61f897283",
+ "fileName": "__init__.py",
+ "cellName": "LangChain Flow: Execution Triggers Callback",
+ "cellId": "80e6db4a-5a64-4436-8df8-d9c61f897283",
+ "visible": true,
+ "startLine": 88,
+ "endLine": 90,
+ "parentPath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Instrumentation of High-Level AI Frameworks",
+ "simStepId": "0745b1bf-72bb-4ea5-ae4a-45406fc15e2f"
+ }
+ ]
+ },
+ "02bcaca2-3fa7-4f43-82ba-e27e7cf02d6d": {
+ "path": "02bcaca2-3fa7-4f43-82ba-e27e7cf02d6d",
+ "cellName": "LlamaIndex Flow:\nCall to\ninstrument()",
+ "cellId": "02bcaca2-3fa7-4f43-82ba-e27e7cf02d6d",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-38a80bca-7b9d-4eab-9fa9-b8d338dfba73-02bcaca2-3fa7-4f43-82ba-e27e7cf02d6d": {
+ "path": "generated-edge-simstep-38a80bca-7b9d-4eab-9fa9-b8d338dfba73-02bcaca2-3fa7-4f43-82ba-e27e7cf02d6d",
+ "fileName": "tracing.py",
+ "cellName": "LlamaIndex Flow: Call to instrument()",
+ "cellId": "02bcaca2-3fa7-4f43-82ba-e27e7cf02d6d",
+ "visible": true,
+ "startLine": 835,
+ "endLine": 835,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Instrumentation of High-Level AI Frameworks",
+ "simStepId": "38a80bca-7b9d-4eab-9fa9-b8d338dfba73"
+ }
+ ]
+ },
+ "3b49d87a-feb9-405b-9570-e18cf7fa76d1": {
+ "path": "3b49d87a-feb9-405b-9570-e18cf7fa76d1",
+ "cellName": "LlamaIndex Flow:\nTriggering Core\nInstrumentation",
+ "cellId": "3b49d87a-feb9-405b-9570-e18cf7fa76d1",
+ "visible": true,
+ "parentCellId": "d4e9e31f-0972-4748-9f45-46ae0601f647"
+ },
+ "generated-edge-simstep-8046d8c3-ab92-45dc-95ce-5819d8e3816f-3b49d87a-feb9-405b-9570-e18cf7fa76d1": {
+ "path": "generated-edge-simstep-8046d8c3-ab92-45dc-95ce-5819d8e3816f-3b49d87a-feb9-405b-9570-e18cf7fa76d1",
+ "fileName": "__init__.py",
+ "cellName": "LlamaIndex Flow: Triggering Core Instrumentation",
+ "cellId": "3b49d87a-feb9-405b-9570-e18cf7fa76d1",
+ "visible": true,
+ "startLine": 114,
+ "endLine": 114,
+ "parentPath": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Instrumentation of High-Level AI Frameworks",
+ "simStepId": "8046d8c3-ab92-45dc-95ce-5819d8e3816f"
+ }
+ ]
+ },
+ "9158f5c2-3407-4920-9404-64553ac7fd9b": {
+ "path": "9158f5c2-3407-4920-9404-64553ac7fd9b",
+ "cellName": "CrewAI Flow:\nCall to\ninstrument()",
+ "cellId": "9158f5c2-3407-4920-9404-64553ac7fd9b",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-9ebdc409-4989-4800-b126-b86867b98432-9158f5c2-3407-4920-9404-64553ac7fd9b": {
+ "path": "generated-edge-simstep-9ebdc409-4989-4800-b126-b86867b98432-9158f5c2-3407-4920-9404-64553ac7fd9b",
+ "fileName": "tracing.py",
+ "cellName": "CrewAI Flow: Call to instrument()",
+ "cellId": "9158f5c2-3407-4920-9404-64553ac7fd9b",
+ "visible": true,
+ "startLine": 1129,
+ "endLine": 1129,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Instrumentation of High-Level AI Frameworks",
+ "simStepId": "9ebdc409-4989-4800-b126-b86867b98432"
+ },
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "9b0270ac-a093-412b-82e5-03544bd5baee"
+ }
+ ]
+ },
+ "4ce084ad-a94c-4523-87e2-74adc54b0ce5": {
+ "path": "4ce084ad-a94c-4523-87e2-74adc54b0ce5",
+ "cellName": "CrewAI Flow:\nExecution Triggers\nWrappers",
+ "cellId": "4ce084ad-a94c-4523-87e2-74adc54b0ce5",
+ "visible": true,
+ "parentCellId": "e9c03ccd-8218-454a-9d5b-8e7dbcc0f824"
+ },
+ "generated-edge-simstep-456e2376-3346-4aa2-985f-b69075551c2d-4ce084ad-a94c-4523-87e2-74adc54b0ce5": {
+ "path": "generated-edge-simstep-456e2376-3346-4aa2-985f-b69075551c2d-4ce084ad-a94c-4523-87e2-74adc54b0ce5",
+ "fileName": "instrumentation.py",
+ "cellName": "CrewAI Flow: Execution Triggers Wrappers",
+ "cellId": "4ce084ad-a94c-4523-87e2-74adc54b0ce5",
+ "visible": true,
+ "startLine": 37,
+ "endLine": 37,
+ "parentPath": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py",
+ "simSteps": [
+ {
+ "simulationKey": "Instrumentation of High-Level AI Frameworks",
+ "simStepId": "456e2376-3346-4aa2-985f-b69075551c2d"
+ },
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "85bc8477-e13d-491b-9eba-d0cc075fdaa3"
+ }
+ ]
+ },
+ "97938336-6f5a-4d26-a1e1-13fe956d3bc8": {
+ "path": "97938336-6f5a-4d26-a1e1-13fe956d3bc8",
+ "cellName": "opentelemetry-instrumentation-chromadb",
+ "cellId": "97938336-6f5a-4d26-a1e1-13fe956d3bc8",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "ba4f1513-b864-45ec-8e17-9e0e3468ea32": {
+ "path": "ba4f1513-b864-45ec-8e17-9e0e3468ea32",
+ "cellName": "opentelemetry-instrumentation-pinecone",
+ "cellId": "ba4f1513-b864-45ec-8e17-9e0e3468ea32",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "e18f25cb-137a-4a5e-8de2-81322a7818f5": {
+ "path": "e18f25cb-137a-4a5e-8de2-81322a7818f5",
+ "cellName": "opentelemetry-instrumentation-qdrant",
+ "cellId": "e18f25cb-137a-4a5e-8de2-81322a7818f5",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "4a2d9cf8-307b-4d31-ab07-a4850b8ae40c": {
+ "path": "4a2d9cf8-307b-4d31-ab07-a4850b8ae40c",
+ "cellName": "opentelemetry",
+ "cellId": "4a2d9cf8-307b-4d31-ab07-a4850b8ae40c",
+ "visible": true,
+ "parentCellId": "97938336-6f5a-4d26-a1e1-13fe956d3bc8"
+ },
+ "c93bef8b-e6db-4775-96dc-a3f7837d0506": {
+ "path": "c93bef8b-e6db-4775-96dc-a3f7837d0506",
+ "cellName": "opentelemetry",
+ "cellId": "c93bef8b-e6db-4775-96dc-a3f7837d0506",
+ "visible": true,
+ "parentCellId": "ba4f1513-b864-45ec-8e17-9e0e3468ea32"
+ },
+ "2beffdd9-b84b-4306-a8bb-30fc452420c6": {
+ "path": "2beffdd9-b84b-4306-a8bb-30fc452420c6",
+ "cellName": "opentelemetry",
+ "cellId": "2beffdd9-b84b-4306-a8bb-30fc452420c6",
+ "visible": true,
+ "parentCellId": "e18f25cb-137a-4a5e-8de2-81322a7818f5"
+ },
+ "34ec46b7-c471-4695-8f73-2a99ad332e17": {
+ "path": "34ec46b7-c471-4695-8f73-2a99ad332e17",
+ "cellName": "instrumentation",
+ "cellId": "34ec46b7-c471-4695-8f73-2a99ad332e17",
+ "visible": true,
+ "parentCellId": "4a2d9cf8-307b-4d31-ab07-a4850b8ae40c"
+ },
+ "66a6fe54-dad8-4ec9-af89-4962cd828c49": {
+ "path": "66a6fe54-dad8-4ec9-af89-4962cd828c49",
+ "cellName": "instrumentation",
+ "cellId": "66a6fe54-dad8-4ec9-af89-4962cd828c49",
+ "visible": true,
+ "parentCellId": "c93bef8b-e6db-4775-96dc-a3f7837d0506"
+ },
+ "30f72244-b0c5-4b95-a0b6-c65aa1c98215": {
+ "path": "30f72244-b0c5-4b95-a0b6-c65aa1c98215",
+ "cellName": "instrumentation",
+ "cellId": "30f72244-b0c5-4b95-a0b6-c65aa1c98215",
+ "visible": true,
+ "parentCellId": "2beffdd9-b84b-4306-a8bb-30fc452420c6"
+ },
+ "50b248e1-4251-495e-aca5-d77f38d8e03a": {
+ "path": "50b248e1-4251-495e-aca5-d77f38d8e03a",
+ "cellName": "chromadb",
+ "cellId": "50b248e1-4251-495e-aca5-d77f38d8e03a",
+ "visible": true,
+ "parentCellId": "34ec46b7-c471-4695-8f73-2a99ad332e17"
+ },
+ "542396bc-0ee1-4696-b033-4f92f188049a": {
+ "path": "542396bc-0ee1-4696-b033-4f92f188049a",
+ "cellName": "pinecone",
+ "cellId": "542396bc-0ee1-4696-b033-4f92f188049a",
+ "visible": true,
+ "parentCellId": "66a6fe54-dad8-4ec9-af89-4962cd828c49"
+ },
+ "53ee72b3-70a8-4506-ae78-8fcab85f4062": {
+ "path": "53ee72b3-70a8-4506-ae78-8fcab85f4062",
+ "cellName": "qdrant",
+ "cellId": "53ee72b3-70a8-4506-ae78-8fcab85f4062",
+ "visible": true,
+ "parentCellId": "30f72244-b0c5-4b95-a0b6-c65aa1c98215"
+ },
+ "baa445ec-a609-4492-9959-85ddae577015": {
+ "path": "baa445ec-a609-4492-9959-85ddae577015",
+ "cellName": "__init__.py",
+ "cellId": "baa445ec-a609-4492-9959-85ddae577015",
+ "visible": true,
+ "parentCellId": "50b248e1-4251-495e-aca5-d77f38d8e03a"
+ },
+ "71ce4636-69a5-43e0-bc81-701063516493": {
+ "path": "71ce4636-69a5-43e0-bc81-701063516493",
+ "cellName": "__init__.py",
+ "cellId": "71ce4636-69a5-43e0-bc81-701063516493",
+ "visible": true,
+ "parentCellId": "542396bc-0ee1-4696-b033-4f92f188049a"
+ },
+ "1d39487a-1ef4-4ae3-9951-91254fa3ce64": {
+ "path": "1d39487a-1ef4-4ae3-9951-91254fa3ce64",
+ "cellName": "__init__.py",
+ "cellId": "1d39487a-1ef4-4ae3-9951-91254fa3ce64",
+ "visible": true,
+ "parentCellId": "53ee72b3-70a8-4506-ae78-8fcab85f4062"
+ },
+ "fa6da8af-2d90-483b-a4cf-92bd3cf6d18d": {
+ "path": "fa6da8af-2d90-483b-a4cf-92bd3cf6d18d",
+ "cellName": "Flow: ChromaDB | Instrumentation Orchestration - tracing.py:L497-507",
+ "cellId": "fa6da8af-2d90-483b-a4cf-92bd3cf6d18d",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-7d34f0d6-28ad-47f2-a2fa-ad4005fd12da": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-7d34f0d6-28ad-47f2-a2fa-ad4005fd12da",
+ "fileName": "tracing.py",
+ "wiki": "The SDK's main initialization function, `init_instrumentations`, iterates through all supported libraries to check if they should be instrumented. This acts as the central dispatcher for auto-instrumentation of vector databases and other components.",
+ "cellName": "Flow: ChromaDB | Instrumentation Orchestration - tracing.py:L497-507",
+ "cellId": "fa6da8af-2d90-483b-a4cf-92bd3cf6d18d",
+ "visible": true,
+ "startLine": 497,
+ "endLine": 507,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simStepId": "7d34f0d6-28ad-47f2-a2fa-ad4005fd12da"
+ }
+ ]
+ },
+ "c22af2c4-9617-47c1-b7a2-a0f7a1b9e4c2": {
+ "path": "c22af2c4-9617-47c1-b7a2-a0f7a1b9e4c2",
+ "cellName": "Flow: ChromaDB | Initialize ChromaDB Instrumentor - tracing.py:L675-685",
+ "cellId": "c22af2c4-9617-47c1-b7a2-a0f7a1b9e4c2",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-f8547631-0825-4565-92c0-3867da912807": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-f8547631-0825-4565-92c0-3867da912807",
+ "fileName": "tracing.py",
+ "wiki": "This function checks if the `chromadb` library is installed. If found, it imports `ChromaInstrumentor`, creates an instance, and calls its `.instrument()` method to begin the patching process.",
+ "cellName": "Flow: ChromaDB | Initialize ChromaDB Instrumentor - tracing.py:L675-685",
+ "cellId": "c22af2c4-9617-47c1-b7a2-a0f7a1b9e4c2",
+ "visible": true,
+ "startLine": 675,
+ "endLine": 685,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simStepId": "f8547631-0825-4565-92c0-3867da912807"
+ }
+ ]
+ },
+ "b3f3896d-d8c3-4029-b61a-c497667d617f": {
+ "path": "b3f3896d-d8c3-4029-b61a-c497667d617f",
+ "cellName": "Flow: ChromaDB | Apply Method Wrappers - __init__.py:L92-101",
+ "cellId": "b3f3896d-d8c3-4029-b61a-c497667d617f",
+ "visible": true,
+ "parentCellId": "baa445ec-a609-4492-9959-85ddae577015"
+ },
+ "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/__init__.py-simstep-29380ecc-2470-4bdf-ad76-231ece83df82": {
+ "path": "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/__init__.py-simstep-29380ecc-2470-4bdf-ad76-231ece83df82",
+ "fileName": "__init__.py",
+ "wiki": "The `_instrument` method iterates through a predefined list of target methods (e.g., `Collection.query`, `Collection.add`). For each method, it applies a wrapper that intercepts calls, creates an OpenTelemetry span, records relevant data like query texts and results, and then executes the original method.",
+ "cellName": "Flow: ChromaDB | Apply Method Wrappers - __init__.py:L92-101",
+ "cellId": "b3f3896d-d8c3-4029-b61a-c497667d617f",
+ "visible": true,
+ "startLine": 92,
+ "endLine": 101,
+ "parentCellId": "baa445ec-a609-4492-9959-85ddae577015",
+ "parentPath": "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simStepId": "29380ecc-2470-4bdf-ad76-231ece83df82"
+ }
+ ]
+ },
+ "229f90d6-2fd5-4e0f-955b-51c7319e7360": {
+ "path": "229f90d6-2fd5-4e0f-955b-51c7319e7360",
+ "cellName": "Flow: Pinecone | Instrumentation Orchestration - tracing.py:L497-507",
+ "cellId": "229f90d6-2fd5-4e0f-955b-51c7319e7360",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-d7f74d81-0cc2-493b-947f-0fb528d2c681": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-d7f74d81-0cc2-493b-947f-0fb528d2c681",
+ "fileName": "tracing.py",
+ "wiki": "The SDK's main initialization function, `init_instrumentations`, iterates through all supported libraries to check if they should be instrumented. This acts as the central dispatcher for auto-instrumentation of vector databases and other components.",
+ "cellName": "Flow: Pinecone | Instrumentation Orchestration - tracing.py:L497-507",
+ "cellId": "229f90d6-2fd5-4e0f-955b-51c7319e7360",
+ "visible": true,
+ "startLine": 497,
+ "endLine": 507,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simStepId": "d7f74d81-0cc2-493b-947f-0fb528d2c681"
+ }
+ ]
+ },
+ "876f8779-2cc8-4a70-809f-c68213e74423": {
+ "path": "876f8779-2cc8-4a70-809f-c68213e74423",
+ "cellName": "Flow: Pinecone | Initialize Pinecone Instrumentor - tracing.py:L639-649",
+ "cellId": "876f8779-2cc8-4a70-809f-c68213e74423",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-9b33ddbe-e447-4131-9ef4-e56766873cf3": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-9b33ddbe-e447-4131-9ef4-e56766873cf3",
+ "fileName": "tracing.py",
+ "wiki": "This function checks if the `pinecone` library is installed. If found, it imports `PineconeInstrumentor`, creates an instance, and calls its `.instrument()` method to begin the patching process.",
+ "cellName": "Flow: Pinecone | Initialize Pinecone Instrumentor - tracing.py:L639-649",
+ "cellId": "876f8779-2cc8-4a70-809f-c68213e74423",
+ "visible": true,
+ "startLine": 639,
+ "endLine": 649,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simStepId": "9b33ddbe-e447-4131-9ef4-e56766873cf3"
+ }
+ ]
+ },
+ "248a1ee5-d4d5-4222-85ef-32c2bebcc4a0": {
+ "path": "248a1ee5-d4d5-4222-85ef-32c2bebcc4a0",
+ "cellName": "Flow: Pinecone | Apply Method Wrappers - __init__.py:L219-226",
+ "cellId": "248a1ee5-d4d5-4222-85ef-32c2bebcc4a0",
+ "visible": true,
+ "parentCellId": "71ce4636-69a5-43e0-bc81-701063516493"
+ },
+ "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone/__init__.py-simstep-990b2b77-7290-4afd-ae10-257191e37e28": {
+ "path": "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone/__init__.py-simstep-990b2b77-7290-4afd-ae10-257191e37e28",
+ "fileName": "__init__.py",
+ "wiki": "The `_instrument` method iterates through a predefined list of target methods (e.g., `Index.query`, `Index.upsert`). For each method, it applies a wrapper that intercepts calls, creates an OpenTelemetry span, records relevant data like top_k and query results, and then executes the original method.",
+ "cellName": "Flow: Pinecone | Apply Method Wrappers - __init__.py:L219-226",
+ "cellId": "248a1ee5-d4d5-4222-85ef-32c2bebcc4a0",
+ "visible": true,
+ "startLine": 219,
+ "endLine": 226,
+ "parentCellId": "71ce4636-69a5-43e0-bc81-701063516493",
+ "parentPath": "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simStepId": "990b2b77-7290-4afd-ae10-257191e37e28"
+ }
+ ]
+ },
+ "463d7d9b-2f3d-4aa4-a29b-18ee5bbe0ed4": {
+ "path": "463d7d9b-2f3d-4aa4-a29b-18ee5bbe0ed4",
+ "cellName": "Flow: Qdrant | Instrumentation Orchestration - tracing.py:L497-507",
+ "cellId": "463d7d9b-2f3d-4aa4-a29b-18ee5bbe0ed4",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-155de5d7-ad9b-4d73-b296-5f9b809e5f3c": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-155de5d7-ad9b-4d73-b296-5f9b809e5f3c",
+ "fileName": "tracing.py",
+ "wiki": "The SDK's main initialization function, `init_instrumentations`, iterates through all supported libraries to check if they should be instrumented. This acts as the central dispatcher for auto-instrumentation of vector databases and other components.",
+ "cellName": "Flow: Qdrant | Instrumentation Orchestration - tracing.py:L497-507",
+ "cellId": "463d7d9b-2f3d-4aa4-a29b-18ee5bbe0ed4",
+ "visible": true,
+ "startLine": 497,
+ "endLine": 507,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simStepId": "155de5d7-ad9b-4d73-b296-5f9b809e5f3c"
+ }
+ ]
+ },
+ "ac577c4b-4234-4ebf-be38-4d9ab58e02a1": {
+ "path": "ac577c4b-4234-4ebf-be38-4d9ab58e02a1",
+ "cellName": "Flow: Qdrant | Initialize Qdrant Instrumentor - tracing.py:L657-667",
+ "cellId": "ac577c4b-4234-4ebf-be38-4d9ab58e02a1",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-31bb4e40-def3-4c05-b3a2-41e8475718e3": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-31bb4e40-def3-4c05-b3a2-41e8475718e3",
+ "fileName": "tracing.py",
+ "wiki": "This function checks if the `qdrant-client` library is installed. If found, it imports `QdrantInstrumentor`, creates an instance, and calls its `.instrument()` method to begin the patching process.",
+ "cellName": "Flow: Qdrant | Initialize Qdrant Instrumentor - tracing.py:L657-667",
+ "cellId": "ac577c4b-4234-4ebf-be38-4d9ab58e02a1",
+ "visible": true,
+ "startLine": 657,
+ "endLine": 667,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simStepId": "31bb4e40-def3-4c05-b3a2-41e8475718e3"
+ }
+ ]
+ },
+ "dc67893d-1eea-4788-9155-c6eadd361fcb": {
+ "path": "dc67893d-1eea-4788-9155-c6eadd361fcb",
+ "cellName": "Flow: Qdrant | Apply Method Wrappers - __init__.py:L49-57",
+ "cellId": "dc67893d-1eea-4788-9155-c6eadd361fcb",
+ "visible": true,
+ "parentCellId": "1d39487a-1ef4-4ae3-9951-91254fa3ce64"
+ },
+ "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant/__init__.py-simstep-98d3d71b-93e8-43ec-ba55-e0f8979feaf9": {
+ "path": "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant/__init__.py-simstep-98d3d71b-93e8-43ec-ba55-e0f8979feaf9",
+ "fileName": "__init__.py",
+ "wiki": "The `_instrument` method iterates through a predefined list of target methods loaded from JSON configs (e.g., `QdrantClient.search`, `QdrantClient.retrieve`). For each method, it applies a wrapper that intercepts calls, creates an OpenTelemetry span, records relevant data, and executes the original method.",
+ "cellName": "Flow: Qdrant | Apply Method Wrappers - __init__.py:L49-57",
+ "cellId": "dc67893d-1eea-4788-9155-c6eadd361fcb",
+ "visible": true,
+ "startLine": 49,
+ "endLine": 57,
+ "parentCellId": "1d39487a-1ef4-4ae3-9951-91254fa3ce64",
+ "parentPath": "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simStepId": "98d3d71b-93e8-43ec-ba55-e0f8979feaf9"
+ }
+ ]
+ },
+ "a17b6fe4-a31b-47a6-9c8a-d88dfc259f2a": {
+ "path": "a17b6fe4-a31b-47a6-9c8a-d88dfc259f2a",
+ "cellName": "Flow: ChromaDB\n| Dispatch\nto Chroma\nInitializer",
+ "cellId": "a17b6fe4-a31b-47a6-9c8a-d88dfc259f2a",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "generated-edge-simstep-094072a9-c8b6-4211-b382-9632af076bdd-a17b6fe4-a31b-47a6-9c8a-d88dfc259f2a": {
+ "path": "generated-edge-simstep-094072a9-c8b6-4211-b382-9632af076bdd-a17b6fe4-a31b-47a6-9c8a-d88dfc259f2a",
+ "fileName": "tracing.py",
+ "cellName": "Flow: ChromaDB | Dispatch to Chroma Initializer",
+ "cellId": "a17b6fe4-a31b-47a6-9c8a-d88dfc259f2a",
+ "visible": true,
+ "startLine": 519,
+ "endLine": 521,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simStepId": "094072a9-c8b6-4211-b382-9632af076bdd"
+ }
+ ]
+ },
+ "57e2e347-4678-4493-9852-1fa503174421": {
+ "path": "57e2e347-4678-4493-9852-1fa503174421",
+ "cellName": "Flow: ChromaDB\n| Trigger\nMethod Patching",
+ "cellId": "57e2e347-4678-4493-9852-1fa503174421",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-587a664e-6e70-46a5-a72a-535c822c60c8-57e2e347-4678-4493-9852-1fa503174421": {
+ "path": "generated-edge-simstep-587a664e-6e70-46a5-a72a-535c822c60c8-57e2e347-4678-4493-9852-1fa503174421",
+ "fileName": "tracing.py",
+ "cellName": "Flow: ChromaDB | Trigger Method Patching",
+ "cellId": "57e2e347-4678-4493-9852-1fa503174421",
+ "visible": true,
+ "startLine": 90,
+ "endLine": 91,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simStepId": "587a664e-6e70-46a5-a72a-535c822c60c8"
+ }
+ ]
+ },
+ "ed034abc-c663-4f76-8a34-29a4e95e6e43": {
+ "path": "ed034abc-c663-4f76-8a34-29a4e95e6e43",
+ "cellName": "Flow: Pinecone\n| Dispatch\nto Pinecone\nInitializer",
+ "cellId": "ed034abc-c663-4f76-8a34-29a4e95e6e43",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "generated-edge-simstep-eb91046d-8909-490b-9a03-95871efa7930-ed034abc-c663-4f76-8a34-29a4e95e6e43": {
+ "path": "generated-edge-simstep-eb91046d-8909-490b-9a03-95871efa7930-ed034abc-c663-4f76-8a34-29a4e95e6e43",
+ "fileName": "tracing.py",
+ "cellName": "Flow: Pinecone | Dispatch to Pinecone Initializer",
+ "cellId": "ed034abc-c663-4f76-8a34-29a4e95e6e43",
+ "visible": true,
+ "startLine": 561,
+ "endLine": 563,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simStepId": "eb91046d-8909-490b-9a03-95871efa7930"
+ }
+ ]
+ },
+ "9f5708a4-0a48-4a39-81da-009e1a13d0d8": {
+ "path": "9f5708a4-0a48-4a39-81da-009e1a13d0d8",
+ "cellName": "Flow: Pinecone\n| Trigger\nMethod Patching",
+ "cellId": "9f5708a4-0a48-4a39-81da-009e1a13d0d8",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-980e2c9b-0f9d-4423-ac52-9af252123b77-9f5708a4-0a48-4a39-81da-009e1a13d0d8": {
+ "path": "generated-edge-simstep-980e2c9b-0f9d-4423-ac52-9af252123b77-9f5708a4-0a48-4a39-81da-009e1a13d0d8",
+ "fileName": "tracing.py",
+ "cellName": "Flow: Pinecone | Trigger Method Patching",
+ "cellId": "9f5708a4-0a48-4a39-81da-009e1a13d0d8",
+ "visible": true,
+ "startLine": 190,
+ "endLine": 191,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simStepId": "980e2c9b-0f9d-4423-ac52-9af252123b77"
+ }
+ ]
+ },
+ "97ab21f4-c4b6-4358-9988-4c1ffacf9dd0": {
+ "path": "97ab21f4-c4b6-4358-9988-4c1ffacf9dd0",
+ "cellName": "Flow: Qdrant\n| Dispatch\nto Qdrant\nInitializer",
+ "cellId": "97ab21f4-c4b6-4358-9988-4c1ffacf9dd0",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "generated-edge-simstep-31052157-848d-469d-bd41-553a23333359-97ab21f4-c4b6-4358-9988-4c1ffacf9dd0": {
+ "path": "generated-edge-simstep-31052157-848d-469d-bd41-553a23333359-97ab21f4-c4b6-4358-9988-4c1ffacf9dd0",
+ "fileName": "tracing.py",
+ "cellName": "Flow: Qdrant | Dispatch to Qdrant Initializer",
+ "cellId": "97ab21f4-c4b6-4358-9988-4c1ffacf9dd0",
+ "visible": true,
+ "startLine": 567,
+ "endLine": 569,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simStepId": "31052157-848d-469d-bd41-553a23333359"
+ }
+ ]
+ },
+ "d3c7c6c5-67ca-47d2-8b6c-49a1eb911b9b": {
+ "path": "d3c7c6c5-67ca-47d2-8b6c-49a1eb911b9b",
+ "cellName": "Flow: Qdrant\n| Trigger\nMethod Patching",
+ "cellId": "d3c7c6c5-67ca-47d2-8b6c-49a1eb911b9b",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-3a41dddf-57c8-4bda-bc71-cc23f06624a8-d3c7c6c5-67ca-47d2-8b6c-49a1eb911b9b": {
+ "path": "generated-edge-simstep-3a41dddf-57c8-4bda-bc71-cc23f06624a8-d3c7c6c5-67ca-47d2-8b6c-49a1eb911b9b",
+ "fileName": "tracing.py",
+ "cellName": "Flow: Qdrant | Trigger Method Patching",
+ "cellId": "d3c7c6c5-67ca-47d2-8b6c-49a1eb911b9b",
+ "visible": true,
+ "startLine": 47,
+ "endLine": 48,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simStepId": "3a41dddf-57c8-4bda-bc71-cc23f06624a8"
+ }
+ ]
+ },
+ "09ef5c7d-14e1-4729-8b92-80a782ba835c": {
+ "path": "09ef5c7d-14e1-4729-8b92-80a782ba835c",
+ "cellName": "sample-app",
+ "cellId": "09ef5c7d-14e1-4729-8b92-80a782ba835c",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "7e0df8f9-9881-4666-b79c-bd8c0572b439": {
+ "path": "7e0df8f9-9881-4666-b79c-bd8c0572b439",
+ "cellName": "sample_app",
+ "cellId": "7e0df8f9-9881-4666-b79c-bd8c0572b439",
+ "visible": true,
+ "parentCellId": "09ef5c7d-14e1-4729-8b92-80a782ba835c"
+ },
+ "77db505c-56f6-4a04-94b9-92da1f5ec73d": {
+ "path": "77db505c-56f6-4a04-94b9-92da1f5ec73d",
+ "cellName": "methods_decorated_app.py",
+ "cellId": "77db505c-56f6-4a04-94b9-92da1f5ec73d",
+ "visible": true,
+ "parentCellId": "7e0df8f9-9881-4666-b79c-bd8c0572b439"
+ },
+ "6dae2e41-2f66-4192-8b2d-554477c4ea43": {
+ "path": "6dae2e41-2f66-4192-8b2d-554477c4ea43",
+ "cellName": "decorators",
+ "cellId": "6dae2e41-2f66-4192-8b2d-554477c4ea43",
+ "visible": true,
+ "parentCellId": "a85538e0-fc7e-4231-914f-e84dcdb1e303"
+ },
+ "c8adf835-e657-4edd-8f70-609a65d5a69e": {
+ "path": "c8adf835-e657-4edd-8f70-609a65d5a69e",
+ "cellName": "__init__.py",
+ "cellId": "c8adf835-e657-4edd-8f70-609a65d5a69e",
+ "visible": true,
+ "parentCellId": "6dae2e41-2f66-4192-8b2d-554477c4ea43"
+ },
+ "32508e61-1a03-4370-b824-4fb4dceae19c": {
+ "path": "32508e61-1a03-4370-b824-4fb4dceae19c",
+ "cellName": "base.py",
+ "cellId": "32508e61-1a03-4370-b824-4fb4dceae19c",
+ "visible": true,
+ "parentCellId": "6dae2e41-2f66-4192-8b2d-554477c4ea43"
+ },
+ "5e546eac-c637-4f37-89e5-981306bdb767": {
+ "path": "5e546eac-c637-4f37-89e5-981306bdb767",
+ "cellName": "User Defines a Workflow - methods_decorated_app.py:L64-76",
+ "cellId": "5e546eac-c637-4f37-89e5-981306bdb767",
+ "visible": true,
+ "parentCellId": "77db505c-56f6-4a04-94b9-92da1f5ec73d"
+ },
+ "packages/sample-app/sample_app/methods_decorated_app.py-simstep-91f00c4f-6f41-454f-95ee-803a341fb7cd": {
+ "path": "packages/sample-app/sample_app/methods_decorated_app.py-simstep-91f00c4f-6f41-454f-95ee-803a341fb7cd",
+ "fileName": "methods_decorated_app.py",
+ "wiki": "A developer defines a high-level business logic function and decorates it with `@workflow`. This signals to OpenLLMetry that this function represents a workflow and should be traced as a primary span.",
+ "cellName": "User Defines a Workflow - methods_decorated_app.py:L64-76",
+ "cellId": "5e546eac-c637-4f37-89e5-981306bdb767",
+ "visible": true,
+ "startLine": 64,
+ "endLine": 76,
+ "parentCellId": "77db505c-56f6-4a04-94b9-92da1f5ec73d",
+ "parentPath": "packages/sample-app/sample_app/methods_decorated_app.py",
+ "simSteps": [
+ {
+ "simulationKey": "Defining and Tracing Custom Business Logic with Workflows and Tasks",
+ "simStepId": "91f00c4f-6f41-454f-95ee-803a341fb7cd"
+ }
+ ]
+ },
+ "198d2594-3157-438d-81c0-f87ae0e7568d": {
+ "path": "198d2594-3157-438d-81c0-f87ae0e7568d",
+ "cellName": "Core Decorator Logic Wraps the Function - base.py:L210-218",
+ "cellId": "198d2594-3157-438d-81c0-f87ae0e7568d",
+ "visible": true,
+ "parentCellId": "32508e61-1a03-4370-b824-4fb4dceae19c"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-42922f6c-d7cb-4d5b-a1c0-f5248a75358f": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-42922f6c-d7cb-4d5b-a1c0-f5248a75358f",
+ "fileName": "base.py",
+ "wiki": "The `entity_method` function receives the configuration and returns a `decorate` function. This function, in turn, returns a wrapper that will be executed instead of the original user function. This wrapper contains the logic to start and end an OpenTelemetry span.",
+ "cellName": "Core Decorator Logic Wraps the Function - base.py:L210-218",
+ "cellId": "198d2594-3157-438d-81c0-f87ae0e7568d",
+ "visible": true,
+ "startLine": 210,
+ "endLine": 218,
+ "parentCellId": "32508e61-1a03-4370-b824-4fb4dceae19c",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py",
+ "simSteps": [
+ {
+ "simulationKey": "Defining and Tracing Custom Business Logic with Workflows and Tasks",
+ "simStepId": "42922f6c-d7cb-4d5b-a1c0-f5248a75358f"
+ }
+ ]
+ },
+ "941efc45-2e3b-48e5-a132-a879959f4e86": {
+ "path": "941efc45-2e3b-48e5-a132-a879959f4e86",
+ "cellName": "Workflow Span Creation - base.py:L140-153",
+ "cellId": "941efc45-2e3b-48e5-a132-a879959f4e86",
+ "visible": true,
+ "parentCellId": "32508e61-1a03-4370-b824-4fb4dceae19c"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-4e2fbcfc-4005-4154-865d-2562818e1625": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-4e2fbcfc-4005-4154-865d-2562818e1625",
+ "fileName": "base.py",
+ "wiki": "The decorator's wrapper executes. It calls an internal `_setup_span` function which uses the OpenTelemetry tracer to start a new span. The span is named `.` (e.g., 'pirate_joke_generator.workflow') and an attribute `traceloop.span.kind` is set to `WORKFLOW`. This new span is attached to the current execution context.",
+ "cellName": "Workflow Span Creation - base.py:L140-153",
+ "cellId": "941efc45-2e3b-48e5-a132-a879959f4e86",
+ "visible": true,
+ "startLine": 140,
+ "endLine": 153,
+ "parentCellId": "32508e61-1a03-4370-b824-4fb4dceae19c",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py",
+ "simSteps": [
+ {
+ "simulationKey": "Defining and Tracing Custom Business Logic with Workflows and Tasks",
+ "simStepId": "4e2fbcfc-4005-4154-865d-2562818e1625"
+ }
+ ]
+ },
+ "0cbbb5c8-8182-4975-a0ee-0da88126d7c5": {
+ "path": "0cbbb5c8-8182-4975-a0ee-0da88126d7c5",
+ "cellName": "Task Span Creation - __init__.py:L16-24",
+ "cellId": "0cbbb5c8-8182-4975-a0ee-0da88126d7c5",
+ "visible": true,
+ "parentCellId": "c8adf835-e657-4edd-8f70-609a65d5a69e"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/decorators/__init__.py-simstep-f658c721-fee2-4863-b972-0d7ab32a1255": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/decorators/__init__.py-simstep-f658c721-fee2-4863-b972-0d7ab32a1255",
+ "fileName": "__init__.py",
+ "wiki": "Similarly to the workflow, the `@task` decorator's wrapper executes. It creates a new span named 'joke_creation.task' with `traceloop.span.kind` set to `TASK`. Due to OpenTelemetry's context propagation, this new span is automatically created as a child of the 'pirate_joke_generator.workflow' span, forming a hierarchy.",
+ "cellName": "Task Span Creation - __init__.py:L16-24",
+ "cellId": "0cbbb5c8-8182-4975-a0ee-0da88126d7c5",
+ "visible": true,
+ "startLine": 16,
+ "endLine": 24,
+ "parentCellId": "c8adf835-e657-4edd-8f70-609a65d5a69e",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/decorators/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Defining and Tracing Custom Business Logic with Workflows and Tasks",
+ "simStepId": "f658c721-fee2-4863-b972-0d7ab32a1255"
+ }
+ ]
+ },
+ "46c8bdab-b559-4c6d-833d-c36e219b772c": {
+ "path": "46c8bdab-b559-4c6d-833d-c36e219b772c",
+ "cellName": "Task Span Finalization - base.py:L252-256",
+ "cellId": "46c8bdab-b559-4c6d-833d-c36e219b772c",
+ "visible": true,
+ "parentCellId": "32508e61-1a03-4370-b824-4fb4dceae19c"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-d9b6467b-971a-4f1f-bdb6-cfb504802a00": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-d9b6467b-971a-4f1f-bdb6-cfb504802a00",
+ "fileName": "base.py",
+ "wiki": "The `@task` decorator's wrapper intercepts the return value from `create_joke`. It serializes this value and adds it as an attribute (`traceloop.entity.output`) to the task span. Finally, it sets the span's status to OK and ends the span.",
+ "cellName": "Task Span Finalization - base.py:L252-256",
+ "cellId": "46c8bdab-b559-4c6d-833d-c36e219b772c",
+ "visible": true,
+ "startLine": 252,
+ "endLine": 256,
+ "parentCellId": "32508e61-1a03-4370-b824-4fb4dceae19c",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py",
+ "simSteps": [
+ {
+ "simulationKey": "Defining and Tracing Custom Business Logic with Workflows and Tasks",
+ "simStepId": "d9b6467b-971a-4f1f-bdb6-cfb504802a00"
+ }
+ ]
+ },
+ "9a29b3e4-fbf6-4dc8-80f4-c09bb45d2426": {
+ "path": "9a29b3e4-fbf6-4dc8-80f4-c09bb45d2426",
+ "cellName": "Workflow Span Finalization - base.py:L252-256",
+ "cellId": "9a29b3e4-fbf6-4dc8-80f4-c09bb45d2426",
+ "visible": true,
+ "parentCellId": "32508e61-1a03-4370-b824-4fb4dceae19c"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-8f425a02-9bcc-4dba-b5bb-493eb3a4c2b7": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-8f425a02-9bcc-4dba-b5bb-493eb3a4c2b7",
+ "fileName": "base.py",
+ "wiki": "After all tasks within the workflow have completed, the `joke_workflow` function finishes. Its decorator wrapper captures the final result (if any), records it on the workflow span, and ends the span, completing the trace for this business logic execution.",
+ "cellName": "Workflow Span Finalization - base.py:L252-256",
+ "cellId": "9a29b3e4-fbf6-4dc8-80f4-c09bb45d2426",
+ "visible": true,
+ "startLine": 252,
+ "endLine": 256,
+ "parentCellId": "32508e61-1a03-4370-b824-4fb4dceae19c",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py",
+ "simSteps": [
+ {
+ "simulationKey": "Defining and Tracing Custom Business Logic with Workflows and Tasks",
+ "simStepId": "8f425a02-9bcc-4dba-b5bb-493eb3a4c2b7"
+ }
+ ]
+ },
+ "5df32f45-a946-4839-81f6-69a85eeb4d30": {
+ "path": "5df32f45-a946-4839-81f6-69a85eeb4d30",
+ "cellName": "Decorator Initialization",
+ "cellId": "5df32f45-a946-4839-81f6-69a85eeb4d30",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-daa5747e-99f9-43b9-81dd-4179be5b41a6-5df32f45-a946-4839-81f6-69a85eeb4d30": {
+ "path": "generated-edge-simstep-daa5747e-99f9-43b9-81dd-4179be5b41a6-5df32f45-a946-4839-81f6-69a85eeb4d30",
+ "fileName": "methods_decorated_app.py",
+ "cellName": "Decorator Initialization",
+ "cellId": "5df32f45-a946-4839-81f6-69a85eeb4d30",
+ "visible": true,
+ "startLine": 33,
+ "endLine": 41,
+ "parentPath": "packages/sample-app/sample_app/methods_decorated_app.py",
+ "simSteps": [
+ {
+ "simulationKey": "Defining and Tracing Custom Business Logic with Workflows and Tasks",
+ "simStepId": "daa5747e-99f9-43b9-81dd-4179be5b41a6"
+ }
+ ]
+ },
+ "ff52e952-7593-4280-ae4e-6714a9bb4fc6": {
+ "path": "ff52e952-7593-4280-ae4e-6714a9bb4fc6",
+ "cellName": "Workflow Invocation",
+ "cellId": "ff52e952-7593-4280-ae4e-6714a9bb4fc6",
+ "visible": true,
+ "parentCellId": "32508e61-1a03-4370-b824-4fb4dceae19c"
+ },
+ "generated-edge-simstep-066a0d0d-a4ee-4023-b3d7-b756485282f4-ff52e952-7593-4280-ae4e-6714a9bb4fc6": {
+ "path": "generated-edge-simstep-066a0d0d-a4ee-4023-b3d7-b756485282f4-ff52e952-7593-4280-ae4e-6714a9bb4fc6",
+ "fileName": "base.py",
+ "cellName": "Workflow Invocation",
+ "cellId": "ff52e952-7593-4280-ae4e-6714a9bb4fc6",
+ "visible": true,
+ "startLine": 64,
+ "endLine": 64,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py",
+ "simSteps": [
+ {
+ "simulationKey": "Defining and Tracing Custom Business Logic with Workflows and Tasks",
+ "simStepId": "066a0d0d-a4ee-4023-b3d7-b756485282f4"
+ }
+ ]
+ },
+ "9439737f-d1d0-49fa-a5d3-34b8dacf3284": {
+ "path": "9439737f-d1d0-49fa-a5d3-34b8dacf3284",
+ "cellName": "Invoking a\nTask",
+ "cellId": "9439737f-d1d0-49fa-a5d3-34b8dacf3284",
+ "visible": true,
+ "parentCellId": "6dae2e41-2f66-4192-8b2d-554477c4ea43"
+ },
+ "generated-edge-simstep-fb2ae73f-d115-4252-8df3-2c11d9b69ecb-9439737f-d1d0-49fa-a5d3-34b8dacf3284": {
+ "path": "generated-edge-simstep-fb2ae73f-d115-4252-8df3-2c11d9b69ecb-9439737f-d1d0-49fa-a5d3-34b8dacf3284",
+ "fileName": "base.py",
+ "cellName": "Invoking a Task",
+ "cellId": "9439737f-d1d0-49fa-a5d3-34b8dacf3284",
+ "visible": true,
+ "startLine": 69,
+ "endLine": 69,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py",
+ "simSteps": [
+ {
+ "simulationKey": "Defining and Tracing Custom Business Logic with Workflows and Tasks",
+ "simStepId": "fb2ae73f-d115-4252-8df3-2c11d9b69ecb"
+ }
+ ]
+ },
+ "f03699bf-272a-4524-a87d-7b26e8c3ce2a": {
+ "path": "f03699bf-272a-4524-a87d-7b26e8c3ce2a",
+ "cellName": "Task Execution\nand Return",
+ "cellId": "f03699bf-272a-4524-a87d-7b26e8c3ce2a",
+ "visible": true,
+ "parentCellId": "6dae2e41-2f66-4192-8b2d-554477c4ea43"
+ },
+ "generated-edge-simstep-e10ed652-f4d2-4a7a-bc04-f3eff1efe652-f03699bf-272a-4524-a87d-7b26e8c3ce2a": {
+ "path": "generated-edge-simstep-e10ed652-f4d2-4a7a-bc04-f3eff1efe652-f03699bf-272a-4524-a87d-7b26e8c3ce2a",
+ "fileName": "__init__.py",
+ "cellName": "Task Execution and Return",
+ "cellId": "f03699bf-272a-4524-a87d-7b26e8c3ce2a",
+ "visible": true,
+ "startLine": 13,
+ "endLine": 22,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/decorators/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Defining and Tracing Custom Business Logic with Workflows and Tasks",
+ "simStepId": "e10ed652-f4d2-4a7a-bc04-f3eff1efe652"
+ }
+ ]
+ },
+ "a2a3ed45-ac4a-46b4-854b-91f91a05c588": {
+ "path": "a2a3ed45-ac4a-46b4-854b-91f91a05c588",
+ "cellName": "Workflow Continues\nExecution",
+ "cellId": "a2a3ed45-ac4a-46b4-854b-91f91a05c588",
+ "visible": true,
+ "parentCellId": "32508e61-1a03-4370-b824-4fb4dceae19c"
+ },
+ "generated-edge-simstep-628e3f07-589b-4da2-ac5d-de9aeb994c03-a2a3ed45-ac4a-46b4-854b-91f91a05c588": {
+ "path": "generated-edge-simstep-628e3f07-589b-4da2-ac5d-de9aeb994c03-a2a3ed45-ac4a-46b4-854b-91f91a05c588",
+ "fileName": "base.py",
+ "cellName": "Workflow Continues Execution",
+ "cellId": "a2a3ed45-ac4a-46b4-854b-91f91a05c588",
+ "visible": true,
+ "startLine": 70,
+ "endLine": 70,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py",
+ "simSteps": [
+ {
+ "simulationKey": "Defining and Tracing Custom Business Logic with Workflows and Tasks",
+ "simStepId": "628e3f07-589b-4da2-ac5d-de9aeb994c03"
+ }
+ ]
+ },
+ "9418a7de-e3b5-41f4-a9b4-a957cf7f2e24": {
+ "path": "9418a7de-e3b5-41f4-a9b4-a957cf7f2e24",
+ "cellName": "streaming.py",
+ "cellId": "9418a7de-e3b5-41f4-a9b4-a957cf7f2e24",
+ "visible": true,
+ "parentCellId": "0d7cfaeb-2446-444d-b6c4-067b346e6c7f"
+ },
+ "99e901b3-bd6c-4cc4-a911-f3da77b4cbd2": {
+ "path": "99e901b3-bd6c-4cc4-a911-f3da77b4cbd2",
+ "cellName": "shared",
+ "cellId": "99e901b3-bd6c-4cc4-a911-f3da77b4cbd2",
+ "visible": true,
+ "parentCellId": "1cdd7ac2-6148-4861-8505-26c0ba9db123"
+ },
+ "e850f5ad-f9cd-4d3d-8894-d24ca38dce6d": {
+ "path": "e850f5ad-f9cd-4d3d-8894-d24ca38dce6d",
+ "cellName": "chat_wrappers.py",
+ "cellId": "e850f5ad-f9cd-4d3d-8894-d24ca38dce6d",
+ "visible": true,
+ "parentCellId": "99e901b3-bd6c-4cc4-a911-f3da77b4cbd2"
+ },
+ "ed582fad-0f54-4d8c-859f-1914dc72bc6b": {
+ "path": "ed582fad-0f54-4d8c-859f-1914dc72bc6b",
+ "cellName": "Intercept LLM Call and Create Span - __init__.py:L527-556",
+ "cellId": "ed582fad-0f54-4d8c-859f-1914dc72bc6b",
+ "visible": true,
+ "parentCellId": "5dbda6a0-dc8e-4379-b875-b67ab081bb6a"
+ },
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-68a032ec-1c86-4f00-9bf4-b2a18e092429": {
+ "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-68a032ec-1c86-4f00-9bf4-b2a18e092429",
+ "fileName": "__init__.py",
+ "wiki": "The user's code invokes a method on an LLM client with streaming enabled (e.g., `anthropic.messages.create(..., stream=True)`). The OpenLLMetry instrumentation intercepts this call before it reaches the actual SDK method. A new OpenTelemetry span is created for the operation, and initial attributes like the model name and input messages are set on it.",
+ "cellName": "Intercept LLM Call and Create Span - __init__.py:L527-556",
+ "cellId": "ed582fad-0f54-4d8c-859f-1914dc72bc6b",
+ "visible": true,
+ "startLine": 527,
+ "endLine": 556,
+ "parentCellId": "5dbda6a0-dc8e-4379-b875-b67ab081bb6a",
+ "parentPath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing Streaming LLM Responses",
+ "simStepId": "68a032ec-1c86-4f00-9bf4-b2a18e092429"
+ }
+ ]
+ },
+ "96d4b52f-0077-4047-b6e9-d1494f44b558": {
+ "path": "96d4b52f-0077-4047-b6e9-d1494f44b558",
+ "cellName": "Detect Streaming Response - __init__.py:L157-158",
+ "cellId": "96d4b52f-0077-4047-b6e9-d1494f44b558",
+ "visible": true,
+ "parentCellId": "5dbda6a0-dc8e-4379-b875-b67ab081bb6a"
+ },
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-b97542d0-b032-42e6-be56-4e1f4ee65d2f": {
+ "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-b97542d0-b032-42e6-be56-4e1f4ee65d2f",
+ "fileName": "__init__.py",
+ "wiki": "The LLM SDK returns a response object. The instrumentation code checks the type of this object to determine if it's a streaming response. A helper function like `is_streaming_response` is used for this check, which returns `true` if the object is a stream generator. This pattern is common across various instrumentations like OpenAI, Groq, and VertexAI.",
+ "cellName": "Detect Streaming Response - __init__.py:L157-158",
+ "cellId": "96d4b52f-0077-4047-b6e9-d1494f44b558",
+ "visible": true,
+ "startLine": 157,
+ "endLine": 158,
+ "parentCellId": "5dbda6a0-dc8e-4379-b875-b67ab081bb6a",
+ "parentPath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing Streaming LLM Responses",
+ "simStepId": "b97542d0-b032-42e6-be56-4e1f4ee65d2f"
+ }
+ ]
+ },
+ "e0587dd7-dcef-40ae-af5c-712a33e14316": {
+ "path": "e0587dd7-dcef-40ae-af5c-712a33e14316",
+ "cellName": "Instantiate and Return Stream Wrapper - streaming.py:L141-155",
+ "cellId": "e0587dd7-dcef-40ae-af5c-712a33e14316",
+ "visible": true,
+ "parentCellId": "9418a7de-e3b5-41f4-a9b4-a957cf7f2e24"
+ },
+ "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py-simstep-2ee1ef8b-02a3-4096-ab3d-879112cdea20": {
+ "path": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py-simstep-2ee1ef8b-02a3-4096-ab3d-879112cdea20",
+ "fileName": "streaming.py",
+ "wiki": "The custom wrapper class (e.g., `AnthropicStream`) is instantiated. Its constructor stores the OpenTelemetry span and the original stream object internally. This new wrapper object, which mimics the behavior of the original stream, is then returned to the user's application code.",
+ "cellName": "Instantiate and Return Stream Wrapper - streaming.py:L141-155",
+ "cellId": "e0587dd7-dcef-40ae-af5c-712a33e14316",
+ "visible": true,
+ "startLine": 141,
+ "endLine": 155,
+ "parentCellId": "9418a7de-e3b5-41f4-a9b4-a957cf7f2e24",
+ "parentPath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing Streaming LLM Responses",
+ "simStepId": "2ee1ef8b-02a3-4096-ab3d-879112cdea20"
+ }
+ ]
+ },
+ "e4fb2604-b3ae-4876-b774-aed648b223b1": {
+ "path": "e4fb2604-b3ae-4876-b774-aed648b223b1",
+ "cellName": "Aggregate Data and Finalize Span on Completion - chat_wrappers.py:L786-802",
+ "cellId": "e4fb2604-b3ae-4876-b774-aed648b223b1",
+ "visible": true,
+ "parentCellId": "e850f5ad-f9cd-4d3d-8894-d24ca38dce6d"
+ },
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py-simstep-25ad4da4-fa4b-40d9-a1bd-6ebac6aeffb4": {
+ "path": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py-simstep-25ad4da4-fa4b-40d9-a1bd-6ebac6aeffb4",
+ "fileName": "chat_wrappers.py",
+ "wiki": "While chunks are being yielded, the wrapper aggregates their content. Once the stream is fully consumed (or closed), a cleanup method is triggered. This method takes the complete, aggregated response, calculates final metrics like token usage, sets them as attributes on the stored span, sets the span's status to OK, and finally calls `span.end()` to close it. This ensures a single, complete span represents the entire streaming operation.",
+ "cellName": "Aggregate Data and Finalize Span on Completion - chat_wrappers.py:L786-802",
+ "cellId": "e4fb2604-b3ae-4876-b774-aed648b223b1",
+ "visible": true,
+ "startLine": 786,
+ "endLine": 802,
+ "parentCellId": "e850f5ad-f9cd-4d3d-8894-d24ca38dce6d",
+ "parentPath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing Streaming LLM Responses",
+ "simStepId": "25ad4da4-fa4b-40d9-a1bd-6ebac6aeffb4"
+ }
+ ]
+ },
+ "804b50f1-abc1-47ba-9e7e-de4510d5d478": {
+ "path": "804b50f1-abc1-47ba-9e7e-de4510d5d478",
+ "cellName": "Forward Request\nto LLM\nSDK",
+ "cellId": "804b50f1-abc1-47ba-9e7e-de4510d5d478",
+ "visible": true,
+ "parentCellId": "5dbda6a0-dc8e-4379-b875-b67ab081bb6a"
+ },
+ "generated-edge-simstep-6c0eaedf-551f-4015-9ed8-f09d391be1e7-804b50f1-abc1-47ba-9e7e-de4510d5d478": {
+ "path": "generated-edge-simstep-6c0eaedf-551f-4015-9ed8-f09d391be1e7-804b50f1-abc1-47ba-9e7e-de4510d5d478",
+ "fileName": "__init__.py",
+ "cellName": "Forward Request to LLM SDK",
+ "cellId": "804b50f1-abc1-47ba-9e7e-de4510d5d478",
+ "visible": true,
+ "startLine": 558,
+ "endLine": 558,
+ "parentPath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing Streaming LLM Responses",
+ "simStepId": "6c0eaedf-551f-4015-9ed8-f09d391be1e7"
+ }
+ ]
+ },
+ "bfa36794-a43a-4ff6-8dd9-ba168caf7e7d": {
+ "path": "bfa36794-a43a-4ff6-8dd9-ba168caf7e7d",
+ "cellName": "Pass Span\nand Stream\nto Wrapper",
+ "cellId": "bfa36794-a43a-4ff6-8dd9-ba168caf7e7d",
+ "visible": true,
+ "parentCellId": "0d7cfaeb-2446-444d-b6c4-067b346e6c7f"
+ },
+ "generated-edge-simstep-12ee6a36-97c5-4223-bb69-fcc8b451cd4b-bfa36794-a43a-4ff6-8dd9-ba168caf7e7d": {
+ "path": "generated-edge-simstep-12ee6a36-97c5-4223-bb69-fcc8b451cd4b-bfa36794-a43a-4ff6-8dd9-ba168caf7e7d",
+ "fileName": "__init__.py",
+ "cellName": "Pass Span and Stream to Wrapper",
+ "cellId": "bfa36794-a43a-4ff6-8dd9-ba168caf7e7d",
+ "visible": true,
+ "startLine": 562,
+ "endLine": 568,
+ "parentPath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing Streaming LLM Responses",
+ "simStepId": "12ee6a36-97c5-4223-bb69-fcc8b451cd4b"
+ }
+ ]
+ },
+ "df746b40-8798-4885-b552-1e0a06ade0ba": {
+ "path": "df746b40-8798-4885-b552-1e0a06ade0ba",
+ "cellName": "User Consumes\nStream Chunks",
+ "cellId": "df746b40-8798-4885-b552-1e0a06ade0ba",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-a1cce958-c736-4065-bafc-c8f946224971-df746b40-8798-4885-b552-1e0a06ade0ba": {
+ "path": "generated-edge-simstep-a1cce958-c736-4065-bafc-c8f946224971-df746b40-8798-4885-b552-1e0a06ade0ba",
+ "fileName": "streaming.py",
+ "cellName": "User Consumes Stream Chunks",
+ "cellId": "df746b40-8798-4885-b552-1e0a06ade0ba",
+ "visible": true,
+ "startLine": 194,
+ "endLine": 212,
+ "parentPath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing Streaming LLM Responses",
+ "simStepId": "a1cce958-c736-4065-bafc-c8f946224971"
+ }
+ ]
+ },
+ "f9ea66b0-6192-4912-bdef-3147a35f7995": {
+ "path": "f9ea66b0-6192-4912-bdef-3147a35f7995",
+ "cellName": "sample-app",
+ "cellId": "f9ea66b0-6192-4912-bdef-3147a35f7995",
+ "visible": true,
+ "children": [
+ "sample-app/langchain_agent.py"
+ ]
+ },
+ "sample-app": {
+ "path": "sample-app",
+ "fileName": "sample-app",
+ "cellName": "sample-app",
+ "cellId": "f9ea66b0-6192-4912-bdef-3147a35f7995",
+ "visible": true
+ },
+ "2eb59ddf-70b4-46de-85db-5d5dd8daa01d": {
+ "path": "2eb59ddf-70b4-46de-85db-5d5dd8daa01d",
+ "cellName": "langchain_agent.py",
+ "cellId": "2eb59ddf-70b4-46de-85db-5d5dd8daa01d",
+ "visible": true,
+ "parentCellId": "f9ea66b0-6192-4912-bdef-3147a35f7995"
+ },
+ "sample-app/langchain_agent.py": {
+ "path": "sample-app/langchain_agent.py",
+ "fileName": "langchain_agent.py",
+ "cellName": "langchain_agent.py",
+ "cellId": "2eb59ddf-70b4-46de-85db-5d5dd8daa01d",
+ "visible": true,
+ "parentCellId": "f9ea66b0-6192-4912-bdef-3147a35f7995",
+ "children": [
+ "sample-app/langchain_agent.py-simstep-22cf8357-7361-49db-9e5d-47fd467a7b9c"
+ ]
+ },
+ "a7fafc87-8af0-4599-80bb-8db890b1a6bd": {
+ "path": "a7fafc87-8af0-4599-80bb-8db890b1a6bd",
+ "cellName": "span_utils.py",
+ "cellId": "a7fafc87-8af0-4599-80bb-8db890b1a6bd",
+ "visible": true,
+ "parentCellId": "9e9f8d3c-b3a3-41cf-b0cc-6d33f59e4d09"
+ },
+ "85945ed1-ff45-4435-b33c-989e99134357": {
+ "path": "85945ed1-ff45-4435-b33c-989e99134357",
+ "cellName": "callback_handler.py",
+ "cellId": "85945ed1-ff45-4435-b33c-989e99134357",
+ "visible": true,
+ "parentCellId": "9e9f8d3c-b3a3-41cf-b0cc-6d33f59e4d09"
+ },
+ "9b311362-1d19-41bd-9bb3-49bccf345928": {
+ "path": "9b311362-1d19-41bd-9bb3-49bccf345928",
+ "cellName": "Agent Receives Prompt and Tools - span_utils.py:L160-192",
+ "cellId": "9b311362-1d19-41bd-9bb3-49bccf345928",
+ "visible": true,
+ "parentCellId": "a7fafc87-8af0-4599-80bb-8db890b1a6bd"
+ },
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-bb6744e0-d46b-4138-ab2f-c9602d4f89a7": {
+ "path": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-bb6744e0-d46b-4138-ab2f-c9602d4f89a7",
+ "fileName": "span_utils.py",
+ "wiki": "A LangChain agent is invoked with a user prompt and a set of available tools. The instrumentation formats this initial request, capturing the user's message and the definitions of the tools provided to the agent.",
+ "cellName": "Agent Receives Prompt and Tools - span_utils.py:L160-192",
+ "cellId": "9b311362-1d19-41bd-9bb3-49bccf345928",
+ "visible": true,
+ "startLine": 160,
+ "endLine": 192,
+ "parentCellId": "a7fafc87-8af0-4599-80bb-8db890b1a6bd",
+ "parentPath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing LLM Function and Tool Calls",
+ "simStepId": "bb6744e0-d46b-4138-ab2f-c9602d4f89a7"
+ }
+ ]
+ },
+ "ff7568ec-a2f0-4e9d-9a1f-8c438a172017": {
+ "path": "ff7568ec-a2f0-4e9d-9a1f-8c438a172017",
+ "cellName": "LLM Responds with Tool Call Request - callback_handler.py:L236",
+ "cellId": "ff7568ec-a2f0-4e9d-9a1f-8c438a172017",
+ "visible": true,
+ "parentCellId": "85945ed1-ff45-4435-b33c-989e99134357"
+ },
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py-simstep-3d50ce44-7c00-45be-8de9-11602f582651": {
+ "path": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py-simstep-3d50ce44-7c00-45be-8de9-11602f582651",
+ "fileName": "callback_handler.py",
+ "wiki": "The LLM processes the input and determines that it needs to use a tool to answer the user's question. Instead of a text answer, it returns a response containing a `tool_calls` object, instructing the application to call the `get_current_weather` function.",
+ "cellName": "LLM Responds with Tool Call Request - callback_handler.py:L236",
+ "cellId": "ff7568ec-a2f0-4e9d-9a1f-8c438a172017",
+ "visible": true,
+ "startLine": 236,
+ "endLine": 236,
+ "parentCellId": "85945ed1-ff45-4435-b33c-989e99134357",
+ "parentPath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing LLM Function and Tool Calls",
+ "simStepId": "3d50ce44-7c00-45be-8de9-11602f582651"
+ }
+ ]
+ },
+ "de84c208-df89-4986-a91e-2d053c818e39": {
+ "path": "de84c208-df89-4986-a91e-2d053c818e39",
+ "cellName": "Parse Tool Calls from LLM Response - span_utils.py:L265-269",
+ "cellId": "de84c208-df89-4986-a91e-2d053c818e39",
+ "visible": true,
+ "parentCellId": "a7fafc87-8af0-4599-80bb-8db890b1a6bd"
+ },
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-e4145c42-50e7-495e-8fae-5c95b565c632": {
+ "path": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-e4145c42-50e7-495e-8fae-5c95b565c632",
+ "fileName": "span_utils.py",
+ "wiki": "The instrumentation's utility function inspects the AIMessage from the LLM response. It detects the presence of `tool_calls` (or the legacy `function_call`) and extracts the details of each call to be recorded.",
+ "cellName": "Parse Tool Calls from LLM Response - span_utils.py:L265-269",
+ "cellId": "de84c208-df89-4986-a91e-2d053c818e39",
+ "visible": true,
+ "startLine": 265,
+ "endLine": 269,
+ "parentCellId": "a7fafc87-8af0-4599-80bb-8db890b1a6bd",
+ "parentPath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing LLM Function and Tool Calls",
+ "simStepId": "e4145c42-50e7-495e-8fae-5c95b565c632"
+ }
+ ]
+ },
+ "dcd5fcac-2ea9-481d-8997-3cbd9c8eacf8": {
+ "path": "dcd5fcac-2ea9-481d-8997-3cbd9c8eacf8",
+ "cellName": "Application Executes the Tool - langchain_agent.py:L16-20",
+ "cellId": "dcd5fcac-2ea9-481d-8997-3cbd9c8eacf8",
+ "visible": true,
+ "parentCellId": "2eb59ddf-70b4-46de-85db-5d5dd8daa01d"
+ },
+ "sample-app/langchain_agent.py-simstep-22cf8357-7361-49db-9e5d-47fd467a7b9c": {
+ "path": "sample-app/langchain_agent.py-simstep-22cf8357-7361-49db-9e5d-47fd467a7b9c",
+ "fileName": "langchain_agent.py",
+ "wiki": "The LangChain agent receives the tool call instruction from the LLM, finds the corresponding `get_current_weather` function in the application code, and executes it with the arguments `{\"location\": \"San Francisco\"}`.",
+ "cellName": "Application Executes the Tool - langchain_agent.py:L16-20",
+ "cellId": "dcd5fcac-2ea9-481d-8997-3cbd9c8eacf8",
+ "visible": true,
+ "startLine": 16,
+ "endLine": 20,
+ "parentCellId": "2eb59ddf-70b4-46de-85db-5d5dd8daa01d",
+ "parentPath": "sample-app/langchain_agent.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing LLM Function and Tool Calls",
+ "simStepId": "22cf8357-7361-49db-9e5d-47fd467a7b9c"
+ }
+ ]
+ },
+ "8a325ec3-5f65-410b-b478-bdd0ffbfe205": {
+ "path": "8a325ec3-5f65-410b-b478-bdd0ffbfe205",
+ "cellName": "Instrument History with Tool Message for Next LLM Call - span_utils.py:L173-182",
+ "cellId": "8a325ec3-5f65-410b-b478-bdd0ffbfe205",
+ "visible": true,
+ "parentCellId": "a7fafc87-8af0-4599-80bb-8db890b1a6bd"
+ },
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-284f0da4-bbcf-488d-998e-f8fc1cd9f758": {
+ "path": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-284f0da4-bbcf-488d-998e-f8fc1cd9f758",
+ "fileName": "span_utils.py",
+ "wiki": "Before sending the updated history back to the LLM, the `set_chat_request` function processes the list of messages again. It identifies the `AIMessage` with the original `tool_calls` and the new `ToolMessage` with the result, creating the correct span attributes for the prompt to provide a complete trace of the tool-use loop.",
+ "cellName": "Instrument History with Tool Message for Next LLM Call - span_utils.py:L173-182",
+ "cellId": "8a325ec3-5f65-410b-b478-bdd0ffbfe205",
+ "visible": true,
+ "startLine": 173,
+ "endLine": 182,
+ "parentCellId": "a7fafc87-8af0-4599-80bb-8db890b1a6bd",
+ "parentPath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing LLM Function and Tool Calls",
+ "simStepId": "284f0da4-bbcf-488d-998e-f8fc1cd9f758"
+ }
+ ]
+ },
+ "d223f07b-2098-44ff-ac75-1d6a383785ee": {
+ "path": "d223f07b-2098-44ff-ac75-1d6a383785ee",
+ "cellName": "LLM Generates Final Text Response - span_utils.py:L278-284",
+ "cellId": "d223f07b-2098-44ff-ac75-1d6a383785ee",
+ "visible": true,
+ "parentCellId": "a7fafc87-8af0-4599-80bb-8db890b1a6bd"
+ },
+ "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-53b799ca-6785-424f-8f89-a416f0c9bdac": {
+ "path": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-53b799ca-6785-424f-8f89-a416f0c9bdac",
+ "fileName": "span_utils.py",
+ "wiki": "Using the context provided by the tool's output, the LLM generates a final, human-readable answer and returns it as a standard message with text content.",
+ "cellName": "LLM Generates Final Text Response - span_utils.py:L278-284",
+ "cellId": "d223f07b-2098-44ff-ac75-1d6a383785ee",
+ "visible": true,
+ "startLine": 278,
+ "endLine": 284,
+ "parentCellId": "a7fafc87-8af0-4599-80bb-8db890b1a6bd",
+ "parentPath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing LLM Function and Tool Calls",
+ "simStepId": "53b799ca-6785-424f-8f89-a416f0c9bdac"
+ }
+ ]
+ },
+ "c2731bb3-efc7-44b3-8639-8d1730be0139": {
+ "path": "c2731bb3-efc7-44b3-8639-8d1730be0139",
+ "cellName": "Request Sent\nto LLM",
+ "cellId": "c2731bb3-efc7-44b3-8639-8d1730be0139",
+ "visible": true,
+ "parentCellId": "9e9f8d3c-b3a3-41cf-b0cc-6d33f59e4d09"
+ },
+ "generated-edge-simstep-59cd0722-f64c-4c95-a3ea-107be06a378d-c2731bb3-efc7-44b3-8639-8d1730be0139": {
+ "path": "generated-edge-simstep-59cd0722-f64c-4c95-a3ea-107be06a378d-c2731bb3-efc7-44b3-8639-8d1730be0139",
+ "fileName": "span_utils.py",
+ "cellName": "Request Sent to LLM",
+ "cellId": "c2731bb3-efc7-44b3-8639-8d1730be0139",
+ "visible": true,
+ "startLine": 45,
+ "endLine": 51,
+ "parentPath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing LLM Function and Tool Calls",
+ "simStepId": "59cd0722-f64c-4c95-a3ea-107be06a378d"
+ }
+ ]
+ },
+ "df0441d8-117c-4299-95b6-a2eb40de384e": {
+ "path": "df0441d8-117c-4299-95b6-a2eb40de384e",
+ "cellName": "LLM Generation\nPassed to\nInstrumentation",
+ "cellId": "df0441d8-117c-4299-95b6-a2eb40de384e",
+ "visible": true,
+ "parentCellId": "9e9f8d3c-b3a3-41cf-b0cc-6d33f59e4d09"
+ },
+ "generated-edge-simstep-8aa1d3e2-a086-4cae-8197-5a4c2addb06f-df0441d8-117c-4299-95b6-a2eb40de384e": {
+ "path": "generated-edge-simstep-8aa1d3e2-a086-4cae-8197-5a4c2addb06f-df0441d8-117c-4299-95b6-a2eb40de384e",
+ "fileName": "callback_handler.py",
+ "cellName": "LLM Generation Passed to Instrumentation",
+ "cellId": "df0441d8-117c-4299-95b6-a2eb40de384e",
+ "visible": true,
+ "startLine": 244,
+ "endLine": 246,
+ "parentPath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing LLM Function and Tool Calls",
+ "simStepId": "8aa1d3e2-a086-4cae-8197-5a4c2addb06f"
+ }
+ ]
+ },
+ "34912404-d21b-4074-bd1e-68fa70fd1691": {
+ "path": "34912404-d21b-4074-bd1e-68fa70fd1691",
+ "cellName": "Add Tool\nCall Data\nto Span",
+ "cellId": "34912404-d21b-4074-bd1e-68fa70fd1691",
+ "visible": true
+ },
+ "generated-edge-simstep-26634ad2-fb63-48f3-949e-132346dc3933-34912404-d21b-4074-bd1e-68fa70fd1691": {
+ "path": "generated-edge-simstep-26634ad2-fb63-48f3-949e-132346dc3933-34912404-d21b-4074-bd1e-68fa70fd1691",
+ "fileName": "span_utils.py",
+ "cellName": "Add Tool Call Data to Span",
+ "cellId": "34912404-d21b-4074-bd1e-68fa70fd1691",
+ "visible": true,
+ "startLine": 393,
+ "endLine": 410,
+ "parentPath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing LLM Function and Tool Calls",
+ "simStepId": "26634ad2-fb63-48f3-949e-132346dc3933"
+ }
+ ]
+ },
+ "1037d71c-c71e-4e51-a4f2-91b5b7b0a3ec": {
+ "path": "1037d71c-c71e-4e51-a4f2-91b5b7b0a3ec",
+ "cellName": "Tool Output\nAdded to\nMessage History",
+ "cellId": "1037d71c-c71e-4e51-a4f2-91b5b7b0a3ec",
+ "visible": true
+ },
+ "generated-edge-simstep-751442bb-8928-4d1e-aef4-4ea7b13abbf5-1037d71c-c71e-4e51-a4f2-91b5b7b0a3ec": {
+ "path": "generated-edge-simstep-751442bb-8928-4d1e-aef4-4ea7b13abbf5-1037d71c-c71e-4e51-a4f2-91b5b7b0a3ec",
+ "fileName": "langchain_agent.py",
+ "cellName": "Tool Output Added to Message History",
+ "cellId": "1037d71c-c71e-4e51-a4f2-91b5b7b0a3ec",
+ "visible": true,
+ "startLine": 129,
+ "endLine": 129,
+ "parentPath": "sample-app/langchain_agent.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing LLM Function and Tool Calls",
+ "simStepId": "751442bb-8928-4d1e-aef4-4ea7b13abbf5"
+ }
+ ]
+ },
+ "b54ec3ab-acba-4135-adb4-92256fe4654b": {
+ "path": "b54ec3ab-acba-4135-adb4-92256fe4654b",
+ "cellName": "Request with\nTool Output\nSent to\nLLM",
+ "cellId": "b54ec3ab-acba-4135-adb4-92256fe4654b",
+ "visible": true,
+ "parentCellId": "a7fafc87-8af0-4599-80bb-8db890b1a6bd"
+ },
+ "generated-edge-simstep-03c8413e-0791-4631-a96b-96c942b8f3ca-b54ec3ab-acba-4135-adb4-92256fe4654b": {
+ "path": "generated-edge-simstep-03c8413e-0791-4631-a96b-96c942b8f3ca-b54ec3ab-acba-4135-adb4-92256fe4654b",
+ "fileName": "span_utils.py",
+ "cellName": "Request with Tool Output Sent to LLM",
+ "cellId": "b54ec3ab-acba-4135-adb4-92256fe4654b",
+ "visible": true,
+ "startLine": 45,
+ "endLine": 51,
+ "parentPath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py",
+ "simSteps": [
+ {
+ "simulationKey": "Tracing LLM Function and Tool Calls",
+ "simStepId": "03c8413e-0791-4631-a96b-96c942b8f3ca"
+ }
+ ]
+ },
+ "30865560-7c1a-4a32-a339-465fa1aa1302": {
+ "path": "30865560-7c1a-4a32-a339-465fa1aa1302",
+ "cellName": "opentelemetry-instrumentation-openai-agents",
+ "cellId": "30865560-7c1a-4a32-a339-465fa1aa1302",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "ba88a4f4-d2b7-4e55-b080-1f1c6b6039ae": {
+ "path": "ba88a4f4-d2b7-4e55-b080-1f1c6b6039ae",
+ "cellName": "opentelemetry",
+ "cellId": "ba88a4f4-d2b7-4e55-b080-1f1c6b6039ae",
+ "visible": true,
+ "parentCellId": "30865560-7c1a-4a32-a339-465fa1aa1302"
+ },
+ "ce5a3913-3b99-4e91-a528-b6cd2afc5f4e": {
+ "path": "ce5a3913-3b99-4e91-a528-b6cd2afc5f4e",
+ "cellName": "instrumentation",
+ "cellId": "ce5a3913-3b99-4e91-a528-b6cd2afc5f4e",
+ "visible": true,
+ "parentCellId": "ba88a4f4-d2b7-4e55-b080-1f1c6b6039ae"
+ },
+ "4c400e14-33fc-4f6c-b757-e39e08712cb0": {
+ "path": "4c400e14-33fc-4f6c-b757-e39e08712cb0",
+ "cellName": "openai_agents",
+ "cellId": "4c400e14-33fc-4f6c-b757-e39e08712cb0",
+ "visible": true,
+ "parentCellId": "ce5a3913-3b99-4e91-a528-b6cd2afc5f4e"
+ },
+ "d5707ec2-17c7-408e-91a8-7b891d55a2ba": {
+ "path": "d5707ec2-17c7-408e-91a8-7b891d55a2ba",
+ "cellName": "__init__.py",
+ "cellId": "d5707ec2-17c7-408e-91a8-7b891d55a2ba",
+ "visible": true,
+ "parentCellId": "4c400e14-33fc-4f6c-b757-e39e08712cb0"
+ },
+ "398d7f9a-d241-4917-90fd-dfbfad1bb4fe": {
+ "path": "398d7f9a-d241-4917-90fd-dfbfad1bb4fe",
+ "cellName": "_hooks.py",
+ "cellId": "398d7f9a-d241-4917-90fd-dfbfad1bb4fe",
+ "visible": true,
+ "parentCellId": "4c400e14-33fc-4f6c-b757-e39e08712cb0"
+ },
+ "9966a3c9-69dc-4552-9096-b80786d3f2d4": {
+ "path": "9966a3c9-69dc-4552-9096-b80786d3f2d4",
+ "cellName": "Flow: CrewAI - Initialization - tracing.py:L1120-1130",
+ "cellId": "9966a3c9-69dc-4552-9096-b80786d3f2d4",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-9b0270ac-a093-412b-82e5-03544bd5baee": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-9b0270ac-a093-412b-82e5-03544bd5baee",
+ "fileName": "tracing.py",
+ "wiki": "The SDK's instrumentation process begins by checking for the presence of the `crewai` package. If found, it proceeds to initialize the specific instrumentor for it.",
+ "cellName": "Flow: CrewAI - Initialization - tracing.py:L1120-1130",
+ "cellId": "9966a3c9-69dc-4552-9096-b80786d3f2d4",
+ "visible": true,
+ "startLine": 1120,
+ "endLine": 1130,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "9b0270ac-a093-412b-82e5-03544bd5baee"
+ }
+ ]
+ },
+ "c27337dd-06a8-4a8f-a9d2-c4c4b3b42f87": {
+ "path": "c27337dd-06a8-4a8f-a9d2-c4c4b3b42f87",
+ "cellName": "Flow: CrewAI - Method Patching - instrumentation.py:L34-39",
+ "cellId": "c27337dd-06a8-4a8f-a9d2-c4c4b3b42f87",
+ "visible": true,
+ "parentCellId": "e9c03ccd-8218-454a-9d5b-8e7dbcc0f824"
+ },
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-85bc8477-e13d-491b-9eba-d0cc075fdaa3": {
+ "path": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-85bc8477-e13d-491b-9eba-d0cc075fdaa3",
+ "fileName": "instrumentation.py",
+ "wiki": "The instrumentor patches key methods within the CrewAI framework using `wrap_function_wrapper`. This injects observability logic into methods like `Crew.kickoff`, `Agent.execute_task`, and `Task.execute_sync` without altering the user's code.",
+ "cellName": "Flow: CrewAI - Method Patching - instrumentation.py:L34-39",
+ "cellId": "c27337dd-06a8-4a8f-a9d2-c4c4b3b42f87",
+ "visible": true,
+ "startLine": 34,
+ "endLine": 39,
+ "parentCellId": "e9c03ccd-8218-454a-9d5b-8e7dbcc0f824",
+ "parentPath": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py",
+ "simSteps": [
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "85bc8477-e13d-491b-9eba-d0cc075fdaa3"
+ }
+ ]
+ },
+ "7caa6382-bbd9-4b8c-a3e9-278dd4cd6988": {
+ "path": "7caa6382-bbd9-4b8c-a3e9-278dd4cd6988",
+ "cellName": "Flow: CrewAI - Workflow Span Creation - instrumentation.py:L70-77",
+ "cellId": "7caa6382-bbd9-4b8c-a3e9-278dd4cd6988",
+ "visible": true,
+ "parentCellId": "e9c03ccd-8218-454a-9d5b-8e7dbcc0f824"
+ },
+ "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-7ddd8861-6a29-484e-ae68-0910533aa1f9": {
+ "path": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-7ddd8861-6a29-484e-ae68-0910533aa1f9",
+ "fileName": "instrumentation.py",
+ "wiki": "The `wrap_kickoff` wrapper creates a new root OpenTelemetry span to represent the entire CrewAI workflow. This span captures the overall execution and serves as the parent for subsequent agent and task spans.",
+ "cellName": "Flow: CrewAI - Workflow Span Creation - instrumentation.py:L70-77",
+ "cellId": "7caa6382-bbd9-4b8c-a3e9-278dd4cd6988",
+ "visible": true,
+ "startLine": 70,
+ "endLine": 77,
+ "parentCellId": "e9c03ccd-8218-454a-9d5b-8e7dbcc0f824",
+ "parentPath": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py",
+ "simSteps": [
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "7ddd8861-6a29-484e-ae68-0910533aa1f9"
+ }
+ ]
+ },
+ "9f6171fe-41df-4924-a7cd-e1a1879f9e69": {
+ "path": "9f6171fe-41df-4924-a7cd-e1a1879f9e69",
+ "cellName": "Flow: OpenAI Agents - Initialization - tracing.py:L1155-1166",
+ "cellId": "9f6171fe-41df-4924-a7cd-e1a1879f9e69",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-7b3c5e50-ce02-48d3-87eb-ace7adc657f2": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-7b3c5e50-ce02-48d3-87eb-ace7adc657f2",
+ "fileName": "tracing.py",
+ "wiki": "The SDK's instrumentation process checks for the `openai-agents` package. Upon finding it, it initializes the `OpenAIAgentsInstrumentor` to enable tracing.",
+ "cellName": "Flow: OpenAI Agents - Initialization - tracing.py:L1155-1166",
+ "cellId": "9f6171fe-41df-4924-a7cd-e1a1879f9e69",
+ "visible": true,
+ "startLine": 1155,
+ "endLine": 1166,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "7b3c5e50-ce02-48d3-87eb-ace7adc657f2"
+ }
+ ]
+ },
+ "396cccfa-484d-4c2a-8607-c75f5f6cd2fc": {
+ "path": "396cccfa-484d-4c2a-8607-c75f5f6cd2fc",
+ "cellName": "Flow: OpenAI Agents - Hook Registration - __init__.py:L31-35",
+ "cellId": "396cccfa-484d-4c2a-8607-c75f5f6cd2fc",
+ "visible": true,
+ "parentCellId": "d5707ec2-17c7-408e-91a8-7b891d55a2ba"
+ },
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py-simstep-14f1ee9d-05ad-487b-a770-0cce9057c9c0": {
+ "path": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py-simstep-14f1ee9d-05ad-487b-a770-0cce9057c9c0",
+ "fileName": "__init__.py",
+ "wiki": "The instrumentor registers a custom `OpenTelemetryTracingProcessor`. This processor hooks into the OpenAI Agents' native callback system, allowing it to listen for events like trace starts, span starts, and trace ends.",
+ "cellName": "Flow: OpenAI Agents - Hook Registration - __init__.py:L31-35",
+ "cellId": "396cccfa-484d-4c2a-8607-c75f5f6cd2fc",
+ "visible": true,
+ "startLine": 31,
+ "endLine": 35,
+ "parentCellId": "d5707ec2-17c7-408e-91a8-7b891d55a2ba",
+ "parentPath": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "14f1ee9d-05ad-487b-a770-0cce9057c9c0"
+ }
+ ]
+ },
+ "ef981e84-85e2-4a9e-bb0f-9b233d3606a8": {
+ "path": "ef981e84-85e2-4a9e-bb0f-9b233d3606a8",
+ "cellName": "Flow: OpenAI Agents - Workflow Span Creation - _hooks.py:L35-44",
+ "cellId": "ef981e84-85e2-4a9e-bb0f-9b233d3606a8",
+ "visible": true,
+ "parentCellId": "398d7f9a-d241-4917-90fd-dfbfad1bb4fe"
+ },
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py-simstep-3dcdc2ef-f984-446b-831a-25d8cc3c6309": {
+ "path": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py-simstep-3dcdc2ef-f984-446b-831a-25d8cc3c6309",
+ "fileName": "_hooks.py",
+ "wiki": "The `on_trace_start` method creates the root 'Agent Workflow' span for the entire execution. This span is stored and used as the parent for all subsequent spans related to this particular agent run.",
+ "cellName": "Flow: OpenAI Agents - Workflow Span Creation - _hooks.py:L35-44",
+ "cellId": "ef981e84-85e2-4a9e-bb0f-9b233d3606a8",
+ "visible": true,
+ "startLine": 35,
+ "endLine": 44,
+ "parentCellId": "398d7f9a-d241-4917-90fd-dfbfad1bb4fe",
+ "parentPath": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py",
+ "simSteps": [
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "3dcdc2ef-f984-446b-831a-25d8cc3c6309"
+ }
+ ]
+ },
+ "30a71e5f-0e2f-40ba-a010-12835b821851": {
+ "path": "30a71e5f-0e2f-40ba-a010-12835b821851",
+ "cellName": "Flow: OpenAI Agents - Step Span Creation - _hooks.py:L60-86",
+ "cellId": "30a71e5f-0e2f-40ba-a010-12835b821851",
+ "visible": true,
+ "parentCellId": "398d7f9a-d241-4917-90fd-dfbfad1bb4fe"
+ },
+ "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py-simstep-914f0757-94ea-4d3d-8fce-0cd4c885b6e1": {
+ "path": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py-simstep-914f0757-94ea-4d3d-8fce-0cd4c885b6e1",
+ "fileName": "_hooks.py",
+ "wiki": "The `on_span_start` method inspects the event data to determine the type of activity (e.g., Agent, Tool, Handoff). It then creates a corresponding OpenTelemetry span, properly nested under the root workflow span, to represent this specific step in the agent's reasoning process.",
+ "cellName": "Flow: OpenAI Agents - Step Span Creation - _hooks.py:L60-86",
+ "cellId": "30a71e5f-0e2f-40ba-a010-12835b821851",
+ "visible": true,
+ "startLine": 60,
+ "endLine": 86,
+ "parentCellId": "398d7f9a-d241-4917-90fd-dfbfad1bb4fe",
+ "parentPath": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py",
+ "simSteps": [
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "914f0757-94ea-4d3d-8fce-0cd4c885b6e1"
+ }
+ ]
+ },
+ "e289cabc-5296-47df-91b7-69a12927842e": {
+ "path": "e289cabc-5296-47df-91b7-69a12927842e",
+ "cellName": "Flow: CrewAI\n- Activating\nInstrumentation",
+ "cellId": "e289cabc-5296-47df-91b7-69a12927842e",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-74e2d3c0-7a24-4c7d-ae83-c67a93bc2709-e289cabc-5296-47df-91b7-69a12927842e": {
+ "path": "generated-edge-simstep-74e2d3c0-7a24-4c7d-ae83-c67a93bc2709-e289cabc-5296-47df-91b7-69a12927842e",
+ "fileName": "tracing.py",
+ "cellName": "Flow: CrewAI - Activating Instrumentation",
+ "cellId": "e289cabc-5296-47df-91b7-69a12927842e",
+ "visible": true,
+ "startLine": 26,
+ "endLine": 26,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "74e2d3c0-7a24-4c7d-ae83-c67a93bc2709"
+ }
+ ]
+ },
+ "485b43f6-5ec4-48ad-a0c3-7b9ae2e2770b": {
+ "path": "485b43f6-5ec4-48ad-a0c3-7b9ae2e2770b",
+ "cellName": "Flow: CrewAI\n- Application\nInvokes Workflow",
+ "cellId": "485b43f6-5ec4-48ad-a0c3-7b9ae2e2770b",
+ "visible": true,
+ "parentCellId": "e9c03ccd-8218-454a-9d5b-8e7dbcc0f824"
+ },
+ "generated-edge-simstep-e954799a-bc77-47a8-b1c2-da76b2fbdf4b-485b43f6-5ec4-48ad-a0c3-7b9ae2e2770b": {
+ "path": "generated-edge-simstep-e954799a-bc77-47a8-b1c2-da76b2fbdf4b-485b43f6-5ec4-48ad-a0c3-7b9ae2e2770b",
+ "fileName": "instrumentation.py",
+ "cellName": "Flow: CrewAI - Application Invokes Workflow",
+ "cellId": "485b43f6-5ec4-48ad-a0c3-7b9ae2e2770b",
+ "visible": true,
+ "startLine": 69,
+ "endLine": 69,
+ "parentPath": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py",
+ "simSteps": [
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "e954799a-bc77-47a8-b1c2-da76b2fbdf4b"
+ }
+ ]
+ },
+ "0e8b0d3a-3741-4452-90d5-00b070f53f18": {
+ "path": "0e8b0d3a-3741-4452-90d5-00b070f53f18",
+ "cellName": "Flow: OpenAI\nAgents -\nActivating Instrumentation",
+ "cellId": "0e8b0d3a-3741-4452-90d5-00b070f53f18",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-ac3de196-7848-4fb0-92e3-2376f5906726-0e8b0d3a-3741-4452-90d5-00b070f53f18": {
+ "path": "generated-edge-simstep-ac3de196-7848-4fb0-92e3-2376f5906726-0e8b0d3a-3741-4452-90d5-00b070f53f18",
+ "fileName": "tracing.py",
+ "cellName": "Flow: OpenAI Agents - Activating Instrumentation",
+ "cellId": "0e8b0d3a-3741-4452-90d5-00b070f53f18",
+ "visible": true,
+ "startLine": 20,
+ "endLine": 20,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "ac3de196-7848-4fb0-92e3-2376f5906726"
+ }
+ ]
+ },
+ "cc21bc33-0042-4b96-aa2c-8c934c7f01f5": {
+ "path": "cc21bc33-0042-4b96-aa2c-8c934c7f01f5",
+ "cellName": "Flow: OpenAI\nAgents -\nTrace Start\nEvent",
+ "cellId": "cc21bc33-0042-4b96-aa2c-8c934c7f01f5",
+ "visible": true,
+ "parentCellId": "4c400e14-33fc-4f6c-b757-e39e08712cb0"
+ },
+ "generated-edge-simstep-82145888-94dd-43f7-b738-dc9344f1f39b-cc21bc33-0042-4b96-aa2c-8c934c7f01f5": {
+ "path": "generated-edge-simstep-82145888-94dd-43f7-b738-dc9344f1f39b-cc21bc33-0042-4b96-aa2c-8c934c7f01f5",
+ "fileName": "__init__.py",
+ "cellName": "Flow: OpenAI Agents - Trace Start Event",
+ "cellId": "cc21bc33-0042-4b96-aa2c-8c934c7f01f5",
+ "visible": true,
+ "startLine": 33,
+ "endLine": 33,
+ "parentPath": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "82145888-94dd-43f7-b738-dc9344f1f39b"
+ }
+ ]
+ },
+ "598065de-b4c7-4f36-888d-c4e71fb5dd89": {
+ "path": "598065de-b4c7-4f36-888d-c4e71fb5dd89",
+ "cellName": "Flow: OpenAI\nAgents -\nAgent Step\nEvent",
+ "cellId": "598065de-b4c7-4f36-888d-c4e71fb5dd89",
+ "visible": true,
+ "parentCellId": "398d7f9a-d241-4917-90fd-dfbfad1bb4fe"
+ },
+ "generated-edge-simstep-4e476da7-f7cd-457e-a119-05565dc4e061-598065de-b4c7-4f36-888d-c4e71fb5dd89": {
+ "path": "generated-edge-simstep-4e476da7-f7cd-457e-a119-05565dc4e061-598065de-b4c7-4f36-888d-c4e71fb5dd89",
+ "fileName": "_hooks.py",
+ "cellName": "Flow: OpenAI Agents - Agent Step Event",
+ "cellId": "598065de-b4c7-4f36-888d-c4e71fb5dd89",
+ "visible": true,
+ "startLine": 59,
+ "endLine": 59,
+ "parentPath": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py",
+ "simSteps": [
+ {
+ "simulationKey": "Observability for AI Agent Frameworks",
+ "simStepId": "4e476da7-f7cd-457e-a119-05565dc4e061"
+ }
+ ]
+ },
+ "b2894781-4928-449b-83e8-904a5a1bd8c4": {
+ "path": "b2894781-4928-449b-83e8-904a5a1bd8c4",
+ "cellName": "README.md",
+ "cellId": "b2894781-4928-449b-83e8-904a5a1bd8c4",
+ "visible": true
+ },
+ "140e603f-00ee-46b7-8c70-92c5d4b9d6ef": {
+ "path": "140e603f-00ee-46b7-8c70-92c5d4b9d6ef",
+ "cellName": "__init__.py",
+ "cellId": "140e603f-00ee-46b7-8c70-92c5d4b9d6ef",
+ "visible": true,
+ "parentCellId": "a85538e0-fc7e-4231-914f-e84dcdb1e303"
+ },
+ "590d1507-445b-4448-9b48-c9c96c948ff9": {
+ "path": "590d1507-445b-4448-9b48-c9c96c948ff9",
+ "cellName": "User Application Initializes Traceloop SDK - README.md:L75-77",
+ "cellId": "590d1507-445b-4448-9b48-c9c96c948ff9",
+ "visible": true,
+ "parentCellId": "b2894781-4928-449b-83e8-904a5a1bd8c4"
+ },
+ "README.md-simstep-4f66b0b8-c794-415f-aa35-41e61aca6922": {
+ "path": "README.md-simstep-4f66b0b8-c794-415f-aa35-41e61aca6922",
+ "fileName": "README.md",
+ "wiki": "A user's application starts the telemetry process by calling `Traceloop.init()`. This call includes configuration for the specific observability backend, such as the endpoint and authentication headers. This example shows a configuration for exporting data to a generic OTLP-compatible backend like Datadog or Honeycomb.",
+ "cellName": "User Application Initializes Traceloop SDK - README.md:L75-77",
+ "cellId": "590d1507-445b-4448-9b48-c9c96c948ff9",
+ "visible": true,
+ "startLine": 75,
+ "endLine": 77,
+ "parentCellId": "b2894781-4928-449b-83e8-904a5a1bd8c4",
+ "parentPath": "README.md",
+ "simSteps": [
+ {
+ "simulationKey": "Exporting Telemetry Data to Various Observability Backends",
+ "simStepId": "4f66b0b8-c794-415f-aa35-41e61aca6922"
+ }
+ ]
+ },
+ "82003110-ab0f-42fd-9ec5-66adfacf5579": {
+ "path": "82003110-ab0f-42fd-9ec5-66adfacf5579",
+ "cellName": "Process Configuration in Traceloop.init() - __init__.py:L95-159",
+ "cellId": "82003110-ab0f-42fd-9ec5-66adfacf5579",
+ "visible": true,
+ "parentCellId": "140e603f-00ee-46b7-8c70-92c5d4b9d6ef"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/__init__.py-simstep-6eaec5d5-9f51-404c-b8df-eed4b4a64f21": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/__init__.py-simstep-6eaec5d5-9f51-404c-b8df-eed4b4a64f21",
+ "fileName": "__init__.py",
+ "wiki": "The `init` method processes the user's configuration. It checks for environment variables, validates the API key and endpoint, and prepares to set up the OpenTelemetry tracer. It determines if a default exporter and processor are needed or if custom ones were provided.",
+ "cellName": "Process Configuration in Traceloop.init() - __init__.py:L95-159",
+ "cellId": "82003110-ab0f-42fd-9ec5-66adfacf5579",
+ "visible": true,
+ "startLine": 95,
+ "endLine": 159,
+ "parentCellId": "140e603f-00ee-46b7-8c70-92c5d4b9d6ef",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Exporting Telemetry Data to Various Observability Backends",
+ "simStepId": "6eaec5d5-9f51-404c-b8df-eed4b4a64f21"
+ }
+ ]
+ },
+ "0699b236-cd07-4793-a5ee-d045e365ffbc": {
+ "path": "0699b236-cd07-4793-a5ee-d045e365ffbc",
+ "cellName": "Initialize TracerWrapper and OpenTelemetry Provider - tracing.py:L275-293",
+ "cellId": "0699b236-cd07-4793-a5ee-d045e365ffbc",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-5e1b6ee8-b41b-4b49-980c-324f4103c104": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-5e1b6ee8-b41b-4b49-980c-324f4103c104",
+ "fileName": "tracing.py",
+ "wiki": "The `TracerWrapper`'s constructor sets up the core OpenTelemetry components. It creates a `Resource` with the application's attributes and initializes the `TracerProvider`. If no custom `SpanProcessor` is provided, it calls a helper function to create a default one.",
+ "cellName": "Initialize TracerWrapper and OpenTelemetry Provider - tracing.py:L275-293",
+ "cellId": "0699b236-cd07-4793-a5ee-d045e365ffbc",
+ "visible": true,
+ "startLine": 275,
+ "endLine": 293,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Exporting Telemetry Data to Various Observability Backends",
+ "simStepId": "5e1b6ee8-b41b-4b49-980c-324f4103c104"
+ }
+ ]
+ },
+ "fca3e9e3-b480-4e80-9ba4-77396abfb720": {
+ "path": "fca3e9e3-b480-4e80-9ba4-77396abfb720",
+ "cellName": "Instantiate OTLP Exporter and Batch Processor - tracing.py:L395-405",
+ "cellId": "fca3e9e3-b480-4e80-9ba4-77396abfb720",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-91298448-8999-4885-9e99-fe9d87a44b54": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-91298448-8999-4885-9e99-fe9d87a44b54",
+ "fileName": "tracing.py",
+ "wiki": "The `get_default_span_processor` function creates an `OTLPSpanExporter` configured with the endpoint and headers for the desired backend. It then wraps this exporter in a `BatchSpanProcessor` to handle sending spans in batches efficiently. This is the key step that enables exporting to any OTLP-compatible system.",
+ "cellName": "Instantiate OTLP Exporter and Batch Processor - tracing.py:L395-405",
+ "cellId": "fca3e9e3-b480-4e80-9ba4-77396abfb720",
+ "visible": true,
+ "startLine": 395,
+ "endLine": 405,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Exporting Telemetry Data to Various Observability Backends",
+ "simStepId": "91298448-8999-4885-9e99-fe9d87a44b54"
+ }
+ ]
+ },
+ "7fc5b305-619e-457c-b6dd-c6ffd5678419": {
+ "path": "7fc5b305-619e-457c-b6dd-c6ffd5678419",
+ "cellName": "Finalize and Set Global Tracer - tracing.py:L293",
+ "cellId": "7fc5b305-619e-457c-b6dd-c6ffd5678419",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-dd22a434-ede4-43ee-822e-5ccec319eb26": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-dd22a434-ede4-43ee-822e-5ccec319eb26",
+ "fileName": "tracing.py",
+ "wiki": "The fully configured `TracerProvider` is set as the global tracer provider for the application. All subsequent OpenTelemetry instrumentation calls will now use this provider, ensuring that spans are processed by the `BatchSpanProcessor` and exported via the `OTLPSpanExporter` to the configured backend.",
+ "cellName": "Finalize and Set Global Tracer - tracing.py:L293",
+ "cellId": "7fc5b305-619e-457c-b6dd-c6ffd5678419",
+ "visible": true,
+ "startLine": 293,
+ "endLine": 293,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Exporting Telemetry Data to Various Observability Backends",
+ "simStepId": "dd22a434-ede4-43ee-822e-5ccec319eb26"
+ }
+ ]
+ },
+ "18a93177-ec6b-49e0-a4e3-7293a3042818": {
+ "path": "18a93177-ec6b-49e0-a4e3-7293a3042818",
+ "cellName": "Transmit Configuration\nto SDK",
+ "cellId": "18a93177-ec6b-49e0-a4e3-7293a3042818",
+ "visible": true
+ },
+ "generated-edge-simstep-802f1f5d-0bdd-474a-98ad-e3d34be9458b-18a93177-ec6b-49e0-a4e3-7293a3042818": {
+ "path": "generated-edge-simstep-802f1f5d-0bdd-474a-98ad-e3d34be9458b-18a93177-ec6b-49e0-a4e3-7293a3042818",
+ "fileName": "README.md",
+ "cellName": "Transmit Configuration to SDK",
+ "cellId": "18a93177-ec6b-49e0-a4e3-7293a3042818",
+ "visible": true,
+ "startLine": 47,
+ "endLine": 66,
+ "parentPath": "README.md",
+ "simSteps": [
+ {
+ "simulationKey": "Exporting Telemetry Data to Various Observability Backends",
+ "simStepId": "802f1f5d-0bdd-474a-98ad-e3d34be9458b"
+ }
+ ]
+ },
+ "33a1f647-551e-424b-bdf0-eb56913c10e7": {
+ "path": "33a1f647-551e-424b-bdf0-eb56913c10e7",
+ "cellName": "Pass Configuration\nto TracerWrapper",
+ "cellId": "33a1f647-551e-424b-bdf0-eb56913c10e7",
+ "visible": true,
+ "parentCellId": "a85538e0-fc7e-4231-914f-e84dcdb1e303"
+ },
+ "generated-edge-simstep-b5cbd4c9-6cef-4551-969f-bcdd22fcb1d2-33a1f647-551e-424b-bdf0-eb56913c10e7": {
+ "path": "generated-edge-simstep-b5cbd4c9-6cef-4551-969f-bcdd22fcb1d2-33a1f647-551e-424b-bdf0-eb56913c10e7",
+ "fileName": "__init__.py",
+ "cellName": "Pass Configuration to TracerWrapper",
+ "cellId": "33a1f647-551e-424b-bdf0-eb56913c10e7",
+ "visible": true,
+ "startLine": 160,
+ "endLine": 171,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/__init__.py",
+ "simSteps": [
+ {
+ "simulationKey": "Exporting Telemetry Data to Various Observability Backends",
+ "simStepId": "b5cbd4c9-6cef-4551-969f-bcdd22fcb1d2"
+ }
+ ]
+ },
+ "7b26a911-4f9f-4a5b-931c-f507ffe2e3be": {
+ "path": "7b26a911-4f9f-4a5b-931c-f507ffe2e3be",
+ "cellName": "Request Default\nSpan Processor",
+ "cellId": "7b26a911-4f9f-4a5b-931c-f507ffe2e3be",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "generated-edge-simstep-0395eb25-62e0-4525-b1a0-9697959e7fa4-7b26a911-4f9f-4a5b-931c-f507ffe2e3be": {
+ "path": "generated-edge-simstep-0395eb25-62e0-4525-b1a0-9697959e7fa4-7b26a911-4f9f-4a5b-931c-f507ffe2e3be",
+ "fileName": "tracing.py",
+ "cellName": "Request Default Span Processor",
+ "cellId": "7b26a911-4f9f-4a5b-931c-f507ffe2e3be",
+ "visible": true,
+ "startLine": 282,
+ "endLine": 282,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Exporting Telemetry Data to Various Observability Backends",
+ "simStepId": "0395eb25-62e0-4525-b1a0-9697959e7fa4"
+ }
+ ]
+ },
+ "e51305b3-f346-43b4-b6ae-f884d3f87143": {
+ "path": "e51305b3-f346-43b4-b6ae-f884d3f87143",
+ "cellName": "Attach Processor\nto Tracer\nProvider",
+ "cellId": "e51305b3-f346-43b4-b6ae-f884d3f87143",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "generated-edge-simstep-605fa88d-ba6d-4037-8dc0-8eb21579913c-e51305b3-f346-43b4-b6ae-f884d3f87143": {
+ "path": "generated-edge-simstep-605fa88d-ba6d-4037-8dc0-8eb21579913c-e51305b3-f346-43b4-b6ae-f884d3f87143",
+ "fileName": "tracing.py",
+ "cellName": "Attach Processor to Tracer Provider",
+ "cellId": "e51305b3-f346-43b4-b6ae-f884d3f87143",
+ "visible": true,
+ "startLine": 291,
+ "endLine": 291,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Exporting Telemetry Data to Various Observability Backends",
+ "simStepId": "605fa88d-ba6d-4037-8dc0-8eb21579913c"
+ }
+ ]
+ },
+ "87332ef7-f6b1-4175-ab31-1feed304fdd7": {
+ "path": "87332ef7-f6b1-4175-ab31-1feed304fdd7",
+ "cellName": "prompt_registry_example_app.py",
+ "cellId": "87332ef7-f6b1-4175-ab31-1feed304fdd7",
+ "visible": true,
+ "parentCellId": "7e0df8f9-9881-4666-b79c-bd8c0572b439"
+ },
+ "c32f5b07-95b0-4ebc-ab5d-682a5ca49169": {
+ "path": "c32f5b07-95b0-4ebc-ab5d-682a5ca49169",
+ "cellName": "fetcher.py",
+ "cellId": "c32f5b07-95b0-4ebc-ab5d-682a5ca49169",
+ "visible": true,
+ "parentCellId": "a85538e0-fc7e-4231-914f-e84dcdb1e303"
+ },
+ "8945e002-d804-4ed2-9c0f-7ca143134ea7": {
+ "path": "8945e002-d804-4ed2-9c0f-7ca143134ea7",
+ "cellName": "prompts",
+ "cellId": "8945e002-d804-4ed2-9c0f-7ca143134ea7",
+ "visible": true,
+ "parentCellId": "a85538e0-fc7e-4231-914f-e84dcdb1e303"
+ },
+ "c6430bd1-3ec6-4ec1-a192-c4388c6b3102": {
+ "path": "c6430bd1-3ec6-4ec1-a192-c4388c6b3102",
+ "cellName": "registry.py",
+ "cellId": "c6430bd1-3ec6-4ec1-a192-c4388c6b3102",
+ "visible": true,
+ "parentCellId": "8945e002-d804-4ed2-9c0f-7ca143134ea7"
+ },
+ "baedb6bc-5499-4e00-a015-cb7d5411d591": {
+ "path": "baedb6bc-5499-4e00-a015-cb7d5411d591",
+ "cellName": "__init__.py",
+ "cellId": "baedb6bc-5499-4e00-a015-cb7d5411d591",
+ "visible": true,
+ "parentCellId": "8945e002-d804-4ed2-9c0f-7ca143134ea7"
+ },
+ "e9518cef-9824-46d5-bdc4-dbc71345f8b5": {
+ "path": "e9518cef-9824-46d5-bdc4-dbc71345f8b5",
+ "cellName": "client.py",
+ "cellId": "e9518cef-9824-46d5-bdc4-dbc71345f8b5",
+ "visible": true,
+ "parentCellId": "8945e002-d804-4ed2-9c0f-7ca143134ea7"
+ },
+ "937d1c62-ba16-47e9-ab1e-be065caad287": {
+ "path": "937d1c62-ba16-47e9-ab1e-be065caad287",
+ "cellName": "Flow 1 - Background Sync: Initialize Prompt Fetcher - fetcher.py:L28-36",
+ "cellId": "937d1c62-ba16-47e9-ab1e-be065caad287",
+ "visible": true,
+ "parentCellId": "c32f5b07-95b0-4ebc-ab5d-682a5ca49169"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/fetcher.py-simstep-43824714-6bc6-4a0f-9561-ca91d337a105": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/fetcher.py-simstep-43824714-6bc6-4a0f-9561-ca91d337a105",
+ "fileName": "fetcher.py",
+ "wiki": "As part of Traceloop SDK initialization, a background `Fetcher` thread is started. It's responsible for periodically polling the Traceloop API to get the latest prompt definitions and keep the local in-memory prompt registry synchronized.",
+ "cellName": "Flow 1 - Background Sync: Initialize Prompt Fetcher - fetcher.py:L28-36",
+ "cellId": "937d1c62-ba16-47e9-ab1e-be065caad287",
+ "visible": true,
+ "startLine": 28,
+ "endLine": 36,
+ "parentCellId": "c32f5b07-95b0-4ebc-ab5d-682a5ca49169",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/fetcher.py",
+ "simSteps": [
+ {
+ "simulationKey": "Centralized Prompt Management and Tracing",
+ "simStepId": "43824714-6bc6-4a0f-9561-ca91d337a105"
+ }
+ ]
+ },
+ "05ba8443-572a-4226-ae1b-5c4f82865075": {
+ "path": "05ba8443-572a-4226-ae1b-5c4f82865075",
+ "cellName": "Flow 1 - Background Sync: Fetch Prompts from API - fetcher.py:L148-156",
+ "cellId": "05ba8443-572a-4226-ae1b-5c4f82865075",
+ "visible": true,
+ "parentCellId": "c32f5b07-95b0-4ebc-ab5d-682a5ca49169"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/fetcher.py-simstep-4be04162-faaf-4944-a6ff-deaba16f4ad7": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/fetcher.py-simstep-4be04162-faaf-4944-a6ff-deaba16f4ad7",
+ "fileName": "fetcher.py",
+ "wiki": "The `Fetcher` thread calls `refresh_data`, which makes an HTTP GET request to the Traceloop backend API to retrieve all registered prompts for the given API key.",
+ "cellName": "Flow 1 - Background Sync: Fetch Prompts from API - fetcher.py:L148-156",
+ "cellId": "05ba8443-572a-4226-ae1b-5c4f82865075",
+ "visible": true,
+ "startLine": 148,
+ "endLine": 156,
+ "parentCellId": "c32f5b07-95b0-4ebc-ab5d-682a5ca49169",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/fetcher.py",
+ "simSteps": [
+ {
+ "simulationKey": "Centralized Prompt Management and Tracing",
+ "simStepId": "4be04162-faaf-4944-a6ff-deaba16f4ad7"
+ }
+ ]
+ },
+ "c8536d6c-cbea-4144-bc92-f2882babea1d": {
+ "path": "c8536d6c-cbea-4144-bc92-f2882babea1d",
+ "cellName": "Flow 1 - Background Sync: Load Prompts into In-Memory Registry - registry.py:L11-16",
+ "cellId": "c8536d6c-cbea-4144-bc92-f2882babea1d",
+ "visible": true,
+ "parentCellId": "c6430bd1-3ec6-4ec1-a192-c4388c6b3102"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/prompts/registry.py-simstep-769bcc27-2c77-4aac-a8ce-7675bf8c5daf": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/prompts/registry.py-simstep-769bcc27-2c77-4aac-a8ce-7675bf8c5daf",
+ "fileName": "registry.py",
+ "wiki": "The `PromptRegistry`'s `load` method parses the JSON data and populates its internal dictionary (`_prompts`). This makes the prompts available for fast retrieval by the application via the `get_prompt` function.",
+ "cellName": "Flow 1 - Background Sync: Load Prompts into In-Memory Registry - registry.py:L11-16",
+ "cellId": "c8536d6c-cbea-4144-bc92-f2882babea1d",
+ "visible": true,
+ "startLine": 11,
+ "endLine": 16,
+ "parentCellId": "c6430bd1-3ec6-4ec1-a192-c4388c6b3102",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/prompts/registry.py",
+ "simSteps": [
+ {
+ "simulationKey": "Centralized Prompt Management and Tracing",
+ "simStepId": "769bcc27-2c77-4aac-a8ce-7675bf8c5daf"
+ }
+ ]
+ },
+ "da491675-3f07-42ef-a697-164a42af8359": {
+ "path": "da491675-3f07-42ef-a697-164a42af8359",
+ "cellName": "Flow 2 - Usage: Application Calls `get_prompt` - prompt_registry_example_app.py:L16",
+ "cellId": "da491675-3f07-42ef-a697-164a42af8359",
+ "visible": true,
+ "parentCellId": "87332ef7-f6b1-4175-ab31-1feed304fdd7"
+ },
+ "packages/sample-app/sample_app/prompt_registry_example_app.py-simstep-afc6f083-1099-4fac-9882-3c04399a7ce6": {
+ "path": "packages/sample-app/sample_app/prompt_registry_example_app.py-simstep-afc6f083-1099-4fac-9882-3c04399a7ce6",
+ "fileName": "prompt_registry_example_app.py",
+ "wiki": "An application, like the example app, calls the `get_prompt` function to fetch the configuration for a specific prompt. It provides the prompt's unique key and any variables required by the template.",
+ "cellName": "Flow 2 - Usage: Application Calls `get_prompt` - prompt_registry_example_app.py:L16",
+ "cellId": "da491675-3f07-42ef-a697-164a42af8359",
+ "visible": true,
+ "startLine": 16,
+ "endLine": 16,
+ "parentCellId": "87332ef7-f6b1-4175-ab31-1feed304fdd7",
+ "parentPath": "packages/sample-app/sample_app/prompt_registry_example_app.py",
+ "simSteps": [
+ {
+ "simulationKey": "Centralized Prompt Management and Tracing",
+ "simStepId": "afc6f083-1099-4fac-9882-3c04399a7ce6"
+ }
+ ]
+ },
+ "242b21b6-8235-40f1-be5f-a6fc5878beff": {
+ "path": "242b21b6-8235-40f1-be5f-a6fc5878beff",
+ "cellName": "Flow 2 - Usage: Retrieve and Version Prompt - client.py:L58-72",
+ "cellId": "242b21b6-8235-40f1-be5f-a6fc5878beff",
+ "visible": true,
+ "parentCellId": "e9518cef-9824-46d5-bdc4-dbc71345f8b5"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/prompts/client.py-simstep-ef975e4f-00ff-473c-bdab-eb4f74a037cd": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/prompts/client.py-simstep-ef975e4f-00ff-473c-bdab-eb4f74a037cd",
+ "fileName": "client.py",
+ "wiki": "The `render_prompt` method retrieves the prompt from the in-memory registry using its key. It then determines the effective version to use (e.g., the latest published version, or one specified by name/hash).",
+ "cellName": "Flow 2 - Usage: Retrieve and Version Prompt - client.py:L58-72",
+ "cellId": "242b21b6-8235-40f1-be5f-a6fc5878beff",
+ "visible": true,
+ "startLine": 58,
+ "endLine": 72,
+ "parentCellId": "e9518cef-9824-46d5-bdc4-dbc71345f8b5",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/prompts/client.py",
+ "simSteps": [
+ {
+ "simulationKey": "Centralized Prompt Management and Tracing",
+ "simStepId": "ef975e4f-00ff-473c-bdab-eb4f74a037cd"
+ }
+ ]
+ },
+ "a117fffc-b8db-4edd-8e20-b1e688e097c0": {
+ "path": "a117fffc-b8db-4edd-8e20-b1e688e097c0",
+ "cellName": "Flow 2 - Usage: Render Prompt and Return LLM Arguments - client.py:L91-118",
+ "cellId": "a117fffc-b8db-4edd-8e20-b1e688e097c0",
+ "visible": true,
+ "parentCellId": "e9518cef-9824-46d5-bdc4-dbc71345f8b5"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/prompts/client.py-simstep-723adab6-f01a-4d16-bc53-dbf769e77358": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/prompts/client.py-simstep-723adab6-f01a-4d16-bc53-dbf769e77358",
+ "fileName": "client.py",
+ "wiki": "The prompt's template is rendered using Jinja2 with the provided variables. The final result is a dictionary containing all the necessary arguments (`model`, `messages`, `temperature`, etc.) to be passed directly to the LLM client library.",
+ "cellName": "Flow 2 - Usage: Render Prompt and Return LLM Arguments - client.py:L91-118",
+ "cellId": "a117fffc-b8db-4edd-8e20-b1e688e097c0",
+ "visible": true,
+ "startLine": 91,
+ "endLine": 118,
+ "parentCellId": "e9518cef-9824-46d5-bdc4-dbc71345f8b5",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/prompts/client.py",
+ "simSteps": [
+ {
+ "simulationKey": "Centralized Prompt Management and Tracing",
+ "simStepId": "723adab6-f01a-4d16-bc53-dbf769e77358"
+ }
+ ]
+ },
+ "6deab236-074c-4469-b0e1-83370fbf988f": {
+ "path": "6deab236-074c-4469-b0e1-83370fbf988f",
+ "cellName": "Flow 2 - Usage: Execute LLM Call with Rendered Arguments - prompt_registry_example_app.py:L17",
+ "cellId": "6deab236-074c-4469-b0e1-83370fbf988f",
+ "visible": true,
+ "parentCellId": "87332ef7-f6b1-4175-ab31-1feed304fdd7"
+ },
+ "packages/sample-app/sample_app/prompt_registry_example_app.py-simstep-ad46ed98-e542-4032-a6ca-ee43c5ae0ee8": {
+ "path": "packages/sample-app/sample_app/prompt_registry_example_app.py-simstep-ad46ed98-e542-4032-a6ca-ee43c5ae0ee8",
+ "fileName": "prompt_registry_example_app.py",
+ "wiki": "The application uses the dictionary returned by `get_prompt` to make an API call to the LLM provider. This call is automatically intercepted by the OpenLLMetry instrumentation for that provider (e.g., OpenAI).",
+ "cellName": "Flow 2 - Usage: Execute LLM Call with Rendered Arguments - prompt_registry_example_app.py:L17",
+ "cellId": "6deab236-074c-4469-b0e1-83370fbf988f",
+ "visible": true,
+ "startLine": 17,
+ "endLine": 17,
+ "parentCellId": "87332ef7-f6b1-4175-ab31-1feed304fdd7",
+ "parentPath": "packages/sample-app/sample_app/prompt_registry_example_app.py",
+ "simSteps": [
+ {
+ "simulationKey": "Centralized Prompt Management and Tracing",
+ "simStepId": "ad46ed98-e542-4032-a6ca-ee43c5ae0ee8"
+ }
+ ]
+ },
+ "4538a8ff-b3f5-413e-bf2c-a54c814a02a3": {
+ "path": "4538a8ff-b3f5-413e-bf2c-a54c814a02a3",
+ "cellName": "Flow 2 - Usage: Enrich Span with Prompt Metadata - tracing.py:L332-374",
+ "cellId": "4538a8ff-b3f5-413e-bf2c-a54c814a02a3",
+ "visible": true,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63"
+ },
+ "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-9eabc020-4c8f-436c-8c4d-2323eff67c40": {
+ "path": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-9eabc020-4c8f-436c-8c4d-2323eff67c40",
+ "fileName": "tracing.py",
+ "wiki": "The instrumentation's `on_start` hook executes. It checks the OpenTelemetry context for prompt metadata (which was set in a previous step) and, if found, adds it as attributes to the new span. This directly links the LLM trace to the specific prompt version used.",
+ "cellName": "Flow 2 - Usage: Enrich Span with Prompt Metadata - tracing.py:L332-374",
+ "cellId": "4538a8ff-b3f5-413e-bf2c-a54c814a02a3",
+ "visible": true,
+ "startLine": 332,
+ "endLine": 374,
+ "parentCellId": "899581ef-1635-481c-951a-2d940bfb9f63",
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "simSteps": [
+ {
+ "simulationKey": "Centralized Prompt Management and Tracing",
+ "simStepId": "9eabc020-4c8f-436c-8c4d-2323eff67c40"
+ }
+ ]
+ },
+ "fe0b98d3-db4b-4696-ac93-8da68a9de835": {
+ "path": "fe0b98d3-db4b-4696-ac93-8da68a9de835",
+ "cellName": "Flow 1\n- Background\nSync: Fetcher\nThread Starts\nPolling",
+ "cellId": "fe0b98d3-db4b-4696-ac93-8da68a9de835",
+ "visible": true,
+ "parentCellId": "c32f5b07-95b0-4ebc-ab5d-682a5ca49169"
+ },
+ "generated-edge-simstep-06407371-aca7-4481-a157-da54ad065406-fe0b98d3-db4b-4696-ac93-8da68a9de835": {
+ "path": "generated-edge-simstep-06407371-aca7-4481-a157-da54ad065406-fe0b98d3-db4b-4696-ac93-8da68a9de835",
+ "fileName": "fetcher.py",
+ "cellName": "Flow 1 - Background Sync: Fetcher Thread Starts Polling",
+ "cellId": "fe0b98d3-db4b-4696-ac93-8da68a9de835",
+ "visible": true,
+ "startLine": 139,
+ "endLine": 145,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/fetcher.py",
+ "simSteps": [
+ {
+ "simulationKey": "Centralized Prompt Management and Tracing",
+ "simStepId": "06407371-aca7-4481-a157-da54ad065406"
+ }
+ ]
+ },
+ "27821820-8ab4-445b-860c-2318e372c098": {
+ "path": "27821820-8ab4-445b-860c-2318e372c098",
+ "cellName": "Flow 1\n- Background\nSync: Transmit\nPrompt Data\nto Registry",
+ "cellId": "27821820-8ab4-445b-860c-2318e372c098",
+ "visible": true,
+ "parentCellId": "a85538e0-fc7e-4231-914f-e84dcdb1e303"
+ },
+ "generated-edge-simstep-5a9ee8ae-ee92-40db-a5db-baacac9d07e2-27821820-8ab4-445b-860c-2318e372c098": {
+ "path": "generated-edge-simstep-5a9ee8ae-ee92-40db-a5db-baacac9d07e2-27821820-8ab4-445b-860c-2318e372c098",
+ "fileName": "fetcher.py",
+ "cellName": "Flow 1 - Background Sync: Transmit Prompt Data to Registry",
+ "cellId": "27821820-8ab4-445b-860c-2318e372c098",
+ "visible": true,
+ "startLine": 156,
+ "endLine": 156,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/fetcher.py",
+ "simSteps": [
+ {
+ "simulationKey": "Centralized Prompt Management and Tracing",
+ "simStepId": "5a9ee8ae-ee92-40db-a5db-baacac9d07e2"
+ }
+ ]
+ },
+ "91766d72-8b41-4212-a38e-4433160c9747": {
+ "path": "91766d72-8b41-4212-a38e-4433160c9747",
+ "cellName": "Flow 2\n- Usage:\nForward Call\nto Prompt\nRegistry Client",
+ "cellId": "91766d72-8b41-4212-a38e-4433160c9747",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-b763749e-8c32-435a-9937-8d568e3d1460-91766d72-8b41-4212-a38e-4433160c9747": {
+ "path": "generated-edge-simstep-b763749e-8c32-435a-9937-8d568e3d1460-91766d72-8b41-4212-a38e-4433160c9747",
+ "fileName": "prompt_registry_example_app.py",
+ "cellName": "Flow 2 - Usage: Forward Call to Prompt Registry Client",
+ "cellId": "91766d72-8b41-4212-a38e-4433160c9747",
+ "visible": true,
+ "startLine": 4,
+ "endLine": 5,
+ "parentPath": "packages/sample-app/sample_app/prompt_registry_example_app.py",
+ "simSteps": [
+ {
+ "simulationKey": "Centralized Prompt Management and Tracing",
+ "simStepId": "b763749e-8c32-435a-9937-8d568e3d1460"
+ }
+ ]
+ },
+ "1308391f-1710-4cef-87fc-69adb64bc548": {
+ "path": "1308391f-1710-4cef-87fc-69adb64bc548",
+ "cellName": "Flow 2\n- Usage:\nSet Prompt\nMetadata in\nTracing Context",
+ "cellId": "1308391f-1710-4cef-87fc-69adb64bc548",
+ "visible": true,
+ "parentCellId": "e9518cef-9824-46d5-bdc4-dbc71345f8b5"
+ },
+ "generated-edge-simstep-ac86c08e-8ba3-4623-a688-c24b71253d01-1308391f-1710-4cef-87fc-69adb64bc548": {
+ "path": "generated-edge-simstep-ac86c08e-8ba3-4623-a688-c24b71253d01-1308391f-1710-4cef-87fc-69adb64bc548",
+ "fileName": "client.py",
+ "cellName": "Flow 2 - Usage: Set Prompt Metadata in Tracing Context",
+ "cellId": "1308391f-1710-4cef-87fc-69adb64bc548",
+ "visible": true,
+ "startLine": 82,
+ "endLine": 89,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/prompts/client.py",
+ "simSteps": [
+ {
+ "simulationKey": "Centralized Prompt Management and Tracing",
+ "simStepId": "ac86c08e-8ba3-4623-a688-c24b71253d01"
+ }
+ ]
+ },
+ "3b259b5f-7327-42c1-809f-5bc2f3079d6f": {
+ "path": "3b259b5f-7327-42c1-809f-5bc2f3079d6f",
+ "cellName": "Flow 2\n- Usage:\nReturn Rendered\nArguments to\nApplication",
+ "cellId": "3b259b5f-7327-42c1-809f-5bc2f3079d6f",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-82d12cc3-f33b-400e-9dc3-e399a38ca467-3b259b5f-7327-42c1-809f-5bc2f3079d6f": {
+ "path": "generated-edge-simstep-82d12cc3-f33b-400e-9dc3-e399a38ca467-3b259b5f-7327-42c1-809f-5bc2f3079d6f",
+ "fileName": "client.py",
+ "cellName": "Flow 2 - Usage: Return Rendered Arguments to Application",
+ "cellId": "3b259b5f-7327-42c1-809f-5bc2f3079d6f",
+ "visible": true,
+ "startLine": 16,
+ "endLine": 16,
+ "parentPath": "packages/traceloop-sdk/traceloop/sdk/prompts/client.py",
+ "simSteps": [
+ {
+ "simulationKey": "Centralized Prompt Management and Tracing",
+ "simStepId": "82d12cc3-f33b-400e-9dc3-e399a38ca467"
+ }
+ ]
+ },
+ "c42f5c53-690a-4a99-8bde-bd859f53bdd6": {
+ "path": "c42f5c53-690a-4a99-8bde-bd859f53bdd6",
+ "cellName": "Flow 2\n- Usage:\nInstrumented Call\nStarts a\nNew Span",
+ "cellId": "c42f5c53-690a-4a99-8bde-bd859f53bdd6",
+ "visible": true,
+ "parentCellId": "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f"
+ },
+ "generated-edge-simstep-a6dcb020-6b5c-4272-a022-b097307ff5e7-c42f5c53-690a-4a99-8bde-bd859f53bdd6": {
+ "path": "generated-edge-simstep-a6dcb020-6b5c-4272-a022-b097307ff5e7-c42f5c53-690a-4a99-8bde-bd859f53bdd6",
+ "fileName": "prompt_registry_example_app.py",
+ "cellName": "Flow 2 - Usage: Instrumented Call Starts a New Span",
+ "cellId": "c42f5c53-690a-4a99-8bde-bd859f53bdd6",
+ "visible": true,
+ "startLine": 298,
+ "endLine": 298,
+ "parentPath": "packages/sample-app/sample_app/prompt_registry_example_app.py",
+ "simSteps": [
+ {
+ "simulationKey": "Centralized Prompt Management and Tracing",
+ "simStepId": "a6dcb020-6b5c-4272-a022-b097307ff5e7"
+ }
+ ]
+ },
+ "01398b8a-89f4-4b89-b45c-a4e9a9b69c84": {
+ "path": "01398b8a-89f4-4b89-b45c-a4e9a9b69c84",
+ "cellName": "utils.py",
+ "cellId": "01398b8a-89f4-4b89-b45c-a4e9a9b69c84",
+ "visible": true,
+ "parentCellId": "1cdd7ac2-6148-4861-8505-26c0ba9db123"
+ },
+ "4b1e411d-3b8d-4f22-999b-ae9f9bef3187": {
+ "path": "4b1e411d-3b8d-4f22-999b-ae9f9bef3187",
+ "cellName": "event_emitter.py",
+ "cellId": "4b1e411d-3b8d-4f22-999b-ae9f9bef3187",
+ "visible": true,
+ "parentCellId": "99e901b3-bd6c-4cc4-a911-f3da77b4cbd2"
+ },
+ "8b557909-2816-4de1-a510-fab328382534": {
+ "path": "8b557909-2816-4de1-a510-fab328382534",
+ "cellName": "LLM Call Intercepted - chat_wrappers.py:L269-286",
+ "cellId": "8b557909-2816-4de1-a510-fab328382534",
+ "visible": true,
+ "parentCellId": "e850f5ad-f9cd-4d3d-8894-d24ca38dce6d"
+ },
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py-simstep-463c9e3f-53d7-4b44-bfc0-d8d4e710586e": {
+ "path": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py-simstep-463c9e3f-53d7-4b44-bfc0-d8d4e710586e",
+ "fileName": "chat_wrappers.py",
+ "wiki": "An application makes a call to an LLM provider (e.g., OpenAI). The OpenLLMetry instrumentation wrapper intercepts this call to begin tracing, create a span, and prepare for event emission.",
+ "cellName": "LLM Call Intercepted - chat_wrappers.py:L269-286",
+ "cellId": "8b557909-2816-4de1-a510-fab328382534",
+ "visible": true,
+ "startLine": 269,
+ "endLine": 286,
+ "parentCellId": "e850f5ad-f9cd-4d3d-8894-d24ca38dce6d",
+ "parentPath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py",
+ "simSteps": [
+ {
+ "simulationKey": "Controlling Data Privacy by Toggling Content Logging",
+ "simStepId": "463c9e3f-53d7-4b44-bfc0-d8d4e710586e"
+ }
+ ]
+ },
+ "19bf0025-dff2-423b-bf45-c808b53d5305": {
+ "path": "19bf0025-dff2-423b-bf45-c808b53d5305",
+ "cellName": "Check Privacy Setting - utils.py:L176-179",
+ "cellId": "19bf0025-dff2-423b-bf45-c808b53d5305",
+ "visible": true,
+ "parentCellId": "01398b8a-89f4-4b89-b45c-a4e9a9b69c84"
+ },
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py-simstep-e75273c2-4fe4-4a5a-a4c8-1026297adf5f": {
+ "path": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py-simstep-e75273c2-4fe4-4a5a-a4c8-1026297adf5f",
+ "fileName": "utils.py",
+ "wiki": "Before emitting the event, the `should_send_prompts()` utility function is called. It checks the `TRACELOOP_TRACE_CONTENT` environment variable to determine if the user has opted out of logging sensitive data.",
+ "cellName": "Check Privacy Setting - utils.py:L176-179",
+ "cellId": "19bf0025-dff2-423b-bf45-c808b53d5305",
+ "visible": true,
+ "startLine": 176,
+ "endLine": 179,
+ "parentCellId": "01398b8a-89f4-4b89-b45c-a4e9a9b69c84",
+ "parentPath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py",
+ "simSteps": [
+ {
+ "simulationKey": "Controlling Data Privacy by Toggling Content Logging",
+ "simStepId": "e75273c2-4fe4-4a5a-a4c8-1026297adf5f"
+ }
+ ]
+ },
+ "e063ff47-1113-4cf8-9c24-e303b45cc51c": {
+ "path": "e063ff47-1113-4cf8-9c24-e303b45cc51c",
+ "cellName": "Conditionally Redact Content - event_emitter.py:L72-76",
+ "cellId": "e063ff47-1113-4cf8-9c24-e303b45cc51c",
+ "visible": true,
+ "parentCellId": "4b1e411d-3b8d-4f22-999b-ae9f9bef3187"
+ },
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py-simstep-a6d5dfa3-82f2-485a-aa05-83a239ace92c": {
+ "path": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py-simstep-a6d5dfa3-82f2-485a-aa05-83a239ace92c",
+ "fileName": "event_emitter.py",
+ "wiki": "Based on the `false` decision, the event emitter enters a conditional block that removes the 'content' key from the event's body. This action prevents sensitive prompt and completion data from being logged.",
+ "cellName": "Conditionally Redact Content - event_emitter.py:L72-76",
+ "cellId": "e063ff47-1113-4cf8-9c24-e303b45cc51c",
+ "visible": true,
+ "startLine": 72,
+ "endLine": 76,
+ "parentCellId": "4b1e411d-3b8d-4f22-999b-ae9f9bef3187",
+ "parentPath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py",
+ "simSteps": [
+ {
+ "simulationKey": "Controlling Data Privacy by Toggling Content Logging",
+ "simStepId": "a6d5dfa3-82f2-485a-aa05-83a239ace92c"
+ }
+ ]
+ },
+ "7c76bd7f-0032-4c36-bd2c-98493102ffdc": {
+ "path": "7c76bd7f-0032-4c36-bd2c-98493102ffdc",
+ "cellName": "Export Trace Without Sensitive Data - event_emitter.py:L80",
+ "cellId": "7c76bd7f-0032-4c36-bd2c-98493102ffdc",
+ "visible": true,
+ "parentCellId": "4b1e411d-3b8d-4f22-999b-ae9f9bef3187"
+ },
+ "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py-simstep-1c00335e-9318-4735-90a9-147ff9280626": {
+ "path": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py-simstep-1c00335e-9318-4735-90a9-147ff9280626",
+ "fileName": "event_emitter.py",
+ "wiki": "The EventLogger processes the event, which is then sent to the configured observability backend (e.g., Traceloop, Datadog). The final exported trace correctly omits the sensitive prompt content, fulfilling the privacy requirement.",
+ "cellName": "Export Trace Without Sensitive Data - event_emitter.py:L80",
+ "cellId": "7c76bd7f-0032-4c36-bd2c-98493102ffdc",
+ "visible": true,
+ "startLine": 80,
+ "endLine": 80,
+ "parentCellId": "4b1e411d-3b8d-4f22-999b-ae9f9bef3187",
+ "parentPath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py",
+ "simSteps": [
+ {
+ "simulationKey": "Controlling Data Privacy by Toggling Content Logging",
+ "simStepId": "1c00335e-9318-4735-90a9-147ff9280626"
+ }
+ ]
+ },
+ "43fae1c6-55e9-4c05-acf4-96942396833b": {
+ "path": "43fae1c6-55e9-4c05-acf4-96942396833b",
+ "cellName": "Prepare Event\nData",
+ "cellId": "43fae1c6-55e9-4c05-acf4-96942396833b",
+ "visible": true,
+ "parentCellId": "1cdd7ac2-6148-4861-8505-26c0ba9db123"
+ },
+ "generated-edge-simstep-ee11367e-d702-49f7-845e-e3fa288f7d68-43fae1c6-55e9-4c05-acf4-96942396833b": {
+ "path": "generated-edge-simstep-ee11367e-d702-49f7-845e-e3fa288f7d68-43fae1c6-55e9-4c05-acf4-96942396833b",
+ "fileName": "chat_wrappers.py",
+ "cellName": "Prepare Event Data",
+ "cellId": "43fae1c6-55e9-4c05-acf4-96942396833b",
+ "visible": true,
+ "startLine": 273,
+ "endLine": 280,
+ "parentPath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py",
+ "simSteps": [
+ {
+ "simulationKey": "Controlling Data Privacy by Toggling Content Logging",
+ "simStepId": "ee11367e-d702-49f7-845e-e3fa288f7d68"
+ }
+ ]
+ },
+ "71e4295c-8960-4f5e-8328-5b7e7d5d99db": {
+ "path": "71e4295c-8960-4f5e-8328-5b7e7d5d99db",
+ "cellName": "Transmit Privacy\nDecision",
+ "cellId": "71e4295c-8960-4f5e-8328-5b7e7d5d99db",
+ "visible": true,
+ "parentCellId": "1cdd7ac2-6148-4861-8505-26c0ba9db123"
+ },
+ "generated-edge-simstep-d6a4b37e-c7d9-40a6-95ea-b3157f27d546-71e4295c-8960-4f5e-8328-5b7e7d5d99db": {
+ "path": "generated-edge-simstep-d6a4b37e-c7d9-40a6-95ea-b3157f27d546-71e4295c-8960-4f5e-8328-5b7e7d5d99db",
+ "fileName": "utils.py",
+ "cellName": "Transmit Privacy Decision",
+ "cellId": "71e4295c-8960-4f5e-8328-5b7e7d5d99db",
+ "visible": true,
+ "startLine": 177,
+ "endLine": 177,
+ "parentPath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py",
+ "simSteps": [
+ {
+ "simulationKey": "Controlling Data Privacy by Toggling Content Logging",
+ "simStepId": "d6a4b37e-c7d9-40a6-95ea-b3157f27d546"
+ }
+ ]
+ },
+ "46bc93e7-fe28-466d-ba85-e4159e5f4d45": {
+ "path": "46bc93e7-fe28-466d-ba85-e4159e5f4d45",
+ "cellName": "Pass Redacted\nEvent to\nLogger",
+ "cellId": "46bc93e7-fe28-466d-ba85-e4159e5f4d45",
+ "visible": true,
+ "parentCellId": "4b1e411d-3b8d-4f22-999b-ae9f9bef3187"
+ },
+ "generated-edge-simstep-5d5417b8-fdd9-4886-a0aa-9fdc369dfe65-46bc93e7-fe28-466d-ba85-e4159e5f4d45": {
+ "path": "generated-edge-simstep-5d5417b8-fdd9-4886-a0aa-9fdc369dfe65-46bc93e7-fe28-466d-ba85-e4159e5f4d45",
+ "fileName": "event_emitter.py",
+ "cellName": "Pass Redacted Event to Logger",
+ "cellId": "46bc93e7-fe28-466d-ba85-e4159e5f4d45",
+ "visible": true,
+ "startLine": 80,
+ "endLine": 80,
+ "parentPath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py",
+ "simSteps": [
+ {
+ "simulationKey": "Controlling Data Privacy by Toggling Content Logging",
+ "simStepId": "5d5417b8-fdd9-4886-a0aa-9fdc369dfe65"
+ }
+ ]
+ }
+ },
+ "simulations": {
+ "Automatic Instrumentation of LLM and AI Service Calls": {
+ "name": "Automatic Instrumentation of LLM and AI Service Calls",
+ "simSteps": [
+ {
+ "simStepId": "495eb957-b386-4fe2-96d2-404854587293",
+ "diagramNodeId": "a5064ce5-ce04-4763-b886-c3f1cdaadcf3",
+ "simStepLabel": "OpenAI Instrumentation Flow: Initialization Loop",
+ "simStepDescription": "During `Traceloop.init()`, the `init_instrumentations` function iterates through a set of supported libraries. When it finds the OpenAI instrument, it calls `init_openai_instrumentor` to begin the instrumentation process.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "525",
+ "endLine": "527",
+ "relevantVariables": [
+ "init_instrumentations",
+ "instrument",
+ "Instruments.OPENAI",
+ "init_openai_instrumentor"
+ ]
+ },
+ "inputDataExample": "{\"instruments\": [\"openai\", \"anthropic\", \"bedrock\"], \"block_instruments\": []}",
+ "outputDataExample": "{\"instrument\": \"OPENAI\"}"
+ },
+ {
+ "simStepId": "fa73c3d9-6992-4283-b094-035b424b33df",
+ "diagramNodeId": "aafb13cc-ecc7-4107-ba2c-496d4693d9be",
+ "simStepLabel": "OpenAI Instrumentation Flow: Config Propagation",
+ "simStepDescription": "Configuration options, such as whether to enrich metrics with token usage, are passed to the OpenAI instrumentor initialization function.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "526",
+ "endLine": "526",
+ "relevantVariables": [
+ "init_openai_instrumentor",
+ "should_enrich_metrics",
+ "base64_image_uploader"
+ ]
+ },
+ "inputDataExample": "{\"should_enrich_metrics\": true, \"base64_image_uploader\": \"\"}",
+ "outputDataExample": "{\"should_enrich_metrics\": true, \"base64_image_uploader\": \"\"}"
+ },
+ {
+ "simStepId": "b93f443f-1915-4295-852b-53d37f1c0040",
+ "diagramNodeId": "a64bd23e-a768-4ace-bac3-106b25bbd62e",
+ "simStepLabel": "OpenAI Instrumentation Flow: Instrumentor Creation",
+ "simStepDescription": "The `init_openai_instrumentor` function checks if the `openai` package is installed, then creates an instance of `OpenAIInstrumentor`, passing in configuration.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "579",
+ "endLine": "585",
+ "relevantVariables": [
+ "init_openai_instrumentor",
+ "OpenAIInstrumentor"
+ ]
+ },
+ "inputDataExample": "{\"should_enrich_metrics\": true, \"base64_image_uploader\": \"\"}",
+ "outputDataExample": "{\"instrumentor\": \"\"}"
+ },
+ {
+ "simStepId": "d295e11a-a3a9-4840-b972-463d7b53a9a5",
+ "diagramNodeId": "767057a5-983b-465e-b9d4-347a346f4c5c",
+ "simStepLabel": "OpenAI Instrumentation Flow: Instrumentor Instance Transfer",
+ "simStepDescription": "The created `OpenAIInstrumentor` instance is ready to apply the instrumentation.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "587",
+ "endLine": "587",
+ "relevantVariables": [
+ "instrumentor"
+ ]
+ },
+ "inputDataExample": "{\"instrumentor\": \"\"}",
+ "outputDataExample": "{\"instrumentor\": \"\"}"
+ },
+ {
+ "simStepId": "38901d04-f97e-4a98-a76d-8e3e66f30979",
+ "diagramNodeId": "9de2976a-ee82-4f8e-a21e-025d9b0f3419",
+ "simStepLabel": "OpenAI Instrumentation Flow: Applying Instrumentation (Monkey-Patching)",
+ "simStepDescription": "The `instrument()` method is called on the `OpenAIInstrumentor` instance. This action 'monkey-patches' the OpenAI client library, wrapping its methods (like `chat.completions.create`) with custom logic to create OpenTelemetry spans.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "588",
+ "endLine": "589",
+ "relevantVariables": [
+ "instrumentor",
+ "instrument"
+ ]
+ },
+ "inputDataExample": "{\"instrumentor\": \"\"}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "e5eada1b-1318-4e26-87f7-7b3b041e1eab",
+ "diagramNodeId": "5167e00f-7c6f-4ebd-9ec0-c1131e74b1f6",
+ "simStepLabel": "OpenAI Instrumentation Flow: Instrumented Function Ready",
+ "simStepDescription": "After instrumentation, when the user's application calls an OpenAI method, it's transparently intercepted by the OpenLLMetry wrapper.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py",
+ "startLine": "8",
+ "endLine": "11",
+ "relevantVariables": [
+ "OpenAIInstrumentor"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "c4181fa3-547f-4786-a301-7bb3a4edff81",
+ "diagramNodeId": "8f7dccf0-ce3d-49b8-9f70-34da41ac2e79",
+ "simStepLabel": "OpenAI Instrumentation Flow: Span Creation on API Call",
+ "simStepDescription": "When the application calls an instrumented OpenAI method (e.g., `client.chat.completions.create`), the wrapper function executes. It starts a new OpenTelemetry span and sets initial attributes like the model name and prompt messages.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py",
+ "startLine": "8",
+ "endLine": "22",
+ "relevantVariables": [
+ "OpenAIInstrumentor"
+ ]
+ },
+ "inputDataExample": "{\"client\": \"OpenAI()\", \"model\": \"gpt-4\", \"messages\": [{\"role\": \"user\", \"content\": \"Tell me a joke.\"}]}",
+ "outputDataExample": "{\"span_id\": \"0x1c8b733b8a3c8e4a\", \"trace_id\": \"0x8a1b2c3d4e5f6789\", \"attributes\": {\"llm.request.model\": \"gpt-4\", \"llm.prompts.0.user\": \"Tell me a joke.\"}}"
+ },
+ {
+ "simStepId": "9fbd826f-3f23-40a8-96f0-06373b2680e1",
+ "diagramNodeId": "0af91fc6-e00c-4e2b-aaf3-1adc6d70f785",
+ "simStepLabel": "OpenAI Instrumentation Flow: Return OpenAI Response",
+ "simStepDescription": "After the original OpenAI method completes, its response is passed back to the wrapper function.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py",
+ "startLine": "8",
+ "endLine": "22",
+ "relevantVariables": []
+ },
+ "inputDataExample": "{\"id\": \"chatcmpl-123\", \"object\": \"chat.completion\", \"model\": \"gpt-4-0613\", \"choices\": [{\"message\": {\"role\": \"assistant\", \"content\": \"Why did the scarecrow win an award? Because he was outstanding in his field!\"}}], \"usage\": {\"prompt_tokens\": 10, \"completion_tokens\": 15, \"total_tokens\": 25}}",
+ "outputDataExample": "{\"id\": \"chatcmpl-123\", \"object\": \"chat.completion\", \"model\": \"gpt-4-0613\", \"choices\": [{\"message\": {\"role\": \"assistant\", \"content\": \"Why did the scarecrow win an award? Because he was outstanding in his field!\"}}], \"usage\": {\"prompt_tokens\": 10, \"completion_tokens\": 15, \"total_tokens\": 25}}"
+ },
+ {
+ "simStepId": "cf56fb6c-c377-42d6-a5fd-fd80104f6e0c",
+ "diagramNodeId": "c97e2e00-aa3b-45f0-80ba-58a9e42b2c12",
+ "simStepLabel": "OpenAI Instrumentation Flow: Finalize Span",
+ "simStepDescription": "The wrapper function processes the response, adding completion content and token usage to the span's attributes. It then sets the span's status to OK and ends the span, making it available for export.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py",
+ "startLine": "8",
+ "endLine": "22",
+ "relevantVariables": [
+ "OpenAIInstrumentor"
+ ]
+ },
+ "inputDataExample": "{\"span_id\": \"0x1c8b733b8a3c8e4a\", \"response\": {\"id\": \"chatcmpl-123\", \"usage\": {\"completion_tokens\": 15}}}",
+ "outputDataExample": "{\"span_id\": \"0x1c8b733b8a3c8e4a\", \"status\": \"OK\", \"attributes\": {\"llm.request.model\": \"gpt-4\", \"llm.responses.0.assistant\": \"Why did the scarecrow win an award? Because he was outstanding in his field!\", \"llm.usage.completion_tokens\": 15}}"
+ },
+ {
+ "simStepId": "d90f30fb-795e-457e-b213-4ba0b604e994",
+ "diagramNodeId": "e75ebc36-3823-486a-99cb-00401cd83ef1",
+ "simStepLabel": "Anthropic Instrumentation Flow: Initialization Loop",
+ "simStepDescription": "During `Traceloop.init()`, the `init_instrumentations` function finds the Anthropic instrument and calls `init_anthropic_instrumentor` to start the instrumentation process.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "459",
+ "endLine": "462",
+ "relevantVariables": [
+ "init_instrumentations",
+ "instrument",
+ "Instruments.ANTHROPIC",
+ "init_anthropic_instrumentor"
+ ]
+ },
+ "inputDataExample": "{\"instruments\": [\"openai\", \"anthropic\", \"bedrock\"], \"block_instruments\": []}",
+ "outputDataExample": "{\"instrument\": \"ANTHROPIC\"}"
+ },
+ {
+ "simStepId": "244b3bf5-7a0f-49a1-8597-ace1b9b6e9fc",
+ "diagramNodeId": "13d0986e-7572-48f9-9d67-b95bbf9da40b",
+ "simStepLabel": "Anthropic Instrumentation Flow: Config Propagation",
+ "simStepDescription": "Configuration options are passed to the Anthropic instrumentor initialization function.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "460",
+ "endLine": "460",
+ "relevantVariables": [
+ "init_anthropic_instrumentor",
+ "should_enrich_metrics",
+ "base64_image_uploader"
+ ]
+ },
+ "inputDataExample": "{\"should_enrich_metrics\": true, \"base64_image_uploader\": \"\"}",
+ "outputDataExample": "{\"should_enrich_metrics\": true, \"base64_image_uploader\": \"\"}"
+ },
+ {
+ "simStepId": "b6f9d65c-d2a8-424c-8c41-c25d6b181c3f",
+ "diagramNodeId": "7c30c912-6f5b-4b0b-afa7-e951758a032e",
+ "simStepLabel": "Anthropic Instrumentation Flow: Instrumentor Creation",
+ "simStepDescription": "The `init_anthropic_instrumentor` function checks if the `anthropic` package is installed and then creates an instance of `AnthropicInstrumentor`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "603",
+ "endLine": "609",
+ "relevantVariables": [
+ "init_anthropic_instrumentor",
+ "AnthropicInstrumentor"
+ ]
+ },
+ "inputDataExample": "{\"should_enrich_metrics\": true}",
+ "outputDataExample": "{\"instrumentor\": \"\"}"
+ },
+ {
+ "simStepId": "2c71ace1-f523-4142-a738-5dee224bb516",
+ "diagramNodeId": "aa1bcafd-33eb-4953-9e61-0df40ce54d44",
+ "simStepLabel": "Anthropic Instrumentation Flow: Instrumentor Instance Transfer",
+ "simStepDescription": "The created `AnthropicInstrumentor` instance is ready to apply the instrumentation.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "611",
+ "endLine": "611",
+ "relevantVariables": [
+ "instrumentor"
+ ]
+ },
+ "inputDataExample": "{\"instrumentor\": \"\"}",
+ "outputDataExample": "{\"instrumentor\": \"\"}"
+ },
+ {
+ "simStepId": "56392a21-e44f-45d7-a1c5-699d61dece4c",
+ "diagramNodeId": "0e19005c-8529-4600-a9fe-e771ecaafd1b",
+ "simStepLabel": "Anthropic Instrumentation Flow: Applying Instrumentation (Monkey-Patching)",
+ "simStepDescription": "The `instrument()` method is called on the `AnthropicInstrumentor` instance, which patches the Anthropic client library to intercept its method calls.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "612",
+ "endLine": "613",
+ "relevantVariables": [
+ "instrumentor",
+ "instrument"
+ ]
+ },
+ "inputDataExample": "{\"instrumentor\": \"\"}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "ea3614e2-7fcf-444f-8606-5d8185131fbe",
+ "diagramNodeId": "85b1dcf0-c001-4766-95b8-a382c5242f00",
+ "simStepLabel": "Anthropic Instrumentation Flow: Instrumented Function Ready",
+ "simStepDescription": "Anthropic methods are now transparently intercepted by the OpenLLMetry wrapper.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "startLine": "758",
+ "endLine": "761",
+ "relevantVariables": [
+ "AnthropicInstrumentor"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "718546e8-1e30-40b8-ab1e-6334e5aab49a",
+ "diagramNodeId": "c449391d-7ab6-403a-89b1-1c3faebc22a1",
+ "simStepLabel": "Anthropic Instrumentation Flow: Span Creation on API Call",
+ "simStepDescription": "When the application calls an instrumented Anthropic method (e.g., `client.messages.create`), the wrapper function starts a new OpenTelemetry span and records request attributes.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "startLine": "758",
+ "endLine": "771",
+ "relevantVariables": [
+ "AnthropicInstrumentor"
+ ]
+ },
+ "inputDataExample": "{\"client\": \"Anthropic()\", \"model\": \"claude-3-opus-20240229\", \"messages\": [{\"role\": \"user\", \"content\": \"What is the capital of France?\"}]}",
+ "outputDataExample": "{\"span_id\": \"0x4f3e2d1c0b9a8765\", \"trace_id\": \"0x9f8e7d6c5b4a3210\", \"attributes\": {\"llm.request.model\": \"claude-3-opus-20240229\", \"llm.prompts.0.user\": \"What is the capital of France?\"}}"
+ },
+ {
+ "simStepId": "abe1bc6a-e1f4-4d2f-a283-c2e05a4b9a20",
+ "diagramNodeId": "7e6ba2a9-0576-4fe1-b6ce-833559168460",
+ "simStepLabel": "Anthropic Instrumentation Flow: Return Anthropic Response",
+ "simStepDescription": "The response from the Anthropic API is passed back to the wrapper function.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "startLine": "758",
+ "endLine": "771",
+ "relevantVariables": []
+ },
+ "inputDataExample": "{\"id\": \"msg_01Ad4B1345fG3x5sV5hSDFg\", \"type\": \"message\", \"role\": \"assistant\", \"content\": [{\"type\": \"text\", \"text\": \"The capital of France is Paris.\"}], \"model\": \"claude-3-opus-20240229\", \"usage\": {\"input_tokens\": 15, \"output_tokens\": 8}}",
+ "outputDataExample": "{\"id\": \"msg_01Ad4B1345fG3x5sV5hSDFg\", \"type\": \"message\", \"role\": \"assistant\", \"content\": [{\"type\": \"text\", \"text\": \"The capital of France is Paris.\"}], \"model\": \"claude-3-opus-20240229\", \"usage\": {\"input_tokens\": 15, \"output_tokens\": 8}}"
+ },
+ {
+ "simStepId": "47783bce-dc5a-4446-91ba-e500f774296c",
+ "diagramNodeId": "cf82d493-e1c7-4ff8-a276-a2fbb171f8b9",
+ "simStepLabel": "Anthropic Instrumentation Flow: Finalize Span",
+ "simStepDescription": "The wrapper adds response details and token usage to the span, sets its status to OK, and ends it.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "startLine": "758",
+ "endLine": "771",
+ "relevantVariables": [
+ "AnthropicInstrumentor"
+ ]
+ },
+ "inputDataExample": "{\"span_id\": \"0x4f3e2d1c0b9a8765\", \"response\": {\"usage\": {\"output_tokens\": 8}}}",
+ "outputDataExample": "{\"span_id\": \"0x4f3e2d1c0b9a8765\", \"status\": \"OK\", \"attributes\": {\"llm.request.model\": \"claude-3-opus-20240229\", \"llm.responses.0.assistant\": \"The capital of France is Paris.\", \"llm.usage.completion_tokens\": 8}}"
+ },
+ {
+ "simStepId": "94592627-18e0-463a-b652-bed9f38b08af",
+ "diagramNodeId": "23293abe-08a0-44cc-b736-0374ca417793",
+ "simStepLabel": "Bedrock Instrumentation Flow: Initialization Loop",
+ "simStepDescription": "The `init_instrumentations` function in `Traceloop.init()` finds the Bedrock instrument and calls `init_bedrock_instrumentor`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "463",
+ "endLine": "465",
+ "relevantVariables": [
+ "init_instrumentations",
+ "instrument",
+ "Instruments.BEDROCK",
+ "init_bedrock_instrumentor"
+ ]
+ },
+ "inputDataExample": "{\"instruments\": [\"openai\", \"anthropic\", \"bedrock\"], \"block_instruments\": []}",
+ "outputDataExample": "{\"instrument\": \"BEDROCK\"}"
+ },
+ {
+ "simStepId": "8457ca36-d791-4545-9996-16829c932a28",
+ "diagramNodeId": "1d4ce2b3-0fcd-45f6-92d0-e5647892e5dc",
+ "simStepLabel": "Bedrock Instrumentation Flow: Config Propagation",
+ "simStepDescription": "Configuration is passed to the Bedrock instrumentor initialization function.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "464",
+ "endLine": "464",
+ "relevantVariables": [
+ "init_bedrock_instrumentor",
+ "should_enrich_metrics"
+ ]
+ },
+ "inputDataExample": "{\"should_enrich_metrics\": true}",
+ "outputDataExample": "{\"should_enrich_metrics\": true}"
+ },
+ {
+ "simStepId": "be7997db-5caa-4d42-942c-2b998740fad0",
+ "diagramNodeId": "699c001a-7428-42f8-b5e1-afeeda1c92ff",
+ "simStepLabel": "Bedrock Instrumentation Flow: Instrumentor Creation",
+ "simStepDescription": "The `init_bedrock_instrumentor` function checks if the `boto3` package is installed and then creates an instance of `BedrockInstrumentor`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "906",
+ "endLine": "912",
+ "relevantVariables": [
+ "init_bedrock_instrumentor",
+ "BedrockInstrumentor"
+ ]
+ },
+ "inputDataExample": "{\"should_enrich_metrics\": true}",
+ "outputDataExample": "{\"instrumentor\": \"\"}"
+ },
+ {
+ "simStepId": "a8d267c1-c2a8-4e43-91b7-6af6fae001aa",
+ "diagramNodeId": "537e494b-8651-4ff0-a889-308cbba5a8be",
+ "simStepLabel": "Bedrock Instrumentation Flow: Instrumentor Instance Transfer",
+ "simStepDescription": "The created `BedrockInstrumentor` instance is ready to apply instrumentation.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "913",
+ "endLine": "913",
+ "relevantVariables": [
+ "instrumentor"
+ ]
+ },
+ "inputDataExample": "{\"instrumentor\": \"\"}",
+ "outputDataExample": "{\"instrumentor\": \"\"}"
+ },
+ {
+ "simStepId": "f62525ea-9862-4259-bf73-a79f9533679d",
+ "diagramNodeId": "6c067d9e-53bf-463b-89e7-5817c167d613",
+ "simStepLabel": "Bedrock Instrumentation Flow: Applying Instrumentation (Monkey-Patching)",
+ "simStepDescription": "The `instrument()` method is called on the `BedrockInstrumentor` instance, which patches the `boto3` client to intercept calls to the Bedrock service.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "914",
+ "endLine": "915",
+ "relevantVariables": [
+ "instrumentor",
+ "instrument"
+ ]
+ },
+ "inputDataExample": "{\"instrumentor\": \"\"}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "ad7ebde3-faf9-416b-b7f6-77f20931668c",
+ "diagramNodeId": "ceddc138-8470-4898-bba2-1a0b5512ea50",
+ "simStepLabel": "Bedrock Instrumentation Flow: Instrumented Function Ready",
+ "simStepDescription": "`boto3` calls to Bedrock are now transparently intercepted.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py",
+ "startLine": "558",
+ "endLine": "561",
+ "relevantVariables": [
+ "BedrockInstrumentor"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "d45a74dd-3e81-4f2f-b039-ce4e5d6531ee",
+ "diagramNodeId": "1d826639-4304-4fd1-b2ef-6a7f00803df2",
+ "simStepLabel": "Bedrock Instrumentation Flow: Span Creation on API Call",
+ "simStepDescription": "When the application calls `boto3_bedrock_client.invoke_model`, the wrapper function starts a new OpenTelemetry span, parsing the model ID and request body to set as attributes.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py",
+ "startLine": "558",
+ "endLine": "568",
+ "relevantVariables": [
+ "BedrockInstrumentor"
+ ]
+ },
+ "inputDataExample": "{\"client\": \"boto3.client('bedrock-runtime')\", \"modelId\": \"anthropic.claude-v2\", \"body\": \"{\\\"prompt\\\":\\\"\\\\n\\\\nHuman: What is the meaning of life?\\\\n\\\\nAssistant:\\\",\\\"max_tokens_to_sample\\\":300}\"}",
+ "outputDataExample": "{\"span_id\": \"0x0a1b2c3d4e5f6789\", \"trace_id\": \"0x7a8b9c0d1e2f3456\", \"attributes\": {\"llm.request.model\": \"anthropic.claude-v2\", \"llm.prompts.0.user\": \"What is the meaning of life?\"}}"
+ },
+ {
+ "simStepId": "098f8aa3-9fb1-47b6-bc00-9bf0050000a5",
+ "diagramNodeId": "09f03b4f-0394-4d98-acd1-33119a159cca",
+ "simStepLabel": "Bedrock Instrumentation Flow: Return Bedrock Response",
+ "simStepDescription": "The raw response from the Bedrock API is passed back to the wrapper function.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py",
+ "startLine": "558",
+ "endLine": "568",
+ "relevantVariables": []
+ },
+ "inputDataExample": "{\"body\": \"\", \"contentType\": \"application/json\", \"ResponseMetadata\": {\"HTTPStatusCode\": 200}}",
+ "outputDataExample": "{\"body\": \"\", \"contentType\": \"application/json\", \"ResponseMetadata\": {\"HTTPStatusCode\": 200}}"
+ },
+ {
+ "simStepId": "76bcb28b-c60e-4cb8-beb8-357e3ae22ab0",
+ "diagramNodeId": "45445a1a-a22b-4535-8be0-a630cd9940d4",
+ "simStepLabel": "Bedrock Instrumentation Flow: Finalize Span",
+ "simStepDescription": "The wrapper reads the streaming body, parses the completion and token usage, adds them to the span, sets the status to OK, and ends the span.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py",
+ "startLine": "558",
+ "endLine": "568",
+ "relevantVariables": [
+ "BedrockInstrumentor"
+ ]
+ },
+ "inputDataExample": "{\"span_id\": \"0x0a1b2c3d4e5f6789\", \"responseBody\": \"{\\\"completion\\\":\\\" 42.\\\",\\\"stop_reason\\\":\\\"max_tokens\\\"}\"}",
+ "outputDataExample": "{\"span_id\": \"0x0a1b2c3d4e5f6789\", \"status\": \"OK\", \"attributes\": {\"llm.request.model\": \"anthropic.claude-v2\", \"llm.responses.0.assistant\": \" 42.\", \"llm.usage.completion_tokens\": 2}}"
+ }
+ ],
+ "description": "- This is the core feature of OpenLLMetry, providing out-of-the-box observability for generative AI applications
- - Automatically captures interactions with a wide range of LLM providers including OpenAI, Anthropic, Cohere, and cloud services like AWS Bedrock and Vertex AI
- - Creates OpenTelemetry spans for each AI call, recording critical information such as the model name, prompts, completions, and token usage as span attributes
- - Requires minimal setup, often just a single
Traceloop - init() call, to start collecting detailed telemetry from AI service interactions
",
+ "simulationNodesAndEdges": {
+ "a5064ce5-ce04-4763-b886-c3f1cdaadcf3": {
+ "simStepIds": [
+ "495eb957-b386-4fe2-96d2-404854587293"
+ ]
+ },
+ "a64bd23e-a768-4ace-bac3-106b25bbd62e": {
+ "simStepIds": [
+ "b93f443f-1915-4295-852b-53d37f1c0040"
+ ]
+ },
+ "9de2976a-ee82-4f8e-a21e-025d9b0f3419": {
+ "simStepIds": [
+ "38901d04-f97e-4a98-a76d-8e3e66f30979"
+ ]
+ },
+ "8f7dccf0-ce3d-49b8-9f70-34da41ac2e79": {
+ "simStepIds": [
+ "c4181fa3-547f-4786-a301-7bb3a4edff81"
+ ]
+ },
+ "c97e2e00-aa3b-45f0-80ba-58a9e42b2c12": {
+ "simStepIds": [
+ "cf56fb6c-c377-42d6-a5fd-fd80104f6e0c"
+ ]
+ },
+ "e75ebc36-3823-486a-99cb-00401cd83ef1": {
+ "simStepIds": [
+ "d90f30fb-795e-457e-b213-4ba0b604e994"
+ ]
+ },
+ "7c30c912-6f5b-4b0b-afa7-e951758a032e": {
+ "simStepIds": [
+ "b6f9d65c-d2a8-424c-8c41-c25d6b181c3f"
+ ]
+ },
+ "0e19005c-8529-4600-a9fe-e771ecaafd1b": {
+ "simStepIds": [
+ "56392a21-e44f-45d7-a1c5-699d61dece4c"
+ ]
+ },
+ "c449391d-7ab6-403a-89b1-1c3faebc22a1": {
+ "simStepIds": [
+ "718546e8-1e30-40b8-ab1e-6334e5aab49a"
+ ]
+ },
+ "cf82d493-e1c7-4ff8-a276-a2fbb171f8b9": {
+ "simStepIds": [
+ "47783bce-dc5a-4446-91ba-e500f774296c"
+ ]
+ },
+ "23293abe-08a0-44cc-b736-0374ca417793": {
+ "simStepIds": [
+ "94592627-18e0-463a-b652-bed9f38b08af"
+ ]
+ },
+ "699c001a-7428-42f8-b5e1-afeeda1c92ff": {
+ "simStepIds": [
+ "be7997db-5caa-4d42-942c-2b998740fad0"
+ ]
+ },
+ "6c067d9e-53bf-463b-89e7-5817c167d613": {
+ "simStepIds": [
+ "f62525ea-9862-4259-bf73-a79f9533679d"
+ ]
+ },
+ "1d826639-4304-4fd1-b2ef-6a7f00803df2": {
+ "simStepIds": [
+ "d45a74dd-3e81-4f2f-b039-ce4e5d6531ee"
+ ]
+ },
+ "45445a1a-a22b-4535-8be0-a630cd9940d4": {
+ "simStepIds": [
+ "76bcb28b-c60e-4cb8-beb8-357e3ae22ab0"
+ ]
+ },
+ "aafb13cc-ecc7-4107-ba2c-496d4693d9be": {
+ "simStepIds": [
+ "fa73c3d9-6992-4283-b094-035b424b33df"
+ ]
+ },
+ "767057a5-983b-465e-b9d4-347a346f4c5c": {
+ "simStepIds": [
+ "d295e11a-a3a9-4840-b972-463d7b53a9a5"
+ ]
+ },
+ "5167e00f-7c6f-4ebd-9ec0-c1131e74b1f6": {
+ "simStepIds": [
+ "e5eada1b-1318-4e26-87f7-7b3b041e1eab"
+ ]
+ },
+ "0af91fc6-e00c-4e2b-aaf3-1adc6d70f785": {
+ "simStepIds": [
+ "9fbd826f-3f23-40a8-96f0-06373b2680e1"
+ ]
+ },
+ "13d0986e-7572-48f9-9d67-b95bbf9da40b": {
+ "simStepIds": [
+ "244b3bf5-7a0f-49a1-8597-ace1b9b6e9fc"
+ ]
+ },
+ "aa1bcafd-33eb-4953-9e61-0df40ce54d44": {
+ "simStepIds": [
+ "2c71ace1-f523-4142-a738-5dee224bb516"
+ ]
+ },
+ "85b1dcf0-c001-4766-95b8-a382c5242f00": {
+ "simStepIds": [
+ "ea3614e2-7fcf-444f-8606-5d8185131fbe"
+ ]
+ },
+ "7e6ba2a9-0576-4fe1-b6ce-833559168460": {
+ "simStepIds": [
+ "abe1bc6a-e1f4-4d2f-a283-c2e05a4b9a20"
+ ]
+ },
+ "1d4ce2b3-0fcd-45f6-92d0-e5647892e5dc": {
+ "simStepIds": [
+ "8457ca36-d791-4545-9996-16829c932a28"
+ ]
+ },
+ "537e494b-8651-4ff0-a889-308cbba5a8be": {
+ "simStepIds": [
+ "a8d267c1-c2a8-4e43-91b7-6af6fae001aa"
+ ]
+ },
+ "ceddc138-8470-4898-bba2-1a0b5512ea50": {
+ "simStepIds": [
+ "ad7ebde3-faf9-416b-b7f6-77f20931668c"
+ ]
+ },
+ "09f03b4f-0394-4d98-acd1-33119a159cca": {
+ "simStepIds": [
+ "098f8aa3-9fb1-47b6-bc00-9bf0050000a5"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "OpenAIInstrumentor, AnthropicInstrumentor, BedrockInstrumentor",
+ "generationPrompt": "Automatic Instrumentation of LLM and AI Service Calls",
+ "generationKeywords": "OpenAIInstrumentor, AnthropicInstrumentor, BedrockInstrumentor"
+ },
+ "Instrumentation of High-Level AI Frameworks": {
+ "name": "Instrumentation of High-Level AI Frameworks",
+ "simSteps": [
+ {
+ "simStepId": "38d4e5e9-96c0-4516-aa1f-929713a6d6e2",
+ "diagramNodeId": "97432fe9-bb52-43b2-9b07-7931040683c7",
+ "simStepLabel": "LangChain Flow: Instrumentation Initialization",
+ "simStepDescription": "When `Traceloop.init()` is called, the SDK's `init_instrumentations` function iterates through available instrumentations. If the 'langchain' package is detected, it calls `init_langchain_instrumentor` to begin the instrumentation process.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "734",
+ "endLine": "744",
+ "relevantVariables": [
+ "init_langchain_instrumentor",
+ "is_package_installed",
+ "LangchainInstrumentor"
+ ]
+ },
+ "inputDataExample": "{\"instruments\": [\"langchain\", \"openai\"]}",
+ "outputDataExample": "{\"status\": \"LangchainInstrumentor instance created and instrument() will be called\"}"
+ },
+ {
+ "simStepId": "f7c075b4-b8c7-4cf5-a8f7-f90cc840b9a7",
+ "diagramNodeId": "3efb13e1-d2a0-4c5e-84c0-31fcd671efa1",
+ "simStepLabel": "LangChain Flow: Call to instrument()",
+ "simStepDescription": "The SDK creates an instance of `LangchainInstrumentor` and invokes its `instrument()` method to apply the necessary patches to the LangChain library.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "743",
+ "endLine": "743",
+ "relevantVariables": [
+ "instrumentor.instrument"
+ ]
+ },
+ "inputDataExample": "{\"instrumentor_instance\": \"\"}",
+ "outputDataExample": "{\"instrumentor_instance\": \"\"}"
+ },
+ {
+ "simStepId": "332a3676-5b6f-4316-8c62-7f5ab27c927c",
+ "diagramNodeId": "e168c2b2-986c-4875-9d24-5c590363ae3c",
+ "simStepLabel": "LangChain Flow: Injecting Callback Handler",
+ "simStepDescription": "The `_instrument` method within `LangchainInstrumentor` patches LangChain's `BaseCallbackManager`. It wraps the `__init__` method to automatically inject `TraceloopCallbackHandler` into every LangChain component (like chains, agents, tools), enabling event capture.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py",
+ "startLine": "88",
+ "endLine": "92",
+ "relevantVariables": [
+ "TraceloopCallbackHandler",
+ "wrap_function_wrapper",
+ "_BaseCallbackManagerInitWrapper"
+ ]
+ },
+ "inputDataExample": "{\"tracer_provider\": \"\"}",
+ "outputDataExample": "{\"status\": \"langchain_core.callbacks.BaseCallbackManager.__init__ is now patched\"}"
+ },
+ {
+ "simStepId": "0745b1bf-72bb-4ea5-ae4a-45406fc15e2f",
+ "diagramNodeId": "80e6db4a-5a64-4436-8df8-d9c61f897283",
+ "simStepLabel": "LangChain Flow: Execution Triggers Callback",
+ "simStepDescription": "When an instrumented LangChain object (e.g., an LLMChain) is executed, its callback manager, now containing `TraceloopCallbackHandler`, triggers lifecycle methods like `on_chain_start` and `on_llm_end`, passing execution data to the handler.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py",
+ "startLine": "88",
+ "endLine": "90",
+ "relevantVariables": [
+ "traceloopCallbackHandler"
+ ]
+ },
+ "inputDataExample": "{\"event\": \"on_chain_start\", \"chain_name\": \"MySummaryChain\", \"inputs\": {\"text\": \"The quick brown fox...\"}}",
+ "outputDataExample": "{\"event\": \"on_chain_start\", \"chain_name\": \"MySummaryChain\", \"inputs\": {\"text\": \"The quick brown fox...\"}}"
+ },
+ {
+ "simStepId": "d2bfc7f7-0f5c-4a88-94cc-3153b1ef30f2",
+ "diagramNodeId": "b1d1424d-eb5d-46f2-aa8c-35d5a9d0496c",
+ "simStepLabel": "LangChain Flow: Span Creation",
+ "simStepDescription": "The `TraceloopCallbackHandler` receives data from LangChain events and uses the OpenTelemetry tracer to create and manage spans. For example, `on_chain_start` creates a new span representing the chain's execution, which becomes the parent for subsequent LLM calls or tool uses within that chain.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py",
+ "startLine": "88",
+ "endLine": "90",
+ "relevantVariables": [
+ "TraceloopCallbackHandler",
+ "tracer"
+ ]
+ },
+ "inputDataExample": "{\"callback_event\": \"on_chain_start\", \"serialized\": {\"id\": [\"MyChain\"], \"name\": \"MyChain\"}, \"inputs\": {\"question\": \"What is OpenTelemetry?\"}}",
+ "outputDataExample": "{\"span_id\": \"0x1a2b3c4d5e6f7890\", \"trace_id\": \"0x0987654321fedcba\", \"status\": \"STARTED\", \"name\": \"langchain.chain.run\"}"
+ },
+ {
+ "simStepId": "c96e2f40-1e60-4bc0-93cb-867b85be3dcb",
+ "diagramNodeId": "b4f85fd1-1ddc-43b8-8d56-dbaa6af4d3ca",
+ "simStepLabel": "LlamaIndex Flow: Instrumentation Initialization",
+ "simStepDescription": "When `Traceloop.init()` is called, the SDK's `init_instrumentations` function detects the 'llama-index' package. It then calls `init_llama_index_instrumentor` to start the instrumentation process for LlamaIndex.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "826",
+ "endLine": "836",
+ "relevantVariables": [
+ "init_llama_index_instrumentor",
+ "is_package_installed",
+ "LlamaIndexInstrumentor"
+ ]
+ },
+ "inputDataExample": "{\"instruments\": [\"llama-index\", \"openai\"]}",
+ "outputDataExample": "{\"status\": \"LlamaIndexInstrumentor instance created and instrument() will be called\"}"
+ },
+ {
+ "simStepId": "38a80bca-7b9d-4eab-9fa9-b8d338dfba73",
+ "diagramNodeId": "02bcaca2-3fa7-4f43-82ba-e27e7cf02d6d",
+ "simStepLabel": "LlamaIndex Flow: Call to instrument()",
+ "simStepDescription": "The SDK creates a `LlamaIndexInstrumentor` instance and calls its `instrument()` method, which applies the necessary patches to the LlamaIndex library.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "835",
+ "endLine": "835",
+ "relevantVariables": [
+ "instrumentor.instrument"
+ ]
+ },
+ "inputDataExample": "{\"instrumentor_instance\": \"\"}",
+ "outputDataExample": "{\"instrumentor_instance\": \"\"}"
+ },
+ {
+ "simStepId": "0677a566-758c-4170-90e2-92e4b43d453d",
+ "diagramNodeId": "ad409adb-66a2-4bdf-ad9f-f44f4fefb487",
+ "simStepLabel": "LlamaIndex Flow: Selecting Core vs. Legacy Instrumentor",
+ "simStepDescription": "The main `LlamaIndexInstrumentor` acts as a dispatcher. It contains instances of both `LlamaIndexInstrumentorFull` (for legacy versions) and `LlamaIndexInstrumentorCore`. Based on the installed LlamaIndex dependencies, the correct underlying instrumentor is used.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py",
+ "startLine": "51",
+ "endLine": "54",
+ "relevantVariables": [
+ "LlamaIndexInstrumentor",
+ "legacy",
+ "core"
+ ]
+ },
+ "inputDataExample": "{\"use_legacy_attributes\": true}",
+ "outputDataExample": "{\"selected_instrumentor\": \"LlamaIndexInstrumentorCore\"}"
+ },
+ {
+ "simStepId": "8046d8c3-ab92-45dc-95ce-5819d8e3816f",
+ "diagramNodeId": "3b49d87a-feb9-405b-9570-e18cf7fa76d1",
+ "simStepLabel": "LlamaIndex Flow: Triggering Core Instrumentation",
+ "simStepDescription": "The `instrument()` call is propagated to the selected sub-instrumentor (e.g., `LlamaIndexInstrumentorCore`), which then executes its `_instrument` method to apply the patches.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py",
+ "startLine": "114",
+ "endLine": "114",
+ "relevantVariables": [
+ "_instrument"
+ ]
+ },
+ "inputDataExample": "{\"instrumentor_to_use\": \"LlamaIndexInstrumentorCore\"}",
+ "outputDataExample": "{\"instrumentor_to_use\": \"LlamaIndexInstrumentorCore\"}"
+ },
+ {
+ "simStepId": "16f67a4b-07b8-4c96-809e-d6fc3bff09a1",
+ "diagramNodeId": "639b1979-276b-4543-b69d-563de2690a01",
+ "simStepLabel": "LlamaIndex Flow: Patching LlamaIndex Components",
+ "simStepDescription": "The `_instrument` method calls `apply_instrumentation`, which dynamically patches various LlamaIndex components. This includes wrapping the event dispatcher and instrumenting key classes like query engines, retrievers, and agents to intercept their execution.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py",
+ "startLine": "68",
+ "endLine": "97",
+ "relevantVariables": [
+ "apply_instrumentation",
+ "instrument_with_dispatcher",
+ "RetrieverQueryEngineInstrumentor",
+ "BaseAgentInstrumentor"
+ ]
+ },
+ "inputDataExample": "{\"module_name\": \"llama-index-core\", \"tracer_provider\": \"\"}",
+ "outputDataExample": "{\"status\": \"LlamaIndex components patched successfully\"}"
+ },
+ {
+ "simStepId": "f8883f84-707f-4496-957a-37d8bb381fc5",
+ "diagramNodeId": "28047a56-d5c0-4fc8-9649-ace49784dc0c",
+ "simStepLabel": "CrewAI Flow: Instrumentation Initialization",
+ "simStepDescription": "When `Traceloop.init()` is called, the SDK's `init_instrumentations` function detects the 'crewai' package is installed. It proceeds to call `init_crewai_instrumentor` to begin instrumenting the CrewAI framework.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "1120",
+ "endLine": "1130",
+ "relevantVariables": [
+ "init_crewai_instrumentor",
+ "is_package_installed",
+ "CrewAIInstrumentor"
+ ]
+ },
+ "inputDataExample": "{\"instruments\": [\"crewai\", \"openai\"]}",
+ "outputDataExample": "{\"status\": \"CrewAIInstrumentor instance created and instrument() will be called\"}"
+ },
+ {
+ "simStepId": "9ebdc409-4989-4800-b126-b86867b98432",
+ "diagramNodeId": "9158f5c2-3407-4920-9404-64553ac7fd9b",
+ "simStepLabel": "CrewAI Flow: Call to instrument()",
+ "simStepDescription": "The SDK instantiates `CrewAIInstrumentor` and calls its `instrument()` method. This triggers the patching process for the CrewAI library.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "1129",
+ "endLine": "1129",
+ "relevantVariables": [
+ "instrumentor.instrument"
+ ]
+ },
+ "inputDataExample": "{\"instrumentor_instance\": \"\"}",
+ "outputDataExample": "{\"instrumentor_instance\": \"\"}"
+ },
+ {
+ "simStepId": "4009f1e6-115e-4e60-a77e-8b71fd9df89a",
+ "diagramNodeId": "650a18e7-ab1a-4e5a-902c-3f5cf334ddf6",
+ "simStepLabel": "CrewAI Flow: Patching CrewAI Methods",
+ "simStepDescription": "The `_instrument` method in `CrewAIInstrumentor` uses `wrapt.wrap_function_wrapper` to patch key methods that define the CrewAI workflow, such as `Crew.kickoff`, `Agent.execute_task`, and `Task.execute_sync`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py",
+ "startLine": "27",
+ "endLine": "40",
+ "relevantVariables": [
+ "_instrument",
+ "wrap_function_wrapper",
+ "wrap_kickoff",
+ "wrap_agent_execute_task",
+ "wrap_task_execute"
+ ]
+ },
+ "inputDataExample": "{\"tracer_provider\": \"\"}",
+ "outputDataExample": "{\"status\": \"Crew.kickoff, Agent.execute_task, and other methods patched\"}"
+ },
+ {
+ "simStepId": "456e2376-3346-4aa2-985f-b69075551c2d",
+ "diagramNodeId": "4ce084ad-a94c-4523-87e2-74adc54b0ce5",
+ "simStepLabel": "CrewAI Flow: Execution Triggers Wrappers",
+ "simStepDescription": "When the user's application calls `crew.kickoff()`, the patched wrapper function is executed instead of the original method. This wrapper receives all the original arguments and the instance of the crew.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py",
+ "startLine": "37",
+ "endLine": "37",
+ "relevantVariables": [
+ "wrap_kickoff"
+ ]
+ },
+ "inputDataExample": "{\"crew_instance\": \"\", \"inputs\": {\"topic\": \"Latest trends in AI\"}}",
+ "outputDataExample": "{\"crew_instance\": \"\", \"inputs\": {\"topic\": \"Latest trends in AI\"}}"
+ },
+ {
+ "simStepId": "940f766b-13fe-4e2f-a4d5-792832e71f51",
+ "diagramNodeId": "224b7647-773c-4235-adab-a270d8e741c2",
+ "simStepLabel": "CrewAI Flow: Workflow Span Creation",
+ "simStepDescription": "The `wrap_kickoff` function initiates a top-level span for the entire `crewai.workflow`. It then calls the original `kickoff` method. The other wrappers for agents and tasks create nested spans, resulting in a hierarchical trace that mirrors the CrewAI execution structure.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py",
+ "startLine": "68",
+ "endLine": "72",
+ "relevantVariables": [
+ "wrap_kickoff",
+ "tracer.start_as_current_span"
+ ]
+ },
+ "inputDataExample": "{\"instance\": \"\", \"args\": [], \"kwargs\": {\"inputs\": {\"topic\": \"Latest trends in AI\"}}}",
+ "outputDataExample": "{\"span_id\": \"0x5e6f78901a2b3c4d\", \"trace_id\": \"0xcba987654321fed0\", \"status\": \"STARTED\", \"name\": \"crewai.workflow\"}"
+ }
+ ],
+ "description": "- Provides deep visibility into applications built with popular AI frameworks, translating their execution flows into structured traces
- - Integrates with frameworks like LangChain, LlamaIndex, and CrewAI using custom callback handlers or wrappers
- - Creates a hierarchical trace that mirrors the framework's structure, showing relationships between chains, agents, tools, and retrievers
- - Captures inputs and outputs for each component, making it easy to debug complex, multi-step AI workflows
",
+ "simulationNodesAndEdges": {
+ "97432fe9-bb52-43b2-9b07-7931040683c7": {
+ "simStepIds": [
+ "38d4e5e9-96c0-4516-aa1f-929713a6d6e2"
+ ]
+ },
+ "e168c2b2-986c-4875-9d24-5c590363ae3c": {
+ "simStepIds": [
+ "332a3676-5b6f-4316-8c62-7f5ab27c927c"
+ ]
+ },
+ "b1d1424d-eb5d-46f2-aa8c-35d5a9d0496c": {
+ "simStepIds": [
+ "d2bfc7f7-0f5c-4a88-94cc-3153b1ef30f2"
+ ]
+ },
+ "b4f85fd1-1ddc-43b8-8d56-dbaa6af4d3ca": {
+ "simStepIds": [
+ "c96e2f40-1e60-4bc0-93cb-867b85be3dcb"
+ ]
+ },
+ "ad409adb-66a2-4bdf-ad9f-f44f4fefb487": {
+ "simStepIds": [
+ "0677a566-758c-4170-90e2-92e4b43d453d"
+ ]
+ },
+ "639b1979-276b-4543-b69d-563de2690a01": {
+ "simStepIds": [
+ "16f67a4b-07b8-4c96-809e-d6fc3bff09a1"
+ ]
+ },
+ "28047a56-d5c0-4fc8-9649-ace49784dc0c": {
+ "simStepIds": [
+ "f8883f84-707f-4496-957a-37d8bb381fc5"
+ ]
+ },
+ "650a18e7-ab1a-4e5a-902c-3f5cf334ddf6": {
+ "simStepIds": [
+ "4009f1e6-115e-4e60-a77e-8b71fd9df89a"
+ ]
+ },
+ "224b7647-773c-4235-adab-a270d8e741c2": {
+ "simStepIds": [
+ "940f766b-13fe-4e2f-a4d5-792832e71f51"
+ ]
+ },
+ "3efb13e1-d2a0-4c5e-84c0-31fcd671efa1": {
+ "simStepIds": [
+ "f7c075b4-b8c7-4cf5-a8f7-f90cc840b9a7"
+ ]
+ },
+ "80e6db4a-5a64-4436-8df8-d9c61f897283": {
+ "simStepIds": [
+ "0745b1bf-72bb-4ea5-ae4a-45406fc15e2f"
+ ]
+ },
+ "02bcaca2-3fa7-4f43-82ba-e27e7cf02d6d": {
+ "simStepIds": [
+ "38a80bca-7b9d-4eab-9fa9-b8d338dfba73"
+ ]
+ },
+ "3b49d87a-feb9-405b-9570-e18cf7fa76d1": {
+ "simStepIds": [
+ "8046d8c3-ab92-45dc-95ce-5819d8e3816f"
+ ]
+ },
+ "9158f5c2-3407-4920-9404-64553ac7fd9b": {
+ "simStepIds": [
+ "9ebdc409-4989-4800-b126-b86867b98432"
+ ]
+ },
+ "4ce084ad-a94c-4523-87e2-74adc54b0ce5": {
+ "simStepIds": [
+ "456e2376-3346-4aa2-985f-b69075551c2d"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "LangchainInstrumentor, LlamaIndexInstrumentor, CrewAIInstrumentor",
+ "generationPrompt": "Instrumentation of High-Level AI Frameworks",
+ "generationKeywords": "LangchainInstrumentor, LlamaIndexInstrumentor, CrewAIInstrumentor"
+ },
+ "Automatic Instrumentation of Vector Database Operations for RAG": {
+ "name": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "simSteps": [
+ {
+ "simStepId": "7d34f0d6-28ad-47f2-a2fa-ad4005fd12da",
+ "diagramNodeId": "fa6da8af-2d90-483b-a4cf-92bd3cf6d18d",
+ "simStepLabel": "Flow: ChromaDB | Instrumentation Orchestration",
+ "simStepDescription": "The SDK's main initialization function, `init_instrumentations`, iterates through all supported libraries to check if they should be instrumented. This acts as the central dispatcher for auto-instrumentation of vector databases and other components.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "497",
+ "endLine": "507",
+ "relevantVariables": [
+ "init_instrumentations",
+ "instruments",
+ "block_instruments"
+ ]
+ },
+ "inputDataExample": "{\"should_enrich_metrics\": true, \"instruments\": [\"CHROMA\", \"OPENAI\", \"PINECONE\", \"QDRANT\"], \"block_instruments\": []}",
+ "outputDataExample": "{\"instrument_set\": true}"
+ },
+ {
+ "simStepId": "094072a9-c8b6-4211-b382-9632af076bdd",
+ "diagramNodeId": "a17b6fe4-a31b-47a6-9c8a-d88dfc259f2a",
+ "simStepLabel": "Flow: ChromaDB | Dispatch to Chroma Initializer",
+ "simStepDescription": "The orchestrator identifies `Instruments.CHROMA` and dispatches the control flow to `init_chroma_instrumentor`, the specific function responsible for setting up ChromaDB tracing.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "519",
+ "endLine": "521",
+ "relevantVariables": [
+ "init_chroma_instrumentor"
+ ]
+ },
+ "inputDataExample": "{\"instrument\": \"Instruments.CHROMA\"}",
+ "outputDataExample": "{\"instrument\": \"Instruments.CHROMA\"}"
+ },
+ {
+ "simStepId": "f8547631-0825-4565-92c0-3867da912807",
+ "diagramNodeId": "c22af2c4-9617-47c1-b7a2-a0f7a1b9e4c2",
+ "simStepLabel": "Flow: ChromaDB | Initialize ChromaDB Instrumentor",
+ "simStepDescription": "This function checks if the `chromadb` library is installed. If found, it imports `ChromaInstrumentor`, creates an instance, and calls its `.instrument()` method to begin the patching process.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "675",
+ "endLine": "685",
+ "relevantVariables": [
+ "is_package_installed",
+ "ChromaInstrumentor",
+ "instrumentor.instrument"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{\"instrumentor_initialized\": true}"
+ },
+ {
+ "simStepId": "587a664e-6e70-46a5-a72a-535c822c60c8",
+ "diagramNodeId": "57e2e347-4678-4493-9852-1fa503174421",
+ "simStepLabel": "Flow: ChromaDB | Trigger Method Patching",
+ "simStepDescription": "The call to `.instrument()` on the `ChromaInstrumentor` instance invokes the internal `_instrument` method, which contains the logic for monkey-patching the ChromaDB client methods.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/__init__.py",
+ "startLine": "90",
+ "endLine": "91",
+ "relevantVariables": [
+ "_instrument"
+ ]
+ },
+ "inputDataExample": "{\"tracer_provider\": \"\"}",
+ "outputDataExample": "{\"tracer_provider\": \"\"}"
+ },
+ {
+ "simStepId": "29380ecc-2470-4bdf-ad76-231ece83df82",
+ "diagramNodeId": "b3f3896d-d8c3-4029-b61a-c497667d617f",
+ "simStepLabel": "Flow: ChromaDB | Apply Method Wrappers",
+ "simStepDescription": "The `_instrument` method iterates through a predefined list of target methods (e.g., `Collection.query`, `Collection.add`). For each method, it applies a wrapper that intercepts calls, creates an OpenTelemetry span, records relevant data like query texts and results, and then executes the original method.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/__init__.py",
+ "startLine": "92",
+ "endLine": "101",
+ "relevantVariables": [
+ "WRAPPED_METHODS",
+ "wrap_function_wrapper"
+ ]
+ },
+ "inputDataExample": "{\"wrapped_method\": {\"package\": \"chromadb\", \"object\": \"Collection\", \"method\": \"query\", \"span_name\": \"chroma.query\"}}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "d7f74d81-0cc2-493b-947f-0fb528d2c681",
+ "diagramNodeId": "229f90d6-2fd5-4e0f-955b-51c7319e7360",
+ "simStepLabel": "Flow: Pinecone | Instrumentation Orchestration",
+ "simStepDescription": "The SDK's main initialization function, `init_instrumentations`, iterates through all supported libraries to check if they should be instrumented. This acts as the central dispatcher for auto-instrumentation of vector databases and other components.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "497",
+ "endLine": "507",
+ "relevantVariables": [
+ "init_instrumentations",
+ "instruments",
+ "block_instruments"
+ ]
+ },
+ "inputDataExample": "{\"should_enrich_metrics\": true, \"instruments\": [\"CHROMA\", \"OPENAI\", \"PINECONE\", \"QDRANT\"], \"block_instruments\": []}",
+ "outputDataExample": "{\"instrument_set\": true}"
+ },
+ {
+ "simStepId": "eb91046d-8909-490b-9a03-95871efa7930",
+ "diagramNodeId": "ed034abc-c663-4f76-8a34-29a4e95e6e43",
+ "simStepLabel": "Flow: Pinecone | Dispatch to Pinecone Initializer",
+ "simStepDescription": "The orchestrator identifies `Instruments.PINECONE` and dispatches the control flow to `init_pinecone_instrumentor`, the specific function responsible for setting up Pinecone tracing.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "561",
+ "endLine": "563",
+ "relevantVariables": [
+ "init_pinecone_instrumentor"
+ ]
+ },
+ "inputDataExample": "{\"instrument\": \"Instruments.PINECONE\"}",
+ "outputDataExample": "{\"instrument\": \"Instruments.PINECONE\"}"
+ },
+ {
+ "simStepId": "9b33ddbe-e447-4131-9ef4-e56766873cf3",
+ "diagramNodeId": "876f8779-2cc8-4a70-809f-c68213e74423",
+ "simStepLabel": "Flow: Pinecone | Initialize Pinecone Instrumentor",
+ "simStepDescription": "This function checks if the `pinecone` library is installed. If found, it imports `PineconeInstrumentor`, creates an instance, and calls its `.instrument()` method to begin the patching process.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "639",
+ "endLine": "649",
+ "relevantVariables": [
+ "is_package_installed",
+ "PineconeInstrumentor",
+ "instrumentor.instrument"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{\"instrumentor_initialized\": true}"
+ },
+ {
+ "simStepId": "980e2c9b-0f9d-4423-ac52-9af252123b77",
+ "diagramNodeId": "9f5708a4-0a48-4a39-81da-009e1a13d0d8",
+ "simStepLabel": "Flow: Pinecone | Trigger Method Patching",
+ "simStepDescription": "The call to `.instrument()` on the `PineconeInstrumentor` instance invokes the internal `_instrument` method, which contains the logic for monkey-patching the Pinecone client methods.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone/__init__.py",
+ "startLine": "190",
+ "endLine": "191",
+ "relevantVariables": [
+ "_instrument"
+ ]
+ },
+ "inputDataExample": "{\"tracer_provider\": \"\", \"meter_provider\": \"\"}",
+ "outputDataExample": "{\"tracer_provider\": \"\", \"meter_provider\": \"\"}"
+ },
+ {
+ "simStepId": "990b2b77-7290-4afd-ae10-257191e37e28",
+ "diagramNodeId": "248a1ee5-d4d5-4222-85ef-32c2bebcc4a0",
+ "simStepLabel": "Flow: Pinecone | Apply Method Wrappers",
+ "simStepDescription": "The `_instrument` method iterates through a predefined list of target methods (e.g., `Index.query`, `Index.upsert`). For each method, it applies a wrapper that intercepts calls, creates an OpenTelemetry span, records relevant data like top_k and query results, and then executes the original method.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone/__init__.py",
+ "startLine": "219",
+ "endLine": "226",
+ "relevantVariables": [
+ "WRAPPED_METHODS",
+ "wrap_function_wrapper"
+ ]
+ },
+ "inputDataExample": "{\"wrapped_method\": {\"object\": \"Index\", \"method\": \"query\", \"span_name\": \"pinecone.query\"}}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "155de5d7-ad9b-4d73-b296-5f9b809e5f3c",
+ "diagramNodeId": "463d7d9b-2f3d-4aa4-a29b-18ee5bbe0ed4",
+ "simStepLabel": "Flow: Qdrant | Instrumentation Orchestration",
+ "simStepDescription": "The SDK's main initialization function, `init_instrumentations`, iterates through all supported libraries to check if they should be instrumented. This acts as the central dispatcher for auto-instrumentation of vector databases and other components.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "497",
+ "endLine": "507",
+ "relevantVariables": [
+ "init_instrumentations",
+ "instruments",
+ "block_instruments"
+ ]
+ },
+ "inputDataExample": "{\"should_enrich_metrics\": true, \"instruments\": [\"CHROMA\", \"OPENAI\", \"PINECONE\", \"QDRANT\"], \"block_instruments\": []}",
+ "outputDataExample": "{\"instrument_set\": true}"
+ },
+ {
+ "simStepId": "31052157-848d-469d-bd41-553a23333359",
+ "diagramNodeId": "97ab21f4-c4b6-4358-9988-4c1ffacf9dd0",
+ "simStepLabel": "Flow: Qdrant | Dispatch to Qdrant Initializer",
+ "simStepDescription": "The orchestrator identifies `Instruments.QDRANT` and dispatches the control flow to `init_qdrant_instrumentor`, the specific function responsible for setting up Qdrant tracing.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "567",
+ "endLine": "569",
+ "relevantVariables": [
+ "init_qdrant_instrumentor"
+ ]
+ },
+ "inputDataExample": "{\"instrument\": \"Instruments.QDRANT\"}",
+ "outputDataExample": "{\"instrument\": \"Instruments.QDRANT\"}"
+ },
+ {
+ "simStepId": "31bb4e40-def3-4c05-b3a2-41e8475718e3",
+ "diagramNodeId": "ac577c4b-4234-4ebf-be38-4d9ab58e02a1",
+ "simStepLabel": "Flow: Qdrant | Initialize Qdrant Instrumentor",
+ "simStepDescription": "This function checks if the `qdrant-client` library is installed. If found, it imports `QdrantInstrumentor`, creates an instance, and calls its `.instrument()` method to begin the patching process.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "657",
+ "endLine": "667",
+ "relevantVariables": [
+ "is_package_installed",
+ "QdrantInstrumentor",
+ "instrumentor.instrument"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{\"instrumentor_initialized\": true}"
+ },
+ {
+ "simStepId": "3a41dddf-57c8-4bda-bc71-cc23f06624a8",
+ "diagramNodeId": "d3c7c6c5-67ca-47d2-8b6c-49a1eb911b9b",
+ "simStepLabel": "Flow: Qdrant | Trigger Method Patching",
+ "simStepDescription": "The call to `.instrument()` on the `QdrantInstrumentor` instance invokes the internal `_instrument` method, which contains the logic for monkey-patching the Qdrant client methods.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant/__init__.py",
+ "startLine": "47",
+ "endLine": "48",
+ "relevantVariables": [
+ "_instrument"
+ ]
+ },
+ "inputDataExample": "{\"tracer_provider\": \"\"}",
+ "outputDataExample": "{\"tracer_provider\": \"\"}"
+ },
+ {
+ "simStepId": "98d3d71b-93e8-43ec-ba55-e0f8979feaf9",
+ "diagramNodeId": "dc67893d-1eea-4788-9155-c6eadd361fcb",
+ "simStepLabel": "Flow: Qdrant | Apply Method Wrappers",
+ "simStepDescription": "The `_instrument` method iterates through a predefined list of target methods loaded from JSON configs (e.g., `QdrantClient.search`, `QdrantClient.retrieve`). For each method, it applies a wrapper that intercepts calls, creates an OpenTelemetry span, records relevant data, and executes the original method.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant/__init__.py",
+ "startLine": "49",
+ "endLine": "57",
+ "relevantVariables": [
+ "WRAPPED_METHODS",
+ "wrap_function_wrapper"
+ ]
+ },
+ "inputDataExample": "{\"wrapped_method\": {\"object\": \"QdrantClient\", \"method\": \"search\", \"span_name\": \"qdrant.search\"}}",
+ "outputDataExample": "{}"
+ }
+ ],
+ "description": "- Offers crucial visibility into the retrieval component of Retrieval-Augmented Generation (RAG) applications
- - Automatically traces operations against popular vector databases like ChromaDB, Pinecone, Qdrant, and Weaviate
- - Captures details of database interactions, such as query vectors, 'top_k' parameters, and retrieval results, as span attributes and events
- - Helps developers diagnose performance and relevance issues in the retrieval step of their RAG pipelines
",
+ "simulationNodesAndEdges": {
+ "fa6da8af-2d90-483b-a4cf-92bd3cf6d18d": {
+ "simStepIds": [
+ "7d34f0d6-28ad-47f2-a2fa-ad4005fd12da"
+ ]
+ },
+ "c22af2c4-9617-47c1-b7a2-a0f7a1b9e4c2": {
+ "simStepIds": [
+ "f8547631-0825-4565-92c0-3867da912807"
+ ]
+ },
+ "b3f3896d-d8c3-4029-b61a-c497667d617f": {
+ "simStepIds": [
+ "29380ecc-2470-4bdf-ad76-231ece83df82"
+ ]
+ },
+ "229f90d6-2fd5-4e0f-955b-51c7319e7360": {
+ "simStepIds": [
+ "d7f74d81-0cc2-493b-947f-0fb528d2c681"
+ ]
+ },
+ "876f8779-2cc8-4a70-809f-c68213e74423": {
+ "simStepIds": [
+ "9b33ddbe-e447-4131-9ef4-e56766873cf3"
+ ]
+ },
+ "248a1ee5-d4d5-4222-85ef-32c2bebcc4a0": {
+ "simStepIds": [
+ "990b2b77-7290-4afd-ae10-257191e37e28"
+ ]
+ },
+ "463d7d9b-2f3d-4aa4-a29b-18ee5bbe0ed4": {
+ "simStepIds": [
+ "155de5d7-ad9b-4d73-b296-5f9b809e5f3c"
+ ]
+ },
+ "ac577c4b-4234-4ebf-be38-4d9ab58e02a1": {
+ "simStepIds": [
+ "31bb4e40-def3-4c05-b3a2-41e8475718e3"
+ ]
+ },
+ "dc67893d-1eea-4788-9155-c6eadd361fcb": {
+ "simStepIds": [
+ "98d3d71b-93e8-43ec-ba55-e0f8979feaf9"
+ ]
+ },
+ "a17b6fe4-a31b-47a6-9c8a-d88dfc259f2a": {
+ "simStepIds": [
+ "094072a9-c8b6-4211-b382-9632af076bdd"
+ ]
+ },
+ "57e2e347-4678-4493-9852-1fa503174421": {
+ "simStepIds": [
+ "587a664e-6e70-46a5-a72a-535c822c60c8"
+ ]
+ },
+ "ed034abc-c663-4f76-8a34-29a4e95e6e43": {
+ "simStepIds": [
+ "eb91046d-8909-490b-9a03-95871efa7930"
+ ]
+ },
+ "9f5708a4-0a48-4a39-81da-009e1a13d0d8": {
+ "simStepIds": [
+ "980e2c9b-0f9d-4423-ac52-9af252123b77"
+ ]
+ },
+ "97ab21f4-c4b6-4358-9988-4c1ffacf9dd0": {
+ "simStepIds": [
+ "31052157-848d-469d-bd41-553a23333359"
+ ]
+ },
+ "d3c7c6c5-67ca-47d2-8b6c-49a1eb911b9b": {
+ "simStepIds": [
+ "3a41dddf-57c8-4bda-bc71-cc23f06624a8"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "ChromaInstrumentor, PineconeInstrumentor, QdrantInstrumentor",
+ "generationPrompt": "Automatic Instrumentation of Vector Database Operations for RAG",
+ "generationKeywords": "ChromaInstrumentor, PineconeInstrumentor, QdrantInstrumentor"
+ },
+ "Defining and Tracing Custom Business Logic with Workflows and Tasks": {
+ "name": "Defining and Tracing Custom Business Logic with Workflows and Tasks",
+ "simSteps": [
+ {
+ "simStepId": "91f00c4f-6f41-454f-95ee-803a341fb7cd",
+ "diagramNodeId": "5e546eac-c637-4f37-89e5-981306bdb767",
+ "simStepLabel": "User Defines a Workflow",
+ "simStepDescription": "A developer defines a high-level business logic function and decorates it with `@workflow`. This signals to OpenLLMetry that this function represents a workflow and should be traced as a primary span.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/sample-app/sample_app/methods_decorated_app.py",
+ "startLine": "64",
+ "endLine": "76",
+ "relevantVariables": [
+ "workflow",
+ "joke_workflow"
+ ]
+ },
+ "inputDataExample": "{\"name\": \"pirate_joke_generator\"}",
+ "outputDataExample": "{\"decorated_function\": \"\"}"
+ },
+ {
+ "simStepId": "daa5747e-99f9-43b9-81dd-4179be5b41a6",
+ "diagramNodeId": "5df32f45-a946-4839-81f6-69a85eeb4d30",
+ "simStepLabel": "Decorator Initialization",
+ "simStepDescription": "When the Python module is loaded, the `@workflow` decorator is called. It acts as a factory, passing its arguments along with a specific span kind, `TraceloopSpanKindValues.WORKFLOW`, to the generic `entity_method` decorator.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/decorators/__init__.py",
+ "startLine": "33",
+ "endLine": "41",
+ "relevantVariables": [
+ "workflow",
+ "entity_method",
+ "TraceloopSpanKindValues.WORKFLOW"
+ ]
+ },
+ "inputDataExample": "{\"name\": \"pirate_joke_generator\", \"version\": null, \"method_name\": null, \"tlp_span_kind\": \"TraceloopSpanKindValues.WORKFLOW\"}",
+ "outputDataExample": "{\"name\": \"pirate_joke_generator\", \"version\": null, \"method_name\": null, \"tlp_span_kind\": \"TraceloopSpanKindValues.WORKFLOW\"}"
+ },
+ {
+ "simStepId": "42922f6c-d7cb-4d5b-a1c0-f5248a75358f",
+ "diagramNodeId": "198d2594-3157-438d-81c0-f87ae0e7568d",
+ "simStepLabel": "Core Decorator Logic Wraps the Function",
+ "simStepDescription": "The `entity_method` function receives the configuration and returns a `decorate` function. This function, in turn, returns a wrapper that will be executed instead of the original user function. This wrapper contains the logic to start and end an OpenTelemetry span.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py",
+ "startLine": "210",
+ "endLine": "218",
+ "relevantVariables": [
+ "entity_method",
+ "decorate"
+ ]
+ },
+ "inputDataExample": "{\"name\": \"pirate_joke_generator\", \"tlp_span_kind\": \"TraceloopSpanKindValues.WORKFLOW\"}",
+ "outputDataExample": "{\"wrapper_function\": \"\"}"
+ },
+ {
+ "simStepId": "066a0d0d-a4ee-4023-b3d7-b756485282f4",
+ "diagramNodeId": "ff52e952-7593-4280-ae4e-6714a9bb4fc6",
+ "simStepLabel": "Workflow Invocation",
+ "simStepDescription": "The application triggers the business logic by calling the decorated `joke_workflow` function.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/sample-app/sample_app/methods_decorated_app.py",
+ "startLine": "64",
+ "endLine": "64",
+ "relevantVariables": [
+ "joke_workflow"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "4e2fbcfc-4005-4154-865d-2562818e1625",
+ "diagramNodeId": "941efc45-2e3b-48e5-a132-a879959f4e86",
+ "simStepLabel": "Workflow Span Creation",
+ "simStepDescription": "The decorator's wrapper executes. It calls an internal `_setup_span` function which uses the OpenTelemetry tracer to start a new span. The span is named `.` (e.g., 'pirate_joke_generator.workflow') and an attribute `traceloop.span.kind` is set to `WORKFLOW`. This new span is attached to the current execution context.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py",
+ "startLine": "140",
+ "endLine": "153",
+ "relevantVariables": [
+ "_setup_span",
+ "set_workflow_name",
+ "tracer.start_span"
+ ]
+ },
+ "inputDataExample": "{\"entity_name\": \"pirate_joke_generator\", \"tlp_span_kind\": \"TraceloopSpanKindValues.WORKFLOW\", \"version\": null}",
+ "outputDataExample": "{\"span_name\": \"pirate_joke_generator.workflow\", \"span_attributes\": {\"traceloop.span.kind\": \"workflow\"}}"
+ },
+ {
+ "simStepId": "fb2ae73f-d115-4252-8df3-2c11d9b69ecb",
+ "diagramNodeId": "9439737f-d1d0-49fa-a5d3-34b8dacf3284",
+ "simStepLabel": "Invoking a Task",
+ "simStepDescription": "The code inside the original `joke_workflow` function now runs. It calls `create_joke()`, which is a smaller unit of work decorated with `@task`.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/sample-app/sample_app/methods_decorated_app.py",
+ "startLine": "69",
+ "endLine": "69",
+ "relevantVariables": [
+ "create_joke",
+ "eng_joke"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "f658c721-fee2-4863-b972-0d7ab32a1255",
+ "diagramNodeId": "0cbbb5c8-8182-4975-a0ee-0da88126d7c5",
+ "simStepLabel": "Task Span Creation",
+ "simStepDescription": "Similarly to the workflow, the `@task` decorator's wrapper executes. It creates a new span named 'joke_creation.task' with `traceloop.span.kind` set to `TASK`. Due to OpenTelemetry's context propagation, this new span is automatically created as a child of the 'pirate_joke_generator.workflow' span, forming a hierarchy.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/decorators/__init__.py",
+ "startLine": "16",
+ "endLine": "24",
+ "relevantVariables": [
+ "task",
+ "entity_method",
+ "TraceloopSpanKindValues.TASK"
+ ]
+ },
+ "inputDataExample": "{\"name\": \"joke_creation\", \"version\": 1, \"tlp_span_kind\": \"TraceloopSpanKindValues.TASK\"}",
+ "outputDataExample": "{\"span_name\": \"joke_creation.task\", \"parent_span_id\": \"\", \"attributes\": {\"traceloop.span.kind\": \"task\"}}"
+ },
+ {
+ "simStepId": "e10ed652-f4d2-4a7a-bc04-f3eff1efe652",
+ "diagramNodeId": "f03699bf-272a-4524-a87d-7b26e8c3ce2a",
+ "simStepLabel": "Task Execution and Return",
+ "simStepDescription": "The `create_joke` function executes, calling the OpenAI API to get a joke. It then returns the content of the joke as a string.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/sample-app/sample_app/methods_decorated_app.py",
+ "startLine": "13",
+ "endLine": "22",
+ "relevantVariables": [
+ "client.chat.completions.create",
+ "completion"
+ ]
+ },
+ "inputDataExample": "{\"model\": \"gpt-3.5-turbo\", \"messages\": [{\"role\": \"user\", \"content\": \"Tell me a joke about opentelemetry\"}]}",
+ "outputDataExample": "{\"joke\": \"Why did OpenTelemetry break up with its girlfriend? Because it had too many trust issues with its spans!\"}"
+ },
+ {
+ "simStepId": "d9b6467b-971a-4f1f-bdb6-cfb504802a00",
+ "diagramNodeId": "46c8bdab-b559-4c6d-833d-c36e219b772c",
+ "simStepLabel": "Task Span Finalization",
+ "simStepDescription": "The `@task` decorator's wrapper intercepts the return value from `create_joke`. It serializes this value and adds it as an attribute (`traceloop.entity.output`) to the task span. Finally, it sets the span's status to OK and ends the span.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py",
+ "startLine": "252",
+ "endLine": "256",
+ "relevantVariables": [
+ "set_entity_output",
+ "span.set_status",
+ "span.end"
+ ]
+ },
+ "inputDataExample": "{\"return_value\": \"Why did OpenTelemetry break up with its girlfriend? Because it had too many trust issues with its spans!\"}",
+ "outputDataExample": "{\"span_attributes\": {\"traceloop.entity.output\": \"\\\"Why did OpenTelemetry break up with its girlfriend? Because it had too many trust issues with its spans!\\\"\"}}"
+ },
+ {
+ "simStepId": "628e3f07-589b-4da2-ac5d-de9aeb994c03",
+ "diagramNodeId": "a2a3ed45-ac4a-46b4-854b-91f91a05c588",
+ "simStepLabel": "Workflow Continues Execution",
+ "simStepDescription": "The result from `create_joke` is returned to the `joke_workflow`. The workflow continues, calling other tasks like `translate_joke_to_pirate` and `generate_signature` in sequence. Each of these `@task`-decorated calls will create its own child span.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/sample-app/sample_app/methods_decorated_app.py",
+ "startLine": "70",
+ "endLine": "70",
+ "relevantVariables": [
+ "translate_joke_to_pirate",
+ "pirate_joke"
+ ]
+ },
+ "inputDataExample": "{\"eng_joke\": \"Why did OpenTelemetry break up with its girlfriend? Because it had too many trust issues with its spans!\"}",
+ "outputDataExample": "{\"eng_joke\": \"Why did OpenTelemetry break up with its girlfriend? Because it had too many trust issues with its spans!\"}"
+ },
+ {
+ "simStepId": "8f425a02-9bcc-4dba-b5bb-493eb3a4c2b7",
+ "diagramNodeId": "9a29b3e4-fbf6-4dc8-80f4-c09bb45d2426",
+ "simStepLabel": "Workflow Span Finalization",
+ "simStepDescription": "After all tasks within the workflow have completed, the `joke_workflow` function finishes. Its decorator wrapper captures the final result (if any), records it on the workflow span, and ends the span, completing the trace for this business logic execution.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py",
+ "startLine": "252",
+ "endLine": "256",
+ "relevantVariables": [
+ "set_entity_output",
+ "span.set_status",
+ "span.end"
+ ]
+ },
+ "inputDataExample": "{\"return_value\": \"\"}",
+ "outputDataExample": "{\"span_attributes\": {\"traceloop.entity.output\": \"\"}}"
+ }
+ ],
+ "description": "- Allows developers to extend observability beyond auto-instrumented libraries to their own application code
- - Provides
@workflow and @task decorators to easily create custom OpenTelemetry spans around specific functions or code blocks - - Creates a logical and hierarchical trace that represents the application's business logic, connecting various auto-instrumented calls
- - Automatically captures the inputs and outputs of decorated functions, enabling debugging of specific business processes
",
+ "simulationNodesAndEdges": {
+ "5e546eac-c637-4f37-89e5-981306bdb767": {
+ "simStepIds": [
+ "91f00c4f-6f41-454f-95ee-803a341fb7cd"
+ ]
+ },
+ "198d2594-3157-438d-81c0-f87ae0e7568d": {
+ "simStepIds": [
+ "42922f6c-d7cb-4d5b-a1c0-f5248a75358f"
+ ]
+ },
+ "941efc45-2e3b-48e5-a132-a879959f4e86": {
+ "simStepIds": [
+ "4e2fbcfc-4005-4154-865d-2562818e1625"
+ ]
+ },
+ "0cbbb5c8-8182-4975-a0ee-0da88126d7c5": {
+ "simStepIds": [
+ "f658c721-fee2-4863-b972-0d7ab32a1255"
+ ]
+ },
+ "46c8bdab-b559-4c6d-833d-c36e219b772c": {
+ "simStepIds": [
+ "d9b6467b-971a-4f1f-bdb6-cfb504802a00"
+ ]
+ },
+ "9a29b3e4-fbf6-4dc8-80f4-c09bb45d2426": {
+ "simStepIds": [
+ "8f425a02-9bcc-4dba-b5bb-493eb3a4c2b7"
+ ]
+ },
+ "5df32f45-a946-4839-81f6-69a85eeb4d30": {
+ "simStepIds": [
+ "daa5747e-99f9-43b9-81dd-4179be5b41a6"
+ ]
+ },
+ "ff52e952-7593-4280-ae4e-6714a9bb4fc6": {
+ "simStepIds": [
+ "066a0d0d-a4ee-4023-b3d7-b756485282f4"
+ ]
+ },
+ "9439737f-d1d0-49fa-a5d3-34b8dacf3284": {
+ "simStepIds": [
+ "fb2ae73f-d115-4252-8df3-2c11d9b69ecb"
+ ]
+ },
+ "f03699bf-272a-4524-a87d-7b26e8c3ce2a": {
+ "simStepIds": [
+ "e10ed652-f4d2-4a7a-bc04-f3eff1efe652"
+ ]
+ },
+ "a2a3ed45-ac4a-46b4-854b-91f91a05c588": {
+ "simStepIds": [
+ "628e3f07-589b-4da2-ac5d-de9aeb994c03"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "@workflow, @task, TraceloopSpanKindValues",
+ "generationPrompt": "Defining and Tracing Custom Business Logic with Workflows and Tasks",
+ "generationKeywords": "@workflow, @task, TraceloopSpanKindValues"
+ },
+ "Tracing Streaming LLM Responses": {
+ "name": "Tracing Streaming LLM Responses",
+ "simSteps": [
+ {
+ "simStepId": "68a032ec-1c86-4f00-9bf4-b2a18e092429",
+ "diagramNodeId": "ed582fad-0f54-4d8c-859f-1914dc72bc6b",
+ "simStepLabel": "Intercept LLM Call and Create Span",
+ "simStepDescription": "The user's code invokes a method on an LLM client with streaming enabled (e.g., `anthropic.messages.create(..., stream=True)`). The OpenLLMetry instrumentation intercepts this call before it reaches the actual SDK method. A new OpenTelemetry span is created for the operation, and initial attributes like the model name and input messages are set on it.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "startLine": "527",
+ "endLine": "556",
+ "relevantVariables": [
+ "_with_anthropic_telemetry_wrapper",
+ "tracer.start_as_current_span",
+ "set_input_attributes",
+ "span"
+ ]
+ },
+ "inputDataExample": "{\"model\": \"claude-3-opus-20240229\", \"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Hello, Claude\"}], \"stream\": true}",
+ "outputDataExample": "{\"span_id\": \"ab123cdef456\", \"trace_id\": \"fedcba654321\", \"parent_span_id\": \"root_span_123\", \"status\": \"UNSET\", \"attributes\": {\"gen_ai.system\": \"Anthropic\", \"gen_ai.request.model\": \"claude-3-opus-20240229\", \"llm.is_streaming\": true, \"gen_ai.prompt.0.user\": \"Hello, Claude\"}}"
+ },
+ {
+ "simStepId": "6c0eaedf-551f-4015-9ed8-f09d391be1e7",
+ "diagramNodeId": "804b50f1-abc1-47ba-9e7e-de4510d5d478",
+ "simStepLabel": "Forward Request to LLM SDK",
+ "simStepDescription": "The instrumentation wrapper, having created a span, invokes the original LLM SDK method, passing along the original arguments. This forwards the request to the LLM provider's API.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "startLine": "558",
+ "endLine": "558",
+ "relevantVariables": [
+ "wrapped",
+ "args",
+ "kwargs"
+ ]
+ },
+ "inputDataExample": "{\"args\": [], \"kwargs\": {\"model\": \"claude-3-opus-20240229\", \"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Hello, Claude\"}], \"stream\": true}}",
+ "outputDataExample": "{\"args\": [], \"kwargs\": {\"model\": \"claude-3-opus-20240229\", \"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Hello, Claude\"}], \"stream\": true}}"
+ },
+ {
+ "simStepId": "b97542d0-b032-42e6-be56-4e1f4ee65d2f",
+ "diagramNodeId": "96d4b52f-0077-4047-b6e9-d1494f44b558",
+ "simStepLabel": "Detect Streaming Response",
+ "simStepDescription": "The LLM SDK returns a response object. The instrumentation code checks the type of this object to determine if it's a streaming response. A helper function like `is_streaming_response` is used for this check, which returns `true` if the object is a stream generator. This pattern is common across various instrumentations like OpenAI, Groq, and VertexAI.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "startLine": "157",
+ "endLine": "158",
+ "relevantVariables": [
+ "is_streaming_response",
+ "response",
+ "Stream",
+ "AsyncStream"
+ ]
+ },
+ "inputDataExample": "{\"response\": \"\"}",
+ "outputDataExample": "{\"is_streaming\": true}"
+ },
+ {
+ "simStepId": "12ee6a36-97c5-4223-bb69-fcc8b451cd4b",
+ "diagramNodeId": "bfa36794-a43a-4ff6-8dd9-ba168caf7e7d",
+ "simStepLabel": "Pass Span and Stream to Wrapper",
+ "simStepDescription": "Because a streaming response was detected, the instrumentation logic does not end the span. Instead, it prepares to wrap the native stream object. The currently active span, the native stream object, and other metadata are passed as arguments to the constructor of a custom wrapper class.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "startLine": "562",
+ "endLine": "568",
+ "relevantVariables": [
+ "AnthropicStream",
+ "span",
+ "response"
+ ]
+ },
+ "inputDataExample": "{\"span\": \"\", \"response_stream\": \"\", \"client\": \"\", \"start_time\": 1678886400.0}",
+ "outputDataExample": "{\"span\": \"\", \"response_stream\": \"\", \"client\": \"\", \"start_time\": 1678886400.0}"
+ },
+ {
+ "simStepId": "2ee1ef8b-02a3-4096-ab3d-879112cdea20",
+ "diagramNodeId": "e0587dd7-dcef-40ae-af5c-712a33e14316",
+ "simStepLabel": "Instantiate and Return Stream Wrapper",
+ "simStepDescription": "The custom wrapper class (e.g., `AnthropicStream`) is instantiated. Its constructor stores the OpenTelemetry span and the original stream object internally. This new wrapper object, which mimics the behavior of the original stream, is then returned to the user's application code.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py",
+ "startLine": "141",
+ "endLine": "155",
+ "relevantVariables": [
+ "AnthropicStream",
+ "__init__"
+ ]
+ },
+ "inputDataExample": "{\"span\": \"\", \"original_stream\": \"\"}",
+ "outputDataExample": "{\"wrapped_stream\": \"\"}"
+ },
+ {
+ "simStepId": "a1cce958-c736-4065-bafc-c8f946224971",
+ "diagramNodeId": "df746b40-8798-4885-b552-1e0a06ade0ba",
+ "simStepLabel": "User Consumes Stream Chunks",
+ "simStepDescription": "The user's application code iterates over the returned wrapper object (e.g., using a `for` loop). With each iteration, the wrapper fetches the next chunk from the original underlying stream, processes it, and yields it to the application.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py",
+ "startLine": "194",
+ "endLine": "212",
+ "relevantVariables": [
+ "__iter__",
+ "self._response",
+ "self._complete_instrumentation"
+ ]
+ },
+ "inputDataExample": "{\"wrapped_stream\": \"\"}",
+ "outputDataExample": "{\"chunk\": {\"type\": \"content_block_delta\", \"index\": 0, \"delta\": {\"type\": \"text_delta\", \"text\": \" I am\"}}}"
+ },
+ {
+ "simStepId": "25ad4da4-fa4b-40d9-a1bd-6ebac6aeffb4",
+ "diagramNodeId": "e4fb2604-b3ae-4876-b774-aed648b223b1",
+ "simStepLabel": "Aggregate Data and Finalize Span on Completion",
+ "simStepDescription": "While chunks are being yielded, the wrapper aggregates their content. Once the stream is fully consumed (or closed), a cleanup method is triggered. This method takes the complete, aggregated response, calculates final metrics like token usage, sets them as attributes on the stored span, sets the span's status to OK, and finally calls `span.end()` to close it. This ensures a single, complete span represents the entire streaming operation.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py",
+ "startLine": "786",
+ "endLine": "802",
+ "relevantVariables": [
+ "_ensure_cleanup",
+ "self._span",
+ "self._span.set_status",
+ "self._span.end",
+ "self._cleanup_completed"
+ ]
+ },
+ "inputDataExample": "{\"aggregated_chunks\": [{\"type\": \"text_delta\", \"text\": \"Hello,\"}, {\"type\": \"text_delta\", \"text\": \" I am\"}, {\"type\": \"text_delta\", \"text\": \" Claude.\"}], \"span\": \"\"}",
+ "outputDataExample": "{\"span_id\": \"ab123cdef456\", \"trace_id\": \"fedcba654321\", \"status\": \"OK\", \"attributes\": {\"gen_ai.completion.0.content\": \"Hello, I am Claude.\", \"gen_ai.usage.output_tokens\": 8, \"gen_ai.usage.input_tokens\": 5}}"
+ }
+ ],
+ "description": "- Provides accurate and complete tracing for LLM interactions that stream responses chunk by chunk
- - Wraps the native streaming objects from AI providers to manage the lifecycle of the corresponding OpenTelemetry span
- - Ensures a single span is created for the entire streaming operation, from the initial request until the final chunk is consumed or the stream is closed
- - Aggregates the full response from all chunks and attaches it to the span attributes upon completion, while also recording events for each chunk
",
+ "simulationNodesAndEdges": {
+ "ed582fad-0f54-4d8c-859f-1914dc72bc6b": {
+ "simStepIds": [
+ "68a032ec-1c86-4f00-9bf4-b2a18e092429"
+ ]
+ },
+ "96d4b52f-0077-4047-b6e9-d1494f44b558": {
+ "simStepIds": [
+ "b97542d0-b032-42e6-be56-4e1f4ee65d2f"
+ ]
+ },
+ "e0587dd7-dcef-40ae-af5c-712a33e14316": {
+ "simStepIds": [
+ "2ee1ef8b-02a3-4096-ab3d-879112cdea20"
+ ]
+ },
+ "e4fb2604-b3ae-4876-b774-aed648b223b1": {
+ "simStepIds": [
+ "25ad4da4-fa4b-40d9-a1bd-6ebac6aeffb4"
+ ]
+ },
+ "804b50f1-abc1-47ba-9e7e-de4510d5d478": {
+ "simStepIds": [
+ "6c0eaedf-551f-4015-9ed8-f09d391be1e7"
+ ]
+ },
+ "bfa36794-a43a-4ff6-8dd9-ba168caf7e7d": {
+ "simStepIds": [
+ "12ee6a36-97c5-4223-bb69-fcc8b451cd4b"
+ ]
+ },
+ "df746b40-8798-4885-b552-1e0a06ade0ba": {
+ "simStepIds": [
+ "a1cce958-c736-4065-bafc-c8f946224971"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "ChatStream, AnthropicStream, is_streaming_response",
+ "generationPrompt": "Tracing Streaming LLM Responses",
+ "generationKeywords": "ChatStream, AnthropicStream, is_streaming_response"
+ },
+ "Tracing LLM Function and Tool Calls": {
+ "name": "Tracing LLM Function and Tool Calls",
+ "simSteps": [
+ {
+ "simStepId": "bb6744e0-d46b-4138-ab2f-c9602d4f89a7",
+ "diagramNodeId": "9b311362-1d19-41bd-9bb3-49bccf345928",
+ "simStepLabel": "Agent Receives Prompt and Tools",
+ "simStepDescription": "A LangChain agent is invoked with a user prompt and a set of available tools. The instrumentation formats this initial request, capturing the user's message and the definitions of the tools provided to the agent.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py",
+ "startLine": "160",
+ "endLine": "192",
+ "relevantVariables": [
+ "set_chat_request",
+ "messages",
+ "kwargs",
+ "span_holder"
+ ]
+ },
+ "inputDataExample": "{\"prompt\": \"What is the weather like in San Francisco?\"}",
+ "outputDataExample": "{\"messages\": [{\"role\": \"user\", \"content\": \"What is the weather like in San Francisco?\"}], \"tools\": [{\"type\": \"function\", \"function\": {\"name\": \"get_current_weather\", \"description\": \"Get the current weather in a given location\", \"parameters\": {\"type\": \"object\", \"properties\": {\"location\": {\"type\": \"string\", \"description\": \"The city and state, e.g. San Francisco, CA\"}}, \"required\": [\"location\"]}}}]}"
+ },
+ {
+ "simStepId": "59cd0722-f64c-4c95-a3ea-107be06a378d",
+ "diagramNodeId": "c2731bb3-efc7-44b3-8639-8d1730be0139",
+ "simStepLabel": "Request Sent to LLM",
+ "simStepDescription": "The formatted prompt, including the user message and tool definitions, is sent to the LLM provider's API.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py",
+ "startLine": "45",
+ "endLine": "51",
+ "relevantVariables": [
+ "_chat_wrapper"
+ ]
+ },
+ "inputDataExample": "{\"messages\": [{\"role\": \"user\", \"content\": \"What is the weather like in San Francisco?\"}], \"tools\": [{\"type\": \"function\", \"function\": {\"name\": \"get_current_weather\", \"description\": \"Get the current weather in a given location\", \"parameters\": {\"type\": \"object\", \"properties\": {\"location\": {\"type\": \"string\", \"description\": \"The city and state, e.g. San Francisco, CA\"}}, \"required\": [\"location\"]}}}]}",
+ "outputDataExample": "{\"messages\": [{\"role\": \"user\", \"content\": \"What is the weather like in San Francisco?\"}], \"tools\": [{\"type\": \"function\", \"function\": {\"name\": \"get_current_weather\", \"description\": \"Get the current weather in a given location\", \"parameters\": {\"type\": \"object\", \"properties\": {\"location\": {\"type\": \"string\", \"description\": \"The city and state, e.g. San Francisco, CA\"}}, \"required\": [\"location\"]}}}]}"
+ },
+ {
+ "simStepId": "3d50ce44-7c00-45be-8de9-11602f582651",
+ "diagramNodeId": "ff7568ec-a2f0-4e9d-9a1f-8c438a172017",
+ "simStepLabel": "LLM Responds with Tool Call Request",
+ "simStepDescription": "The LLM processes the input and determines that it needs to use a tool to answer the user's question. Instead of a text answer, it returns a response containing a `tool_calls` object, instructing the application to call the `get_current_weather` function.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py",
+ "startLine": "236",
+ "endLine": "236",
+ "relevantVariables": [
+ "on_llm_end"
+ ]
+ },
+ "inputDataExample": "{\"id\": \"chatcmpl-12345\", \"choices\": [{\"finish_reason\": \"tool_calls\", \"message\": {\"role\": \"assistant\", \"content\": null, \"tool_calls\": [{\"id\": \"call_abc123\", \"type\": \"function\", \"function\": {\"name\": \"get_current_weather\", \"arguments\": \"{\\\"location\\\": \\\"San Francisco\\\"}\"}}]}}], \"model\": \"gpt-4o\"}",
+ "outputDataExample": "{\"message\": {\"content\": \"\", \"additional_kwargs\": {}, \"tool_calls\": [{\"name\": \"get_current_weather\", \"args\": {\"location\": \"San Francisco\"}, \"id\": \"call_abc123\"}]}}"
+ },
+ {
+ "simStepId": "8aa1d3e2-a086-4cae-8197-5a4c2addb06f",
+ "diagramNodeId": "df0441d8-117c-4299-95b6-a2eb40de384e",
+ "simStepLabel": "LLM Generation Passed to Instrumentation",
+ "simStepDescription": "The LangChain framework passes the LLM's generation result, which includes the AIMessage containing the tool call, to the OpenLLMetry callback handler for processing.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py",
+ "startLine": "244",
+ "endLine": "246",
+ "relevantVariables": [
+ "span_holder.span",
+ "response.llm_output",
+ "response.generations"
+ ]
+ },
+ "inputDataExample": "{\"message\": {\"content\": \"\", \"additional_kwargs\": {}, \"tool_calls\": [{\"name\": \"get_current_weather\", \"args\": {\"location\": \"San Francisco\"}, \"id\": \"call_abc123\"}]}}",
+ "outputDataExample": "{\"message\": {\"content\": \"\", \"additional_kwargs\": {}, \"tool_calls\": [{\"name\": \"get_current_weather\", \"args\": {\"location\": \"San Francisco\"}, \"id\": \"call_abc123\"}]}}"
+ },
+ {
+ "simStepId": "e4145c42-50e7-495e-8fae-5c95b565c632",
+ "diagramNodeId": "de84c208-df89-4986-a91e-2d053c818e39",
+ "simStepLabel": "Parse Tool Calls from LLM Response",
+ "simStepDescription": "The instrumentation's utility function inspects the AIMessage from the LLM response. It detects the presence of `tool_calls` (or the legacy `function_call`) and extracts the details of each call to be recorded.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py",
+ "startLine": "265",
+ "endLine": "269",
+ "relevantVariables": [
+ "tool_calls",
+ "generation.message.tool_calls",
+ "generation.message.additional_kwargs"
+ ]
+ },
+ "inputDataExample": "{\"generation\": {\"message\": {\"content\": \"\", \"tool_calls\": [{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"San Francisco\"}, \"id\": \"call_abc123\"}]}}}",
+ "outputDataExample": "{\"tool_calls\": [{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"San Francisco\"}, \"id\": \"call_abc123\"}]}"
+ },
+ {
+ "simStepId": "26634ad2-fb63-48f3-949e-132346dc3933",
+ "diagramNodeId": "34912404-d21b-4074-bd1e-68fa70fd1691",
+ "simStepLabel": "Add Tool Call Data to Span",
+ "simStepDescription": "A helper function iterates through the parsed tool calls and sets their details (ID, name, arguments) as structured attributes on the current OpenTelemetry span, following the `llm.completion.tool_calls` semantic convention.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py",
+ "startLine": "393",
+ "endLine": "410",
+ "relevantVariables": [
+ "_set_chat_tool_calls",
+ "span",
+ "tool_calls",
+ "tool_call_prefix"
+ ]
+ },
+ "inputDataExample": "{\"tool_calls\": [{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"San Francisco\"}, \"id\": \"call_abc123\"}]}",
+ "outputDataExample": "{\"tool_calls\": [{\"name\": \"get_current_weather\", \"arguments\": {\"location\": \"San Francisco\"}, \"id\": \"call_abc123\"}]}"
+ },
+ {
+ "simStepId": "22cf8357-7361-49db-9e5d-47fd467a7b9c",
+ "diagramNodeId": "dcd5fcac-2ea9-481d-8997-3cbd9c8eacf8",
+ "simStepLabel": "Application Executes the Tool",
+ "simStepDescription": "The LangChain agent receives the tool call instruction from the LLM, finds the corresponding `get_current_weather` function in the application code, and executes it with the arguments `{\"location\": \"San Francisco\"}`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "sample-app/langchain_agent.py",
+ "startLine": "16",
+ "endLine": "20",
+ "relevantVariables": [
+ "get_current_weather",
+ "location"
+ ]
+ },
+ "inputDataExample": "{\"tool_name\": \"get_current_weather\", \"tool_arguments\": {\"location\": \"San Francisco\"}}",
+ "outputDataExample": "{\"tool_output\": \"The weather in San Francisco is 70 degrees and sunny.\"}"
+ },
+ {
+ "simStepId": "751442bb-8928-4d1e-aef4-4ea7b13abbf5",
+ "diagramNodeId": "1037d71c-c71e-4e51-a4f2-91b5b7b0a3ec",
+ "simStepLabel": "Tool Output Added to Message History",
+ "simStepDescription": "The output from the tool execution is packaged into a `ToolMessage` and added to the conversation history. This history will be sent back to the LLM to generate the final response.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py",
+ "startLine": "129",
+ "endLine": "129",
+ "relevantVariables": [
+ "on_chain_end"
+ ]
+ },
+ "inputDataExample": "{\"tool_output\": \"The weather in San Francisco is 70 degrees and sunny.\", \"tool_call_id\": \"call_abc123\"}",
+ "outputDataExample": "{\"messages\": [{\"role\": \"user\", \"content\": \"What is the weather like in San Francisco?\"}, {\"role\": \"assistant\", \"content\": null, \"tool_calls\": [{\"id\": \"call_abc123\", \"name\": \"get_current_weather\", \"arguments\": {\"location\": \"San Francisco\"}}]}, {\"role\": \"tool\", \"content\": \"The weather in San Francisco is 70 degrees and sunny.\", \"tool_call_id\": \"call_abc123\"}]}"
+ },
+ {
+ "simStepId": "284f0da4-bbcf-488d-998e-f8fc1cd9f758",
+ "diagramNodeId": "8a325ec3-5f65-410b-b478-bdd0ffbfe205",
+ "simStepLabel": "Instrument History with Tool Message for Next LLM Call",
+ "simStepDescription": "Before sending the updated history back to the LLM, the `set_chat_request` function processes the list of messages again. It identifies the `AIMessage` with the original `tool_calls` and the new `ToolMessage` with the result, creating the correct span attributes for the prompt to provide a complete trace of the tool-use loop.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py",
+ "startLine": "173",
+ "endLine": "182",
+ "relevantVariables": [
+ "set_chat_request",
+ "msg",
+ "tool_calls",
+ "_set_chat_tool_calls"
+ ]
+ },
+ "inputDataExample": "{\"messages\": [{\"role\": \"user\", \"content\": \"What is the weather like in San Francisco?\"}, {\"role\": \"assistant\", \"content\": \"\", \"tool_calls\": [{\"name\": \"get_current_weather\", \"args\": {\"location\": \"San Francisco\"}, \"id\": \"call_abc123\"}]}, {\"role\": \"tool\", \"content\": \"The weather in San Francisco is 70 degrees and sunny.\", \"tool_call_id\": \"call_abc123\"}]}",
+ "outputDataExample": "{\"span_attributes\": {\"gen_ai.prompt.0.role\": \"user\", \"gen_ai.prompt.0.content\": \"What is the weather like in San Francisco?\", \"gen_ai.prompt.1.role\": \"assistant\", \"gen_ai.prompt.1.tool_calls.0.name\": \"get_current_weather\", \"gen_ai.prompt.2.role\": \"tool\", \"gen_ai.prompt.2.content\": \"The weather in San Francisco is 70 degrees and sunny.\"}}"
+ },
+ {
+ "simStepId": "03c8413e-0791-4631-a96b-96c942b8f3ca",
+ "diagramNodeId": "b54ec3ab-acba-4135-adb4-92256fe4654b",
+ "simStepLabel": "Request with Tool Output Sent to LLM",
+ "simStepDescription": "The complete conversation history, now including the tool's output, is sent to the LLM API to generate a final, natural language answer.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py",
+ "startLine": "45",
+ "endLine": "51",
+ "relevantVariables": [
+ "_chat_wrapper"
+ ]
+ },
+ "inputDataExample": "{\"messages\": [{\"role\": \"user\", \"content\": \"What is the weather like in San Francisco?\"}, {\"role\": \"assistant\", \"content\": null, \"tool_calls\": [{\"id\": \"call_abc123\", \"name\": \"get_current_weather\", \"arguments\": {\"location\": \"San Francisco\"}}]}, {\"role\": \"tool\", \"content\": \"The weather in San Francisco is 70 degrees and sunny.\", \"tool_call_id\": \"call_abc123\"}]}",
+ "outputDataExample": "{\"messages\": [{\"role\": \"user\", \"content\": \"What is the weather like in San Francisco?\"}, {\"role\": \"assistant\", \"content\": null, \"tool_calls\": [{\"id\": \"call_abc123\", \"name\": \"get_current_weather\", \"arguments\": {\"location\": \"San Francisco\"}}]}, {\"role\": \"tool\", \"content\": \"The weather in San Francisco is 70 degrees and sunny.\", \"tool_call_id\": \"call_abc123\"}]}"
+ },
+ {
+ "simStepId": "53b799ca-6785-424f-8f89-a416f0c9bdac",
+ "diagramNodeId": "d223f07b-2098-44ff-ac75-1d6a383785ee",
+ "simStepLabel": "LLM Generates Final Text Response",
+ "simStepDescription": "Using the context provided by the tool's output, the LLM generates a final, human-readable answer and returns it as a standard message with text content.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py",
+ "startLine": "278",
+ "endLine": "284",
+ "relevantVariables": [
+ "_set_generation_attributes",
+ "generation.text",
+ "message.content"
+ ]
+ },
+ "inputDataExample": "{\"id\": \"chatcmpl-45678\", \"choices\": [{\"finish_reason\": \"stop\", \"message\": {\"role\": \"assistant\", \"content\": \"The weather in San Francisco today is 70 degrees and sunny.\"}}], \"model\": \"gpt-4o\"}",
+ "outputDataExample": "{\"message\": {\"content\": \"The weather in San Francisco today is 70 degrees and sunny.\", \"additional_kwargs\": {}}}"
+ },
+ {
+ "simStepId": "6a012b5f-15dd-43fd-95f6-6c4582067803",
+ "diagramNodeId": "",
+ "simStepLabel": "Final Answer Returned to User",
+ "simStepDescription": "The final text answer is passed back through the LangChain agent to the end-user. The instrumentation captures this completion and adds it to the span attributes, concluding the trace for the entire tool-use interaction.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py",
+ "startLine": "236",
+ "endLine": "236",
+ "relevantVariables": [
+ "on_llm_end"
+ ]
+ },
+ "inputDataExample": "{\"final_answer\": \"The weather in San Francisco today is 70 degrees and sunny.\"}",
+ "outputDataExample": "{\"final_answer\": \"The weather in San Francisco today is 70 degrees and sunny.\"}"
+ }
+ ],
+ "description": "- Captures the complete lifecycle of tool-using LLM agents, providing visibility into their decision-making and actions
- - Automatically detects when an LLM response includes a request to call a function or tool
- - Records the requested tool name, arguments, and the tool's output as attributes on the trace span
- - Provides a clear view of the entire tool-use loop, from the initial prompt to the LLM's decision to use a tool, and the final response generated after receiving the tool's output
",
+ "simulationNodesAndEdges": {
+ "9b311362-1d19-41bd-9bb3-49bccf345928": {
+ "simStepIds": [
+ "bb6744e0-d46b-4138-ab2f-c9602d4f89a7"
+ ]
+ },
+ "ff7568ec-a2f0-4e9d-9a1f-8c438a172017": {
+ "simStepIds": [
+ "3d50ce44-7c00-45be-8de9-11602f582651"
+ ]
+ },
+ "de84c208-df89-4986-a91e-2d053c818e39": {
+ "simStepIds": [
+ "e4145c42-50e7-495e-8fae-5c95b565c632"
+ ]
+ },
+ "dcd5fcac-2ea9-481d-8997-3cbd9c8eacf8": {
+ "simStepIds": [
+ "22cf8357-7361-49db-9e5d-47fd467a7b9c"
+ ]
+ },
+ "8a325ec3-5f65-410b-b478-bdd0ffbfe205": {
+ "simStepIds": [
+ "284f0da4-bbcf-488d-998e-f8fc1cd9f758"
+ ]
+ },
+ "d223f07b-2098-44ff-ac75-1d6a383785ee": {
+ "simStepIds": [
+ "53b799ca-6785-424f-8f89-a416f0c9bdac"
+ ]
+ },
+ "c2731bb3-efc7-44b3-8639-8d1730be0139": {
+ "simStepIds": [
+ "59cd0722-f64c-4c95-a3ea-107be06a378d"
+ ]
+ },
+ "df0441d8-117c-4299-95b6-a2eb40de384e": {
+ "simStepIds": [
+ "8aa1d3e2-a086-4cae-8197-5a4c2addb06f"
+ ]
+ },
+ "34912404-d21b-4074-bd1e-68fa70fd1691": {
+ "simStepIds": [
+ "26634ad2-fb63-48f3-949e-132346dc3933"
+ ]
+ },
+ "1037d71c-c71e-4e51-a4f2-91b5b7b0a3ec": {
+ "simStepIds": [
+ "751442bb-8928-4d1e-aef4-4ea7b13abbf5"
+ ]
+ },
+ "b54ec3ab-acba-4135-adb4-92256fe4654b": {
+ "simStepIds": [
+ "03c8413e-0791-4631-a96b-96c942b8f3ca"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "tool_calls, function_call, ToolsAgentOutputParser",
+ "generationPrompt": "Tracing LLM Function and Tool Calls",
+ "generationKeywords": "tool_calls, function_call, ToolsAgentOutputParser"
+ },
+ "Observability for AI Agent Frameworks": {
+ "name": "Observability for AI Agent Frameworks",
+ "simSteps": [
+ {
+ "simStepId": "9b0270ac-a093-412b-82e5-03544bd5baee",
+ "diagramNodeId": "9966a3c9-69dc-4552-9096-b80786d3f2d4",
+ "simStepLabel": "Flow: CrewAI - Initialization",
+ "simStepDescription": "The SDK's instrumentation process begins by checking for the presence of the `crewai` package. If found, it proceeds to initialize the specific instrumentor for it.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "1120",
+ "endLine": "1130",
+ "relevantVariables": [
+ "init_crewai_instrumentor",
+ "is_package_installed",
+ "CrewAIInstrumentor"
+ ]
+ },
+ "inputDataExample": "{\n \"instruments_to_load\": [\"crewai\", \"openai\", \"langchain\"],\n \"blocked_instruments\": []\n}",
+ "outputDataExample": "{\n \"instrumentor_to_initialize\": \"CrewAIInstrumentor\"\n}"
+ },
+ {
+ "simStepId": "74e2d3c0-7a24-4c7d-ae83-c67a93bc2709",
+ "diagramNodeId": "e289cabc-5296-47df-91b7-69a12927842e",
+ "simStepLabel": "Flow: CrewAI - Activating Instrumentation",
+ "simStepDescription": "The `instrument()` method is called on the `CrewAIInstrumentor` instance. This triggers the internal `_instrument` method which contains the logic for patching the CrewAI library.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py",
+ "startLine": "26",
+ "endLine": "26",
+ "relevantVariables": [
+ "_instrument"
+ ]
+ },
+ "inputDataExample": "{\n \"instrumentor_instance\": \"\"\n}",
+ "outputDataExample": "{\n \"instrumentor_instance\": \"\"\n}"
+ },
+ {
+ "simStepId": "85bc8477-e13d-491b-9eba-d0cc075fdaa3",
+ "diagramNodeId": "c27337dd-06a8-4a8f-a9d2-c4c4b3b42f87",
+ "simStepLabel": "Flow: CrewAI - Method Patching",
+ "simStepDescription": "The instrumentor patches key methods within the CrewAI framework using `wrap_function_wrapper`. This injects observability logic into methods like `Crew.kickoff`, `Agent.execute_task`, and `Task.execute_sync` without altering the user's code.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py",
+ "startLine": "34",
+ "endLine": "39",
+ "relevantVariables": [
+ "wrap_function_wrapper",
+ "wrap_kickoff",
+ "wrap_agent_execute_task",
+ "wrap_task_execute",
+ "wrap_llm_call"
+ ]
+ },
+ "inputDataExample": "{\n \"tracer_provider\": \"\",\n \"meter_provider\": \"\"\n}",
+ "outputDataExample": "{\n \"patched_methods\": [\n \"crewai.crew.Crew.kickoff\",\n \"crewai.agent.Agent.execute_task\",\n \"crewai.task.Task.execute_sync\",\n \"crewai.llm.LLM.call\"\n ]\n}"
+ },
+ {
+ "simStepId": "e954799a-bc77-47a8-b1c2-da76b2fbdf4b",
+ "diagramNodeId": "485b43f6-5ec4-48ad-a0c3-7b9ae2e2770b",
+ "simStepLabel": "Flow: CrewAI - Application Invokes Workflow",
+ "simStepDescription": "The user's application code invokes a patched method, in this case `crew.kickoff()`, to start a multi-agent workflow. This call is now intercepted by the OpenLLMetry wrapper.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py",
+ "startLine": "69",
+ "endLine": "69",
+ "relevantVariables": [
+ "wrap_kickoff"
+ ]
+ },
+ "inputDataExample": "{\n \"crew\": \"\",\n \"inputs\": {\n \"topic\": \"The future of AI agents\"\n }\n}",
+ "outputDataExample": "{\n \"crew\": \"\",\n \"inputs\": {\n \"topic\": \"The future of AI agents\"\n }\n}"
+ },
+ {
+ "simStepId": "7ddd8861-6a29-484e-ae68-0910533aa1f9",
+ "diagramNodeId": "7caa6382-bbd9-4b8c-a3e9-278dd4cd6988",
+ "simStepLabel": "Flow: CrewAI - Workflow Span Creation",
+ "simStepDescription": "The `wrap_kickoff` wrapper creates a new root OpenTelemetry span to represent the entire CrewAI workflow. This span captures the overall execution and serves as the parent for subsequent agent and task spans.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py",
+ "startLine": "70",
+ "endLine": "77",
+ "relevantVariables": [
+ "tracer.start_as_current_span"
+ ]
+ },
+ "inputDataExample": "{\n \"name\": \"crewai.workflow\",\n \"kind\": \"SpanKind.INTERNAL\",\n \"attributes\": {\n \"gen_ai.system\": \"crewai\"\n }\n}",
+ "outputDataExample": "{\n \"span_context\": {\n \"trace_id\": \"0x123...\",\n \"span_id\": \"0xabc...\"\n },\n \"name\": \"crewai.workflow\",\n \"status\": \"UNSET\"\n}"
+ },
+ {
+ "simStepId": "7b3c5e50-ce02-48d3-87eb-ace7adc657f2",
+ "diagramNodeId": "9f6171fe-41df-4924-a7cd-e1a1879f9e69",
+ "simStepLabel": "Flow: OpenAI Agents - Initialization",
+ "simStepDescription": "The SDK's instrumentation process checks for the `openai-agents` package. Upon finding it, it initializes the `OpenAIAgentsInstrumentor` to enable tracing.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "1155",
+ "endLine": "1166",
+ "relevantVariables": [
+ "init_openai_agents_instrumentor",
+ "is_package_installed",
+ "OpenAIAgentsInstrumentor"
+ ]
+ },
+ "inputDataExample": "{\n \"instruments_to_load\": [\"openai_agents\", \"openai\"],\n \"blocked_instruments\": []\n}",
+ "outputDataExample": "{\n \"instrumentor_to_initialize\": \"OpenAIAgentsInstrumentor\"\n}"
+ },
+ {
+ "simStepId": "ac3de196-7848-4fb0-92e3-2376f5906726",
+ "diagramNodeId": "0e8b0d3a-3741-4452-90d5-00b070f53f18",
+ "simStepLabel": "Flow: OpenAI Agents - Activating Instrumentation",
+ "simStepDescription": "The `instrument()` method is called on the `OpenAIAgentsInstrumentor` instance. This invokes the internal `_instrument` method, which sets up the integration using the framework's native callback system.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py",
+ "startLine": "20",
+ "endLine": "20",
+ "relevantVariables": [
+ "_instrument"
+ ]
+ },
+ "inputDataExample": "{\n \"instrumentor_instance\": \"\"\n}",
+ "outputDataExample": "{\n \"instrumentor_instance\": \"\"\n}"
+ },
+ {
+ "simStepId": "14f1ee9d-05ad-487b-a770-0cce9057c9c0",
+ "diagramNodeId": "396cccfa-484d-4c2a-8607-c75f5f6cd2fc",
+ "simStepLabel": "Flow: OpenAI Agents - Hook Registration",
+ "simStepDescription": "The instrumentor registers a custom `OpenTelemetryTracingProcessor`. This processor hooks into the OpenAI Agents' native callback system, allowing it to listen for events like trace starts, span starts, and trace ends.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py",
+ "startLine": "31",
+ "endLine": "35",
+ "relevantVariables": [
+ "add_trace_processor",
+ "OpenTelemetryTracingProcessor",
+ "otel_processor"
+ ]
+ },
+ "inputDataExample": "{\n \"tracer\": \"\"\n}",
+ "outputDataExample": "{\n \"registered_processor\": \"\"\n}"
+ },
+ {
+ "simStepId": "82145888-94dd-43f7-b738-dc9344f1f39b",
+ "diagramNodeId": "cc21bc33-0042-4b96-aa2c-8c934c7f01f5",
+ "simStepLabel": "Flow: OpenAI Agents - Trace Start Event",
+ "simStepDescription": "When the application starts an agent run, the OpenAI Agents framework emits a 'trace start' event. This event is caught by the registered `OpenTelemetryTracingProcessor`, triggering its `on_trace_start` method.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py",
+ "startLine": "33",
+ "endLine": "33",
+ "relevantVariables": [
+ "on_trace_start"
+ ]
+ },
+ "inputDataExample": "{\n \"event\": \"trace_start\",\n \"payload\": {\n \"trace\": {\n \"trace_id\": \"trace-id-98765\"\n }\n }\n}",
+ "outputDataExample": "{\n \"event\": \"trace_start\",\n \"payload\": {\n \"trace\": {\n \"trace_id\": \"trace-id-98765\"\n }\n }\n}"
+ },
+ {
+ "simStepId": "3dcdc2ef-f984-446b-831a-25d8cc3c6309",
+ "diagramNodeId": "ef981e84-85e2-4a9e-bb0f-9b233d3606a8",
+ "simStepLabel": "Flow: OpenAI Agents - Workflow Span Creation",
+ "simStepDescription": "The `on_trace_start` method creates the root 'Agent Workflow' span for the entire execution. This span is stored and used as the parent for all subsequent spans related to this particular agent run.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py",
+ "startLine": "35",
+ "endLine": "44",
+ "relevantVariables": [
+ "self.tracer.start_span",
+ "workflow_span",
+ "self._root_spans"
+ ]
+ },
+ "inputDataExample": "{\n \"trace_id\": \"trace-id-98765\"\n}",
+ "outputDataExample": "{\n \"span_context\": {\n \"trace_id\": \"0x456...\",\n \"span_id\": \"0xdef...\"\n },\n \"name\": \"Agent Workflow\",\n \"attributes\": {\n \"traceloop.span.kind\": \"workflow\",\n \"gen_ai.system\": \"openai_agents\"\n }\n}"
+ },
+ {
+ "simStepId": "4e476da7-f7cd-457e-a119-05565dc4e061",
+ "diagramNodeId": "598065de-b4c7-4f36-888d-c4e71fb5dd89",
+ "simStepLabel": "Flow: OpenAI Agents - Agent Step Event",
+ "simStepDescription": "As the agent executes a specific task (e.g., running an agent or using a tool), the framework emits a 'span start' event. This event, containing details about the current step, is captured by the processor's `on_span_start` callback.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py",
+ "startLine": "59",
+ "endLine": "59",
+ "relevantVariables": [
+ "on_span_start"
+ ]
+ },
+ "inputDataExample": "{\n \"event\": \"span_start\",\n \"payload\": {\n \"span\": {\n \"trace_id\": \"trace-id-98765\",\n \"span_data\": {\n \"name\": \"researcher_agent\",\n \"input\": \"What is OpenLLMetry?\"\n }\n }\n }\n}",
+ "outputDataExample": "{\n \"event\": \"span_start\",\n \"payload\": {\n \"span\": {\n \"trace_id\": \"trace-id-98765\",\n \"span_data\": {\n \"name\": \"researcher_agent\",\n \"input\": \"What is OpenLLMetry?\"\n }\n }\n }\n}"
+ },
+ {
+ "simStepId": "914f0757-94ea-4d3d-8fce-0cd4c885b6e1",
+ "diagramNodeId": "30a71e5f-0e2f-40ba-a010-12835b821851",
+ "simStepLabel": "Flow: OpenAI Agents - Step Span Creation",
+ "simStepDescription": "The `on_span_start` method inspects the event data to determine the type of activity (e.g., Agent, Tool, Handoff). It then creates a corresponding OpenTelemetry span, properly nested under the root workflow span, to represent this specific step in the agent's reasoning process.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py",
+ "startLine": "60",
+ "endLine": "86",
+ "relevantVariables": [
+ "span_data",
+ "AgentSpanData",
+ "HandoffSpanData",
+ "FunctionSpanData",
+ "set_agent_name"
+ ]
+ },
+ "inputDataExample": "{\n \"span_data\": {\n \"type\": \"AgentSpanData\",\n \"name\": \"researcher_agent\"\n },\n \"parent_context\": \"\"\n}",
+ "outputDataExample": "{\n \"span_context\": {\n \"trace_id\": \"0x456...\",\n \"span_id\": \"0xghi...\"\n },\n \"name\": \"researcher_agent.agent\",\n \"attributes\": {\n \"traceloop.span.kind\": \"agent\",\n \"gen_ai.agent.name\": \"researcher_agent\"\n }\n}"
+ }
+ ],
+ "description": "- Offers specialized instrumentation for modern agentic frameworks that involve multiple agents and complex interactions
- - Integrates deeply with frameworks like CrewAI and OpenAI Agents using native callbacks and hooks
- - Creates traces that model the agent's reasoning process, including agent execution, tool usage, and handoffs between different agents
- - Assigns specific span kinds (e
- g
- , 'agent', 'tool', 'handoff') to clearly represent the structure of multi-agent systems
",
+ "simulationNodesAndEdges": {
+ "9966a3c9-69dc-4552-9096-b80786d3f2d4": {
+ "simStepIds": [
+ "9b0270ac-a093-412b-82e5-03544bd5baee"
+ ]
+ },
+ "c27337dd-06a8-4a8f-a9d2-c4c4b3b42f87": {
+ "simStepIds": [
+ "85bc8477-e13d-491b-9eba-d0cc075fdaa3"
+ ]
+ },
+ "7caa6382-bbd9-4b8c-a3e9-278dd4cd6988": {
+ "simStepIds": [
+ "7ddd8861-6a29-484e-ae68-0910533aa1f9"
+ ]
+ },
+ "9f6171fe-41df-4924-a7cd-e1a1879f9e69": {
+ "simStepIds": [
+ "7b3c5e50-ce02-48d3-87eb-ace7adc657f2"
+ ]
+ },
+ "396cccfa-484d-4c2a-8607-c75f5f6cd2fc": {
+ "simStepIds": [
+ "14f1ee9d-05ad-487b-a770-0cce9057c9c0"
+ ]
+ },
+ "ef981e84-85e2-4a9e-bb0f-9b233d3606a8": {
+ "simStepIds": [
+ "3dcdc2ef-f984-446b-831a-25d8cc3c6309"
+ ]
+ },
+ "30a71e5f-0e2f-40ba-a010-12835b821851": {
+ "simStepIds": [
+ "914f0757-94ea-4d3d-8fce-0cd4c885b6e1"
+ ]
+ },
+ "e289cabc-5296-47df-91b7-69a12927842e": {
+ "simStepIds": [
+ "74e2d3c0-7a24-4c7d-ae83-c67a93bc2709"
+ ]
+ },
+ "485b43f6-5ec4-48ad-a0c3-7b9ae2e2770b": {
+ "simStepIds": [
+ "e954799a-bc77-47a8-b1c2-da76b2fbdf4b"
+ ]
+ },
+ "0e8b0d3a-3741-4452-90d5-00b070f53f18": {
+ "simStepIds": [
+ "ac3de196-7848-4fb0-92e3-2376f5906726"
+ ]
+ },
+ "cc21bc33-0042-4b96-aa2c-8c934c7f01f5": {
+ "simStepIds": [
+ "82145888-94dd-43f7-b738-dc9344f1f39b"
+ ]
+ },
+ "598065de-b4c7-4f36-888d-c4e71fb5dd89": {
+ "simStepIds": [
+ "4e476da7-f7cd-457e-a119-05565dc4e061"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "CrewAIInstrumentor, OpenAIAgentsInstrumentor, on_span_start",
+ "generationPrompt": "Observability for AI Agent Frameworks",
+ "generationKeywords": "CrewAIInstrumentor, OpenAIAgentsInstrumentor, on_span_start"
+ },
+ "Exporting Telemetry Data to Various Observability Backends": {
+ "name": "Exporting Telemetry Data to Various Observability Backends",
+ "simSteps": [
+ {
+ "simStepId": "4f66b0b8-c794-415f-aa35-41e61aca6922",
+ "diagramNodeId": "590d1507-445b-4448-9b48-c9c96c948ff9",
+ "simStepLabel": "User Application Initializes Traceloop SDK",
+ "simStepDescription": "A user's application starts the telemetry process by calling `Traceloop.init()`. This call includes configuration for the specific observability backend, such as the endpoint and authentication headers. This example shows a configuration for exporting data to a generic OTLP-compatible backend like Datadog or Honeycomb.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "README.md",
+ "startLine": "75",
+ "endLine": "77",
+ "relevantVariables": [
+ "Traceloop",
+ "Traceloop.init"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{\"app_name\": \"my-llm-app\", \"api_endpoint\": \"https://api.datadoghq.com\", \"headers\": {\"DD-API-KEY\": \"YOUR_DATADOG_API_KEY\"}}"
+ },
+ {
+ "simStepId": "802f1f5d-0bdd-474a-98ad-e3d34be9458b",
+ "diagramNodeId": "18a93177-ec6b-49e0-a4e3-7293a3042818",
+ "simStepLabel": "Transmit Configuration to SDK",
+ "simStepDescription": "The configuration parameters provided by the user are passed into the `Traceloop.init` static method, which acts as the main entry point for the SDK.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/__init__.py",
+ "startLine": "47",
+ "endLine": "66",
+ "relevantVariables": [
+ "init",
+ "app_name",
+ "api_endpoint",
+ "api_key",
+ "headers",
+ "exporter",
+ "processor"
+ ]
+ },
+ "inputDataExample": "{\"app_name\": \"my-llm-app\", \"api_endpoint\": \"https://api.datadoghq.com\", \"headers\": {\"DD-API-KEY\": \"YOUR_DATADOG_API_KEY\"}}",
+ "outputDataExample": "{\"app_name\": \"my-llm-app\", \"api_endpoint\": \"https://api.datadoghq.com\", \"headers\": {\"DD-API-KEY\": \"YOUR_DATADOG_API_KEY\"}}"
+ },
+ {
+ "simStepId": "6eaec5d5-9f51-404c-b8df-eed4b4a64f21",
+ "diagramNodeId": "82003110-ab0f-42fd-9ec5-66adfacf5579",
+ "simStepLabel": "Process Configuration in Traceloop.init()",
+ "simStepDescription": "The `init` method processes the user's configuration. It checks for environment variables, validates the API key and endpoint, and prepares to set up the OpenTelemetry tracer. It determines if a default exporter and processor are needed or if custom ones were provided.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/__init__.py",
+ "startLine": "95",
+ "endLine": "159",
+ "relevantVariables": [
+ "is_tracing_enabled",
+ "is_content_tracing_enabled",
+ "os.getenv",
+ "parse_env_headers"
+ ]
+ },
+ "inputDataExample": "{\"app_name\": \"my-llm-app\", \"api_endpoint\": \"https://api.datadoghq.com\", \"headers\": {\"DD-API-KEY\": \"YOUR_DATADOG_API_KEY\"}}",
+ "outputDataExample": "{\"disable_batch\": false, \"processor\": null, \"exporter\": null, \"resource_attributes\": {\"service.name\": \"my-llm-app\"}, \"api_endpoint\": \"https://api.datadoghq.com\", \"headers\": {\"DD-API-KEY\": \"YOUR_DATADOG_API_KEY\"}}"
+ },
+ {
+ "simStepId": "b5cbd4c9-6cef-4551-969f-bcdd22fcb1d2",
+ "diagramNodeId": "33a1f647-551e-424b-bdf0-eb56913c10e7",
+ "simStepLabel": "Pass Configuration to TracerWrapper",
+ "simStepDescription": "The processed configuration is used to instantiate the `TracerWrapper`, which is responsible for managing the OpenTelemetry tracing pipeline.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/__init__.py",
+ "startLine": "160",
+ "endLine": "171",
+ "relevantVariables": [
+ "TracerWrapper"
+ ]
+ },
+ "inputDataExample": "{\"disable_batch\": false, \"processor\": null, \"exporter\": null, \"resource_attributes\": {\"service.name\": \"my-llm-app\"}, \"api_endpoint\": \"https://api.datadoghq.com\", \"headers\": {\"DD-API-KEY\": \"YOUR_DATADOG_API_KEY\"}}",
+ "outputDataExample": "{\"disable_batch\": false, \"processor\": null, \"exporter\": null, \"resource_attributes\": {\"service.name\": \"my-llm-app\"}, \"api_endpoint\": \"https://api.datadoghq.com\", \"headers\": {\"DD-API-KEY\": \"YOUR_DATADOG_API_KEY\"}}"
+ },
+ {
+ "simStepId": "5e1b6ee8-b41b-4b49-980c-324f4103c104",
+ "diagramNodeId": "0699b236-cd07-4793-a5ee-d045e365ffbc",
+ "simStepLabel": "Initialize TracerWrapper and OpenTelemetry Provider",
+ "simStepDescription": "The `TracerWrapper`'s constructor sets up the core OpenTelemetry components. It creates a `Resource` with the application's attributes and initializes the `TracerProvider`. If no custom `SpanProcessor` is provided, it calls a helper function to create a default one.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "275",
+ "endLine": "293",
+ "relevantVariables": [
+ "TracerWrapper.__init__",
+ "Resource",
+ "TracerProvider",
+ "get_default_span_processor"
+ ]
+ },
+ "inputDataExample": "{\"disable_batch\": false, \"processor\": null, \"exporter\": null, \"api_endpoint\": \"https://api.datadoghq.com\", \"headers\": {\"DD-API-KEY\": \"YOUR_DATADOG_API_KEY\"}}",
+ "outputDataExample": "{\"TracerProvider\": \"initialized\", \"SpanProcessor\": \"pending_creation\"}"
+ },
+ {
+ "simStepId": "0395eb25-62e0-4525-b1a0-9697959e7fa4",
+ "diagramNodeId": "7b26a911-4f9f-4a5b-931c-f507ffe2e3be",
+ "simStepLabel": "Request Default Span Processor",
+ "simStepDescription": "Since no custom processor was supplied in the `init` call, the `TracerWrapper` calls `get_default_span_processor` to create a standard pipeline for exporting spans.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "282",
+ "endLine": "282",
+ "relevantVariables": [
+ "get_default_span_processor"
+ ]
+ },
+ "inputDataExample": "{\"disable_batch\": false, \"api_endpoint\": \"https://api.datadoghq.com\", \"headers\": {\"DD-API-KEY\": \"YOUR_DATADOG_API_KEY\"}, \"exporter\": null}",
+ "outputDataExample": "{\"disable_batch\": false, \"api_endpoint\": \"https://api.datadoghq.com\", \"headers\": {\"DD-API-KEY\": \"YOUR_DATADOG_API_KEY\"}, \"exporter\": null}"
+ },
+ {
+ "simStepId": "91298448-8999-4885-9e99-fe9d87a44b54",
+ "diagramNodeId": "fca3e9e3-b480-4e80-9ba4-77396abfb720",
+ "simStepLabel": "Instantiate OTLP Exporter and Batch Processor",
+ "simStepDescription": "The `get_default_span_processor` function creates an `OTLPSpanExporter` configured with the endpoint and headers for the desired backend. It then wraps this exporter in a `BatchSpanProcessor` to handle sending spans in batches efficiently. This is the key step that enables exporting to any OTLP-compatible system.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "395",
+ "endLine": "405",
+ "relevantVariables": [
+ "get_default_span_processor",
+ "HTTPExporter",
+ "BatchSpanProcessor",
+ "SimpleSpanProcessor"
+ ]
+ },
+ "inputDataExample": "{\"disable_batch\": false, \"api_endpoint\": \"https://api.datadoghq.com\", \"headers\": {\"DD-API-KEY\": \"YOUR_DATADOG_API_KEY\"}, \"exporter\": null}",
+ "outputDataExample": "{\"processor\": \"BatchSpanProcessor()\"}"
+ },
+ {
+ "simStepId": "605fa88d-ba6d-4037-8dc0-8eb21579913c",
+ "diagramNodeId": "e51305b3-f346-43b4-b6ae-f884d3f87143",
+ "simStepLabel": "Attach Processor to Tracer Provider",
+ "simStepDescription": "The newly created `BatchSpanProcessor` is returned to the `TracerWrapper` and then added to the `TracerProvider`. The provider will now forward all created spans to this processor.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "291",
+ "endLine": "291",
+ "relevantVariables": [
+ "provider.add_span_processor"
+ ]
+ },
+ "inputDataExample": "{\"processor\": \"BatchSpanProcessor()\"}",
+ "outputDataExample": "{\"processor\": \"BatchSpanProcessor()\"}"
+ },
+ {
+ "simStepId": "dd22a434-ede4-43ee-822e-5ccec319eb26",
+ "diagramNodeId": "7fc5b305-619e-457c-b6dd-c6ffd5678419",
+ "simStepLabel": "Finalize and Set Global Tracer",
+ "simStepDescription": "The fully configured `TracerProvider` is set as the global tracer provider for the application. All subsequent OpenTelemetry instrumentation calls will now use this provider, ensuring that spans are processed by the `BatchSpanProcessor` and exported via the `OTLPSpanExporter` to the configured backend.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "293",
+ "endLine": "293",
+ "relevantVariables": [
+ "trace.set_tracer_provider"
+ ]
+ },
+ "inputDataExample": "{\"provider\": \"TracerProvider(span_processors=[BatchSpanProcessor(...)])\"}",
+ "outputDataExample": "{\"status\": \"Ready to trace and export spans to https://api.datadoghq.com\"}"
+ }
+ ],
+ "description": "- Enables integration of LLM observability into existing monitoring and APM solutions, avoiding vendor lock-in
- - Built on the OpenTelemetry standard, allowing it to connect with any OTLP-compatible backend
- - Provides documented and tested support for a wide range of popular platforms, including Datadog, Honeycomb, Grafana, New Relic, and SigNoz
- - The
Traceloop - init() method offers a simple configuration interface for setting up exporters and destinations
",
+ "simulationNodesAndEdges": {
+ "590d1507-445b-4448-9b48-c9c96c948ff9": {
+ "simStepIds": [
+ "4f66b0b8-c794-415f-aa35-41e61aca6922"
+ ]
+ },
+ "82003110-ab0f-42fd-9ec5-66adfacf5579": {
+ "simStepIds": [
+ "6eaec5d5-9f51-404c-b8df-eed4b4a64f21"
+ ]
+ },
+ "0699b236-cd07-4793-a5ee-d045e365ffbc": {
+ "simStepIds": [
+ "5e1b6ee8-b41b-4b49-980c-324f4103c104"
+ ]
+ },
+ "fca3e9e3-b480-4e80-9ba4-77396abfb720": {
+ "simStepIds": [
+ "91298448-8999-4885-9e99-fe9d87a44b54"
+ ]
+ },
+ "7fc5b305-619e-457c-b6dd-c6ffd5678419": {
+ "simStepIds": [
+ "dd22a434-ede4-43ee-822e-5ccec319eb26"
+ ]
+ },
+ "18a93177-ec6b-49e0-a4e3-7293a3042818": {
+ "simStepIds": [
+ "802f1f5d-0bdd-474a-98ad-e3d34be9458b"
+ ]
+ },
+ "33a1f647-551e-424b-bdf0-eb56913c10e7": {
+ "simStepIds": [
+ "b5cbd4c9-6cef-4551-969f-bcdd22fcb1d2"
+ ]
+ },
+ "7b26a911-4f9f-4a5b-931c-f507ffe2e3be": {
+ "simStepIds": [
+ "0395eb25-62e0-4525-b1a0-9697959e7fa4"
+ ]
+ },
+ "e51305b3-f346-43b4-b6ae-f884d3f87143": {
+ "simStepIds": [
+ "605fa88d-ba6d-4037-8dc0-8eb21579913c"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "OTLPSpanExporter, BatchSpanProcessor, Traceloop.init",
+ "generationPrompt": "Exporting Telemetry Data to Various Observability Backends",
+ "generationKeywords": "OTLPSpanExporter, BatchSpanProcessor, Traceloop.init"
+ },
+ "Centralized Prompt Management and Tracing": {
+ "name": "Centralized Prompt Management and Tracing",
+ "simSteps": [
+ {
+ "simStepId": "43824714-6bc6-4a0f-9561-ca91d337a105",
+ "diagramNodeId": "937d1c62-ba16-47e9-ab1e-be065caad287",
+ "simStepLabel": "Flow 1 - Background Sync: Initialize Prompt Fetcher",
+ "simStepDescription": "As part of Traceloop SDK initialization, a background `Fetcher` thread is started. It's responsible for periodically polling the Traceloop API to get the latest prompt definitions and keep the local in-memory prompt registry synchronized.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/fetcher.py",
+ "startLine": "28",
+ "endLine": "36",
+ "relevantVariables": [
+ "Fetcher",
+ "__init__",
+ "_prompt_registry",
+ "_poller_thread",
+ "_stop_polling_event"
+ ]
+ },
+ "inputDataExample": "{\n \"base_url\": \"https://api.traceloop.com\",\n \"api_key\": \"TRACELOOP_API_KEY_12345\"\n}",
+ "outputDataExample": "{\n \"status\": \"Fetcher thread started\"\n}"
+ },
+ {
+ "simStepId": "06407371-aca7-4481-a157-da54ad065406",
+ "diagramNodeId": "fe0b98d3-db4b-4696-ac93-8da68a9de835",
+ "simStepLabel": "Flow 1 - Background Sync: Fetcher Thread Starts Polling",
+ "simStepDescription": "The background thread begins its polling cycle, waiting for the specified interval before fetching data.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/fetcher.py",
+ "startLine": "139",
+ "endLine": "145",
+ "relevantVariables": [
+ "thread_func",
+ "stop_polling_event.wait",
+ "refresh_data"
+ ]
+ },
+ "inputDataExample": "{\n \"polling_interval_seconds\": 5\n}",
+ "outputDataExample": "{\n \"polling_interval_seconds\": 5\n}"
+ },
+ {
+ "simStepId": "4be04162-faaf-4944-a6ff-deaba16f4ad7",
+ "diagramNodeId": "05ba8443-572a-4226-ae1b-5c4f82865075",
+ "simStepLabel": "Flow 1 - Background Sync: Fetch Prompts from API",
+ "simStepDescription": "The `Fetcher` thread calls `refresh_data`, which makes an HTTP GET request to the Traceloop backend API to retrieve all registered prompts for the given API key.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/fetcher.py",
+ "startLine": "148",
+ "endLine": "156",
+ "relevantVariables": [
+ "refresh_data",
+ "fetch_url",
+ "prompt_registry.load"
+ ]
+ },
+ "inputDataExample": "{\n \"base_url\": \"https://api.traceloop.com\",\n \"api_key\": \"TRACELOOP_API_KEY_12345\"\n}",
+ "outputDataExample": "{\n \"prompts\": [\n {\n \"key\": \"joke_generator\",\n \"versions\": [\n {\n \"version\": 1,\n \"name\": \"v1.0\",\n \"hash\": \"b9d4e9f7\",\n \"llm_config\": {\n \"mode\": \"chat\",\n \"model\": \"gpt-3.5-turbo\",\n \"temperature\": 0.9,\n \"messages\": [\n {\n \"role\": \"system\",\n \"template\": \"You are a witty {{ persona }} comedian.\"\n },\n {\n \"role\": \"user\",\n \"template\": \"Tell me a joke.\"\n }\n ]\n }\n }\n ]\n }\n ]\n}"
+ },
+ {
+ "simStepId": "5a9ee8ae-ee92-40db-a5db-baacac9d07e2",
+ "diagramNodeId": "27821820-8ab4-445b-860c-2318e372c098",
+ "simStepLabel": "Flow 1 - Background Sync: Transmit Prompt Data to Registry",
+ "simStepDescription": "The JSON response containing all prompt definitions is passed from the fetcher to the `PromptRegistry` instance to be loaded into memory.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/fetcher.py",
+ "startLine": "156",
+ "endLine": "156",
+ "relevantVariables": [
+ "prompt_registry.load(response)"
+ ]
+ },
+ "inputDataExample": "{\n \"prompts\": [\n {\n \"key\": \"joke_generator\",\n \"versions\": [\n {\n \"version\": 1,\n \"name\": \"v1.0\",\n \"hash\": \"b9d4e9f7\",\n \"llm_config\": {\n \"mode\": \"chat\",\n \"model\": \"gpt-3.5-turbo\",\n \"temperature\": 0.9,\n \"messages\": [\n {\n \"role\": \"system\",\n \"template\": \"You are a witty {{ persona }} comedian.\"\n },\n {\n \"role\": \"user\",\n \"template\": \"Tell me a joke.\"\n }\n ]\n }\n }\n ]\n }\n ]\n}",
+ "outputDataExample": "{\n \"prompts\": [\n {\n \"key\": \"joke_generator\",\n \"versions\": [\n {\n \"version\": 1,\n \"name\": \"v1.0\",\n \"hash\": \"b9d4e9f7\",\n \"llm_config\": {\n \"mode\": \"chat\",\n \"model\": \"gpt-3.5-turbo\",\n \"temperature\": 0.9,\n \"messages\": [\n {\n \"role\": \"system\",\n \"template\": \"You are a witty {{ persona }} comedian.\"\n },\n {\n \"role\": \"user\",\n \"template\": \"Tell me a joke.\"\n }\n ]\n }\n }\n ]\n }\n ]\n}"
+ },
+ {
+ "simStepId": "769bcc27-2c77-4aac-a8ce-7675bf8c5daf",
+ "diagramNodeId": "c8536d6c-cbea-4144-bc92-f2882babea1d",
+ "simStepLabel": "Flow 1 - Background Sync: Load Prompts into In-Memory Registry",
+ "simStepDescription": "The `PromptRegistry`'s `load` method parses the JSON data and populates its internal dictionary (`_prompts`). This makes the prompts available for fast retrieval by the application via the `get_prompt` function.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/prompts/registry.py",
+ "startLine": "11",
+ "endLine": "16",
+ "relevantVariables": [
+ "load",
+ "_prompts"
+ ]
+ },
+ "inputDataExample": "{\n \"prompts\": [\n {\n \"key\": \"joke_generator\",\n \"versions\": [ /* ... versions ... */ ]\n }\n ]\n}",
+ "outputDataExample": "{\n \"_prompts\": {\n \"joke_generator\": {\n \"key\": \"joke_generator\",\n \"versions\": [ /* ... PromptVersion objects ... */ ]\n }\n }\n}"
+ },
+ {
+ "simStepId": "afc6f083-1099-4fac-9882-3c04399a7ce6",
+ "diagramNodeId": "da491675-3f07-42ef-a697-164a42af8359",
+ "simStepLabel": "Flow 2 - Usage: Application Calls `get_prompt`",
+ "simStepDescription": "An application, like the example app, calls the `get_prompt` function to fetch the configuration for a specific prompt. It provides the prompt's unique key and any variables required by the template.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/sample-app/sample_app/prompt_registry_example_app.py",
+ "startLine": "16",
+ "endLine": "16",
+ "relevantVariables": [
+ "get_prompt"
+ ]
+ },
+ "inputDataExample": "{\n \"key\": \"joke_generator\",\n \"variables\": {\n \"persona\": \"pirate\"\n }\n}",
+ "outputDataExample": "{\n \"model\": \"gpt-3.5-turbo\",\n \"messages\": [\n {\n \"role\": \"system\",\n \"content\": \"You are a witty pirate comedian.\"\n },\n {\n \"role\": \"user\",\n \"content\": \"Tell me a joke.\"\n }\n ],\n \"temperature\": 0.9\n}"
+ },
+ {
+ "simStepId": "b763749e-8c32-435a-9937-8d568e3d1460",
+ "diagramNodeId": "91766d72-8b41-4212-a38e-4433160c9747",
+ "simStepLabel": "Flow 2 - Usage: Forward Call to Prompt Registry Client",
+ "simStepDescription": "The `get_prompt` function is a simple public API that forwards the request to the `render_prompt` method of the singleton `PromptRegistryClient` instance.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/prompts/__init__.py",
+ "startLine": "4",
+ "endLine": "5",
+ "relevantVariables": [
+ "get_prompt",
+ "PromptRegistryClient().render_prompt"
+ ]
+ },
+ "inputDataExample": "{\n \"key\": \"joke_generator\",\n \"variables\": {\n \"persona\": \"pirate\"\n }\n}",
+ "outputDataExample": "{\n \"key\": \"joke_generator\",\n \"variables\": {\n \"persona\": \"pirate\"\n }\n}"
+ },
+ {
+ "simStepId": "ef975e4f-00ff-473c-bdab-eb4f74a037cd",
+ "diagramNodeId": "242b21b6-8235-40f1-be5f-a6fc5878beff",
+ "simStepLabel": "Flow 2 - Usage: Retrieve and Version Prompt",
+ "simStepDescription": "The `render_prompt` method retrieves the prompt from the in-memory registry using its key. It then determines the effective version to use (e.g., the latest published version, or one specified by name/hash).",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/prompts/client.py",
+ "startLine": "58",
+ "endLine": "72",
+ "relevantVariables": [
+ "_registry.get_prompt_by_key",
+ "get_effective_version",
+ "prompt_version"
+ ]
+ },
+ "inputDataExample": "{\n \"key\": \"joke_generator\"\n}",
+ "outputDataExample": "{\n \"prompt_version\": {\n \"version\": 1,\n \"name\": \"v1.0\",\n \"hash\": \"b9d4e9f7\",\n \"llm_config\": { /* ... config ... */ }\n }\n}"
+ },
+ {
+ "simStepId": "ac86c08e-8ba3-4623-a688-c24b71253d01",
+ "diagramNodeId": "1308391f-1710-4cef-87fc-69adb64bc548",
+ "simStepLabel": "Flow 2 - Usage: Set Prompt Metadata in Tracing Context",
+ "simStepDescription": "Before rendering, the client calls `set_managed_prompt_tracing_context` to inject metadata about the prompt (key, version, hash, variables) into the current OpenTelemetry context. This data is not yet on a span but is available for the next instrumented call.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/prompts/client.py",
+ "startLine": "82",
+ "endLine": "89",
+ "relevantVariables": [
+ "set_managed_prompt_tracing_context"
+ ]
+ },
+ "inputDataExample": "{\n \"key\": \"joke_generator\",\n \"version\": 1,\n \"version_name\": \"v1.0\",\n \"version_hash\": \"b9d4e9f7\",\n \"template_variables\": {\n \"persona\": \"pirate\"\n }\n}",
+ "outputDataExample": "{\n \"key\": \"joke_generator\",\n \"version\": 1,\n \"version_name\": \"v1.0\",\n \"version_hash\": \"b9d4e9f7\",\n \"template_variables\": {\n \"persona\": \"pirate\"\n }\n}"
+ },
+ {
+ "simStepId": "723adab6-f01a-4d16-bc53-dbf769e77358",
+ "diagramNodeId": "a117fffc-b8db-4edd-8e20-b1e688e097c0",
+ "simStepLabel": "Flow 2 - Usage: Render Prompt and Return LLM Arguments",
+ "simStepDescription": "The prompt's template is rendered using Jinja2 with the provided variables. The final result is a dictionary containing all the necessary arguments (`model`, `messages`, `temperature`, etc.) to be passed directly to the LLM client library.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/prompts/client.py",
+ "startLine": "91",
+ "endLine": "118",
+ "relevantVariables": [
+ "_render_jinja",
+ "_render_messages",
+ "result"
+ ]
+ },
+ "inputDataExample": "{\n \"template_variables\": {\n \"persona\": \"pirate\"\n },\n \"llm_config\": {\n \"model\": \"gpt-3.5-turbo\",\n \"messages\": [\n {\"role\": \"system\", \"template\": \"You are a witty {{ persona }} comedian.\"},\n {\"role\": \"user\", \"template\": \"Tell me a joke.\"}\n ]\n }\n}",
+ "outputDataExample": "{\n \"model\": \"gpt-3.5-turbo\",\n \"messages\": [\n {\n \"role\": \"system\",\n \"content\": \"You are a witty pirate comedian.\"\n },\n {\n \"role\": \"user\",\n \"content\": \"Tell me a joke.\"\n }\n ]\n}"
+ },
+ {
+ "simStepId": "82d12cc3-f33b-400e-9dc3-e399a38ca467",
+ "diagramNodeId": "3b259b5f-7327-42c1-809f-5bc2f3079d6f",
+ "simStepLabel": "Flow 2 - Usage: Return Rendered Arguments to Application",
+ "simStepDescription": "The dictionary of rendered prompt arguments is returned to the original caller in the application code.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/sample-app/sample_app/prompt_registry_example_app.py",
+ "startLine": "16",
+ "endLine": "16",
+ "relevantVariables": [
+ "prompt_args"
+ ]
+ },
+ "inputDataExample": "{\n \"model\": \"gpt-3.5-turbo\",\n \"messages\": [\n {\n \"role\": \"system\",\n \"content\": \"You are a witty pirate comedian.\"\n },\n {\n \"role\": \"user\",\n \"content\": \"Tell me a joke.\"\n }\n ],\n \"temperature\": 0.9\n}",
+ "outputDataExample": "{\n \"model\": \"gpt-3.5-turbo\",\n \"messages\": [\n {\n \"role\": \"system\",\n \"content\": \"You are a witty pirate comedian.\"\n },\n {\n \"role\": \"user\",\n \"content\": \"Tell me a joke.\"\n }\n ],\n \"temperature\": 0.9\n}"
+ },
+ {
+ "simStepId": "ad46ed98-e542-4032-a6ca-ee43c5ae0ee8",
+ "diagramNodeId": "6deab236-074c-4469-b0e1-83370fbf988f",
+ "simStepLabel": "Flow 2 - Usage: Execute LLM Call with Rendered Arguments",
+ "simStepDescription": "The application uses the dictionary returned by `get_prompt` to make an API call to the LLM provider. This call is automatically intercepted by the OpenLLMetry instrumentation for that provider (e.g., OpenAI).",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/sample-app/sample_app/prompt_registry_example_app.py",
+ "startLine": "17",
+ "endLine": "17",
+ "relevantVariables": [
+ "client.chat.completions.create"
+ ]
+ },
+ "inputDataExample": "{\n \"model\": \"gpt-3.5-turbo\",\n \"messages\": [\n {\n \"role\": \"system\",\n \"content\": \"You are a witty pirate comedian.\"\n },\n {\n \"role\": \"user\",\n \"content\": \"Tell me a joke.\"\n }\n ],\n \"temperature\": 0.9\n}",
+ "outputDataExample": "{\n \"id\": \"chatcmpl-12345\",\n \"object\": \"chat.completion\",\n \"choices\": [\n {\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"Why don't pirates take a shower before they walk the plank? Because they'll just wash up on shore later!\"\n }\n }\n ]\n}"
+ },
+ {
+ "simStepId": "a6dcb020-6b5c-4272-a022-b097307ff5e7",
+ "diagramNodeId": "c42f5c53-690a-4a99-8bde-bd859f53bdd6",
+ "simStepLabel": "Flow 2 - Usage: Instrumented Call Starts a New Span",
+ "simStepDescription": "When the instrumented LLM method is called, the tracing system creates a new OpenTelemetry span to represent the operation.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "298",
+ "endLine": "298",
+ "relevantVariables": [
+ "default_span_processor_on_start"
+ ]
+ },
+ "inputDataExample": "{\n \"model\": \"gpt-3.5-turbo\",\n \"messages\": [ { \"role\": \"system\", \"content\": \"...\" }, { \"role\": \"user\", \"content\": \"...\" } ]\n}",
+ "outputDataExample": "{\n \"model\": \"gpt-3.5-turbo\",\n \"messages\": [ { \"role\": \"system\", \"content\": \"...\" }, { \"role\": \"user\", \"content\": \"...\" } ]\n}"
+ },
+ {
+ "simStepId": "9eabc020-4c8f-436c-8c4d-2323eff67c40",
+ "diagramNodeId": "4538a8ff-b3f5-413e-bf2c-a54c814a02a3",
+ "simStepLabel": "Flow 2 - Usage: Enrich Span with Prompt Metadata",
+ "simStepDescription": "The instrumentation's `on_start` hook executes. It checks the OpenTelemetry context for prompt metadata (which was set in a previous step) and, if found, adds it as attributes to the new span. This directly links the LLM trace to the specific prompt version used.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "startLine": "332",
+ "endLine": "374",
+ "relevantVariables": [
+ "default_span_processor_on_start",
+ "is_llm_span",
+ "get_value",
+ "span.set_attribute",
+ "SpanAttributes.TRACELOOP_PROMPT_KEY",
+ "SpanAttributes.TRACELOOP_PROMPT_VERSION",
+ "SpanAttributes.TRACELOOP_PROMPT_VERSION_HASH",
+ "SpanAttributes.TRACELOOP_PROMPT_TEMPLATE_VARIABLES"
+ ]
+ },
+ "inputDataExample": "{\n \"context\": {\n \"managed_prompt\": true,\n \"prompt_key\": \"joke_generator\",\n \"prompt_version\": 1,\n \"prompt_version_name\": \"v1.0\",\n \"prompt_version_hash\": \"b9d4e9f7\",\n \"prompt_template_variables\": { \"persona\": \"pirate\" }\n }\n}",
+ "outputDataExample": "{\n \"span_attributes\": {\n \"traceloop.prompt.managed\": \"True\",\n \"traceloop.prompt.key\": \"joke_generator\",\n \"traceloop.prompt.version\": \"1\",\n \"traceloop.prompt.version_name\": \"v1.0\",\n \"traceloop.prompt.version_hash\": \"b9d4e9f7\",\n \"traceloop.prompt.template_variables.persona\": \"pirate\"\n }\n}"
+ }
+ ],
+ "description": "- Connects observability data directly to the prompt engineering lifecycle by tracking prompt versions
- - Provides a
get_prompt function to fetch versioned prompts from a central registry (the Traceloop platform) - - Automatically enriches traces with metadata about the specific prompt used, including its key, version number, hash, and template variables
- - Enables developers to correlate application behavior and performance with specific prompt versions, streamlining prompt management and evaluation
",
+ "simulationNodesAndEdges": {
+ "937d1c62-ba16-47e9-ab1e-be065caad287": {
+ "simStepIds": [
+ "43824714-6bc6-4a0f-9561-ca91d337a105"
+ ]
+ },
+ "05ba8443-572a-4226-ae1b-5c4f82865075": {
+ "simStepIds": [
+ "4be04162-faaf-4944-a6ff-deaba16f4ad7"
+ ]
+ },
+ "c8536d6c-cbea-4144-bc92-f2882babea1d": {
+ "simStepIds": [
+ "769bcc27-2c77-4aac-a8ce-7675bf8c5daf"
+ ]
+ },
+ "da491675-3f07-42ef-a697-164a42af8359": {
+ "simStepIds": [
+ "afc6f083-1099-4fac-9882-3c04399a7ce6"
+ ]
+ },
+ "242b21b6-8235-40f1-be5f-a6fc5878beff": {
+ "simStepIds": [
+ "ef975e4f-00ff-473c-bdab-eb4f74a037cd"
+ ]
+ },
+ "a117fffc-b8db-4edd-8e20-b1e688e097c0": {
+ "simStepIds": [
+ "723adab6-f01a-4d16-bc53-dbf769e77358"
+ ]
+ },
+ "6deab236-074c-4469-b0e1-83370fbf988f": {
+ "simStepIds": [
+ "ad46ed98-e542-4032-a6ca-ee43c5ae0ee8"
+ ]
+ },
+ "4538a8ff-b3f5-413e-bf2c-a54c814a02a3": {
+ "simStepIds": [
+ "9eabc020-4c8f-436c-8c4d-2323eff67c40"
+ ]
+ },
+ "fe0b98d3-db4b-4696-ac93-8da68a9de835": {
+ "simStepIds": [
+ "06407371-aca7-4481-a157-da54ad065406"
+ ]
+ },
+ "27821820-8ab4-445b-860c-2318e372c098": {
+ "simStepIds": [
+ "5a9ee8ae-ee92-40db-a5db-baacac9d07e2"
+ ]
+ },
+ "91766d72-8b41-4212-a38e-4433160c9747": {
+ "simStepIds": [
+ "b763749e-8c32-435a-9937-8d568e3d1460"
+ ]
+ },
+ "1308391f-1710-4cef-87fc-69adb64bc548": {
+ "simStepIds": [
+ "ac86c08e-8ba3-4623-a688-c24b71253d01"
+ ]
+ },
+ "3b259b5f-7327-42c1-809f-5bc2f3079d6f": {
+ "simStepIds": [
+ "82d12cc3-f33b-400e-9dc3-e399a38ca467"
+ ]
+ },
+ "c42f5c53-690a-4a99-8bde-bd859f53bdd6": {
+ "simStepIds": [
+ "a6dcb020-6b5c-4272-a022-b097307ff5e7"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "get_prompt, PromptRegistry, TRACELOOP_PROMPT_KEY",
+ "generationPrompt": "Centralized Prompt Management and Tracing",
+ "generationKeywords": "get_prompt, PromptRegistry, TRACELOOP_PROMPT_KEY"
+ },
+ "Controlling Data Privacy by Toggling Content Logging": {
+ "name": "Controlling Data Privacy by Toggling Content Logging",
+ "simSteps": [
+ {
+ "simStepId": "463c9e3f-53d7-4b44-bfc0-d8d4e710586e",
+ "diagramNodeId": "8b557909-2816-4de1-a510-fab328382534",
+ "simStepLabel": "LLM Call Intercepted",
+ "simStepDescription": "An application makes a call to an LLM provider (e.g., OpenAI). The OpenLLMetry instrumentation wrapper intercepts this call to begin tracing, create a span, and prepare for event emission.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py",
+ "startLine": "269",
+ "endLine": "286",
+ "relevantVariables": [
+ "span",
+ "_set_request_attributes",
+ "should_emit_events",
+ "emit_event",
+ "should_send_prompts"
+ ]
+ },
+ "inputDataExample": "{\n \"model\": \"gpt-3.5-turbo\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"Tell me a privacy-focused joke.\"\n }\n ]\n}",
+ "outputDataExample": "{\n \"span_id\": \"0x123abc\",\n \"trace_id\": \"0x456def\",\n \"status\": \"started\"\n}"
+ },
+ {
+ "simStepId": "ee11367e-d702-49f7-845e-e3fa288f7d68",
+ "diagramNodeId": "43fae1c6-55e9-4c05-acf4-96942396833b",
+ "simStepLabel": "Prepare Event Data",
+ "simStepDescription": "The instrumentation wrapper iterates through the user-provided messages and passes each one to an event emitter function to be formatted as an OpenTelemetry event. This event data initially includes all sensitive content.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py",
+ "startLine": "273",
+ "endLine": "280",
+ "relevantVariables": [
+ "emit_event",
+ "MessageEvent"
+ ]
+ },
+ "inputDataExample": "{\n \"event_type\": \"MessageEvent\",\n \"content\": \"Tell me a privacy-focused joke.\",\n \"role\": \"user\"\n}",
+ "outputDataExample": "{\n \"event_type\": \"MessageEvent\",\n \"content\": \"Tell me a privacy-focused joke.\",\n \"role\": \"user\"\n}"
+ },
+ {
+ "simStepId": "e75273c2-4fe4-4a5a-a4c8-1026297adf5f",
+ "diagramNodeId": "19bf0025-dff2-423b-bf45-c808b53d5305",
+ "simStepLabel": "Check Privacy Setting",
+ "simStepDescription": "Before emitting the event, the `should_send_prompts()` utility function is called. It checks the `TRACELOOP_TRACE_CONTENT` environment variable to determine if the user has opted out of logging sensitive data.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py",
+ "startLine": "176",
+ "endLine": "179",
+ "relevantVariables": [
+ "should_send_prompts",
+ "TRACELOOP_TRACE_CONTENT",
+ "os.getenv"
+ ]
+ },
+ "inputDataExample": "{\n \"environment\": {\n \"TRACELOOP_TRACE_CONTENT\": \"false\"\n }\n}",
+ "outputDataExample": "{\n \"decision\": false\n}"
+ },
+ {
+ "simStepId": "d6a4b37e-c7d9-40a6-95ea-b3157f27d546",
+ "diagramNodeId": "71e4295c-8960-4f5e-8328-5b7e7d5d99db",
+ "simStepLabel": "Transmit Privacy Decision",
+ "simStepDescription": "The boolean result from `should_send_prompts()` (e.g., `false`) is returned to the event emitter function, informing it of the user's content logging preference.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py",
+ "startLine": "177",
+ "endLine": "177",
+ "relevantVariables": [
+ "return"
+ ]
+ },
+ "inputDataExample": "{\n \"decision\": false\n}",
+ "outputDataExample": "{\n \"decision\": false\n}"
+ },
+ {
+ "simStepId": "a6d5dfa3-82f2-485a-aa05-83a239ace92c",
+ "diagramNodeId": "e063ff47-1113-4cf8-9c24-e303b45cc51c",
+ "simStepLabel": "Conditionally Redact Content",
+ "simStepDescription": "Based on the `false` decision, the event emitter enters a conditional block that removes the 'content' key from the event's body. This action prevents sensitive prompt and completion data from being logged.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py",
+ "startLine": "72",
+ "endLine": "76",
+ "relevantVariables": [
+ "should_send_prompts",
+ "body",
+ "del body[\"content\"]"
+ ]
+ },
+ "inputDataExample": "{\n \"body\": {\n \"content\": \"Tell me a privacy-focused joke.\",\n \"role\": \"user\",\n \"tool_calls\": null\n }\n}",
+ "outputDataExample": "{\n \"body\": {\n \"role\": \"user\",\n \"tool_calls\": null\n }\n}"
+ },
+ {
+ "simStepId": "5d5417b8-fdd9-4886-a0aa-9fdc369dfe65",
+ "diagramNodeId": "46bc93e7-fe28-466d-ba85-e4159e5f4d45",
+ "simStepLabel": "Pass Redacted Event to Logger",
+ "simStepDescription": "The now-redacted event object, which no longer contains sensitive data, is passed to the OpenTelemetry EventLogger for final processing and export.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py",
+ "startLine": "80",
+ "endLine": "80",
+ "relevantVariables": [
+ "Config.event_logger.emit",
+ "Event"
+ ]
+ },
+ "inputDataExample": "{\n \"event_name\": \"gen_ai.prompt\",\n \"body\": {\n \"role\": \"user\",\n \"tool_calls\": null\n },\n \"attributes\": {\n \"gen_ai.system\": \"openai\"\n }\n}",
+ "outputDataExample": "{\n \"event_name\": \"gen_ai.prompt\",\n \"body\": {\n \"role\": \"user\",\n \"tool_calls\": null\n },\n \"attributes\": {\n \"gen_ai.system\": \"openai\"\n }\n}"
+ },
+ {
+ "simStepId": "1c00335e-9318-4735-90a9-147ff9280626",
+ "diagramNodeId": "7c76bd7f-0032-4c36-bd2c-98493102ffdc",
+ "simStepLabel": "Export Trace Without Sensitive Data",
+ "simStepDescription": "The EventLogger processes the event, which is then sent to the configured observability backend (e.g., Traceloop, Datadog). The final exported trace correctly omits the sensitive prompt content, fulfilling the privacy requirement.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py",
+ "startLine": "80",
+ "endLine": "80",
+ "relevantVariables": [
+ "Config.event_logger.emit"
+ ]
+ },
+ "inputDataExample": "{\n \"event_name\": \"gen_ai.prompt\",\n \"body\": {\n \"role\": \"user\"\n }\n}",
+ "outputDataExample": "{\n \"status\": \"Exported\",\n \"trace_data\": {\n \"event\": {\n \"name\": \"gen_ai.prompt\",\n \"body\": {\n \"role\": \"user\"\n }\n }\n },\n \"sensitive_content_logged\": false\n}"
+ }
+ ],
+ "description": "- Provides control over the capture of potentially sensitive prompt and completion data
- - By default, captures the full text of prompts and LLM responses and attaches them to spans for easy debugging
- - Allows developers to disable this feature for privacy or compliance reasons by setting the
TRACELOOP_TRACE_CONTENT environment variable to false - - When content logging is disabled, spans are still generated with all other metadata (like model name and token counts), but the prompt/completion attributes are omitted
",
+ "simulationNodesAndEdges": {
+ "8b557909-2816-4de1-a510-fab328382534": {
+ "simStepIds": [
+ "463c9e3f-53d7-4b44-bfc0-d8d4e710586e"
+ ]
+ },
+ "19bf0025-dff2-423b-bf45-c808b53d5305": {
+ "simStepIds": [
+ "e75273c2-4fe4-4a5a-a4c8-1026297adf5f"
+ ]
+ },
+ "e063ff47-1113-4cf8-9c24-e303b45cc51c": {
+ "simStepIds": [
+ "a6d5dfa3-82f2-485a-aa05-83a239ace92c"
+ ]
+ },
+ "7c76bd7f-0032-4c36-bd2c-98493102ffdc": {
+ "simStepIds": [
+ "1c00335e-9318-4735-90a9-147ff9280626"
+ ]
+ },
+ "43fae1c6-55e9-4c05-acf4-96942396833b": {
+ "simStepIds": [
+ "ee11367e-d702-49f7-845e-e3fa288f7d68"
+ ]
+ },
+ "71e4295c-8960-4f5e-8328-5b7e7d5d99db": {
+ "simStepIds": [
+ "d6a4b37e-c7d9-40a6-95ea-b3157f27d546"
+ ]
+ },
+ "46bc93e7-fe28-466d-ba85-e4159e5f4d45": {
+ "simStepIds": [
+ "5d5417b8-fdd9-4886-a0aa-9fdc369dfe65"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "TRACELOOP_TRACE_CONTENT, should_send_prompts, emit_event",
+ "generationPrompt": "Controlling Data Privacy by Toggling Content Logging",
+ "generationKeywords": "TRACELOOP_TRACE_CONTENT, should_send_prompts, emit_event"
+ }
+ },
+ "cellToPath": {
+ "ee8a0974-f5d9-4239-b80c-94fdcfa6ce1f": "packages",
+ "3048bd2c-20b1-4054-ac5f-d5e13531d71a": "packages/traceloop-sdk",
+ "a93c64b7-593d-46d0-b44c-51863129e1a7": "packages/opentelemetry-instrumentation-openai",
+ "8b27c45b-fe94-47a4-8117-44eb7264e94a": "packages/opentelemetry-instrumentation-anthropic",
+ "8012c2d4-2a1c-4604-b2e3-618154ae3862": "packages/opentelemetry-instrumentation-bedrock",
+ "e7b8bf0a-a068-4d3d-b90e-2a8d0ba4dda6": "packages/traceloop-sdk/traceloop",
+ "18ed9a31-7cd7-4a0f-b200-41d54e8dd353": "packages/opentelemetry-instrumentation-openai/opentelemetry",
+ "d4252b21-7378-4253-a6bc-f49dede0230d": "packages/opentelemetry-instrumentation-anthropic/opentelemetry",
+ "6693b9d3-8ea7-45e1-b8e3-e23d69fd56c3": "packages/opentelemetry-instrumentation-bedrock/opentelemetry",
+ "a85538e0-fc7e-4231-914f-e84dcdb1e303": "packages/traceloop-sdk/traceloop/sdk",
+ "4c8b52a3-c61e-48ee-9fdb-72d6dfa151ad": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation",
+ "df5baabd-f000-4c50-821c-8c979f32dc8f": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation",
+ "10358afc-4691-4678-9b62-0ce3618abdd3": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation",
+ "7d6fb94b-42fd-4e55-bb83-f96f0e593ac5": "packages/traceloop-sdk/traceloop/sdk/tracing",
+ "1cdd7ac2-6148-4861-8505-26c0ba9db123": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai",
+ "0d7cfaeb-2446-444d-b6c4-067b346e6c7f": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic",
+ "fc38820f-4358-43e3-b393-14b93337f4ad": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock",
+ "899581ef-1635-481c-951a-2d940bfb9f63": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py",
+ "14c111b0-0e7a-4f30-9baf-79c29c6d4cf8": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py",
+ "5dbda6a0-dc8e-4379-b875-b67ab081bb6a": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py",
+ "3b3a8547-5c50-4499-9fdd-97ceaf01056c": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py",
+ "a5064ce5-ce04-4763-b886-c3f1cdaadcf3": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-495eb957-b386-4fe2-96d2-404854587293",
+ "a64bd23e-a768-4ace-bac3-106b25bbd62e": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-b93f443f-1915-4295-852b-53d37f1c0040",
+ "9de2976a-ee82-4f8e-a21e-025d9b0f3419": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-38901d04-f97e-4a98-a76d-8e3e66f30979",
+ "8f7dccf0-ce3d-49b8-9f70-34da41ac2e79": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py-simstep-c4181fa3-547f-4786-a301-7bb3a4edff81",
+ "c97e2e00-aa3b-45f0-80ba-58a9e42b2c12": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/__init__.py-simstep-cf56fb6c-c377-42d6-a5fd-fd80104f6e0c",
+ "e75ebc36-3823-486a-99cb-00401cd83ef1": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-d90f30fb-795e-457e-b213-4ba0b604e994",
+ "7c30c912-6f5b-4b0b-afa7-e951758a032e": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-b6f9d65c-d2a8-424c-8c41-c25d6b181c3f",
+ "0e19005c-8529-4600-a9fe-e771ecaafd1b": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-56392a21-e44f-45d7-a1c5-699d61dece4c",
+ "c449391d-7ab6-403a-89b1-1c3faebc22a1": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-718546e8-1e30-40b8-ab1e-6334e5aab49a",
+ "cf82d493-e1c7-4ff8-a276-a2fbb171f8b9": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-47783bce-dc5a-4446-91ba-e500f774296c",
+ "23293abe-08a0-44cc-b736-0374ca417793": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-94592627-18e0-463a-b652-bed9f38b08af",
+ "699c001a-7428-42f8-b5e1-afeeda1c92ff": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-be7997db-5caa-4d42-942c-2b998740fad0",
+ "6c067d9e-53bf-463b-89e7-5817c167d613": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-f62525ea-9862-4259-bf73-a79f9533679d",
+ "1d826639-4304-4fd1-b2ef-6a7f00803df2": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py-simstep-d45a74dd-3e81-4f2f-b039-ce4e5d6531ee",
+ "45445a1a-a22b-4535-8be0-a630cd9940d4": "packages/opentelemetry-instrumentation-bedrock/opentelemetry/instrumentation/bedrock/__init__.py-simstep-76bcb28b-c60e-4cb8-beb8-357e3ae22ab0",
+ "aafb13cc-ecc7-4107-ba2c-496d4693d9be": "generated-edge-simstep-fa73c3d9-6992-4283-b094-035b424b33df-aafb13cc-ecc7-4107-ba2c-496d4693d9be",
+ "767057a5-983b-465e-b9d4-347a346f4c5c": "generated-edge-simstep-d295e11a-a3a9-4840-b972-463d7b53a9a5-767057a5-983b-465e-b9d4-347a346f4c5c",
+ "5167e00f-7c6f-4ebd-9ec0-c1131e74b1f6": "generated-edge-simstep-e5eada1b-1318-4e26-87f7-7b3b041e1eab-5167e00f-7c6f-4ebd-9ec0-c1131e74b1f6",
+ "0af91fc6-e00c-4e2b-aaf3-1adc6d70f785": "generated-edge-simstep-9fbd826f-3f23-40a8-96f0-06373b2680e1-0af91fc6-e00c-4e2b-aaf3-1adc6d70f785",
+ "13d0986e-7572-48f9-9d67-b95bbf9da40b": "generated-edge-simstep-244b3bf5-7a0f-49a1-8597-ace1b9b6e9fc-13d0986e-7572-48f9-9d67-b95bbf9da40b",
+ "aa1bcafd-33eb-4953-9e61-0df40ce54d44": "generated-edge-simstep-2c71ace1-f523-4142-a738-5dee224bb516-aa1bcafd-33eb-4953-9e61-0df40ce54d44",
+ "85b1dcf0-c001-4766-95b8-a382c5242f00": "generated-edge-simstep-ea3614e2-7fcf-444f-8606-5d8185131fbe-85b1dcf0-c001-4766-95b8-a382c5242f00",
+ "7e6ba2a9-0576-4fe1-b6ce-833559168460": "generated-edge-simstep-abe1bc6a-e1f4-4d2f-a283-c2e05a4b9a20-7e6ba2a9-0576-4fe1-b6ce-833559168460",
+ "1d4ce2b3-0fcd-45f6-92d0-e5647892e5dc": "generated-edge-simstep-8457ca36-d791-4545-9996-16829c932a28-1d4ce2b3-0fcd-45f6-92d0-e5647892e5dc",
+ "537e494b-8651-4ff0-a889-308cbba5a8be": "generated-edge-simstep-a8d267c1-c2a8-4e43-91b7-6af6fae001aa-537e494b-8651-4ff0-a889-308cbba5a8be",
+ "ceddc138-8470-4898-bba2-1a0b5512ea50": "generated-edge-simstep-ad7ebde3-faf9-416b-b7f6-77f20931668c-ceddc138-8470-4898-bba2-1a0b5512ea50",
+ "09f03b4f-0394-4d98-acd1-33119a159cca": "generated-edge-simstep-098f8aa3-9fb1-47b6-bc00-9bf0050000a5-09f03b4f-0394-4d98-acd1-33119a159cca",
+ "c0f17def-c8a7-416a-8ba6-2c8ba97fdbcb": "packages/opentelemetry-instrumentation-langchain",
+ "5188cd58-29b0-49cd-b791-5b66a57c5828": "packages/opentelemetry-instrumentation-llamaindex",
+ "17feddf2-1efa-4a12-bfba-e97afd0b4a14": "packages/opentelemetry-instrumentation-crewai",
+ "dfa71bc6-3d37-4409-abde-04cf4918ab1e": "packages/opentelemetry-instrumentation-langchain/opentelemetry",
+ "af75d677-c433-4790-8544-5f600893b301": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry",
+ "6aadd755-683a-49ef-888b-fea2022afbd6": "packages/opentelemetry-instrumentation-crewai/opentelemetry",
+ "21bc113f-6070-4c47-a60d-177b0e6016a1": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation",
+ "122f09e0-551a-4df7-8762-855262ba337c": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation",
+ "5245ae12-00ff-45dd-9865-cf94704687c3": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation",
+ "9e9f8d3c-b3a3-41cf-b0cc-6d33f59e4d09": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain",
+ "5cc954ea-dc04-487f-88bd-c4ca000e52b0": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex",
+ "aec07ceb-62c7-41c8-b1f4-63f27657579c": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai",
+ "89270499-1074-43bc-a448-2f1079fdd5e0": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py",
+ "d4e9e31f-0972-4748-9f45-46ae0601f647": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py",
+ "e9c03ccd-8218-454a-9d5b-8e7dbcc0f824": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py",
+ "97432fe9-bb52-43b2-9b07-7931040683c7": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-38d4e5e9-96c0-4516-aa1f-929713a6d6e2",
+ "e168c2b2-986c-4875-9d24-5c590363ae3c": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py-simstep-332a3676-5b6f-4316-8c62-7f5ab27c927c",
+ "b1d1424d-eb5d-46f2-aa8c-35d5a9d0496c": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/__init__.py-simstep-d2bfc7f7-0f5c-4a88-94cc-3153b1ef30f2",
+ "b4f85fd1-1ddc-43b8-8d56-dbaa6af4d3ca": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-c96e2f40-1e60-4bc0-93cb-867b85be3dcb",
+ "ad409adb-66a2-4bdf-ad9f-f44f4fefb487": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py-simstep-0677a566-758c-4170-90e2-92e4b43d453d",
+ "639b1979-276b-4543-b69d-563de2690a01": "packages/opentelemetry-instrumentation-llamaindex/opentelemetry/instrumentation/llamaindex/__init__.py-simstep-16f67a4b-07b8-4c96-809e-d6fc3bff09a1",
+ "28047a56-d5c0-4fc8-9649-ace49784dc0c": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-f8883f84-707f-4496-957a-37d8bb381fc5",
+ "650a18e7-ab1a-4e5a-902c-3f5cf334ddf6": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-4009f1e6-115e-4e60-a77e-8b71fd9df89a",
+ "224b7647-773c-4235-adab-a270d8e741c2": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-940f766b-13fe-4e2f-a4d5-792832e71f51",
+ "3efb13e1-d2a0-4c5e-84c0-31fcd671efa1": "generated-edge-simstep-f7c075b4-b8c7-4cf5-a8f7-f90cc840b9a7-3efb13e1-d2a0-4c5e-84c0-31fcd671efa1",
+ "80e6db4a-5a64-4436-8df8-d9c61f897283": "generated-edge-simstep-0745b1bf-72bb-4ea5-ae4a-45406fc15e2f-80e6db4a-5a64-4436-8df8-d9c61f897283",
+ "02bcaca2-3fa7-4f43-82ba-e27e7cf02d6d": "generated-edge-simstep-38a80bca-7b9d-4eab-9fa9-b8d338dfba73-02bcaca2-3fa7-4f43-82ba-e27e7cf02d6d",
+ "3b49d87a-feb9-405b-9570-e18cf7fa76d1": "generated-edge-simstep-8046d8c3-ab92-45dc-95ce-5819d8e3816f-3b49d87a-feb9-405b-9570-e18cf7fa76d1",
+ "9158f5c2-3407-4920-9404-64553ac7fd9b": "generated-edge-simstep-9ebdc409-4989-4800-b126-b86867b98432-9158f5c2-3407-4920-9404-64553ac7fd9b",
+ "4ce084ad-a94c-4523-87e2-74adc54b0ce5": "generated-edge-simstep-456e2376-3346-4aa2-985f-b69075551c2d-4ce084ad-a94c-4523-87e2-74adc54b0ce5",
+ "97938336-6f5a-4d26-a1e1-13fe956d3bc8": "packages/opentelemetry-instrumentation-chromadb",
+ "ba4f1513-b864-45ec-8e17-9e0e3468ea32": "packages/opentelemetry-instrumentation-pinecone",
+ "e18f25cb-137a-4a5e-8de2-81322a7818f5": "packages/opentelemetry-instrumentation-qdrant",
+ "4a2d9cf8-307b-4d31-ab07-a4850b8ae40c": "packages/opentelemetry-instrumentation-chromadb/opentelemetry",
+ "c93bef8b-e6db-4775-96dc-a3f7837d0506": "packages/opentelemetry-instrumentation-pinecone/opentelemetry",
+ "2beffdd9-b84b-4306-a8bb-30fc452420c6": "packages/opentelemetry-instrumentation-qdrant/opentelemetry",
+ "34ec46b7-c471-4695-8f73-2a99ad332e17": "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation",
+ "66a6fe54-dad8-4ec9-af89-4962cd828c49": "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation",
+ "30f72244-b0c5-4b95-a0b6-c65aa1c98215": "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation",
+ "50b248e1-4251-495e-aca5-d77f38d8e03a": "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb",
+ "542396bc-0ee1-4696-b033-4f92f188049a": "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone",
+ "53ee72b3-70a8-4506-ae78-8fcab85f4062": "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant",
+ "baa445ec-a609-4492-9959-85ddae577015": "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/__init__.py",
+ "71ce4636-69a5-43e0-bc81-701063516493": "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone/__init__.py",
+ "1d39487a-1ef4-4ae3-9951-91254fa3ce64": "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant/__init__.py",
+ "fa6da8af-2d90-483b-a4cf-92bd3cf6d18d": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-7d34f0d6-28ad-47f2-a2fa-ad4005fd12da",
+ "c22af2c4-9617-47c1-b7a2-a0f7a1b9e4c2": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-f8547631-0825-4565-92c0-3867da912807",
+ "b3f3896d-d8c3-4029-b61a-c497667d617f": "packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/__init__.py-simstep-29380ecc-2470-4bdf-ad76-231ece83df82",
+ "229f90d6-2fd5-4e0f-955b-51c7319e7360": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-d7f74d81-0cc2-493b-947f-0fb528d2c681",
+ "876f8779-2cc8-4a70-809f-c68213e74423": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-9b33ddbe-e447-4131-9ef4-e56766873cf3",
+ "248a1ee5-d4d5-4222-85ef-32c2bebcc4a0": "packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone/__init__.py-simstep-990b2b77-7290-4afd-ae10-257191e37e28",
+ "463d7d9b-2f3d-4aa4-a29b-18ee5bbe0ed4": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-155de5d7-ad9b-4d73-b296-5f9b809e5f3c",
+ "ac577c4b-4234-4ebf-be38-4d9ab58e02a1": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-31bb4e40-def3-4c05-b3a2-41e8475718e3",
+ "dc67893d-1eea-4788-9155-c6eadd361fcb": "packages/opentelemetry-instrumentation-qdrant/opentelemetry/instrumentation/qdrant/__init__.py-simstep-98d3d71b-93e8-43ec-ba55-e0f8979feaf9",
+ "a17b6fe4-a31b-47a6-9c8a-d88dfc259f2a": "generated-edge-simstep-094072a9-c8b6-4211-b382-9632af076bdd-a17b6fe4-a31b-47a6-9c8a-d88dfc259f2a",
+ "57e2e347-4678-4493-9852-1fa503174421": "generated-edge-simstep-587a664e-6e70-46a5-a72a-535c822c60c8-57e2e347-4678-4493-9852-1fa503174421",
+ "ed034abc-c663-4f76-8a34-29a4e95e6e43": "generated-edge-simstep-eb91046d-8909-490b-9a03-95871efa7930-ed034abc-c663-4f76-8a34-29a4e95e6e43",
+ "9f5708a4-0a48-4a39-81da-009e1a13d0d8": "generated-edge-simstep-980e2c9b-0f9d-4423-ac52-9af252123b77-9f5708a4-0a48-4a39-81da-009e1a13d0d8",
+ "97ab21f4-c4b6-4358-9988-4c1ffacf9dd0": "generated-edge-simstep-31052157-848d-469d-bd41-553a23333359-97ab21f4-c4b6-4358-9988-4c1ffacf9dd0",
+ "d3c7c6c5-67ca-47d2-8b6c-49a1eb911b9b": "generated-edge-simstep-3a41dddf-57c8-4bda-bc71-cc23f06624a8-d3c7c6c5-67ca-47d2-8b6c-49a1eb911b9b",
+ "09ef5c7d-14e1-4729-8b92-80a782ba835c": "packages/sample-app",
+ "7e0df8f9-9881-4666-b79c-bd8c0572b439": "packages/sample-app/sample_app",
+ "77db505c-56f6-4a04-94b9-92da1f5ec73d": "packages/sample-app/sample_app/methods_decorated_app.py",
+ "6dae2e41-2f66-4192-8b2d-554477c4ea43": "packages/traceloop-sdk/traceloop/sdk/decorators",
+ "c8adf835-e657-4edd-8f70-609a65d5a69e": "packages/traceloop-sdk/traceloop/sdk/decorators/__init__.py",
+ "32508e61-1a03-4370-b824-4fb4dceae19c": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py",
+ "5e546eac-c637-4f37-89e5-981306bdb767": "packages/sample-app/sample_app/methods_decorated_app.py-simstep-91f00c4f-6f41-454f-95ee-803a341fb7cd",
+ "198d2594-3157-438d-81c0-f87ae0e7568d": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-42922f6c-d7cb-4d5b-a1c0-f5248a75358f",
+ "941efc45-2e3b-48e5-a132-a879959f4e86": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-4e2fbcfc-4005-4154-865d-2562818e1625",
+ "0cbbb5c8-8182-4975-a0ee-0da88126d7c5": "packages/traceloop-sdk/traceloop/sdk/decorators/__init__.py-simstep-f658c721-fee2-4863-b972-0d7ab32a1255",
+ "46c8bdab-b559-4c6d-833d-c36e219b772c": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-d9b6467b-971a-4f1f-bdb6-cfb504802a00",
+ "9a29b3e4-fbf6-4dc8-80f4-c09bb45d2426": "packages/traceloop-sdk/traceloop/sdk/decorators/base.py-simstep-8f425a02-9bcc-4dba-b5bb-493eb3a4c2b7",
+ "5df32f45-a946-4839-81f6-69a85eeb4d30": "generated-edge-simstep-daa5747e-99f9-43b9-81dd-4179be5b41a6-5df32f45-a946-4839-81f6-69a85eeb4d30",
+ "ff52e952-7593-4280-ae4e-6714a9bb4fc6": "generated-edge-simstep-066a0d0d-a4ee-4023-b3d7-b756485282f4-ff52e952-7593-4280-ae4e-6714a9bb4fc6",
+ "9439737f-d1d0-49fa-a5d3-34b8dacf3284": "generated-edge-simstep-fb2ae73f-d115-4252-8df3-2c11d9b69ecb-9439737f-d1d0-49fa-a5d3-34b8dacf3284",
+ "f03699bf-272a-4524-a87d-7b26e8c3ce2a": "generated-edge-simstep-e10ed652-f4d2-4a7a-bc04-f3eff1efe652-f03699bf-272a-4524-a87d-7b26e8c3ce2a",
+ "a2a3ed45-ac4a-46b4-854b-91f91a05c588": "generated-edge-simstep-628e3f07-589b-4da2-ac5d-de9aeb994c03-a2a3ed45-ac4a-46b4-854b-91f91a05c588",
+ "9418a7de-e3b5-41f4-a9b4-a957cf7f2e24": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py",
+ "99e901b3-bd6c-4cc4-a911-f3da77b4cbd2": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared",
+ "e850f5ad-f9cd-4d3d-8894-d24ca38dce6d": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py",
+ "ed582fad-0f54-4d8c-859f-1914dc72bc6b": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-68a032ec-1c86-4f00-9bf4-b2a18e092429",
+ "96d4b52f-0077-4047-b6e9-d1494f44b558": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/__init__.py-simstep-b97542d0-b032-42e6-be56-4e1f4ee65d2f",
+ "e0587dd7-dcef-40ae-af5c-712a33e14316": "packages/opentelemetry-instrumentation-anthropic/opentelemetry/instrumentation/anthropic/streaming.py-simstep-2ee1ef8b-02a3-4096-ab3d-879112cdea20",
+ "e4fb2604-b3ae-4876-b774-aed648b223b1": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py-simstep-25ad4da4-fa4b-40d9-a1bd-6ebac6aeffb4",
+ "804b50f1-abc1-47ba-9e7e-de4510d5d478": "generated-edge-simstep-6c0eaedf-551f-4015-9ed8-f09d391be1e7-804b50f1-abc1-47ba-9e7e-de4510d5d478",
+ "bfa36794-a43a-4ff6-8dd9-ba168caf7e7d": "generated-edge-simstep-12ee6a36-97c5-4223-bb69-fcc8b451cd4b-bfa36794-a43a-4ff6-8dd9-ba168caf7e7d",
+ "df746b40-8798-4885-b552-1e0a06ade0ba": "generated-edge-simstep-a1cce958-c736-4065-bafc-c8f946224971-df746b40-8798-4885-b552-1e0a06ade0ba",
+ "f9ea66b0-6192-4912-bdef-3147a35f7995": "sample-app",
+ "2eb59ddf-70b4-46de-85db-5d5dd8daa01d": "sample-app/langchain_agent.py",
+ "a7fafc87-8af0-4599-80bb-8db890b1a6bd": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py",
+ "85945ed1-ff45-4435-b33c-989e99134357": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py",
+ "9b311362-1d19-41bd-9bb3-49bccf345928": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-bb6744e0-d46b-4138-ab2f-c9602d4f89a7",
+ "ff7568ec-a2f0-4e9d-9a1f-8c438a172017": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py-simstep-3d50ce44-7c00-45be-8de9-11602f582651",
+ "de84c208-df89-4986-a91e-2d053c818e39": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-e4145c42-50e7-495e-8fae-5c95b565c632",
+ "dcd5fcac-2ea9-481d-8997-3cbd9c8eacf8": "sample-app/langchain_agent.py-simstep-22cf8357-7361-49db-9e5d-47fd467a7b9c",
+ "8a325ec3-5f65-410b-b478-bdd0ffbfe205": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-284f0da4-bbcf-488d-998e-f8fc1cd9f758",
+ "d223f07b-2098-44ff-ac75-1d6a383785ee": "packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/span_utils.py-simstep-53b799ca-6785-424f-8f89-a416f0c9bdac",
+ "c2731bb3-efc7-44b3-8639-8d1730be0139": "generated-edge-simstep-59cd0722-f64c-4c95-a3ea-107be06a378d-c2731bb3-efc7-44b3-8639-8d1730be0139",
+ "df0441d8-117c-4299-95b6-a2eb40de384e": "generated-edge-simstep-8aa1d3e2-a086-4cae-8197-5a4c2addb06f-df0441d8-117c-4299-95b6-a2eb40de384e",
+ "34912404-d21b-4074-bd1e-68fa70fd1691": "generated-edge-simstep-26634ad2-fb63-48f3-949e-132346dc3933-34912404-d21b-4074-bd1e-68fa70fd1691",
+ "1037d71c-c71e-4e51-a4f2-91b5b7b0a3ec": "generated-edge-simstep-751442bb-8928-4d1e-aef4-4ea7b13abbf5-1037d71c-c71e-4e51-a4f2-91b5b7b0a3ec",
+ "b54ec3ab-acba-4135-adb4-92256fe4654b": "generated-edge-simstep-03c8413e-0791-4631-a96b-96c942b8f3ca-b54ec3ab-acba-4135-adb4-92256fe4654b",
+ "30865560-7c1a-4a32-a339-465fa1aa1302": "packages/opentelemetry-instrumentation-openai-agents",
+ "ba88a4f4-d2b7-4e55-b080-1f1c6b6039ae": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry",
+ "ce5a3913-3b99-4e91-a528-b6cd2afc5f4e": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation",
+ "4c400e14-33fc-4f6c-b757-e39e08712cb0": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents",
+ "d5707ec2-17c7-408e-91a8-7b891d55a2ba": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py",
+ "398d7f9a-d241-4917-90fd-dfbfad1bb4fe": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py",
+ "9966a3c9-69dc-4552-9096-b80786d3f2d4": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-9b0270ac-a093-412b-82e5-03544bd5baee",
+ "c27337dd-06a8-4a8f-a9d2-c4c4b3b42f87": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-85bc8477-e13d-491b-9eba-d0cc075fdaa3",
+ "7caa6382-bbd9-4b8c-a3e9-278dd4cd6988": "packages/opentelemetry-instrumentation-crewai/opentelemetry/instrumentation/crewai/instrumentation.py-simstep-7ddd8861-6a29-484e-ae68-0910533aa1f9",
+ "9f6171fe-41df-4924-a7cd-e1a1879f9e69": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-7b3c5e50-ce02-48d3-87eb-ace7adc657f2",
+ "396cccfa-484d-4c2a-8607-c75f5f6cd2fc": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/__init__.py-simstep-14f1ee9d-05ad-487b-a770-0cce9057c9c0",
+ "ef981e84-85e2-4a9e-bb0f-9b233d3606a8": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py-simstep-3dcdc2ef-f984-446b-831a-25d8cc3c6309",
+ "30a71e5f-0e2f-40ba-a010-12835b821851": "packages/opentelemetry-instrumentation-openai-agents/opentelemetry/instrumentation/openai_agents/_hooks.py-simstep-914f0757-94ea-4d3d-8fce-0cd4c885b6e1",
+ "e289cabc-5296-47df-91b7-69a12927842e": "generated-edge-simstep-74e2d3c0-7a24-4c7d-ae83-c67a93bc2709-e289cabc-5296-47df-91b7-69a12927842e",
+ "485b43f6-5ec4-48ad-a0c3-7b9ae2e2770b": "generated-edge-simstep-e954799a-bc77-47a8-b1c2-da76b2fbdf4b-485b43f6-5ec4-48ad-a0c3-7b9ae2e2770b",
+ "0e8b0d3a-3741-4452-90d5-00b070f53f18": "generated-edge-simstep-ac3de196-7848-4fb0-92e3-2376f5906726-0e8b0d3a-3741-4452-90d5-00b070f53f18",
+ "cc21bc33-0042-4b96-aa2c-8c934c7f01f5": "generated-edge-simstep-82145888-94dd-43f7-b738-dc9344f1f39b-cc21bc33-0042-4b96-aa2c-8c934c7f01f5",
+ "598065de-b4c7-4f36-888d-c4e71fb5dd89": "generated-edge-simstep-4e476da7-f7cd-457e-a119-05565dc4e061-598065de-b4c7-4f36-888d-c4e71fb5dd89",
+ "b2894781-4928-449b-83e8-904a5a1bd8c4": "README.md",
+ "140e603f-00ee-46b7-8c70-92c5d4b9d6ef": "packages/traceloop-sdk/traceloop/sdk/__init__.py",
+ "590d1507-445b-4448-9b48-c9c96c948ff9": "README.md-simstep-4f66b0b8-c794-415f-aa35-41e61aca6922",
+ "82003110-ab0f-42fd-9ec5-66adfacf5579": "packages/traceloop-sdk/traceloop/sdk/__init__.py-simstep-6eaec5d5-9f51-404c-b8df-eed4b4a64f21",
+ "0699b236-cd07-4793-a5ee-d045e365ffbc": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-5e1b6ee8-b41b-4b49-980c-324f4103c104",
+ "fca3e9e3-b480-4e80-9ba4-77396abfb720": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-91298448-8999-4885-9e99-fe9d87a44b54",
+ "7fc5b305-619e-457c-b6dd-c6ffd5678419": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-dd22a434-ede4-43ee-822e-5ccec319eb26",
+ "18a93177-ec6b-49e0-a4e3-7293a3042818": "generated-edge-simstep-802f1f5d-0bdd-474a-98ad-e3d34be9458b-18a93177-ec6b-49e0-a4e3-7293a3042818",
+ "33a1f647-551e-424b-bdf0-eb56913c10e7": "generated-edge-simstep-b5cbd4c9-6cef-4551-969f-bcdd22fcb1d2-33a1f647-551e-424b-bdf0-eb56913c10e7",
+ "7b26a911-4f9f-4a5b-931c-f507ffe2e3be": "generated-edge-simstep-0395eb25-62e0-4525-b1a0-9697959e7fa4-7b26a911-4f9f-4a5b-931c-f507ffe2e3be",
+ "e51305b3-f346-43b4-b6ae-f884d3f87143": "generated-edge-simstep-605fa88d-ba6d-4037-8dc0-8eb21579913c-e51305b3-f346-43b4-b6ae-f884d3f87143",
+ "87332ef7-f6b1-4175-ab31-1feed304fdd7": "packages/sample-app/sample_app/prompt_registry_example_app.py",
+ "c32f5b07-95b0-4ebc-ab5d-682a5ca49169": "packages/traceloop-sdk/traceloop/sdk/fetcher.py",
+ "8945e002-d804-4ed2-9c0f-7ca143134ea7": "packages/traceloop-sdk/traceloop/sdk/prompts",
+ "c6430bd1-3ec6-4ec1-a192-c4388c6b3102": "packages/traceloop-sdk/traceloop/sdk/prompts/registry.py",
+ "baedb6bc-5499-4e00-a015-cb7d5411d591": "packages/traceloop-sdk/traceloop/sdk/prompts/__init__.py",
+ "e9518cef-9824-46d5-bdc4-dbc71345f8b5": "packages/traceloop-sdk/traceloop/sdk/prompts/client.py",
+ "937d1c62-ba16-47e9-ab1e-be065caad287": "packages/traceloop-sdk/traceloop/sdk/fetcher.py-simstep-43824714-6bc6-4a0f-9561-ca91d337a105",
+ "05ba8443-572a-4226-ae1b-5c4f82865075": "packages/traceloop-sdk/traceloop/sdk/fetcher.py-simstep-4be04162-faaf-4944-a6ff-deaba16f4ad7",
+ "c8536d6c-cbea-4144-bc92-f2882babea1d": "packages/traceloop-sdk/traceloop/sdk/prompts/registry.py-simstep-769bcc27-2c77-4aac-a8ce-7675bf8c5daf",
+ "da491675-3f07-42ef-a697-164a42af8359": "packages/sample-app/sample_app/prompt_registry_example_app.py-simstep-afc6f083-1099-4fac-9882-3c04399a7ce6",
+ "242b21b6-8235-40f1-be5f-a6fc5878beff": "packages/traceloop-sdk/traceloop/sdk/prompts/client.py-simstep-ef975e4f-00ff-473c-bdab-eb4f74a037cd",
+ "a117fffc-b8db-4edd-8e20-b1e688e097c0": "packages/traceloop-sdk/traceloop/sdk/prompts/client.py-simstep-723adab6-f01a-4d16-bc53-dbf769e77358",
+ "6deab236-074c-4469-b0e1-83370fbf988f": "packages/sample-app/sample_app/prompt_registry_example_app.py-simstep-ad46ed98-e542-4032-a6ca-ee43c5ae0ee8",
+ "4538a8ff-b3f5-413e-bf2c-a54c814a02a3": "packages/traceloop-sdk/traceloop/sdk/tracing/tracing.py-simstep-9eabc020-4c8f-436c-8c4d-2323eff67c40",
+ "fe0b98d3-db4b-4696-ac93-8da68a9de835": "generated-edge-simstep-06407371-aca7-4481-a157-da54ad065406-fe0b98d3-db4b-4696-ac93-8da68a9de835",
+ "27821820-8ab4-445b-860c-2318e372c098": "generated-edge-simstep-5a9ee8ae-ee92-40db-a5db-baacac9d07e2-27821820-8ab4-445b-860c-2318e372c098",
+ "91766d72-8b41-4212-a38e-4433160c9747": "generated-edge-simstep-b763749e-8c32-435a-9937-8d568e3d1460-91766d72-8b41-4212-a38e-4433160c9747",
+ "1308391f-1710-4cef-87fc-69adb64bc548": "generated-edge-simstep-ac86c08e-8ba3-4623-a688-c24b71253d01-1308391f-1710-4cef-87fc-69adb64bc548",
+ "3b259b5f-7327-42c1-809f-5bc2f3079d6f": "generated-edge-simstep-82d12cc3-f33b-400e-9dc3-e399a38ca467-3b259b5f-7327-42c1-809f-5bc2f3079d6f",
+ "c42f5c53-690a-4a99-8bde-bd859f53bdd6": "generated-edge-simstep-a6dcb020-6b5c-4272-a022-b097307ff5e7-c42f5c53-690a-4a99-8bde-bd859f53bdd6",
+ "01398b8a-89f4-4b89-b45c-a4e9a9b69c84": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py",
+ "4b1e411d-3b8d-4f22-999b-ae9f9bef3187": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py",
+ "8b557909-2816-4de1-a510-fab328382534": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/chat_wrappers.py-simstep-463c9e3f-53d7-4b44-bfc0-d8d4e710586e",
+ "19bf0025-dff2-423b-bf45-c808b53d5305": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/utils.py-simstep-e75273c2-4fe4-4a5a-a4c8-1026297adf5f",
+ "e063ff47-1113-4cf8-9c24-e303b45cc51c": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py-simstep-a6d5dfa3-82f2-485a-aa05-83a239ace92c",
+ "7c76bd7f-0032-4c36-bd2c-98493102ffdc": "packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/shared/event_emitter.py-simstep-1c00335e-9318-4735-90a9-147ff9280626",
+ "43fae1c6-55e9-4c05-acf4-96942396833b": "generated-edge-simstep-ee11367e-d702-49f7-845e-e3fa288f7d68-43fae1c6-55e9-4c05-acf4-96942396833b",
+ "71e4295c-8960-4f5e-8328-5b7e7d5d99db": "generated-edge-simstep-d6a4b37e-c7d9-40a6-95ea-b3157f27d546-71e4295c-8960-4f5e-8328-5b7e7d5d99db",
+ "46bc93e7-fe28-466d-ba85-e4159e5f4d45": "generated-edge-simstep-5d5417b8-fdd9-4886-a0aa-9fdc369dfe65-46bc93e7-fe28-466d-ba85-e4159e5f4d45"
+ }
+}
\ No newline at end of file
From 838b01c7bda88324bb71188eccede8bf3e353a16 Mon Sep 17 00:00:00 2001
From: Nasser <42423897+Abdulnaser97@users.noreply.github.com>
Date: Thu, 30 Oct 2025 15:49:39 -0400
Subject: [PATCH 2/3] Add CodeCanvas diagram to README
---
README.md | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/README.md b/README.md
index ecbaa8dba1..d3bb87c6e1 100644
--- a/README.md
+++ b/README.md
@@ -58,6 +58,15 @@ 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.
+### How does `openllmetry` work under the hood?
+
+Check out this interactive walkthrough of the `openllmetry` codebase on CodeCanvas [here](https://www.code-canvas.com/?session=unauthenticatedGithub&repo=openllmetry&owner=traceloop&branch=main&OnboardingTutorial=true).
+
+To refine existing dataflow simulation or create new ones, follow the quick tutorial [here](https://docs.code-canvas.com/updating-diagram).
+
+
+
+
## 🚀 Getting Started
The easiest way to get started is to use our SDK.
From 5c7f6c3ab3765399be43bb12606021dcfb6b47fa Mon Sep 17 00:00:00 2001
From: Nasser <42423897+Abdulnaser97@users.noreply.github.com>
Date: Thu, 30 Oct 2025 16:16:14 -0400
Subject: [PATCH 3/3] Revise codecanvas section in README.md
updated the image link and moved location to more appropriate spot
---
README.md | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/README.md b/README.md
index d3bb87c6e1..174ca1798c 100644
--- a/README.md
+++ b/README.md
@@ -58,15 +58,6 @@ 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.
-### How does `openllmetry` work under the hood?
-
-Check out this interactive walkthrough of the `openllmetry` codebase on CodeCanvas [here](https://www.code-canvas.com/?session=unauthenticatedGithub&repo=openllmetry&owner=traceloop&branch=main&OnboardingTutorial=true).
-
-To refine existing dataflow simulation or create new ones, follow the quick tutorial [here](https://docs.code-canvas.com/updating-diagram).
-
-
-
-
## 🚀 Getting Started
The easiest way to get started is to use our SDK.
@@ -188,6 +179,14 @@ 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 Slack, and ask us any questions there.
+
+### How does `openllmetry` work under the hood?
+
+Check out this interactive walkthrough of the `openllmetry` codebase on CodeCanvas [here](https://www.code-canvas.com/?session=unauthenticatedGithub&repo=openllmetry&owner=traceloop&branch=main&OnboardingTutorial=true).
+
+
+
+
## 💚 Community & Support
- [Slack](https://traceloop.com/slack) (For live discussion with the community and the Traceloop team)