monocle-apptrace 0.5.3__tar.gz → 0.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/.gitignore +6 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/PKG-INFO +9 -77
- monocle_apptrace-0.6.0/README.md +28 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/pyproject.toml +18 -8
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/exporters/file_exporter.py +7 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/common/instrumentor.py +1 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/common/span_handler.py +2 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/common/wrapper_method.py +3 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/adk/_helper.py +6 -4
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/adk/entities/agent.py +6 -1
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/agents/_helper.py +5 -5
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/agents/entities/inference.py +7 -2
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/finish_types.py +32 -1
- monocle_apptrace-0.6.0/src/monocle_apptrace/instrumentation/metamodel/hugging_face/_helper.py +138 -0
- monocle_apptrace-0.6.0/src/monocle_apptrace/instrumentation/metamodel/hugging_face/entities/inference.py +97 -0
- monocle_apptrace-0.6.0/src/monocle_apptrace/instrumentation/metamodel/hugging_face/methods.py +23 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/langgraph/_helper.py +4 -2
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/langgraph/entities/inference.py +7 -2
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/mcp/_helper.py +6 -5
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/mistral/_helper.py +98 -49
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/mistral/entities/inference.py +14 -5
- monocle_apptrace-0.6.0/src/monocle_apptrace/instrumentation/metamodel/mistral/entities/retrieval.py +41 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/mistral/methods.py +17 -0
- monocle_apptrace-0.6.0/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/__init__.py +0 -0
- monocle_apptrace-0.6.0/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/mcp_server.py +0 -94
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/LICENSE +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace → monocle_apptrace-0.6.0/src}/README.md +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/__main__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/exporters/aws/s3_exporter.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/exporters/aws/s3_exporter_opendal.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/exporters/azure/blob_exporter.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/exporters/azure/blob_exporter_opendal.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/exporters/base_exporter.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/exporters/exporter_processor.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/exporters/monocle_exporters.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/exporters/okahu/okahu_exporter.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/common/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/common/constants.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/common/method_wrappers.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/common/scope_wrapper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/common/tracing.md +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/common/utils.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/common/wrapper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/a2a/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/a2a/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/a2a/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/a2a/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/a2a/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/adk/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/adk/entities/tool.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/adk/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/agents/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/agents/agents_processor.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/agents/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/agents/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/entities/http.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/anthropic/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/anthropic/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/anthropic/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/anthropic/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/anthropic/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/azfunc/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/azfunc/entities/http.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/azfunc/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/azfunc/wrapper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/botocore/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/botocore/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/botocore/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/botocore/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/botocore/handlers/botocore_span_handler.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/botocore/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/fastapi/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/fastapi/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/fastapi/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/fastapi/entities/http.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/fastapi/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/flask/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/flask/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/flask/entities/http.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/flask/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/gemini/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/gemini/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/gemini/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/gemini/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/gemini/entities/retrieval.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/gemini/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/haystack/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/haystack/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/haystack/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/haystack/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/haystack/entities/retrieval.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/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.0/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.0/src/monocle_apptrace/instrumentation/metamodel/hugging_face}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/entities/http.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/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.0/src/monocle_apptrace/instrumentation/metamodel/langchain}/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/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.0/src/monocle_apptrace/instrumentation/metamodel/langchain}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/langchain/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/langchain/entities/retrieval.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/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.0/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.0/src/monocle_apptrace/instrumentation/metamodel/langgraph}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/langgraph/langgraph_processor.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/langgraph/methods.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/llamaindex → monocle_apptrace-0.6.0/src/monocle_apptrace/instrumentation/metamodel/litellm}/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/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.0/src/monocle_apptrace/instrumentation/metamodel/litellm}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/litellm/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/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.0/src/monocle_apptrace/instrumentation/metamodel/llamaindex}/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/_helper.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/mcp → monocle_apptrace-0.6.0/src/monocle_apptrace/instrumentation/metamodel/llamaindex}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/agent.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/retrieval.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/llamaindex_processor.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/methods.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/mistral → monocle_apptrace-0.6.0/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.0/src/monocle_apptrace/instrumentation/metamodel/mcp}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/mcp/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/mcp/mcp_processor.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/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.0/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.0/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.0/src/monocle_apptrace/instrumentation/metamodel/openai}/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/openai/_helper.py +0 -0
- {monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/teamsai → monocle_apptrace-0.6.0/src/monocle_apptrace/instrumentation/metamodel/openai}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/openai/entities/inference.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/openai/entities/retrieval.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/openai/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/requests/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/requests/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/requests/entities/http.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/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.0/src/monocle_apptrace/instrumentation/metamodel/teamsai}/__init__.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/teamsai/_helper.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference/actionplanner_output_processor.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference/teamsai_output_processor.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/teamsai/methods.py +0 -0
- {monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/src/monocle_apptrace/instrumentation/metamodel/teamsai/sample.json +0 -0
|
@@ -1,31 +1,29 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: monocle_apptrace
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
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
|
|
22
17
|
Requires-Dist: wrapt>=1.14.0
|
|
18
|
+
Provides-Extra: ai-test
|
|
19
|
+
Requires-Dist: bert-score; extra == 'ai-test'
|
|
20
|
+
Requires-Dist: transformers; extra == 'ai-test'
|
|
23
21
|
Provides-Extra: aws
|
|
24
22
|
Requires-Dist: boto3==1.37.24; extra == 'aws'
|
|
25
23
|
Provides-Extra: azure
|
|
26
24
|
Requires-Dist: azure-storage-blob==12.22.0; extra == 'azure'
|
|
27
25
|
Provides-Extra: dev
|
|
28
|
-
Requires-Dist: a2a-sdk==0.
|
|
26
|
+
Requires-Dist: a2a-sdk==0.3.6; extra == 'dev'
|
|
29
27
|
Requires-Dist: anthropic-haystack; extra == 'dev'
|
|
30
28
|
Requires-Dist: anthropic==0.57.1; extra == 'dev'
|
|
31
29
|
Requires-Dist: azure-storage-blob==12.22.0; extra == 'dev'
|
|
@@ -40,12 +38,13 @@ Requires-Dist: google-adk==1.10.0; extra == 'dev'
|
|
|
40
38
|
Requires-Dist: google-generativeai==0.8.5; extra == 'dev'
|
|
41
39
|
Requires-Dist: haystack-ai==2.3.0; extra == 'dev'
|
|
42
40
|
Requires-Dist: httpx==0.28.1; extra == 'dev'
|
|
41
|
+
Requires-Dist: huggingface-hub==0.35.3; extra == 'dev'
|
|
43
42
|
Requires-Dist: instructorembedding==1.0.1; extra == 'dev'
|
|
44
43
|
Requires-Dist: langchain-anthropic==0.3.13; extra == 'dev'
|
|
45
44
|
Requires-Dist: langchain-aws==0.2.23; extra == 'dev'
|
|
46
45
|
Requires-Dist: langchain-chroma==0.2.4; extra == 'dev'
|
|
47
46
|
Requires-Dist: langchain-community==0.3.24; extra == 'dev'
|
|
48
|
-
Requires-Dist: langchain-google-genai==2.
|
|
47
|
+
Requires-Dist: langchain-google-genai==2.0.10; extra == 'dev'
|
|
49
48
|
Requires-Dist: langchain-mcp-adapters==0.1.8; extra == 'dev'
|
|
50
49
|
Requires-Dist: langchain-mistralai==0.2.10; extra == 'dev'
|
|
51
50
|
Requires-Dist: langchain-openai==0.3.18; extra == 'dev'
|
|
@@ -64,6 +63,7 @@ Requires-Dist: llama-index-vector-stores-opensearch==0.6.0; extra == 'dev'
|
|
|
64
63
|
Requires-Dist: llama-index==0.13.0; extra == 'dev'
|
|
65
64
|
Requires-Dist: mcp==1.12.1; extra == 'dev'
|
|
66
65
|
Requires-Dist: mistral-haystack==0.0.2; extra == 'dev'
|
|
66
|
+
Requires-Dist: mistralai==1.9.9; extra == 'dev'
|
|
67
67
|
Requires-Dist: numpy==1.26.4; extra == 'dev'
|
|
68
68
|
Requires-Dist: openai-agents==0.2.6; extra == 'dev'
|
|
69
69
|
Requires-Dist: opendal==0.45.14; extra == 'dev'
|
|
@@ -80,42 +80,12 @@ Requires-Dist: types-requests==2.31.0.20240106; extra == 'dev'
|
|
|
80
80
|
Requires-Dist: uvicorn==0.35.0; extra == 'dev'
|
|
81
81
|
Description-Content-Type: text/markdown
|
|
82
82
|
|
|
83
|
-
# Monocle
|
|
83
|
+
# Monocle Apptrace
|
|
84
84
|
|
|
85
85
|
**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
86
|
|
|
87
87
|
**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
88
|
|
|
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
89
|
## Use Monocle
|
|
120
90
|
|
|
121
91
|
- Get the Monocle package
|
|
@@ -137,42 +107,4 @@ Benefits:
|
|
|
137
107
|
See [Monocle user guide](Monocle_User_Guide.md) for more details.
|
|
138
108
|
|
|
139
109
|
|
|
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
110
|
|
|
@@ -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.0"
|
|
8
14
|
authors = [
|
|
9
15
|
{ name="Okahu Inc.", email="okahu-pypi@okahu.ai" },
|
|
10
16
|
]
|
|
@@ -23,9 +29,6 @@ dependencies = [
|
|
|
23
29
|
'opentelemetry-api>=1.21.0',
|
|
24
30
|
'opentelemetry-sdk>=1.21.0',
|
|
25
31
|
'opentelemetry-instrumentation',
|
|
26
|
-
'mcp>=1.13.1',
|
|
27
|
-
'pydantic>=2.11.7',
|
|
28
|
-
'click==8.2.1'
|
|
29
32
|
]
|
|
30
33
|
|
|
31
34
|
[tool.pytest.ini_options]
|
|
@@ -46,6 +49,11 @@ markers = [
|
|
|
46
49
|
]
|
|
47
50
|
|
|
48
51
|
[project.optional-dependencies]
|
|
52
|
+
ai_test = [
|
|
53
|
+
'bert-score',
|
|
54
|
+
'transformers'
|
|
55
|
+
]
|
|
56
|
+
|
|
49
57
|
dev = [
|
|
50
58
|
'langchain-openai==0.3.18',
|
|
51
59
|
'langchain-chroma==0.2.4',
|
|
@@ -89,17 +97,19 @@ dev = [
|
|
|
89
97
|
'langchain-anthropic==0.3.13',
|
|
90
98
|
'langchain-mcp-adapters==0.1.8',
|
|
91
99
|
'mcp==1.12.1',
|
|
92
|
-
'a2a-sdk==0.
|
|
100
|
+
'a2a-sdk==0.3.6',
|
|
93
101
|
'httpx==0.28.1',
|
|
94
102
|
'fastapi>=0.115.0',
|
|
95
103
|
'pydantic==2.11.7',
|
|
96
104
|
'uvicorn==0.35.0',
|
|
97
105
|
'click==8.2.1',
|
|
98
106
|
'python-dotenv>=1.1.0',
|
|
99
|
-
'langchain-google-genai==2.
|
|
107
|
+
'langchain-google-genai==2.0.10',
|
|
100
108
|
'google-adk==1.10.0',
|
|
101
109
|
'google-generativeai==0.8.5',
|
|
102
|
-
'openai-agents==0.2.6'
|
|
110
|
+
'openai-agents==0.2.6',
|
|
111
|
+
'mistralai==1.9.9',
|
|
112
|
+
'huggingface_hub==0.35.3'
|
|
103
113
|
]
|
|
104
114
|
|
|
105
115
|
azure = [
|
{monocle_apptrace-0.5.3 → monocle_apptrace-0.6.0}/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:
|
|
@@ -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
|
|
|
@@ -26,7 +26,8 @@ WORKFLOW_TYPE_MAP = {
|
|
|
26
26
|
"anthropic": "workflow.anthropic",
|
|
27
27
|
"gemini": "workflow.gemini",
|
|
28
28
|
"litellm": "workflow.litellm",
|
|
29
|
-
"mistralai": "workflow.mistral"
|
|
29
|
+
"mistralai": "workflow.mistral",
|
|
30
|
+
"huggingface_hub": "workflow.huggingface"
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
FRAMEWORK_WORKFLOW_LIST = [
|
|
@@ -5,6 +5,7 @@ from monocle_apptrace.instrumentation.common.span_handler import SpanHandler, No
|
|
|
5
5
|
from monocle_apptrace.instrumentation.metamodel.azureaiinference.methods import AZURE_AI_INFERENCE_METHODS
|
|
6
6
|
from monocle_apptrace.instrumentation.metamodel.botocore.methods import BOTOCORE_METHODS
|
|
7
7
|
from monocle_apptrace.instrumentation.metamodel.botocore.handlers.botocore_span_handler import BotoCoreSpanHandler
|
|
8
|
+
from monocle_apptrace.instrumentation.metamodel.hugging_face.methods import HUGGING_FACE_METHODS
|
|
8
9
|
from monocle_apptrace.instrumentation.metamodel.langchain.methods import (
|
|
9
10
|
LANGCHAIN_METHODS,
|
|
10
11
|
)
|
|
@@ -109,7 +110,8 @@ DEFAULT_METHODS_LIST = (
|
|
|
109
110
|
A2A_CLIENT_METHODS +
|
|
110
111
|
LITELLM_METHODS +
|
|
111
112
|
ADK_METHODS +
|
|
112
|
-
MISTRAL_METHODS
|
|
113
|
+
MISTRAL_METHODS +
|
|
114
|
+
HUGGING_FACE_METHODS
|
|
113
115
|
)
|
|
114
116
|
|
|
115
117
|
MONOCLE_SPAN_HANDLERS: Dict[str, SpanHandler] = {
|
|
@@ -82,7 +82,7 @@ def extract_agent_input(arguments: Dict[str, Any]) -> Any:
|
|
|
82
82
|
Returns:
|
|
83
83
|
Any: The extracted input data
|
|
84
84
|
"""
|
|
85
|
-
return arguments['args'][0].user_content.parts[0].text
|
|
85
|
+
return [arguments['args'][0].user_content.parts[0].text]
|
|
86
86
|
|
|
87
87
|
def extract_agent_request_input(arguments: Dict[str, Any]) -> Any:
|
|
88
88
|
"""
|
|
@@ -94,7 +94,7 @@ def extract_agent_request_input(arguments: Dict[str, Any]) -> Any:
|
|
|
94
94
|
Returns:
|
|
95
95
|
Any: The extracted input data
|
|
96
96
|
"""
|
|
97
|
-
return arguments['kwargs']['new_message'].parts[0].text if 'new_message' in arguments['kwargs'] else
|
|
97
|
+
return [arguments['kwargs']['new_message'].parts[0].text] if 'new_message' in arguments['kwargs'] else []
|
|
98
98
|
|
|
99
99
|
def extract_agent_response(result: Any) -> Any:
|
|
100
100
|
"""
|
|
@@ -107,7 +107,9 @@ def extract_agent_response(result: Any) -> Any:
|
|
|
107
107
|
Any: The extracted response data
|
|
108
108
|
"""
|
|
109
109
|
if result:
|
|
110
|
-
return result.content.parts[0].text
|
|
110
|
+
return str(result.content.parts[0].text)
|
|
111
|
+
else:
|
|
112
|
+
return ""
|
|
111
113
|
|
|
112
114
|
def get_tool_name(instance: Any) -> str:
|
|
113
115
|
"""
|
|
@@ -179,7 +181,7 @@ def extract_tool_input(arguments: Dict[str, Any]) -> Any:
|
|
|
179
181
|
Returns:
|
|
180
182
|
Any: The extracted input data
|
|
181
183
|
"""
|
|
182
|
-
return str(arguments['kwargs'].get('args'))
|
|
184
|
+
return [str(arguments['kwargs'].get('args'))]
|
|
183
185
|
|
|
184
186
|
def extract_tool_response(result: Any) -> Any:
|
|
185
187
|
"""
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from monocle_apptrace.instrumentation.common.constants import SPAN_SUBTYPES, SPAN_TYPES
|
|
2
2
|
from monocle_apptrace.instrumentation.common.utils import get_error_message
|
|
3
3
|
from monocle_apptrace.instrumentation.metamodel.adk import _helper
|
|
4
|
+
from monocle_apptrace.instrumentation.common.utils import get_error_message
|
|
4
5
|
AGENT = {
|
|
5
6
|
"type": SPAN_TYPES.AGENTIC_INVOCATION,
|
|
6
7
|
"subtype": SPAN_SUBTYPES.ROUTING,
|
|
@@ -34,7 +35,7 @@ AGENT = {
|
|
|
34
35
|
"attributes": [
|
|
35
36
|
{
|
|
36
37
|
"_comment": "this is Agent input",
|
|
37
|
-
"attribute": "
|
|
38
|
+
"attribute": "input",
|
|
38
39
|
"accessor": lambda arguments: _helper.extract_agent_input(arguments)
|
|
39
40
|
}
|
|
40
41
|
]
|
|
@@ -42,6 +43,10 @@ AGENT = {
|
|
|
42
43
|
{
|
|
43
44
|
"name":"data.output",
|
|
44
45
|
"attributes": [
|
|
46
|
+
{
|
|
47
|
+
"attribute": "error_code",
|
|
48
|
+
"accessor": lambda arguments: get_error_message(arguments)
|
|
49
|
+
},
|
|
45
50
|
{
|
|
46
51
|
"_comment": "this is response from LLM",
|
|
47
52
|
"attribute": "response",
|
|
@@ -50,21 +50,21 @@ def extract_agent_input(arguments):
|
|
|
50
50
|
if len(arguments["args"]) > 1:
|
|
51
51
|
input_data = arguments["args"][1]
|
|
52
52
|
if isinstance(input_data, str):
|
|
53
|
-
return input_data
|
|
53
|
+
return [input_data]
|
|
54
54
|
elif isinstance(input_data, list):
|
|
55
55
|
# Handle list of input items
|
|
56
|
-
return
|
|
56
|
+
return input_data
|
|
57
57
|
|
|
58
58
|
# Fallback to kwargs
|
|
59
59
|
if "original_input" in arguments["kwargs"]:
|
|
60
60
|
input_data = arguments["kwargs"]["original_input"]
|
|
61
61
|
if isinstance(input_data, str):
|
|
62
|
-
return input_data
|
|
62
|
+
return [input_data]
|
|
63
63
|
elif isinstance(input_data, list):
|
|
64
|
-
return
|
|
64
|
+
return input_data
|
|
65
65
|
except Exception as e:
|
|
66
66
|
logger.warning("Warning: Error occurred in extract_agent_input: %s", str(e))
|
|
67
|
-
return
|
|
67
|
+
return []
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
def get_agent_name(arguments) -> str:
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from monocle_apptrace.instrumentation.common.constants import AGENT_REQUEST_SPAN_NAME, SPAN_SUBTYPES, SPAN_TYPES
|
|
2
2
|
from monocle_apptrace.instrumentation.common.utils import get_error_message
|
|
3
3
|
from monocle_apptrace.instrumentation.metamodel.agents import _helper
|
|
4
|
+
from monocle_apptrace.instrumentation.common.utils import get_error_message
|
|
4
5
|
|
|
5
6
|
AGENT = {
|
|
6
7
|
"type": SPAN_TYPES.AGENTIC_INVOCATION,
|
|
@@ -35,7 +36,7 @@ AGENT = {
|
|
|
35
36
|
"attributes": [
|
|
36
37
|
{
|
|
37
38
|
"_comment": "this is Agent input",
|
|
38
|
-
"attribute": "
|
|
39
|
+
"attribute": "input",
|
|
39
40
|
"accessor": lambda arguments: _helper.extract_agent_input(
|
|
40
41
|
arguments
|
|
41
42
|
),
|
|
@@ -45,6 +46,10 @@ AGENT = {
|
|
|
45
46
|
{
|
|
46
47
|
"name": "data.output",
|
|
47
48
|
"attributes": [
|
|
49
|
+
{
|
|
50
|
+
"attribute": "error_code",
|
|
51
|
+
"accessor": lambda arguments: get_error_message(arguments)
|
|
52
|
+
},
|
|
48
53
|
{
|
|
49
54
|
"_comment": "this is response from Agent",
|
|
50
55
|
"attribute": "response",
|
|
@@ -73,7 +78,7 @@ AGENT = {
|
|
|
73
78
|
}
|
|
74
79
|
|
|
75
80
|
AGENT_REQUEST = {
|
|
76
|
-
"type":
|
|
81
|
+
"type": SPAN_TYPES.AGENTIC_REQUEST,
|
|
77
82
|
"subtype": SPAN_SUBTYPES.PLANNING,
|
|
78
83
|
"attributes": [
|
|
79
84
|
[
|
|
@@ -14,6 +14,7 @@ class FinishType(Enum):
|
|
|
14
14
|
TOOL_CALL_ERROR = "tool_call_error"
|
|
15
15
|
REFUSAL = "refusal"
|
|
16
16
|
RATE_LIMITED = "rate_limited"
|
|
17
|
+
TOOL_CALL = "tool_call"
|
|
17
18
|
|
|
18
19
|
# OpenAI finish reason mapping
|
|
19
20
|
OPENAI_FINISH_REASON_MAPPING = {
|
|
@@ -274,6 +275,24 @@ HAYSTACK_FINISH_REASON_MAPPING = {
|
|
|
274
275
|
"OTHER": FinishType.ERROR.value,
|
|
275
276
|
}
|
|
276
277
|
|
|
278
|
+
MISTRAL_FINISH_REASON_MAPPING = {
|
|
279
|
+
"stop": FinishType.SUCCESS.value,
|
|
280
|
+
"tool_calls": FinishType.TOOL_CALL.value, # New category for tool calls
|
|
281
|
+
"length": FinishType.TRUNCATED.value,
|
|
282
|
+
# Mistral's API documentation does not explicitly mention other finish reasons like "content_filter" or "refusal".
|
|
283
|
+
# However, in case of an API-level error, the response itself would likely be an HTTP error rather than a
|
|
284
|
+
# successful response with a specific finish reason.
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
HUGGING_FACE_FINISH_REASON_MAPPING = {
|
|
288
|
+
"stop": FinishType.SUCCESS.value,
|
|
289
|
+
"tool_calls": FinishType.TOOL_CALL.value, # New category for tool calls
|
|
290
|
+
"length": FinishType.TRUNCATED.value,
|
|
291
|
+
# Hugging Face's API documentation does not explicitly mention other finish reasons like "content_filter" or "refusal".
|
|
292
|
+
# However, in case of an API-level error, the response itself would likely be an HTTP error rather than a
|
|
293
|
+
# successful response with a specific finish reason.
|
|
294
|
+
}
|
|
295
|
+
|
|
277
296
|
ADK_FINISH_REASON_MAPPING = GEMINI_FINISH_REASON_MAPPING
|
|
278
297
|
|
|
279
298
|
def map_openai_finish_reason_to_finish_type(finish_reason):
|
|
@@ -462,4 +481,16 @@ def map_adk_finish_reason_to_finish_type(finish_reason):
|
|
|
462
481
|
"""Map ADK finish_reason to standardized finish_type."""
|
|
463
482
|
if not finish_reason:
|
|
464
483
|
return None
|
|
465
|
-
return ADK_FINISH_REASON_MAPPING.get(finish_reason, None)
|
|
484
|
+
return ADK_FINISH_REASON_MAPPING.get(finish_reason, None)
|
|
485
|
+
|
|
486
|
+
def map_mistral_finish_reason_to_finish_type(finish_reason):
|
|
487
|
+
"""Map Mistral finish_reason to standardized finish_type."""
|
|
488
|
+
if not finish_reason:
|
|
489
|
+
return None
|
|
490
|
+
return MISTRAL_FINISH_REASON_MAPPING.get(finish_reason, None)
|
|
491
|
+
|
|
492
|
+
def map_hf_finish_reason_to_finish_type(finish_reason):
|
|
493
|
+
"""Map Hugging Face finish_reason to standardized finish_type."""
|
|
494
|
+
if not finish_reason:
|
|
495
|
+
return None
|
|
496
|
+
return HUGGING_FACE_FINISH_REASON_MAPPING.get(finish_reason, None)
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import json
|
|
3
|
+
import logging
|
|
4
|
+
from opentelemetry.context import get_value
|
|
5
|
+
from monocle_apptrace.instrumentation.common.constants import (
|
|
6
|
+
AGENT_PREFIX_KEY,
|
|
7
|
+
INFERENCE_AGENT_DELEGATION,
|
|
8
|
+
INFERENCE_TURN_END,
|
|
9
|
+
INFERENCE_TOOL_CALL,
|
|
10
|
+
)
|
|
11
|
+
from monocle_apptrace.instrumentation.common.utils import (
|
|
12
|
+
Option,
|
|
13
|
+
get_json_dumps,
|
|
14
|
+
try_option,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
from monocle_apptrace.instrumentation.metamodel.finish_types import map_hf_finish_reason_to_finish_type
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
def update_input_span_events(kwargs):
|
|
22
|
+
input_text = ""
|
|
23
|
+
print("DEBUG kwargs:", kwargs)
|
|
24
|
+
if "inputs" in kwargs:
|
|
25
|
+
if isinstance(kwargs["inputs"], list):
|
|
26
|
+
input_text = " | ".join(str(i) for i in kwargs["inputs"])
|
|
27
|
+
else:
|
|
28
|
+
input_text = str(kwargs["inputs"])
|
|
29
|
+
elif "messages" in kwargs:
|
|
30
|
+
input_text = json.dumps(kwargs["messages"])
|
|
31
|
+
return {"input": input_text} # always a dict with 'input'
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def update_output_span_events(result):
|
|
36
|
+
try:
|
|
37
|
+
if hasattr(result, "choices") and result.choices:
|
|
38
|
+
output = [c.message for c in result.choices]
|
|
39
|
+
output_str = json.dumps(output)
|
|
40
|
+
return output_str[:200] + "..." if len(output_str) > 200 else output_str
|
|
41
|
+
except Exception as e:
|
|
42
|
+
logger.warning("Error in update_output_span_events: %s", str(e))
|
|
43
|
+
return ""
|
|
44
|
+
|
|
45
|
+
def extract_messages(kwargs):
|
|
46
|
+
"""Extract system and user messages"""
|
|
47
|
+
try:
|
|
48
|
+
messages = []
|
|
49
|
+
if "system" in kwargs and isinstance(kwargs["system"], str):
|
|
50
|
+
messages.append({"system": kwargs["system"]})
|
|
51
|
+
if 'messages' in kwargs and kwargs['messages']:
|
|
52
|
+
for msg in kwargs['messages']:
|
|
53
|
+
if msg.get('content') and msg.get('role'):
|
|
54
|
+
messages.append({msg['role']: msg['content']})
|
|
55
|
+
return [get_json_dumps(message) for message in messages]
|
|
56
|
+
except Exception as e:
|
|
57
|
+
logger.warning("Warning: Error occurred in extract_messages: %s", str(e))
|
|
58
|
+
return []
|
|
59
|
+
|
|
60
|
+
def extract_assistant_message(arguments):
|
|
61
|
+
"""
|
|
62
|
+
Extract the assistant message from a Mistral response or stream chunks.
|
|
63
|
+
Returns a JSON string like {"assistant": "<text>"}.
|
|
64
|
+
"""
|
|
65
|
+
try:
|
|
66
|
+
result = arguments.get("result") if isinstance(arguments, dict) else arguments
|
|
67
|
+
if result is None:
|
|
68
|
+
return ""
|
|
69
|
+
|
|
70
|
+
# Handle full response
|
|
71
|
+
if hasattr(result, "choices") and result.choices:
|
|
72
|
+
msg_obj = result.choices[0].message
|
|
73
|
+
return get_json_dumps({msg_obj.role: msg_obj.content})
|
|
74
|
+
|
|
75
|
+
# Handle streaming: result might be a list of CompletionEvent chunks
|
|
76
|
+
if isinstance(result, list):
|
|
77
|
+
content = []
|
|
78
|
+
for chunk in result:
|
|
79
|
+
if hasattr(chunk, "data") and hasattr(chunk.data, "choices") and chunk.data.choices:
|
|
80
|
+
choice = chunk.data.choices[0]
|
|
81
|
+
if hasattr(choice, "delta") and hasattr(choice.delta, "content"):
|
|
82
|
+
content.append(choice.delta.content or "")
|
|
83
|
+
return get_json_dumps({"assistant": "".join(content)})
|
|
84
|
+
|
|
85
|
+
return ""
|
|
86
|
+
|
|
87
|
+
except Exception as e:
|
|
88
|
+
logger.warning("Warning in extract_assistant_message: %s", str(e))
|
|
89
|
+
return ""
|
|
90
|
+
|
|
91
|
+
def update_span_from_llm_response(result, include_token_counts=False):
|
|
92
|
+
tokens = {
|
|
93
|
+
"completion_tokens": getattr(result.usage, "completion_tokens", 0),
|
|
94
|
+
"prompt_tokens": getattr(result.usage, "prompt_tokens", 0),
|
|
95
|
+
"total_tokens": getattr(result.usage, "total_tokens", 0),
|
|
96
|
+
} if include_token_counts else {}
|
|
97
|
+
# Add other metadata fields like finish_reason, etc.
|
|
98
|
+
return {**tokens, "inference_sub_type": "turn_end"}
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def get_exception_status_code(exc):
|
|
102
|
+
if exc is None:
|
|
103
|
+
return "success"
|
|
104
|
+
code = getattr(exc, "status_code", None)
|
|
105
|
+
if code == 401:
|
|
106
|
+
return "unauthorized"
|
|
107
|
+
elif code == 403:
|
|
108
|
+
return "forbidden"
|
|
109
|
+
elif code == 404:
|
|
110
|
+
return "not_found"
|
|
111
|
+
return "error"
|
|
112
|
+
|
|
113
|
+
def map_finish_reason_to_finish_type(finish_reason):
|
|
114
|
+
"""Map Hugging Face finish_reason to finish_type, similar to OpenAI mapping."""
|
|
115
|
+
return map_hf_finish_reason_to_finish_type(finish_reason)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def agent_inference_type(result):
|
|
119
|
+
"""
|
|
120
|
+
Simple agent inference type logic: if message contains AGENT_PREFIX_KEY,
|
|
121
|
+
mark as delegation; otherwise it's a normal turn_end.
|
|
122
|
+
"""
|
|
123
|
+
try:
|
|
124
|
+
assistant_msg = extract_assistant_message(result)
|
|
125
|
+
if assistant_msg and AGENT_PREFIX_KEY in assistant_msg:
|
|
126
|
+
return INFERENCE_AGENT_DELEGATION
|
|
127
|
+
except Exception as e:
|
|
128
|
+
logger.warning("Error in agent_inference_type: %s", str(e))
|
|
129
|
+
return INFERENCE_TURN_END
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def extract_finish_reason(result):
|
|
133
|
+
try:
|
|
134
|
+
return getattr(result, "finish_reason", None)
|
|
135
|
+
except Exception:
|
|
136
|
+
return None
|
|
137
|
+
|
|
138
|
+
|