monocle-apptrace 0.6.0__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.6.0 → monocle_apptrace-0.6.6}/PKG-INFO +15 -4
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/pyproject.toml +47 -11
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/constants.py +8 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/span_handler.py +73 -23
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/utils.py +63 -6
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/wrapper.py +111 -42
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/wrapper_method.py +4 -2
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/a2a/methods.py +1 -1
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/adk/_helper.py +2 -1
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/agents/_helper.py +3 -3
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/agents/entities/inference.py +2 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/_helper.py +1 -1
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/anthropic/entities/inference.py +1 -4
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azfunc/_helper.py +1 -1
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/botocore/_helper.py +5 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/botocore/entities/inference.py +4 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/fastapi/_helper.py +4 -4
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/fastapi/methods.py +4 -4
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/flask/_helper.py +3 -3
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/hugging_face/_helper.py +1 -1
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/hugging_face/entities/inference.py +1 -4
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/_helper.py +1 -1
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langchain/entities/inference.py +1 -4
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langgraph/_helper.py +30 -6
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langgraph/entities/inference.py +1 -1
- monocle_apptrace-0.6.6/src/monocle_apptrace/instrumentation/metamodel/langgraph/langgraph_processor.py +119 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langgraph/methods.py +22 -6
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/_helper.py +30 -10
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/agent.py +4 -3
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/llamaindex_processor.py +15 -7
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/methods.py +1 -8
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mcp/_helper.py +1 -1
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mistral/_helper.py +1 -1
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mistral/entities/inference.py +1 -4
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mistral/methods.py +0 -8
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/openai/_helper.py +47 -7
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/openai/entities/inference.py +20 -4
- {monocle_apptrace-0.6.0 → 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.0/src/monocle_apptrace/instrumentation/metamodel/langgraph/langgraph_processor.py +0 -50
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/.gitignore +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/LICENSE +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/README.md +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/README.md +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/__main__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/aws/s3_exporter.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/aws/s3_exporter_opendal.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/azure/blob_exporter.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/azure/blob_exporter_opendal.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/base_exporter.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/exporter_processor.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/file_exporter.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/monocle_exporters.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/exporters/okahu/okahu_exporter.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/instrumentor.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/method_wrappers.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/scope_wrapper.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/common/tracing.md +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/a2a/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/a2a/_helper.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/a2a/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/a2a/entities/inference.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/adk/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/adk/entities/agent.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/adk/entities/tool.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/adk/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/agents/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/agents/agents_processor.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/agents/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/agents/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/entities/http.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/anthropic/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/anthropic/_helper.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/anthropic/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/anthropic/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azfunc/entities/http.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azfunc/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azfunc/wrapper.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/_helper.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/entities/inference.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/botocore/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/botocore/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/botocore/handlers/botocore_span_handler.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/botocore/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/fastapi/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/fastapi/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/fastapi/entities/http.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/finish_types.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/flask/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/flask/entities/http.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/flask/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/gemini/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/gemini/_helper.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/gemini/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/gemini/entities/inference.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/gemini/entities/retrieval.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/gemini/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/haystack/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/haystack/_helper.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/haystack/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/haystack/entities/inference.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/haystack/entities/retrieval.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/haystack/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/hugging_face/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/hugging_face/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/hugging_face/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/entities/http.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/wrapper.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langchain/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langchain/_helper.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langchain/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langchain/entities/retrieval.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langchain/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langgraph/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/langgraph/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/litellm/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/litellm/_helper.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/litellm/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/litellm/entities/inference.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/litellm/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/inference.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/retrieval.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mcp/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mcp/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mcp/entities/inference.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mcp/mcp_processor.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mcp/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mistral/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mistral/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/mistral/entities/retrieval.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/openai/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/openai/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/openai/entities/retrieval.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/requests/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/requests/_helper.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/requests/entities/http.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/requests/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/teamsai/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/teamsai/_helper.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference/__init__.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference/actionplanner_output_processor.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference/teamsai_output_processor.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/teamsai/methods.py +0 -0
- {monocle_apptrace-0.6.0 → monocle_apptrace-0.6.6}/src/monocle_apptrace/instrumentation/metamodel/teamsai/sample.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: monocle_apptrace
|
|
3
|
-
Version: 0.6.
|
|
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
|
|
@@ -14,6 +14,7 @@ Requires-Dist: opentelemetry-api>=1.21.0
|
|
|
14
14
|
Requires-Dist: opentelemetry-instrumentation
|
|
15
15
|
Requires-Dist: opentelemetry-sdk>=1.21.0
|
|
16
16
|
Requires-Dist: requests
|
|
17
|
+
Requires-Dist: rfc3986>=2.0.0
|
|
17
18
|
Requires-Dist: wrapt>=1.14.0
|
|
18
19
|
Provides-Extra: ai-test
|
|
19
20
|
Requires-Dist: bert-score; extra == 'ai-test'
|
|
@@ -21,20 +22,22 @@ Requires-Dist: transformers; extra == 'ai-test'
|
|
|
21
22
|
Provides-Extra: aws
|
|
22
23
|
Requires-Dist: boto3==1.37.24; extra == 'aws'
|
|
23
24
|
Provides-Extra: azure
|
|
25
|
+
Requires-Dist: azure-ai-inference; extra == 'azure'
|
|
24
26
|
Requires-Dist: azure-storage-blob==12.22.0; extra == 'azure'
|
|
25
27
|
Provides-Extra: dev
|
|
26
28
|
Requires-Dist: a2a-sdk==0.3.6; extra == 'dev'
|
|
27
29
|
Requires-Dist: anthropic-haystack; extra == 'dev'
|
|
28
30
|
Requires-Dist: anthropic==0.57.1; extra == 'dev'
|
|
29
31
|
Requires-Dist: azure-storage-blob==12.22.0; extra == 'dev'
|
|
30
|
-
Requires-Dist: boto3==1.
|
|
32
|
+
Requires-Dist: boto3==1.39.0; extra == 'dev'
|
|
31
33
|
Requires-Dist: chromadb==1.0.15; extra == 'dev'
|
|
32
34
|
Requires-Dist: click==8.2.1; extra == 'dev'
|
|
33
|
-
Requires-Dist: datasets==
|
|
35
|
+
Requires-Dist: datasets==4.3.0; extra == 'dev'
|
|
34
36
|
Requires-Dist: faiss-cpu==1.8.0; extra == 'dev'
|
|
35
37
|
Requires-Dist: fastapi>=0.115.0; extra == 'dev'
|
|
36
38
|
Requires-Dist: flask; extra == 'dev'
|
|
37
39
|
Requires-Dist: google-adk==1.10.0; extra == 'dev'
|
|
40
|
+
Requires-Dist: google-ai-haystack; extra == 'dev'
|
|
38
41
|
Requires-Dist: google-generativeai==0.8.5; extra == 'dev'
|
|
39
42
|
Requires-Dist: haystack-ai==2.3.0; extra == 'dev'
|
|
40
43
|
Requires-Dist: httpx==0.28.1; extra == 'dev'
|
|
@@ -52,6 +55,7 @@ Requires-Dist: langchain==0.3.25; extra == 'dev'
|
|
|
52
55
|
Requires-Dist: langchainhub==0.1.21; extra == 'dev'
|
|
53
56
|
Requires-Dist: langgraph-supervisor==0.0.28; extra == 'dev'
|
|
54
57
|
Requires-Dist: langgraph==0.5.4; extra == 'dev'
|
|
58
|
+
Requires-Dist: litellm==1.77.5; extra == 'dev'
|
|
55
59
|
Requires-Dist: llama-index-embeddings-huggingface==0.6.0; extra == 'dev'
|
|
56
60
|
Requires-Dist: llama-index-llms-anthropic==0.8.1; extra == 'dev'
|
|
57
61
|
Requires-Dist: llama-index-llms-azure-openai==0.4.0; extra == 'dev'
|
|
@@ -72,12 +76,19 @@ 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
94
|
# Monocle Apptrace
|
|
@@ -10,7 +10,7 @@ commands = [
|
|
|
10
10
|
|
|
11
11
|
[project]
|
|
12
12
|
name = "monocle_apptrace"
|
|
13
|
-
version = "0.6.
|
|
13
|
+
version = "0.6.6"
|
|
14
14
|
authors = [
|
|
15
15
|
{ name="Okahu Inc.", email="okahu-pypi@okahu.ai" },
|
|
16
16
|
]
|
|
@@ -26,17 +26,18 @@ classifiers = [
|
|
|
26
26
|
dependencies = [
|
|
27
27
|
'requests',
|
|
28
28
|
'wrapt>=1.14.0',
|
|
29
|
+
'rfc3986>=2.0.0',
|
|
29
30
|
'opentelemetry-api>=1.21.0',
|
|
30
31
|
'opentelemetry-sdk>=1.21.0',
|
|
31
32
|
'opentelemetry-instrumentation',
|
|
32
33
|
]
|
|
33
34
|
|
|
34
35
|
[tool.pytest.ini_options]
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
log_cli = true
|
|
37
|
+
log_cli_level = "INFO"
|
|
37
38
|
# Enable file logging
|
|
38
|
-
log_file = "traces.log"
|
|
39
|
-
log_file_level = "INFO"
|
|
39
|
+
#log_file = "traces.log"
|
|
40
|
+
#log_file_level = "INFO"
|
|
40
41
|
log_format = "%(asctime)s %(levelname)s %(pathname)s:%(lineno)d %(message)s"
|
|
41
42
|
log_date_format = "%Y-%m-%d %H:%M:%S"
|
|
42
43
|
|
|
@@ -44,8 +45,27 @@ pythonpath = [
|
|
|
44
45
|
"src",
|
|
45
46
|
"tests"
|
|
46
47
|
]
|
|
47
|
-
|
|
48
|
-
|
|
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"
|
|
49
69
|
]
|
|
50
70
|
|
|
51
71
|
[project.optional-dependencies]
|
|
@@ -59,13 +79,13 @@ dev = [
|
|
|
59
79
|
'langchain-chroma==0.2.4',
|
|
60
80
|
'langchain-community==0.3.24',
|
|
61
81
|
'langchain==0.3.25',
|
|
62
|
-
'datasets==
|
|
82
|
+
'datasets==4.3.0',
|
|
63
83
|
'numpy==1.26.4',
|
|
64
84
|
'types-requests==2.31.0.20240106',
|
|
65
85
|
'InstructorEmbedding==1.0.1',
|
|
66
|
-
'sentence-transformers==2.6.1',
|
|
67
86
|
'faiss-cpu==1.8.0',
|
|
68
87
|
'pytest==8.3.5',
|
|
88
|
+
'pytest-venv',
|
|
69
89
|
'llama-index==0.13.0',
|
|
70
90
|
'llama-index-llms-openai==0.5.0',
|
|
71
91
|
'llama-index-tools-mcp==0.3.0',
|
|
@@ -77,7 +97,7 @@ dev = [
|
|
|
77
97
|
'mistral-haystack==0.0.2',
|
|
78
98
|
'langchain-aws==0.2.23',
|
|
79
99
|
'azure-storage-blob==12.22.0', # this is for blob exporter
|
|
80
|
-
'boto3==1.
|
|
100
|
+
'boto3==1.39.0', # this is for aws exporter
|
|
81
101
|
'llama-index-vector-stores-opensearch==0.6.0',
|
|
82
102
|
'haystack-ai==2.3.0',
|
|
83
103
|
'llama-index-llms-azure-openai==0.4.0',
|
|
@@ -109,11 +129,27 @@ dev = [
|
|
|
109
129
|
'google-generativeai==0.8.5',
|
|
110
130
|
'openai-agents==0.2.6',
|
|
111
131
|
'mistralai==1.9.9',
|
|
112
|
-
'huggingface_hub==0.35.3'
|
|
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'
|
|
113
148
|
]
|
|
114
149
|
|
|
115
150
|
azure = [
|
|
116
151
|
'azure-storage-blob==12.22.0',
|
|
152
|
+
'azure-ai-inference'
|
|
117
153
|
]
|
|
118
154
|
|
|
119
155
|
aws = [
|
|
@@ -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
|
+
}
|
|
@@ -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
|
|
|
@@ -49,7 +50,7 @@ class SpanHandler:
|
|
|
49
50
|
pass
|
|
50
51
|
|
|
51
52
|
def pre_tracing(self, to_wrap, wrapped, instance, args, kwargs):
|
|
52
|
-
|
|
53
|
+
return None, None
|
|
53
54
|
|
|
54
55
|
def post_tracing(self, to_wrap, wrapped, instance, args, kwargs, return_value, token=None):
|
|
55
56
|
pass
|
|
@@ -67,8 +68,6 @@ class SpanHandler:
|
|
|
67
68
|
span.set_attribute("span.type", span_type)
|
|
68
69
|
else:
|
|
69
70
|
logger.warning("type of span not found or incorrect written in entity json")
|
|
70
|
-
if "subtype" in output_processor:
|
|
71
|
-
span.set_attribute("span.subtype", output_processor["subtype"])
|
|
72
71
|
return span_type
|
|
73
72
|
|
|
74
73
|
def pre_task_processing(self, to_wrap, wrapped, instance, args,kwargs, span):
|
|
@@ -103,28 +102,32 @@ class SpanHandler:
|
|
|
103
102
|
def post_task_processing(self, to_wrap, wrapped, instance, args, kwargs, result, ex, span:Span, parent_span:Span):
|
|
104
103
|
pass
|
|
105
104
|
|
|
106
|
-
def should_skip(self, processor, instance, args, kwargs) -> bool:
|
|
105
|
+
def should_skip(self, processor, instance, span, parent_span, args, kwargs) -> bool:
|
|
107
106
|
should_skip = False
|
|
108
107
|
accessor = processor.get('should_skip')
|
|
109
108
|
if accessor:
|
|
110
|
-
arguments = {"instance":instance, "args":args, "kwargs":kwargs}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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))
|
|
115
117
|
return should_skip
|
|
116
118
|
|
|
117
|
-
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:
|
|
118
121
|
try:
|
|
119
|
-
detected_error_in_attribute = self.hydrate_attributes(to_wrap, wrapped, instance, args, kwargs, result, span, parent_span)
|
|
120
|
-
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)
|
|
121
124
|
if detected_error_in_attribute or detected_error_in_event:
|
|
122
125
|
span.set_attribute(MONOCLE_DETECTED_SPAN_ERROR, True)
|
|
123
126
|
finally:
|
|
124
|
-
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:
|
|
125
128
|
span.set_status(StatusCode.OK)
|
|
126
129
|
|
|
127
|
-
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:
|
|
128
131
|
detected_error:bool = False
|
|
129
132
|
span_index = 0
|
|
130
133
|
if SpanHandler.is_root_span(span):
|
|
@@ -133,7 +136,6 @@ class SpanHandler:
|
|
|
133
136
|
output_processor=to_wrap['output_processor']
|
|
134
137
|
self.set_span_type(to_wrap, wrapped, instance, output_processor, span, args, kwargs)
|
|
135
138
|
skip_processors:list[str] = self.skip_processor(to_wrap, wrapped, instance, span, args, kwargs) or []
|
|
136
|
-
|
|
137
139
|
if 'attributes' in output_processor and 'attributes' not in skip_processors:
|
|
138
140
|
arguments = {"instance":instance, "args":args, "kwargs":kwargs, "result":result, "parent_span":parent_span, "span":span}
|
|
139
141
|
for processors in output_processor["attributes"]:
|
|
@@ -144,9 +146,10 @@ class SpanHandler:
|
|
|
144
146
|
if attribute and accessor:
|
|
145
147
|
attribute_name = f"entity.{span_index+1}.{attribute}"
|
|
146
148
|
try:
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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)
|
|
150
153
|
except MonocleSpanException as e:
|
|
151
154
|
span.set_status(StatusCode.ERROR, e.message)
|
|
152
155
|
detected_error = True
|
|
@@ -165,13 +168,27 @@ class SpanHandler:
|
|
|
165
168
|
span.set_attribute("entity.count", span_index)
|
|
166
169
|
return detected_error
|
|
167
170
|
|
|
168
|
-
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:
|
|
169
173
|
detected_error:bool = False
|
|
170
174
|
if 'output_processor' in to_wrap and to_wrap["output_processor"] is not None:
|
|
171
175
|
output_processor=to_wrap['output_processor']
|
|
172
|
-
|
|
173
|
-
|
|
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)))
|
|
174
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)
|
|
175
192
|
# Process events if they are defined in the output_processor.
|
|
176
193
|
# In case of inference.modelapi skip the event processing unless the span has an exception
|
|
177
194
|
if 'events' in output_processor and ('events' not in skip_processors or ex is not None):
|
|
@@ -200,6 +217,13 @@ class SpanHandler:
|
|
|
200
217
|
event_attributes[attribute_key] = result
|
|
201
218
|
else:
|
|
202
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
|
|
203
227
|
except Exception as e:
|
|
204
228
|
logger.debug(f"Error evaluating accessor for attribute '{attribute_key}': {e}")
|
|
205
229
|
matching_timestamp = getattr(ret_result, "timestamps", {}).get(event_name, None)
|
|
@@ -299,6 +323,32 @@ class SpanHandler:
|
|
|
299
323
|
finally:
|
|
300
324
|
SpanHandler.detach_workflow_type(token)
|
|
301
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
|
|
302
352
|
|
|
303
353
|
class NonFrameworkSpanHandler(SpanHandler):
|
|
304
354
|
# If the language framework is being executed, then skip generating direct openAI attributes and events
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import ast
|
|
1
2
|
import logging, json
|
|
2
3
|
import os
|
|
3
4
|
import traceback
|
|
4
|
-
from typing import Callable, Generic, Optional, TypeVar, Mapping
|
|
5
|
+
from typing import Callable, Generic, Optional, TypeVar, Mapping, Union
|
|
5
6
|
|
|
6
7
|
from opentelemetry.context import attach, detach, get_current, get_value, set_value, Context
|
|
7
8
|
from opentelemetry.trace import NonRecordingSpan, Span
|
|
@@ -217,13 +218,16 @@ def remove_scopes(token:object) -> None:
|
|
|
217
218
|
if token is not None:
|
|
218
219
|
detach(token)
|
|
219
220
|
|
|
220
|
-
def get_scopes() -> dict[str, object]:
|
|
221
|
+
def get_scopes(scope_name: Optional[str] = None) -> dict[str, object]:
|
|
221
222
|
monocle_scopes:dict[str, object] = {}
|
|
222
223
|
for key, val in baggage.get_all().items():
|
|
223
|
-
if key.startswith(MONOCLE_SCOPE_NAME_PREFIX):
|
|
224
|
+
if key.startswith(MONOCLE_SCOPE_NAME_PREFIX) and (scope_name is None or key == f"{MONOCLE_SCOPE_NAME_PREFIX}{scope_name}"):
|
|
224
225
|
monocle_scopes[key[len(MONOCLE_SCOPE_NAME_PREFIX):]] = val
|
|
225
226
|
return monocle_scopes
|
|
226
227
|
|
|
228
|
+
def is_scope_set(scepe_name: str) -> bool:
|
|
229
|
+
return len(get_scopes(scepe_name)) > 0
|
|
230
|
+
|
|
227
231
|
def get_baggage_for_scopes():
|
|
228
232
|
baggage_context:Context = None
|
|
229
233
|
for scope_key, scope_value in get_scopes():
|
|
@@ -357,7 +361,7 @@ class Option(Generic[T]):
|
|
|
357
361
|
|
|
358
362
|
def and_then(self, func: Callable[[T], 'Option[U]']) -> 'Option[U]':
|
|
359
363
|
if self.is_some():
|
|
360
|
-
return func(self.value)
|
|
364
|
+
return Option(func(self.value))
|
|
361
365
|
return Option(None)
|
|
362
366
|
|
|
363
367
|
# Example usage
|
|
@@ -409,7 +413,7 @@ def get_error_message(arguments):
|
|
|
409
413
|
|
|
410
414
|
|
|
411
415
|
def get_status_code(arguments):
|
|
412
|
-
if arguments["exception"] is not None:
|
|
416
|
+
if "exception" in arguments and arguments["exception"] is not None:
|
|
413
417
|
return get_exception_status_code(arguments)
|
|
414
418
|
elif hasattr(arguments["result"], "status"):
|
|
415
419
|
return arguments["result"].status
|
|
@@ -467,4 +471,57 @@ def get_current_monocle_span(context: Optional[Context] = None) -> Span:
|
|
|
467
471
|
span = get_value(_MONOCLE_SPAN_KEY, context=context)
|
|
468
472
|
if span is None or not isinstance(span, Span):
|
|
469
473
|
return INVALID_SPAN
|
|
470
|
-
return span
|
|
474
|
+
return span
|
|
475
|
+
|
|
476
|
+
def get_input_event_from_span(events: list[dict], search_key:str) -> Optional[Mapping]:
|
|
477
|
+
"""Extract the 'data.input' event from the span if it exists.
|
|
478
|
+
|
|
479
|
+
Args:
|
|
480
|
+
span: The Span to extract the event from.
|
|
481
|
+
|
|
482
|
+
Returns:
|
|
483
|
+
The 'data.input' event if it exists, None otherwise.
|
|
484
|
+
"""
|
|
485
|
+
input_request = None
|
|
486
|
+
for event in events:
|
|
487
|
+
if event.name == "data.input":
|
|
488
|
+
try:
|
|
489
|
+
#load the input attribute as dictionary from string
|
|
490
|
+
try:
|
|
491
|
+
input_dict = json.loads(event.attributes.get("input", "{}"))
|
|
492
|
+
except Exception as e:
|
|
493
|
+
if isinstance(e, json.JSONDecodeError):
|
|
494
|
+
input_dict = ast.literal_eval(event.attributes.get("input", {}))
|
|
495
|
+
else:
|
|
496
|
+
raise
|
|
497
|
+
if search_key in input_dict:
|
|
498
|
+
input_request = input_dict[search_key]
|
|
499
|
+
except Exception as e:
|
|
500
|
+
logger.debug(f"Error parsing input event attribute: {e}")
|
|
501
|
+
break
|
|
502
|
+
return input_request
|
|
503
|
+
|
|
504
|
+
def replace_placeholders(obj: Union[dict, list, str], span: Span) -> Union[dict, list, str]:
|
|
505
|
+
"""Replace placeholders in strings with span context values."""
|
|
506
|
+
if isinstance(obj, dict):
|
|
507
|
+
return {k: replace_placeholders(v, span) for k, v in obj.items()}
|
|
508
|
+
elif isinstance(obj, list):
|
|
509
|
+
return [replace_placeholders(item, span) for item in obj]
|
|
510
|
+
elif isinstance(obj, str):
|
|
511
|
+
startIndex = 0
|
|
512
|
+
while True:
|
|
513
|
+
start = obj.find("{{", startIndex)
|
|
514
|
+
end = obj.find("}}", start + 2)
|
|
515
|
+
if start == -1 or end == -1:
|
|
516
|
+
break
|
|
517
|
+
key = obj[start + 2:end].strip()
|
|
518
|
+
value = get_input_event_from_span(span.events, key)
|
|
519
|
+
if value is not None:
|
|
520
|
+
obj = obj[:start] + str(value) + obj[end + 2:]
|
|
521
|
+
startIndex = start + len(str(value))
|
|
522
|
+
if startIndex >= len(obj):
|
|
523
|
+
break
|
|
524
|
+
return obj
|
|
525
|
+
else:
|
|
526
|
+
return obj
|
|
527
|
+
|