monocle-apptrace 0.5.3__tar.gz → 0.6.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of monocle-apptrace might be problematic. Click here for more details.
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/.gitignore +6 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/PKG-INFO +23 -80
- monocle_apptrace-0.6.6/README.md +28 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/pyproject.toml +63 -17
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/file_exporter.py +7 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/constants.py +8 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/instrumentor.py +1 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/span_handler.py +75 -24
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/utils.py +63 -6
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/wrapper.py +111 -42
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/wrapper_method.py +6 -2
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/a2a/methods.py +1 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/adk/_helper.py +7 -4
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/adk/entities/agent.py +6 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/agents/_helper.py +8 -8
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/agents/entities/inference.py +9 -2
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/_helper.py +1 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/anthropic/entities/inference.py +1 -4
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azfunc/_helper.py +1 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/botocore/_helper.py +5 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/botocore/entities/inference.py +4 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/fastapi/_helper.py +4 -4
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/fastapi/methods.py +4 -4
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/finish_types.py +32 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/flask/_helper.py +3 -3
- monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/hugging_face/_helper.py +138 -0
- monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/hugging_face/entities/inference.py +94 -0
- monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/hugging_face/methods.py +23 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/_helper.py +1 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langchain/entities/inference.py +1 -4
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langgraph/_helper.py +34 -8
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langgraph/entities/inference.py +8 -3
- monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/langgraph/langgraph_processor.py +119 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langgraph/methods.py +22 -6
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/_helper.py +30 -10
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/agent.py +4 -3
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/llamaindex_processor.py +15 -7
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/methods.py +1 -8
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mcp/_helper.py +7 -6
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mistral/_helper.py +98 -49
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mistral/entities/inference.py +15 -9
- monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/mistral/entities/retrieval.py +41 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mistral/methods.py +10 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/openai/_helper.py +47 -7
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/openai/entities/inference.py +20 -4
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/openai/methods.py +1 -1
- monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/strands/_helper.py +44 -0
- monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/strands/entities/agent.py +179 -0
- monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/strands/entities/tool.py +62 -0
- monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/strands/methods.py +20 -0
- monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/__init__.py +0 -0
- monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference/__init__.py +0 -0
- monocle_apptrace-0.5.3/NOTICE +0 -4
- monocle_apptrace-0.5.3/README.md +0 -96
- monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/langgraph/langgraph_processor.py +0 -50
- monocle_apptrace-0.5.3/src/monocle_apptrace/mcp_server.py +0 -94
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/LICENSE +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace → monocle_apptrace-0.6.6/src}/README.md +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/__main__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/aws/s3_exporter.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/aws/s3_exporter_opendal.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/azure/blob_exporter.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/azure/blob_exporter_opendal.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/base_exporter.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/exporter_processor.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/monocle_exporters.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/okahu/okahu_exporter.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/method_wrappers.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/scope_wrapper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/tracing.md +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/a2a/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/a2a/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/a2a/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/a2a/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/adk/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/adk/entities/tool.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/adk/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/agents/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/agents/agents_processor.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/agents/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/agents/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/entities/http.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/anthropic/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/anthropic/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/anthropic/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/anthropic/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azfunc/entities/http.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azfunc/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azfunc/wrapper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/botocore/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/botocore/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/botocore/handlers/botocore_span_handler.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/botocore/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/fastapi/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/fastapi/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/fastapi/entities/http.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/flask/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/flask/entities/http.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/flask/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/gemini/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/gemini/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/gemini/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/gemini/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/gemini/entities/retrieval.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/gemini/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/haystack/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/haystack/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/haystack/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/haystack/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/haystack/entities/retrieval.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/haystack/methods.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/langchain → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/hugging_face}/__init__.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/langchain → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/hugging_face}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/entities/http.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/wrapper.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/langgraph → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/langchain}/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langchain/_helper.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/langgraph → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/langchain}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langchain/entities/retrieval.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langchain/methods.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/litellm → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/langgraph}/__init__.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/litellm → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/langgraph}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/llamaindex → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/litellm}/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/litellm/_helper.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/llamaindex → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/litellm}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/litellm/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/litellm/methods.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/mcp → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/llamaindex}/__init__.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/mcp → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/llamaindex}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/retrieval.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/mistral → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/mcp}/__init__.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/mistral → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/mcp}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mcp/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mcp/mcp_processor.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mcp/methods.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/openai → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/mistral}/__init__.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/openai → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/mistral}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/teamsai → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/openai}/__init__.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/teamsai → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/openai}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/openai/entities/retrieval.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/requests/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/requests/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/requests/entities/http.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/requests/methods.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference → monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/teamsai}/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/teamsai/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference/actionplanner_output_processor.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference/teamsai_output_processor.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/teamsai/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/teamsai/sample.json +0 -0
|
@@ -1,51 +1,53 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: monocle_apptrace
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.6
|
|
4
4
|
Summary: package with monocle genAI tracing
|
|
5
5
|
Project-URL: Homepage, https://github.com/monocle2ai/monocle
|
|
6
6
|
Project-URL: Issues, https://github.com/monocle2ai/monocle/issues
|
|
7
7
|
Author-email: "Okahu Inc." <okahu-pypi@okahu.ai>
|
|
8
8
|
License: Apache-2.0
|
|
9
|
-
License-File: LICENSE
|
|
10
|
-
License-File: NOTICE
|
|
11
9
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
12
10
|
Classifier: Operating System :: OS Independent
|
|
13
11
|
Classifier: Programming Language :: Python :: 3
|
|
14
12
|
Requires-Python: >=3.8
|
|
15
|
-
Requires-Dist: click==8.2.1
|
|
16
|
-
Requires-Dist: mcp>=1.13.1
|
|
17
13
|
Requires-Dist: opentelemetry-api>=1.21.0
|
|
18
14
|
Requires-Dist: opentelemetry-instrumentation
|
|
19
15
|
Requires-Dist: opentelemetry-sdk>=1.21.0
|
|
20
|
-
Requires-Dist: pydantic>=2.11.7
|
|
21
16
|
Requires-Dist: requests
|
|
17
|
+
Requires-Dist: rfc3986>=2.0.0
|
|
22
18
|
Requires-Dist: wrapt>=1.14.0
|
|
19
|
+
Provides-Extra: ai-test
|
|
20
|
+
Requires-Dist: bert-score; extra == 'ai-test'
|
|
21
|
+
Requires-Dist: transformers; extra == 'ai-test'
|
|
23
22
|
Provides-Extra: aws
|
|
24
23
|
Requires-Dist: boto3==1.37.24; extra == 'aws'
|
|
25
24
|
Provides-Extra: azure
|
|
25
|
+
Requires-Dist: azure-ai-inference; extra == 'azure'
|
|
26
26
|
Requires-Dist: azure-storage-blob==12.22.0; extra == 'azure'
|
|
27
27
|
Provides-Extra: dev
|
|
28
|
-
Requires-Dist: a2a-sdk==0.
|
|
28
|
+
Requires-Dist: a2a-sdk==0.3.6; extra == 'dev'
|
|
29
29
|
Requires-Dist: anthropic-haystack; extra == 'dev'
|
|
30
30
|
Requires-Dist: anthropic==0.57.1; extra == 'dev'
|
|
31
31
|
Requires-Dist: azure-storage-blob==12.22.0; extra == 'dev'
|
|
32
|
-
Requires-Dist: boto3==1.
|
|
32
|
+
Requires-Dist: boto3==1.39.0; extra == 'dev'
|
|
33
33
|
Requires-Dist: chromadb==1.0.15; extra == 'dev'
|
|
34
34
|
Requires-Dist: click==8.2.1; extra == 'dev'
|
|
35
|
-
Requires-Dist: datasets==
|
|
35
|
+
Requires-Dist: datasets==4.3.0; extra == 'dev'
|
|
36
36
|
Requires-Dist: faiss-cpu==1.8.0; extra == 'dev'
|
|
37
37
|
Requires-Dist: fastapi>=0.115.0; extra == 'dev'
|
|
38
38
|
Requires-Dist: flask; extra == 'dev'
|
|
39
39
|
Requires-Dist: google-adk==1.10.0; extra == 'dev'
|
|
40
|
+
Requires-Dist: google-ai-haystack; extra == 'dev'
|
|
40
41
|
Requires-Dist: google-generativeai==0.8.5; extra == 'dev'
|
|
41
42
|
Requires-Dist: haystack-ai==2.3.0; extra == 'dev'
|
|
42
43
|
Requires-Dist: httpx==0.28.1; extra == 'dev'
|
|
44
|
+
Requires-Dist: huggingface-hub==0.35.3; extra == 'dev'
|
|
43
45
|
Requires-Dist: instructorembedding==1.0.1; extra == 'dev'
|
|
44
46
|
Requires-Dist: langchain-anthropic==0.3.13; extra == 'dev'
|
|
45
47
|
Requires-Dist: langchain-aws==0.2.23; extra == 'dev'
|
|
46
48
|
Requires-Dist: langchain-chroma==0.2.4; extra == 'dev'
|
|
47
49
|
Requires-Dist: langchain-community==0.3.24; extra == 'dev'
|
|
48
|
-
Requires-Dist: langchain-google-genai==2.
|
|
50
|
+
Requires-Dist: langchain-google-genai==2.0.10; extra == 'dev'
|
|
49
51
|
Requires-Dist: langchain-mcp-adapters==0.1.8; extra == 'dev'
|
|
50
52
|
Requires-Dist: langchain-mistralai==0.2.10; extra == 'dev'
|
|
51
53
|
Requires-Dist: langchain-openai==0.3.18; extra == 'dev'
|
|
@@ -53,6 +55,7 @@ Requires-Dist: langchain==0.3.25; extra == 'dev'
|
|
|
53
55
|
Requires-Dist: langchainhub==0.1.21; extra == 'dev'
|
|
54
56
|
Requires-Dist: langgraph-supervisor==0.0.28; extra == 'dev'
|
|
55
57
|
Requires-Dist: langgraph==0.5.4; extra == 'dev'
|
|
58
|
+
Requires-Dist: litellm==1.77.5; extra == 'dev'
|
|
56
59
|
Requires-Dist: llama-index-embeddings-huggingface==0.6.0; extra == 'dev'
|
|
57
60
|
Requires-Dist: llama-index-llms-anthropic==0.8.1; extra == 'dev'
|
|
58
61
|
Requires-Dist: llama-index-llms-azure-openai==0.4.0; extra == 'dev'
|
|
@@ -64,6 +67,7 @@ Requires-Dist: llama-index-vector-stores-opensearch==0.6.0; extra == 'dev'
|
|
|
64
67
|
Requires-Dist: llama-index==0.13.0; extra == 'dev'
|
|
65
68
|
Requires-Dist: mcp==1.12.1; extra == 'dev'
|
|
66
69
|
Requires-Dist: mistral-haystack==0.0.2; extra == 'dev'
|
|
70
|
+
Requires-Dist: mistralai==1.9.9; extra == 'dev'
|
|
67
71
|
Requires-Dist: numpy==1.26.4; extra == 'dev'
|
|
68
72
|
Requires-Dist: openai-agents==0.2.6; extra == 'dev'
|
|
69
73
|
Requires-Dist: opendal==0.45.14; extra == 'dev'
|
|
@@ -72,50 +76,27 @@ Requires-Dist: opentelemetry-instrumentation-flask; extra == 'dev'
|
|
|
72
76
|
Requires-Dist: parameterized==0.9.0; extra == 'dev'
|
|
73
77
|
Requires-Dist: pydantic==2.11.7; extra == 'dev'
|
|
74
78
|
Requires-Dist: pytest-asyncio==0.26.0; extra == 'dev'
|
|
79
|
+
Requires-Dist: pytest-venv; extra == 'dev'
|
|
75
80
|
Requires-Dist: pytest==8.3.5; extra == 'dev'
|
|
76
81
|
Requires-Dist: python-dotenv>=1.1.0; extra == 'dev'
|
|
77
82
|
Requires-Dist: requests-aws4auth==1.2.3; extra == 'dev'
|
|
78
|
-
Requires-Dist: sentence-transformers==2.6.1; extra == 'dev'
|
|
79
83
|
Requires-Dist: types-requests==2.31.0.20240106; extra == 'dev'
|
|
80
84
|
Requires-Dist: uvicorn==0.35.0; extra == 'dev'
|
|
85
|
+
Provides-Extra: dev-gemini
|
|
86
|
+
Requires-Dist: llama-index-llms-gemini==0.6.0; extra == 'dev-gemini'
|
|
87
|
+
Provides-Extra: dev-strands
|
|
88
|
+
Requires-Dist: strands-agents-tools==0.2.10; extra == 'dev-strands'
|
|
89
|
+
Requires-Dist: strands-agents==1.11.0; extra == 'dev-strands'
|
|
90
|
+
Provides-Extra: dev-tranformers
|
|
91
|
+
Requires-Dist: sentence-transformers==3.3.0; extra == 'dev-tranformers'
|
|
81
92
|
Description-Content-Type: text/markdown
|
|
82
93
|
|
|
83
|
-
# Monocle
|
|
94
|
+
# Monocle Apptrace
|
|
84
95
|
|
|
85
96
|
**Monocle** helps developers and platform engineers building or managing GenAI apps monitor these in prod by making it easy to instrument their code to capture traces that are compliant with open-source cloud-native observability ecosystem.
|
|
86
97
|
|
|
87
98
|
**Monocle** is a community-driven OSS framework for tracing GenAI app code governed as a [Linux Foundation AI & Data project](https://lfaidata.foundation/projects/monocle/).
|
|
88
99
|
|
|
89
|
-
## Why Monocle
|
|
90
|
-
|
|
91
|
-
Monocle is built for:
|
|
92
|
-
- **app developers** to trace their app code in any environment without lots of custom code decoration
|
|
93
|
-
- **platform engineers** to instrument apps in prod through wrapping instead of asking app devs to recode
|
|
94
|
-
- **GenAI component providers** to add observability features to their products
|
|
95
|
-
- **enterprises** to consume traces from GenAI apps in their existing open-source observability stack
|
|
96
|
-
|
|
97
|
-
Benefits:
|
|
98
|
-
- Monocle provides an implementation + package, not just a spec
|
|
99
|
-
- No expertise in OpenTelemetry spec required
|
|
100
|
-
- No bespoke implementation of that spec required
|
|
101
|
-
- No last-mile GenAI domain specific code required to instrument your app
|
|
102
|
-
- Monocle provides consistency
|
|
103
|
-
- Connect traces across app code executions, model inference or data retrievals
|
|
104
|
-
- No cleansing of telemetry data across GenAI component providers required
|
|
105
|
-
- Works the same in personal lab dev or org cloud prod environments
|
|
106
|
-
- Send traces to location that fits your scale, budget and observability stack
|
|
107
|
-
- Monocle is fully open source and community driven
|
|
108
|
-
- No vendor lock-in
|
|
109
|
-
- Implementation is transparent
|
|
110
|
-
- You can freely use or customize it to fit your needs
|
|
111
|
-
|
|
112
|
-
## What Monocle provides
|
|
113
|
-
|
|
114
|
-
- Easy to [use](#use-monocle) code instrumentation
|
|
115
|
-
- OpenTelemetry compatible format for [spans](src/monocle_apptrace/metamodel/spans/span_format.json).
|
|
116
|
-
- Community-curated and extensible [metamodel](src/monocle_apptrace/metamodel/README.md) for consisent tracing of GenAI components.
|
|
117
|
-
- Export to local and cloud storage
|
|
118
|
-
|
|
119
100
|
## Use Monocle
|
|
120
101
|
|
|
121
102
|
- Get the Monocle package
|
|
@@ -137,42 +118,4 @@ Benefits:
|
|
|
137
118
|
See [Monocle user guide](Monocle_User_Guide.md) for more details.
|
|
138
119
|
|
|
139
120
|
|
|
140
|
-
## Use Monocle MCP
|
|
141
|
-
|
|
142
|
-
First install monocle-apptrace: pip install monocle-apptrace
|
|
143
|
-
|
|
144
|
-
Open bash and run the following command to run the monocle mcp server with stdio:
|
|
145
|
-
monocle_apptrace
|
|
146
|
-
|
|
147
|
-
If you are using VS Code you can add following entry to your .vscode/mcp.json
|
|
148
|
-
|
|
149
|
-
```json
|
|
150
|
-
"monocle-mcp-server": {
|
|
151
|
-
"type": "stdio",
|
|
152
|
-
"command": "uvx",
|
|
153
|
-
"args": [
|
|
154
|
-
"monocle_apptrace"
|
|
155
|
-
],
|
|
156
|
-
"env": {}
|
|
157
|
-
}
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
## Roadmap
|
|
161
|
-
|
|
162
|
-
Goal of Monocle is to support tracing for apps written in *any language* with *any LLM orchestration or agentic framework* and built using models, vectors, agents or other components served up by *any cloud or model inference provider*.
|
|
163
|
-
|
|
164
|
-
Current version supports:
|
|
165
|
-
- Language: (🟢) Python , (🔜) [Typescript](https://github.com/monocle2ai/monocle-typescript)
|
|
166
|
-
- LLM-frameworks: (🟢) Langchain, (🟢) Llamaindex, (🟢) Haystack, (🔜) Flask
|
|
167
|
-
- LLM inference providers: (🟢) OpenAI, (🟢) Azure OpenAI, (🟢) Nvidia Triton, (🔜) AWS Bedrock, (🔜) Google Vertex, (🔜) Azure ML, (🔜) Hugging Face
|
|
168
|
-
- Vector stores: (🟢) FAISS, (🔜) OpenSearch, (🔜) Milvus
|
|
169
|
-
- Exporter: (🟢) stdout, (🟢) file, (🔜) Azure Blob Storage, (🔜) AWS S3, (🔜) Google Cloud Storage
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
## Get involved
|
|
173
|
-
### Provide feedback
|
|
174
|
-
- Submit issues and enhancements requests via Github issues
|
|
175
|
-
|
|
176
|
-
### Contribute
|
|
177
|
-
- Monocle is community based open source project. We welcome your contributions. Please refer to the CONTRIBUTING and CODE_OF_CONDUCT for guidelines. The [contributor's guide](CONTRIBUTING.md) provides technical details of the project.
|
|
178
121
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Monocle Apptrace
|
|
2
|
+
|
|
3
|
+
**Monocle** helps developers and platform engineers building or managing GenAI apps monitor these in prod by making it easy to instrument their code to capture traces that are compliant with open-source cloud-native observability ecosystem.
|
|
4
|
+
|
|
5
|
+
**Monocle** is a community-driven OSS framework for tracing GenAI app code governed as a [Linux Foundation AI & Data project](https://lfaidata.foundation/projects/monocle/).
|
|
6
|
+
|
|
7
|
+
## Use Monocle
|
|
8
|
+
|
|
9
|
+
- Get the Monocle package
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
pip install monocle_apptrace
|
|
13
|
+
```
|
|
14
|
+
- Instrument your app code
|
|
15
|
+
- Import the Monocle package
|
|
16
|
+
```
|
|
17
|
+
from monocle_apptrace.instrumentor import setup_monocle_telemetry
|
|
18
|
+
```
|
|
19
|
+
- Setup instrumentation in your ```main()``` function
|
|
20
|
+
```
|
|
21
|
+
setup_monocle_telemetry(workflow_name="your-app-name")
|
|
22
|
+
```
|
|
23
|
+
- (Optionally) Modify config to alter where traces are sent
|
|
24
|
+
|
|
25
|
+
See [Monocle user guide](Monocle_User_Guide.md) for more details.
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["hatchling"]
|
|
2
|
+
requires = ["hatchling","hatch-build-scripts"]
|
|
3
3
|
build-backend = "hatchling.build"
|
|
4
4
|
|
|
5
|
+
[[tool.hatch.build.hooks.build-scripts.scripts]]
|
|
6
|
+
commands = [
|
|
7
|
+
"echo 'Running a pre-build step..copying license'",
|
|
8
|
+
"if [ -f \"LICENSE\" ]; then echo \"✅ LICENSE already exists\"; elif [ -f \"../LICENSE\" ]; then cp \"../LICENSE\" \"LICENSE\" && echo \"✅ LICENSE copied from parent\"; else echo \"❌ ERROR: LICENSE not found\" && exit 1; fi"
|
|
9
|
+
]
|
|
10
|
+
|
|
5
11
|
[project]
|
|
6
12
|
name = "monocle_apptrace"
|
|
7
|
-
version = "0.
|
|
13
|
+
version = "0.6.6"
|
|
8
14
|
authors = [
|
|
9
15
|
{ name="Okahu Inc.", email="okahu-pypi@okahu.ai" },
|
|
10
16
|
]
|
|
@@ -20,20 +26,18 @@ classifiers = [
|
|
|
20
26
|
dependencies = [
|
|
21
27
|
'requests',
|
|
22
28
|
'wrapt>=1.14.0',
|
|
29
|
+
'rfc3986>=2.0.0',
|
|
23
30
|
'opentelemetry-api>=1.21.0',
|
|
24
31
|
'opentelemetry-sdk>=1.21.0',
|
|
25
32
|
'opentelemetry-instrumentation',
|
|
26
|
-
'mcp>=1.13.1',
|
|
27
|
-
'pydantic>=2.11.7',
|
|
28
|
-
'click==8.2.1'
|
|
29
33
|
]
|
|
30
34
|
|
|
31
35
|
[tool.pytest.ini_options]
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
log_cli = true
|
|
37
|
+
log_cli_level = "INFO"
|
|
34
38
|
# Enable file logging
|
|
35
|
-
log_file = "traces.log"
|
|
36
|
-
log_file_level = "INFO"
|
|
39
|
+
#log_file = "traces.log"
|
|
40
|
+
#log_file_level = "INFO"
|
|
37
41
|
log_format = "%(asctime)s %(levelname)s %(pathname)s:%(lineno)d %(message)s"
|
|
38
42
|
log_date_format = "%Y-%m-%d %H:%M:%S"
|
|
39
43
|
|
|
@@ -41,23 +45,47 @@ pythonpath = [
|
|
|
41
45
|
"src",
|
|
42
46
|
"tests"
|
|
43
47
|
]
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
|
|
49
|
+
# Simple ignore patterns - uncomment lines to ignore specific tests
|
|
50
|
+
# Just uncomment the patterns you want to ignore:
|
|
51
|
+
|
|
52
|
+
#ignore = [
|
|
53
|
+
# "tests/integration/", # Ignore ALL integration tests
|
|
54
|
+
# "tests/unit/", # Ignore ALL unit tests
|
|
55
|
+
#]
|
|
56
|
+
|
|
57
|
+
# Or ignore specific test files/patterns:
|
|
58
|
+
#ignore = [
|
|
59
|
+
# "tests/integration/test_langchain_bedrock_sample.py",
|
|
60
|
+
# "tests/integration/test_anthropic_*.py",
|
|
61
|
+
# "tests/integration/test_azure_*.py",
|
|
62
|
+
# "tests/integration/test_openai_*.py",
|
|
63
|
+
# "tests/unit/*_processor_test.py",
|
|
64
|
+
#]
|
|
65
|
+
|
|
66
|
+
# Test discovery patterns
|
|
67
|
+
testpaths = [
|
|
68
|
+
"tests"
|
|
46
69
|
]
|
|
47
70
|
|
|
48
71
|
[project.optional-dependencies]
|
|
72
|
+
ai_test = [
|
|
73
|
+
'bert-score',
|
|
74
|
+
'transformers'
|
|
75
|
+
]
|
|
76
|
+
|
|
49
77
|
dev = [
|
|
50
78
|
'langchain-openai==0.3.18',
|
|
51
79
|
'langchain-chroma==0.2.4',
|
|
52
80
|
'langchain-community==0.3.24',
|
|
53
81
|
'langchain==0.3.25',
|
|
54
|
-
'datasets==
|
|
82
|
+
'datasets==4.3.0',
|
|
55
83
|
'numpy==1.26.4',
|
|
56
84
|
'types-requests==2.31.0.20240106',
|
|
57
85
|
'InstructorEmbedding==1.0.1',
|
|
58
|
-
'sentence-transformers==2.6.1',
|
|
59
86
|
'faiss-cpu==1.8.0',
|
|
60
87
|
'pytest==8.3.5',
|
|
88
|
+
'pytest-venv',
|
|
61
89
|
'llama-index==0.13.0',
|
|
62
90
|
'llama-index-llms-openai==0.5.0',
|
|
63
91
|
'llama-index-tools-mcp==0.3.0',
|
|
@@ -69,7 +97,7 @@ dev = [
|
|
|
69
97
|
'mistral-haystack==0.0.2',
|
|
70
98
|
'langchain-aws==0.2.23',
|
|
71
99
|
'azure-storage-blob==12.22.0', # this is for blob exporter
|
|
72
|
-
'boto3==1.
|
|
100
|
+
'boto3==1.39.0', # this is for aws exporter
|
|
73
101
|
'llama-index-vector-stores-opensearch==0.6.0',
|
|
74
102
|
'haystack-ai==2.3.0',
|
|
75
103
|
'llama-index-llms-azure-openai==0.4.0',
|
|
@@ -89,21 +117,39 @@ dev = [
|
|
|
89
117
|
'langchain-anthropic==0.3.13',
|
|
90
118
|
'langchain-mcp-adapters==0.1.8',
|
|
91
119
|
'mcp==1.12.1',
|
|
92
|
-
'a2a-sdk==0.
|
|
120
|
+
'a2a-sdk==0.3.6',
|
|
93
121
|
'httpx==0.28.1',
|
|
94
122
|
'fastapi>=0.115.0',
|
|
95
123
|
'pydantic==2.11.7',
|
|
96
124
|
'uvicorn==0.35.0',
|
|
97
125
|
'click==8.2.1',
|
|
98
126
|
'python-dotenv>=1.1.0',
|
|
99
|
-
'langchain-google-genai==2.
|
|
127
|
+
'langchain-google-genai==2.0.10',
|
|
100
128
|
'google-adk==1.10.0',
|
|
101
129
|
'google-generativeai==0.8.5',
|
|
102
|
-
'openai-agents==0.2.6'
|
|
130
|
+
'openai-agents==0.2.6',
|
|
131
|
+
'mistralai==1.9.9',
|
|
132
|
+
'huggingface_hub==0.35.3',
|
|
133
|
+
'litellm==1.77.5',
|
|
134
|
+
'google-ai-haystack'
|
|
135
|
+
]
|
|
136
|
+
|
|
137
|
+
dev_tranformers = [
|
|
138
|
+
'sentence-transformers==3.3.0'
|
|
139
|
+
]
|
|
140
|
+
|
|
141
|
+
dev_gemini = [
|
|
142
|
+
'llama-index-llms-gemini==0.6.0'
|
|
143
|
+
]
|
|
144
|
+
|
|
145
|
+
dev_strands = [
|
|
146
|
+
'strands-agents==1.11.0',
|
|
147
|
+
'strands-agents-tools==0.2.10'
|
|
103
148
|
]
|
|
104
149
|
|
|
105
150
|
azure = [
|
|
106
151
|
'azure-storage-blob==12.22.0',
|
|
152
|
+
'azure-ai-inference'
|
|
107
153
|
]
|
|
108
154
|
|
|
109
155
|
aws = [
|
{monocle_apptrace-0.5.3 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/file_exporter.py
RENAMED
|
@@ -55,6 +55,9 @@ class FileSpanExporter(SpanExporterBase):
|
|
|
55
55
|
else:
|
|
56
56
|
return self._process_spans(spans, is_root_span=is_root_span)
|
|
57
57
|
|
|
58
|
+
def set_service_name(self, service_name: str) -> None:
|
|
59
|
+
self.service_name = service_name
|
|
60
|
+
|
|
58
61
|
def _cleanup_expired_handles(self) -> None:
|
|
59
62
|
"""Close and remove file handles that have exceeded the timeout."""
|
|
60
63
|
current_time = datetime.now()
|
|
@@ -130,7 +133,10 @@ class FileSpanExporter(SpanExporterBase):
|
|
|
130
133
|
|
|
131
134
|
# Process spans for each trace
|
|
132
135
|
for trace_id, trace_spans in spans_by_trace.items():
|
|
133
|
-
service_name
|
|
136
|
+
if self.service_name is not None:
|
|
137
|
+
service_name = self.service_name
|
|
138
|
+
else:
|
|
139
|
+
service_name = trace_spans[0].resource.attributes.get(SERVICE_NAME, "unknown")
|
|
134
140
|
handle, file_path, is_first_span = self._get_or_create_handle(trace_id, service_name)
|
|
135
141
|
|
|
136
142
|
if handle is None:
|
|
@@ -92,6 +92,9 @@ CHILD_ERROR_CODE = "child.error.code"
|
|
|
92
92
|
|
|
93
93
|
AGENT_PREFIX_KEY = "monocle.agent.prefix"
|
|
94
94
|
|
|
95
|
+
MONOCLE_SKIP_EXECUTIONS = "monocle.skip_executions"
|
|
96
|
+
SKIPPED_EXECUTION = "monocle.skipped_execution"
|
|
97
|
+
|
|
95
98
|
# agentic sub types
|
|
96
99
|
INFERENCE_AGENT_DELEGATION = "delegation"
|
|
97
100
|
INFERENCE_TOOL_CALL = "tool_call"
|
|
@@ -178,3 +181,8 @@ MAP_ATTRIBUTES_TO_SPAN_SUBTYPE = {
|
|
|
178
181
|
|
|
179
182
|
|
|
180
183
|
}
|
|
184
|
+
|
|
185
|
+
PROVIDER_BASE_URLS = {
|
|
186
|
+
"deepseek": "https://api.deepseek.com",
|
|
187
|
+
# Add more providers here later
|
|
188
|
+
}
|
|
@@ -165,7 +165,7 @@ def setup_monocle_telemetry(
|
|
|
165
165
|
span_handlers: Dict[str,SpanHandler] = None,
|
|
166
166
|
wrapper_methods: List[Union[dict,WrapperMethod]] = None,
|
|
167
167
|
union_with_default_methods: bool = True,
|
|
168
|
-
monocle_exporters_list:str = None) ->
|
|
168
|
+
monocle_exporters_list:str = None) -> MonocleInstrumentor:
|
|
169
169
|
"""
|
|
170
170
|
Set up Monocle telemetry for the application.
|
|
171
171
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import os
|
|
3
3
|
from contextlib import contextmanager
|
|
4
|
+
from typing import Union
|
|
4
5
|
from opentelemetry.context import get_value, set_value, attach, detach
|
|
5
6
|
from opentelemetry.sdk.trace import Span
|
|
6
7
|
from opentelemetry.trace.status import Status, StatusCode
|
|
@@ -10,8 +11,8 @@ from monocle_apptrace.instrumentation.common.constants import (
|
|
|
10
11
|
service_type_map,
|
|
11
12
|
MONOCLE_SDK_VERSION, MONOCLE_SDK_LANGUAGE, MONOCLE_DETECTED_SPAN_ERROR
|
|
12
13
|
)
|
|
13
|
-
from monocle_apptrace.instrumentation.common.utils import set_attribute, get_scopes, MonocleSpanException, get_monocle_version
|
|
14
|
-
from monocle_apptrace.instrumentation.common.constants import WORKFLOW_TYPE_KEY, WORKFLOW_TYPE_GENERIC, CHILD_ERROR_CODE
|
|
14
|
+
from monocle_apptrace.instrumentation.common.utils import set_attribute, get_scopes, MonocleSpanException, get_monocle_version, replace_placeholders
|
|
15
|
+
from monocle_apptrace.instrumentation.common.constants import WORKFLOW_TYPE_KEY, WORKFLOW_TYPE_GENERIC, CHILD_ERROR_CODE, MONOCLE_SKIP_EXECUTIONS, SKIPPED_EXECUTION
|
|
15
16
|
|
|
16
17
|
logger = logging.getLogger(__name__)
|
|
17
18
|
|
|
@@ -26,7 +27,8 @@ WORKFLOW_TYPE_MAP = {
|
|
|
26
27
|
"anthropic": "workflow.anthropic",
|
|
27
28
|
"gemini": "workflow.gemini",
|
|
28
29
|
"litellm": "workflow.litellm",
|
|
29
|
-
"mistralai": "workflow.mistral"
|
|
30
|
+
"mistralai": "workflow.mistral",
|
|
31
|
+
"huggingface_hub": "workflow.huggingface"
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
FRAMEWORK_WORKFLOW_LIST = [
|
|
@@ -48,7 +50,7 @@ class SpanHandler:
|
|
|
48
50
|
pass
|
|
49
51
|
|
|
50
52
|
def pre_tracing(self, to_wrap, wrapped, instance, args, kwargs):
|
|
51
|
-
|
|
53
|
+
return None, None
|
|
52
54
|
|
|
53
55
|
def post_tracing(self, to_wrap, wrapped, instance, args, kwargs, return_value, token=None):
|
|
54
56
|
pass
|
|
@@ -66,8 +68,6 @@ class SpanHandler:
|
|
|
66
68
|
span.set_attribute("span.type", span_type)
|
|
67
69
|
else:
|
|
68
70
|
logger.warning("type of span not found or incorrect written in entity json")
|
|
69
|
-
if "subtype" in output_processor:
|
|
70
|
-
span.set_attribute("span.subtype", output_processor["subtype"])
|
|
71
71
|
return span_type
|
|
72
72
|
|
|
73
73
|
def pre_task_processing(self, to_wrap, wrapped, instance, args,kwargs, span):
|
|
@@ -102,28 +102,32 @@ class SpanHandler:
|
|
|
102
102
|
def post_task_processing(self, to_wrap, wrapped, instance, args, kwargs, result, ex, span:Span, parent_span:Span):
|
|
103
103
|
pass
|
|
104
104
|
|
|
105
|
-
def should_skip(self, processor, instance, args, kwargs) -> bool:
|
|
105
|
+
def should_skip(self, processor, instance, span, parent_span, args, kwargs) -> bool:
|
|
106
106
|
should_skip = False
|
|
107
107
|
accessor = processor.get('should_skip')
|
|
108
108
|
if accessor:
|
|
109
|
-
arguments = {"instance":instance, "args":args, "kwargs":kwargs}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
109
|
+
arguments = {"instance":instance, "span":span, "parent_span":parent_span, "args":args, "kwargs":kwargs}
|
|
110
|
+
try:
|
|
111
|
+
should_skip = accessor(arguments)
|
|
112
|
+
if not isinstance(should_skip, bool):
|
|
113
|
+
logger.warning("Warning: 'should_skip' accessor did not return a boolean value")
|
|
114
|
+
return False
|
|
115
|
+
except Exception as e:
|
|
116
|
+
logger.warning("Warning: Error occurred in 'should_skip' accessor: %s", str(e))
|
|
114
117
|
return should_skip
|
|
115
118
|
|
|
116
|
-
def hydrate_span(self, to_wrap, wrapped, instance, args, kwargs, result, span, parent_span = None,
|
|
119
|
+
def hydrate_span(self, to_wrap, wrapped, instance, args, kwargs, result, span, parent_span = None,
|
|
120
|
+
ex:Exception = None, is_post_exec:bool= False) -> bool:
|
|
117
121
|
try:
|
|
118
|
-
detected_error_in_attribute = self.hydrate_attributes(to_wrap, wrapped, instance, args, kwargs, result, span, parent_span)
|
|
119
|
-
detected_error_in_event = self.hydrate_events(to_wrap, wrapped, instance, args, kwargs, result, span, parent_span, ex)
|
|
122
|
+
detected_error_in_attribute = self.hydrate_attributes(to_wrap, wrapped, instance, args, kwargs, result, span, parent_span, is_post_exec)
|
|
123
|
+
detected_error_in_event = self.hydrate_events(to_wrap, wrapped, instance, args, kwargs, result, span, parent_span, ex, is_post_exec)
|
|
120
124
|
if detected_error_in_attribute or detected_error_in_event:
|
|
121
125
|
span.set_attribute(MONOCLE_DETECTED_SPAN_ERROR, True)
|
|
122
126
|
finally:
|
|
123
|
-
if span.status.status_code == StatusCode.UNSET and ex is None:
|
|
127
|
+
if is_post_exec and span.status.status_code == StatusCode.UNSET and ex is None:
|
|
124
128
|
span.set_status(StatusCode.OK)
|
|
125
129
|
|
|
126
|
-
def hydrate_attributes(self, to_wrap, wrapped, instance, args, kwargs, result, span:Span, parent_span:Span) -> bool:
|
|
130
|
+
def hydrate_attributes(self, to_wrap, wrapped, instance, args, kwargs, result, span:Span, parent_span:Span, is_post_exec:bool) -> bool:
|
|
127
131
|
detected_error:bool = False
|
|
128
132
|
span_index = 0
|
|
129
133
|
if SpanHandler.is_root_span(span):
|
|
@@ -132,7 +136,6 @@ class SpanHandler:
|
|
|
132
136
|
output_processor=to_wrap['output_processor']
|
|
133
137
|
self.set_span_type(to_wrap, wrapped, instance, output_processor, span, args, kwargs)
|
|
134
138
|
skip_processors:list[str] = self.skip_processor(to_wrap, wrapped, instance, span, args, kwargs) or []
|
|
135
|
-
|
|
136
139
|
if 'attributes' in output_processor and 'attributes' not in skip_processors:
|
|
137
140
|
arguments = {"instance":instance, "args":args, "kwargs":kwargs, "result":result, "parent_span":parent_span, "span":span}
|
|
138
141
|
for processors in output_processor["attributes"]:
|
|
@@ -143,9 +146,10 @@ class SpanHandler:
|
|
|
143
146
|
if attribute and accessor:
|
|
144
147
|
attribute_name = f"entity.{span_index+1}.{attribute}"
|
|
145
148
|
try:
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
+
if (not is_post_exec and processor.get('phase', '') != 'post_execution') or (is_post_exec and processor.get('phase', '') == 'post_execution'):
|
|
150
|
+
processor_result = accessor(arguments)
|
|
151
|
+
if processor_result and isinstance(processor_result, (str, list)):
|
|
152
|
+
span.set_attribute(attribute_name, processor_result)
|
|
149
153
|
except MonocleSpanException as e:
|
|
150
154
|
span.set_status(StatusCode.ERROR, e.message)
|
|
151
155
|
detected_error = True
|
|
@@ -164,13 +168,27 @@ class SpanHandler:
|
|
|
164
168
|
span.set_attribute("entity.count", span_index)
|
|
165
169
|
return detected_error
|
|
166
170
|
|
|
167
|
-
def hydrate_events(self, to_wrap, wrapped, instance, args, kwargs, ret_result, span: Span, parent_span=None, ex:Exception=None
|
|
171
|
+
def hydrate_events(self, to_wrap, wrapped, instance, args, kwargs, ret_result, span: Span, parent_span=None, ex:Exception=None,
|
|
172
|
+
is_post_exec: bool = False) -> bool:
|
|
168
173
|
detected_error:bool = False
|
|
169
174
|
if 'output_processor' in to_wrap and to_wrap["output_processor"] is not None:
|
|
170
175
|
output_processor=to_wrap['output_processor']
|
|
171
|
-
|
|
172
|
-
|
|
176
|
+
if is_post_exec:
|
|
177
|
+
skip_events:list[str] = ['events.data.input']
|
|
178
|
+
else:
|
|
179
|
+
skip_events:list[str] = ['events.data.output', 'events.metadata']
|
|
180
|
+
skip_processors:list[str] = list(set(self.skip_processor(to_wrap, wrapped, instance, span, args, kwargs) or []).union(set(skip_events)))
|
|
173
181
|
arguments = {"instance": instance, "args": args, "kwargs": kwargs, "result": ret_result, "exception":ex, "parent_span":parent_span, "span": span}
|
|
182
|
+
subtype = output_processor.get('subtype')
|
|
183
|
+
if subtype:
|
|
184
|
+
if callable(subtype):
|
|
185
|
+
try:
|
|
186
|
+
subtype_result = subtype(arguments)
|
|
187
|
+
span.set_attribute("span.subtype", subtype_result)
|
|
188
|
+
except Exception as e:
|
|
189
|
+
logger.debug(f"Error processing subtype: {e}")
|
|
190
|
+
else:
|
|
191
|
+
span.set_attribute("span.subtype", subtype)
|
|
174
192
|
# Process events if they are defined in the output_processor.
|
|
175
193
|
# In case of inference.modelapi skip the event processing unless the span has an exception
|
|
176
194
|
if 'events' in output_processor and ('events' not in skip_processors or ex is not None):
|
|
@@ -199,6 +217,13 @@ class SpanHandler:
|
|
|
199
217
|
event_attributes[attribute_key] = result
|
|
200
218
|
else:
|
|
201
219
|
event_attributes.update(result)
|
|
220
|
+
if not is_post_exec and event_name == "data.input" and attribute_key == "input" and result:
|
|
221
|
+
# append memory to input if available
|
|
222
|
+
# update the result with new input
|
|
223
|
+
pass
|
|
224
|
+
elif not detected_error and is_post_exec and event_name == "data.output" and attribute_key == "response" and result:
|
|
225
|
+
# capture memory
|
|
226
|
+
pass
|
|
202
227
|
except Exception as e:
|
|
203
228
|
logger.debug(f"Error evaluating accessor for attribute '{attribute_key}': {e}")
|
|
204
229
|
matching_timestamp = getattr(ret_result, "timestamps", {}).get(event_name, None)
|
|
@@ -298,6 +323,32 @@ class SpanHandler:
|
|
|
298
323
|
finally:
|
|
299
324
|
SpanHandler.detach_workflow_type(token)
|
|
300
325
|
|
|
326
|
+
@staticmethod
|
|
327
|
+
def get_iput_entity_type(span: Span) -> str:
|
|
328
|
+
for event in span.events:
|
|
329
|
+
if event.name == "data.input":
|
|
330
|
+
return event.attributes.get("entity.type", "")
|
|
331
|
+
|
|
332
|
+
@staticmethod
|
|
333
|
+
def skip_execution(span:Span) -> tuple[bool, Union[dict, list, str, None]]:
|
|
334
|
+
skip_execs = get_value(MONOCLE_SKIP_EXECUTIONS)
|
|
335
|
+
if skip_execs is not None:
|
|
336
|
+
skip_exec_entity = skip_execs.get(span.attributes.get("entity.1.name", ""),{})
|
|
337
|
+
if ((span.attributes.get("span.type") is not None and skip_exec_entity.get("span.type", "") == span.attributes.get("span.type")) and
|
|
338
|
+
(span.attributes.get("entity.1.type") is not None and skip_exec_entity.get("entity.type", "") == span.attributes.get("entity.1.type"))):
|
|
339
|
+
span.set_attribute(SKIPPED_EXECUTION, True)
|
|
340
|
+
if skip_exec_entity.get("raise_error", False):
|
|
341
|
+
raise MonocleSpanException(skip_exec_entity.get("error_message", ""))
|
|
342
|
+
response = skip_exec_entity.get("response", None)
|
|
343
|
+
response = replace_placeholders(response, span)
|
|
344
|
+
return True, response
|
|
345
|
+
return False, None
|
|
346
|
+
|
|
347
|
+
@staticmethod
|
|
348
|
+
def replace_placeholders_in_response(response: Union[dict, list, str], span:Span) -> Union[dict, list, str]:
|
|
349
|
+
if span.attributes.get(SKIPPED_EXECUTION, False):
|
|
350
|
+
return replace_placeholders(response, span)
|
|
351
|
+
return response
|
|
301
352
|
|
|
302
353
|
class NonFrameworkSpanHandler(SpanHandler):
|
|
303
354
|
# If the language framework is being executed, then skip generating direct openAI attributes and events
|