monocle-apptrace 0.5.3__tar.gz → 0.6.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of monocle-apptrace might be problematic. Click here for more details.

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