langtrace-python-sdk 2.2.30__tar.gz → 2.3.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.
Files changed (225) hide show
  1. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/PKG-INFO +3 -1
  2. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/README.md +1 -0
  3. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/pyproject.toml +1 -0
  4. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/crewai_example/simple_agent/agents.py +28 -5
  5. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/crewai_example/simple_agent/main.py +12 -17
  6. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/crewai_example/simple_agent/tasks.py +1 -0
  7. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/crewai_example/trip_planner/main.py +1 -30
  8. langtrace_python_sdk-2.3.0/src/examples/embedchain_example/simple.py +15 -0
  9. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/instrumentation/common.py +1 -0
  10. langtrace_python_sdk-2.3.0/src/langtrace_python_sdk/constants/instrumentation/embedchain.py +14 -0
  11. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/__init__.py +2 -0
  12. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/chroma/patch.py +1 -1
  13. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/crewai/instrumentation.py +1 -1
  14. langtrace_python_sdk-2.3.0/src/langtrace_python_sdk/instrumentation/crewai/patch.py +245 -0
  15. langtrace_python_sdk-2.3.0/src/langtrace_python_sdk/instrumentation/embedchain/__init__.py +5 -0
  16. langtrace_python_sdk-2.3.0/src/langtrace_python_sdk/instrumentation/embedchain/instrumentation.py +65 -0
  17. langtrace_python_sdk-2.3.0/src/langtrace_python_sdk/instrumentation/embedchain/patch.py +91 -0
  18. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/langtrace.py +2 -0
  19. langtrace_python_sdk-2.3.0/src/langtrace_python_sdk/version.py +1 -0
  20. langtrace_python_sdk-2.2.30/src/langtrace_python_sdk/instrumentation/crewai/patch.py +0 -176
  21. langtrace_python_sdk-2.2.30/src/langtrace_python_sdk/version.py +0 -1
  22. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/.gitignore +0 -0
  23. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/LICENSE +0 -0
  24. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/__init__.py +0 -0
  25. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/__init__.py +0 -0
  26. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/anthropic_example/__init__.py +0 -0
  27. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/anthropic_example/completion.py +0 -0
  28. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/chroma_example/__init__.py +0 -0
  29. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/chroma_example/basic.py +0 -0
  30. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/cohere_example/__init__.py +0 -0
  31. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/cohere_example/chat.py +0 -0
  32. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/cohere_example/chat_stream.py +0 -0
  33. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/cohere_example/embed.py +0 -0
  34. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/cohere_example/rerank.py +0 -0
  35. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/cohere_example/tools.py +0 -0
  36. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/crewai_example/__init__.py +0 -0
  37. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/crewai_example/basic.py +0 -0
  38. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/crewai_example/simple_agent/__init__.py +0 -0
  39. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/crewai_example/trip_planner/__init__.py +0 -0
  40. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/crewai_example/trip_planner/agents.py +0 -0
  41. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/crewai_example/trip_planner/tasks.py +0 -0
  42. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/crewai_example/trip_planner/tools/calculator.py +0 -0
  43. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/crewai_example/trip_planner/tools/search_tools.py +0 -0
  44. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/dspy_example/math_problems_cot.py +0 -0
  45. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/dspy_example/math_problems_cot_parallel.py +0 -0
  46. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/dspy_example/program_of_thought_basic.py +0 -0
  47. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/dspy_example/quiz_gen.py +0 -0
  48. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/dspy_example/react.py +0 -0
  49. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/fastapi_example/__init__.py +0 -0
  50. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/fastapi_example/basic_route.py +0 -0
  51. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/gemini_example/__init__.py +0 -0
  52. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/gemini_example/function_tools.py +0 -0
  53. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/gemini_example/main.py +0 -0
  54. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/hiveagent_example/basic.py +0 -0
  55. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/inspect_ai_example/basic_eval.py +0 -0
  56. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/langchain_example/__init__.py +0 -0
  57. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/langchain_example/basic.py +0 -0
  58. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/langchain_example/groq_example.py +0 -0
  59. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/langchain_example/langgraph_example.py +0 -0
  60. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/langchain_example/sagemaker.py +0 -0
  61. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/langchain_example/tool.py +0 -0
  62. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/litellm_example/basic.py +0 -0
  63. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/llamaindex_example/__init__.py +0 -0
  64. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/llamaindex_example/agent.py +0 -0
  65. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/llamaindex_example/basic.py +0 -0
  66. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/llamaindex_example/data/abramov.txt +0 -0
  67. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/mistral_example/__init__.py +0 -0
  68. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/mistral_example/complete.py +0 -0
  69. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/mistral_example/complete_async.py +0 -0
  70. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/mistral_example/embeddings.py +0 -0
  71. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/ollama_example/__init__.py +0 -0
  72. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/ollama_example/basic.py +0 -0
  73. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/openai_example/__init__.py +0 -0
  74. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/openai_example/async_tool_calling_nonstreaming.py +0 -0
  75. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/openai_example/async_tool_calling_streaming.py +0 -0
  76. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/openai_example/chat_completion.py +0 -0
  77. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/openai_example/chat_completion_tool_choice.py +0 -0
  78. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/openai_example/embeddings_create.py +0 -0
  79. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/openai_example/function_calling.py +0 -0
  80. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/openai_example/images_edit.py +0 -0
  81. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/openai_example/images_generate.py +0 -0
  82. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/openai_example/resources/lounge_flamingo.png +0 -0
  83. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/openai_example/resources/mask.png +0 -0
  84. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/openai_example/send_user_feedback.py +0 -0
  85. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/openai_example/tool_calling.py +0 -0
  86. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/openai_example/tool_calling_nonstreaming.py +0 -0
  87. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/openai_example/tool_calling_streaming.py +0 -0
  88. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/otlp_example/otlp_basic.py +0 -0
  89. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/otlp_example/otlp_with_langtrace.py +0 -0
  90. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/perplexity_example/basic.py +0 -0
  91. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/pinecone_example/__init__.py +0 -0
  92. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/pinecone_example/basic.py +0 -0
  93. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/qdrant_example/__init__.py +0 -0
  94. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/qdrant_example/basic.py +0 -0
  95. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/routellm_example/basic.py +0 -0
  96. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/vertexai_example/__init__.py +0 -0
  97. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/vertexai_example/main.py +0 -0
  98. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/weaviate_example/__init__.py +0 -0
  99. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/examples/weaviate_example/query_text.py +0 -0
  100. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/__init__.py +0 -0
  101. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/__init__.py +0 -0
  102. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/exporter/langtrace_exporter.py +0 -0
  103. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/instrumentation/__init__.py +0 -0
  104. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/instrumentation/anthropic.py +0 -0
  105. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/instrumentation/chroma.py +0 -0
  106. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/instrumentation/cohere.py +0 -0
  107. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/instrumentation/gemini.py +0 -0
  108. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/instrumentation/groq.py +0 -0
  109. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/instrumentation/mistral.py +0 -0
  110. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/instrumentation/ollama.py +0 -0
  111. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/instrumentation/openai.py +0 -0
  112. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/instrumentation/pinecone.py +0 -0
  113. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/instrumentation/qdrant.py +0 -0
  114. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/instrumentation/vertexai.py +0 -0
  115. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/constants/instrumentation/weaviate.py +0 -0
  116. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/extensions/__init__.py +0 -0
  117. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/extensions/langtrace_exporter.py +0 -0
  118. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/extensions/langtrace_filesystem.py +0 -0
  119. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/anthropic/__init__.py +0 -0
  120. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/anthropic/instrumentation.py +0 -0
  121. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/anthropic/patch.py +0 -0
  122. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/chroma/__init__.py +0 -0
  123. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/chroma/instrumentation.py +0 -0
  124. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/cohere/__init__.py +0 -0
  125. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/cohere/instrumentation.py +0 -0
  126. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/cohere/patch.py +0 -0
  127. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/crewai/__init__.py +0 -0
  128. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/dspy/__init__.py +0 -0
  129. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/dspy/instrumentation.py +0 -0
  130. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/dspy/patch.py +0 -0
  131. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/gemini/__init__.py +0 -0
  132. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/gemini/instrumentation.py +0 -0
  133. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/gemini/patch.py +0 -0
  134. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/groq/__init__.py +0 -0
  135. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/groq/instrumentation.py +0 -0
  136. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/groq/patch.py +0 -0
  137. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/langchain/__init__.py +0 -0
  138. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/langchain/instrumentation.py +0 -0
  139. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/langchain/patch.py +0 -0
  140. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/langchain_community/__init__.py +0 -0
  141. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/langchain_community/instrumentation.py +0 -0
  142. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/langchain_community/patch.py +0 -0
  143. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/langchain_core/__init__.py +0 -0
  144. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/langchain_core/instrumentation.py +0 -0
  145. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/langchain_core/patch.py +0 -0
  146. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/langgraph/__init__.py +0 -0
  147. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/langgraph/instrumentation.py +0 -0
  148. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/langgraph/patch.py +0 -0
  149. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/llamaindex/__init__.py +0 -0
  150. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/llamaindex/instrumentation.py +0 -0
  151. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/llamaindex/patch.py +0 -0
  152. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/mistral/__init__.py +0 -0
  153. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/mistral/instrumentation.py +0 -0
  154. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/mistral/patch.py +0 -0
  155. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/ollama/__init__.py +0 -0
  156. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/ollama/instrumentation.py +0 -0
  157. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/ollama/patch.py +0 -0
  158. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/openai/__init__.py +0 -0
  159. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/openai/instrumentation.py +0 -0
  160. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/openai/patch.py +0 -0
  161. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/pinecone/__init__.py +0 -0
  162. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/pinecone/instrumentation.py +0 -0
  163. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/pinecone/patch.py +0 -0
  164. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/qdrant/__init__.py +0 -0
  165. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/qdrant/instrumentation.py +0 -0
  166. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/qdrant/patch.py +0 -0
  167. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/vertexai/__init__.py +0 -0
  168. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/vertexai/instrumentation.py +0 -0
  169. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/vertexai/patch.py +0 -0
  170. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/weaviate/__init__.py +0 -0
  171. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/weaviate/instrumentation.py +0 -0
  172. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/instrumentation/weaviate/patch.py +0 -0
  173. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/types/__init__.py +0 -0
  174. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/utils/__init__.py +0 -0
  175. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/utils/langtrace_sampler.py +0 -0
  176. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/utils/llm.py +0 -0
  177. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/utils/misc.py +0 -0
  178. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/utils/prompt_registry.py +0 -0
  179. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/utils/sdk_version_checker.py +0 -0
  180. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/utils/silently_fail.py +0 -0
  181. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/utils/types.py +0 -0
  182. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/langtrace_python_sdk/utils/with_root_span.py +0 -0
  183. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/run_example.py +0 -0
  184. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/__init__.py +0 -0
  185. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/anthropic/cassettes/test_anthropic.yaml +0 -0
  186. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/anthropic/cassettes/test_anthropic_streaming.yaml +0 -0
  187. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/anthropic/cassettes/test_async_anthropic_streaming.yaml +0 -0
  188. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/anthropic/conftest.py +0 -0
  189. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/anthropic/test_anthropic.py +0 -0
  190. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/chroma/conftest.py +0 -0
  191. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/chroma/test_chroma.py +0 -0
  192. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/cohere/cassettes/test_cohere_chat.yaml +0 -0
  193. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/cohere/cassettes/test_cohere_chat_streaming.yaml +0 -0
  194. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/cohere/cassettes/test_cohere_embed.yaml +0 -0
  195. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/cohere/cassettes/test_cohere_rerank.yaml +0 -0
  196. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/cohere/conftest.py +0 -0
  197. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/cohere/test_cohere_chat.py +0 -0
  198. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/cohere/test_cohere_embed.py +0 -0
  199. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/cohere/test_cohere_rerank.py +0 -0
  200. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/conftest.py +0 -0
  201. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/groq/cassettes/test_async_chat_completion.yaml +0 -0
  202. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/groq/cassettes/test_async_chat_completion_streaming.yaml +0 -0
  203. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/groq/cassettes/test_chat_completion.yaml +0 -0
  204. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/groq/cassettes/test_chat_completion_streaming.yaml +0 -0
  205. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/groq/conftest.py +0 -0
  206. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/groq/test_groq.py +0 -0
  207. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/langchain/cassettes/test_langchain.yaml +0 -0
  208. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/langchain/conftest.py +0 -0
  209. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/langchain/test_langchain.py +0 -0
  210. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/openai/cassettes/test_async_chat_completion_streaming.yaml +0 -0
  211. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/openai/cassettes/test_async_image_generation.yaml +0 -0
  212. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/openai/cassettes/test_chat_completion.yaml +0 -0
  213. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/openai/cassettes/test_chat_completion_streaming.yaml +0 -0
  214. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/openai/cassettes/test_image_generation.yaml +0 -0
  215. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/openai/conftest.py +0 -0
  216. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/openai/test_chat_completion.py +0 -0
  217. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/openai/test_embeddings.py +0 -0
  218. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/openai/test_image_generation.py +0 -0
  219. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/pinecone/cassettes/test_query.yaml +0 -0
  220. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/pinecone/cassettes/test_upsert.yaml +0 -0
  221. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/pinecone/conftest.py +0 -0
  222. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/pinecone/test_pinecone.py +0 -0
  223. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/qdrant/conftest.py +0 -0
  224. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/qdrant/test_qdrant.py +0 -0
  225. {langtrace_python_sdk-2.2.30 → langtrace_python_sdk-2.3.0}/src/tests/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: langtrace-python-sdk
3
- Version: 2.2.30
3
+ Version: 2.3.0
4
4
  Summary: Python SDK for LangTrace
5
5
  Project-URL: Homepage, https://github.com/Scale3-Labs/langtrace-python-sdk
6
6
  Author-email: Scale3 Labs <engineering@scale3labs.com>
@@ -26,6 +26,7 @@ Provides-Extra: dev
26
26
  Requires-Dist: anthropic; extra == 'dev'
27
27
  Requires-Dist: chromadb; extra == 'dev'
28
28
  Requires-Dist: cohere; extra == 'dev'
29
+ Requires-Dist: embedchain; extra == 'dev'
29
30
  Requires-Dist: google-cloud-aiplatform; extra == 'dev'
30
31
  Requires-Dist: google-generativeai; extra == 'dev'
31
32
  Requires-Dist: groq; extra == 'dev'
@@ -302,6 +303,7 @@ Langtrace automatically captures traces from the following vendors:
302
303
  | Ollama | Framework | :x: | :white_check_mark: |
303
304
  | VertexAI | Framework | :x: | :white_check_mark: |
304
305
  | Vercel AI SDK| Framework | :white_check_mark: | :x: |
306
+ | EmbedChain | Framework | :x: | :white_check_mark: |
305
307
  | Pinecone | Vector Database | :white_check_mark: | :white_check_mark: |
306
308
  | ChromaDB | Vector Database | :white_check_mark: | :white_check_mark: |
307
309
  | QDrant | Vector Database | :white_check_mark: | :white_check_mark: |
@@ -255,6 +255,7 @@ Langtrace automatically captures traces from the following vendors:
255
255
  | Ollama | Framework | :x: | :white_check_mark: |
256
256
  | VertexAI | Framework | :x: | :white_check_mark: |
257
257
  | Vercel AI SDK| Framework | :white_check_mark: | :x: |
258
+ | EmbedChain | Framework | :x: | :white_check_mark: |
258
259
  | Pinecone | Vector Database | :white_check_mark: | :white_check_mark: |
259
260
  | ChromaDB | Vector Database | :white_check_mark: | :white_check_mark: |
260
261
  | QDrant | Vector Database | :white_check_mark: | :white_check_mark: |
@@ -55,6 +55,7 @@ dev = [
55
55
  "google-generativeai",
56
56
  "google-cloud-aiplatform",
57
57
  "mistralai",
58
+ "embedchain",
58
59
  ]
59
60
 
60
61
  test = ["pytest", "pytest-vcr", "pytest-asyncio"]
@@ -1,15 +1,13 @@
1
1
  from crewai import Agent
2
- from langchain_openai import ChatOpenAI
3
2
  from langchain_anthropic import ChatAnthropic
4
3
  from langchain_cohere import ChatCohere
5
4
  from langchain_ollama import ChatOllama
5
+ from langchain_openai import ChatOpenAI
6
6
 
7
7
 
8
8
  class PoetryAgents:
9
9
  def __init__(self):
10
- self.open_ai = ChatOpenAI(
11
- model_name="gpt-4", temperature=0.7, stream_usage=True
12
- )
10
+ self.open_ai = ChatOpenAI(model_name="gpt-4", temperature=0.7)
13
11
  self.anthropic = ChatAnthropic(
14
12
  model_name="claude-3-5-sonnet-20240620", temperature=0.7
15
13
  )
@@ -28,5 +26,30 @@ class PoetryAgents:
28
26
  goal="""Create a poem that captures the essence of a given theme or emotion""",
29
27
  allow_delegation=False,
30
28
  verbose=True,
31
- llm=self.ollama,
29
+ llm=self.open_ai,
30
+ )
31
+
32
+ def poet_agent_2(self):
33
+ return Agent(
34
+ role="Renaissance Poet",
35
+ backstory="""
36
+ I am a Renaissance Poet. I am well-versed in the art of poetry and have a deep appreciation for the beauty of language and expression.
37
+ """,
38
+ goal="""Create a poem that is inspired by the works of the Renaissance poets""",
39
+ allow_delegation=False,
40
+ verbose=True,
41
+ llm=self.open_ai,
42
+ )
43
+
44
+ def poet_agent_3(self):
45
+ return Agent(
46
+ role="William Shakespeare",
47
+ backstory="""
48
+ I am william shakespeare. I am an Expert in poetry writing and creative expression.
49
+ I have been writing poetry for over 10 years and have published several collections.
50
+ """,
51
+ goal="""Create a poem that is inspired by the works of William Shakespeare""",
52
+ allow_delegation=False,
53
+ verbose=True,
54
+ llm=self.open_ai,
32
55
  )
@@ -1,14 +1,12 @@
1
+ from agents import PoetryAgents
1
2
  from crewai import Crew
2
- from textwrap import dedent
3
- from .agents import PoetryAgents
4
- from .tasks import PoetryTasks
5
- from langtrace_python_sdk import langtrace
6
3
  from dotenv import load_dotenv
7
- import agentops
4
+ from tasks import PoetryTasks
5
+
6
+ from langtrace_python_sdk import langtrace
8
7
 
9
8
  load_dotenv()
10
- agentops.init()
11
- langtrace.init(write_spans_to_console=False, batch=False)
9
+ langtrace.init()
12
10
 
13
11
 
14
12
  class PoetryCrew:
@@ -20,27 +18,24 @@ class PoetryCrew:
20
18
  tasks = PoetryTasks()
21
19
 
22
20
  poetry_agent = agents.create_poet_agent()
21
+ poetry_agent_2 = agents.poet_agent_2()
22
+ poetry_agent_3 = agents.poet_agent_3()
23
23
 
24
24
  create_poem = tasks.create_poem(poetry_agent, self.topic)
25
+ create_poem_2 = tasks.create_poem(poetry_agent_2, self.topic)
26
+ create_poem_3 = tasks.create_poem(poetry_agent_3, self.topic)
25
27
 
26
- crew = Crew(agents=[poetry_agent], tasks=[create_poem], verbose=True)
28
+ crew = Crew(agents=[poetry_agent], tasks=[create_poem], verbose=True, memory=True)
27
29
  res = crew.kickoff()
28
30
  return res
29
31
 
30
32
 
31
33
  # This is the main function that you will use to run your custom crew.
34
+ # You can run this file using `python -m src.examples.crewai_example.simple_agent.main`
32
35
  if __name__ == "__main__":
33
36
  print("## Welcome to Poetry Crew")
34
37
  print("-------------------------------")
35
- topic = input(
36
- dedent(
37
- """
38
- What topic do you want to write a poem on?
39
- """
40
- )
41
- )
42
-
43
- poetry_crew = PoetryCrew(topic=topic)
38
+ poetry_crew = PoetryCrew(topic="cold")
44
39
  result = poetry_crew.run()
45
40
  print("\n\n########################")
46
41
  print("## Here is you poem")
@@ -18,4 +18,5 @@ class PoetryTasks:
18
18
  ),
19
19
  expected_output="A creative and expressive poem that captures the essence of the given topic.",
20
20
  agent=agent,
21
+ output_file="poem.txt",
21
22
  )
@@ -1,5 +1,4 @@
1
1
  from crewai import Crew
2
- from textwrap import dedent
3
2
  from .agents import TravelAgents
4
3
  from .tasks import TravelTasks
5
4
  from langtrace_python_sdk import langtrace
@@ -59,36 +58,8 @@ class TripCrew:
59
58
  if __name__ == "__main__":
60
59
  print("## Welcome to Trip Planner Crew")
61
60
  print("-------------------------------")
62
- origin = input(
63
- dedent(
64
- """
65
- From where will you be traveling from?
66
- """
67
- )
68
- )
69
- cities = input(
70
- dedent(
71
- """
72
- What are the cities options you are interested in visiting?
73
- """
74
- )
75
- )
76
- date_range = input(
77
- dedent(
78
- """
79
- What is the date range you are interested in traveling?
80
- """
81
- )
82
- )
83
- interests = input(
84
- dedent(
85
- """
86
- What are some of your high level interests and hobbies?
87
- """
88
- )
89
- )
90
61
 
91
- trip_crew = TripCrew(origin, cities, date_range, interests)
62
+ trip_crew = TripCrew("cairo", "marsa alam", "sep", "scuba diving")
92
63
  result = trip_crew.run()
93
64
  print("\n\n########################")
94
65
  print("## Here is you Trip Plan")
@@ -0,0 +1,15 @@
1
+ from dotenv import load_dotenv
2
+ from embedchain import App
3
+ from langtrace_python_sdk import langtrace
4
+
5
+ load_dotenv()
6
+ langtrace.init()
7
+
8
+ app = App()
9
+ app.reset()
10
+ app.add("https://www.forbes.com/profile/elon-musk")
11
+ app.add("https://en.wikipedia.org/wiki/Elon_Musk")
12
+ res = app.query("What is the net worth of Elon Musk today?")
13
+ print(res)
14
+ re2 = app.search("Elon Musk")
15
+ print(re2)
@@ -30,6 +30,7 @@ SERVICE_PROVIDERS = {
30
30
  "VERTEXAI": "VertexAI",
31
31
  "GEMINI": "Gemini",
32
32
  "MISTRAL": "Mistral",
33
+ "EMBEDCHAIN": "Embedchain",
33
34
  }
34
35
 
35
36
  LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY = "langtrace_additional_attributes"
@@ -0,0 +1,14 @@
1
+ APIS = {
2
+ "ADD": {
3
+ "METHOD": "embedchain.add",
4
+ "OPERATION": "add",
5
+ },
6
+ "QUERY": {
7
+ "METHOD": "embedchain.query",
8
+ "OPERATION": "query",
9
+ },
10
+ "SEARCH": {
11
+ "METHOD": "embedchain.search",
12
+ "OPERATION": "search",
13
+ },
14
+ }
@@ -17,12 +17,14 @@ from .dspy import DspyInstrumentation
17
17
  from .vertexai import VertexAIInstrumentation
18
18
  from .gemini import GeminiInstrumentation
19
19
  from .mistral import MistralInstrumentation
20
+ from .embedchain import EmbedchainInstrumentation
20
21
 
21
22
  __all__ = [
22
23
  "AnthropicInstrumentation",
23
24
  "ChromaInstrumentation",
24
25
  "CohereInstrumentation",
25
26
  "CrewAIInstrumentation",
27
+ "EmbedchainInstrumentation",
26
28
  "GroqInstrumentation",
27
29
  "LangchainInstrumentation",
28
30
  "LangchainCommunityInstrumentation",
@@ -51,7 +51,7 @@ def collection_patch(method, version, tracer):
51
51
  "langtrace.version": v(LANGTRACE_SDK_NAME),
52
52
  "db.system": "chromadb",
53
53
  "db.operation": api["OPERATION"],
54
- "db.query": json.dumps(kwargs.get("query")),
54
+ "db.query": json.dumps(kwargs),
55
55
  **(extra_attributes if extra_attributes is not None else {}),
56
56
  }
57
57
 
@@ -46,7 +46,7 @@ class CrewAIInstrumentation(BaseInstrumentor):
46
46
  )
47
47
  _W(
48
48
  "crewai.task",
49
- "Task.execute",
49
+ "Task.execute_sync",
50
50
  patch_crew("Task.execute", version, tracer),
51
51
  )
52
52
  except Exception as e:
@@ -0,0 +1,245 @@
1
+ import json
2
+ from importlib_metadata import version as v
3
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
4
+ from langtrace_python_sdk.utils import set_span_attribute
5
+ from langtrace_python_sdk.utils.llm import get_span_name, set_span_attributes
6
+ from langtrace_python_sdk.constants.instrumentation.common import (
7
+ LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY,
8
+ SERVICE_PROVIDERS,
9
+ )
10
+ from opentelemetry import baggage
11
+ from langtrace.trace_attributes import FrameworkSpanAttributes
12
+ from opentelemetry.trace import SpanKind, Span, Tracer
13
+ from opentelemetry.trace.status import Status, StatusCode
14
+
15
+
16
+ crew_properties = {
17
+ "tasks": "object",
18
+ "agents": "object",
19
+ "cache": "bool",
20
+ "process": "object",
21
+ "verbose": "bool",
22
+ "memory": "bool",
23
+ "embedder": "json",
24
+ "full_output": "bool",
25
+ "manager_llm": "object",
26
+ "manager_agent": "object",
27
+ "manager_callbacks": "object",
28
+ "function_calling_llm": "object",
29
+ "config": "json",
30
+ "id": "object",
31
+ "max_rpm": "int",
32
+ "share_crew": "bool",
33
+ "step_callback": "object",
34
+ "task_callback": "object",
35
+ "prompt_file": "str",
36
+ "output_log_file": "bool",
37
+ }
38
+
39
+ task_properties = {
40
+ "id": "object",
41
+ "used_tools": "int",
42
+ "tools_errors": "int",
43
+ "delegations": "int",
44
+ "i18n": "object",
45
+ "thread": "object",
46
+ "prompt_context": "object",
47
+ "description": "str",
48
+ "expected_output": "str",
49
+ "config": "object",
50
+ "callback": "str",
51
+ "agent": "object",
52
+ "context": "object",
53
+ "async_execution": "bool",
54
+ "output_json": "object",
55
+ "output_pydantic": "object",
56
+ "output_file": "object",
57
+ "output": "object",
58
+ "tools": "object",
59
+ "human_input": "bool",
60
+ }
61
+
62
+ agent_properties = {
63
+ "formatting_errors": "int",
64
+ "id": "object",
65
+ "role": "str",
66
+ "goal": "str",
67
+ "backstory": "str",
68
+ "cache": "bool",
69
+ "config": "object",
70
+ "max_rpm": "int",
71
+ "verbose": "bool",
72
+ "allow_delegation": "bool",
73
+ "tools": "object",
74
+ "max_iter": "int",
75
+ "max_execution_time": "object",
76
+ "agent_executor": "object",
77
+ "tools_handler": "object",
78
+ "force_answer_max_iterations": "int",
79
+ "crew": "object",
80
+ "cache_handler": "object",
81
+ "step_callback": "object",
82
+ "i18n": "object",
83
+ "llm": "object",
84
+ "function_calling_llm": "object",
85
+ "callbacks": "object",
86
+ "system_template": "object",
87
+ "prompt_template": "object",
88
+ "response_template": "object",
89
+ }
90
+
91
+
92
+ def patch_crew(operation_name, version, tracer: Tracer):
93
+ def traced_method(wrapped, instance, args, kwargs):
94
+ service_provider = SERVICE_PROVIDERS["CREWAI"]
95
+ extra_attributes = baggage.get_baggage(LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY)
96
+ span_attributes = {
97
+ "langtrace.sdk.name": "langtrace-python-sdk",
98
+ "langtrace.service.name": service_provider,
99
+ "langtrace.service.type": "framework",
100
+ "langtrace.service.version": version,
101
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
102
+ **(extra_attributes if extra_attributes is not None else {}),
103
+ }
104
+
105
+ attributes = FrameworkSpanAttributes(**span_attributes)
106
+
107
+ with tracer.start_as_current_span(
108
+ get_span_name(operation_name), kind=SpanKind.CLIENT
109
+ ) as span:
110
+
111
+ try:
112
+ set_span_attributes(span, attributes)
113
+ CrewAISpanAttributes(span=span, instance=instance)
114
+ result = wrapped(*args, **kwargs)
115
+ if result:
116
+ span.set_status(Status(StatusCode.OK))
117
+ if instance.__class__.__name__ == "Crew":
118
+ span.set_attribute("crewai.crew.result", str(result))
119
+ if hasattr(result, "tasks_output"):
120
+ span.set_attribute("crewai.crew.tasks_output", str((result.tasks_output)))
121
+ if hasattr(result, "token_usage"):
122
+ span.set_attribute("crewai.crew.token_usage", str((result.token_usage)))
123
+ if hasattr(result, "usage_metrics"):
124
+ span.set_attribute("crewai.crew.usage_metrics", str((result.usage_metrics)))
125
+ elif instance.__class__.__name__ == "Agent":
126
+ span.set_attribute("crewai.agent.result", str(result))
127
+ elif instance.__class__.__name__ == "Task":
128
+ span.set_attribute("crewai.task.result", str(result))
129
+
130
+ span.end()
131
+ return result
132
+
133
+ except Exception as err:
134
+ # Record the exception in the span
135
+ span.record_exception(err)
136
+
137
+ # Set the span status to indicate an error
138
+ span.set_status(Status(StatusCode.ERROR, str(err)))
139
+
140
+ # Reraise the exception to ensure it's not swallowed
141
+ raise
142
+
143
+ return traced_method
144
+
145
+
146
+ class CrewAISpanAttributes:
147
+ span: Span
148
+ crew: dict
149
+
150
+ def __init__(self, span: Span, instance) -> None:
151
+ self.span = span
152
+ self.instance = instance
153
+ self.crew = {
154
+ "tasks": [],
155
+ "agents": [],
156
+ }
157
+
158
+ self.run()
159
+
160
+ def run(self):
161
+ instance_name = self.instance.__class__.__name__
162
+ if instance_name == "Crew":
163
+ self.set_crew_attributes()
164
+ set_span_attribute(self.span, "crewai.crew.config", json.dumps(self.crew))
165
+
166
+ elif instance_name == "Agent":
167
+ agent = self.set_agent_attributes()
168
+ # for key, value in agent.items():
169
+ # set_span_attribute(self.span, key, value)
170
+ set_span_attribute(self.span, "crewai.agent.config", json.dumps(agent))
171
+ elif instance_name == "Task":
172
+ task = self.set_task_attributes()
173
+ # uncomment if you want to spread attributes for the UI instead of dumping the whole object
174
+ # for key, value in task.items():
175
+ # set_span_attribute(self.span, key, value)
176
+ set_span_attribute(self.span, "crewai.task.config", json.dumps(task))
177
+
178
+ def set_crew_attributes(self):
179
+ for key, value in self.instance.__dict__.items():
180
+ if key == "tasks":
181
+ self._parse_tasks(value)
182
+
183
+ elif key == "agents":
184
+ self._parse_agents(value)
185
+ else:
186
+ self.crew[key] = str(value)
187
+
188
+ def set_agent_attributes(self):
189
+ agent = {}
190
+ for key, value in self.instance.__dict__.items():
191
+ if value is None:
192
+ continue
193
+ agent[key] = str(value)
194
+
195
+ return agent
196
+
197
+ def set_task_attributes(self):
198
+ task = {}
199
+ for key, value in self.instance.__dict__.items():
200
+ if value is None:
201
+ continue
202
+
203
+ if key == "agent":
204
+ task[key] = value.role
205
+ else:
206
+ task[key] = str(value)
207
+ return task
208
+
209
+ def _parse_agents(self, agents):
210
+ for agent in agents:
211
+ model = None
212
+ if agent.llm is not None:
213
+ if hasattr(agent.llm, "model"):
214
+ model = agent.llm.model
215
+ elif hasattr(agent.llm, "model_name"):
216
+ model = agent.llm.model_name
217
+ self.crew["agents"].append(
218
+ {
219
+ "id": str(agent.id),
220
+ "role": agent.role,
221
+ "goal": agent.goal,
222
+ "backstory": agent.backstory,
223
+ "cache": agent.cache,
224
+ "config": agent.config,
225
+ "verbose": agent.verbose,
226
+ "allow_delegation": agent.allow_delegation,
227
+ "tools": agent.tools,
228
+ "max_iter": agent.max_iter,
229
+ "llm": str(model if model is not None else ""),
230
+ }
231
+ )
232
+
233
+ def _parse_tasks(self, tasks):
234
+ for task in tasks:
235
+ self.crew["tasks"].append(
236
+ {
237
+ "agent": task.agent.role,
238
+ "description": task.description,
239
+ "async_execution": task.async_execution,
240
+ "expected_output": task.expected_output,
241
+ "human_input": task.human_input,
242
+ "tools": task.tools,
243
+ "output_file": task.output_file,
244
+ }
245
+ )
@@ -0,0 +1,5 @@
1
+ from .instrumentation import EmbedchainInstrumentation
2
+
3
+ __all__ = [
4
+ "EmbedchainInstrumentation",
5
+ ]
@@ -0,0 +1,65 @@
1
+ """
2
+ Copyright (c) 2024 Scale3 Labs
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ """
16
+
17
+ import importlib.metadata
18
+ import logging
19
+ from typing import Collection
20
+
21
+ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
22
+ from opentelemetry.trace import get_tracer
23
+ from wrapt import wrap_function_wrapper
24
+
25
+ from langtrace_python_sdk.instrumentation.embedchain.patch import generic_patch
26
+
27
+ logging.basicConfig(level=logging.FATAL)
28
+
29
+
30
+ class EmbedchainInstrumentation(BaseInstrumentor):
31
+ """
32
+ The EmbedchainInstrumentation class represents the Embedchain instrumentation
33
+ """
34
+
35
+ def instrumentation_dependencies(self) -> Collection[str]:
36
+ return ["embedchain >= 0.1.113"]
37
+
38
+ def _instrument(self, **kwargs):
39
+ tracer_provider = kwargs.get("tracer_provider")
40
+ tracer = get_tracer(__name__, "", tracer_provider)
41
+ version = importlib.metadata.version("embedchain")
42
+
43
+ wrap_function_wrapper(
44
+ "embedchain.embedchain",
45
+ "EmbedChain.add",
46
+ generic_patch("ADD", version, tracer),
47
+ )
48
+
49
+ wrap_function_wrapper(
50
+ "embedchain.embedchain",
51
+ "EmbedChain.query",
52
+ generic_patch("QUERY", version, tracer),
53
+ )
54
+
55
+ wrap_function_wrapper(
56
+ "embedchain.embedchain",
57
+ "EmbedChain.search",
58
+ generic_patch("SEARCH", version, tracer),
59
+ )
60
+
61
+ def _instrument_module(self, module_name):
62
+ pass
63
+
64
+ def _uninstrument(self, **kwargs):
65
+ pass