langtrace-python-sdk 2.1.21__tar.gz → 2.1.22__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 (174) hide show
  1. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/PKG-INFO +1 -1
  2. langtrace_python_sdk-2.1.22/src/examples/crewai_example/basic.py +70 -0
  3. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/constants/instrumentation/common.py +1 -0
  4. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/__init__.py +4 -2
  5. langtrace_python_sdk-2.1.22/src/langtrace_python_sdk/instrumentation/crewai/__init__.py +3 -0
  6. langtrace_python_sdk-2.1.22/src/langtrace_python_sdk/instrumentation/crewai/instrumentation.py +53 -0
  7. langtrace_python_sdk-2.1.22/src/langtrace_python_sdk/instrumentation/crewai/patch.py +173 -0
  8. langtrace_python_sdk-2.1.22/src/langtrace_python_sdk/instrumentation/dspy/__init__.py +3 -0
  9. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/dspy/instrumentation.py +1 -1
  10. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/dspy/patch.py +18 -18
  11. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/openai/patch.py +106 -187
  12. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/langtrace.py +4 -2
  13. langtrace_python_sdk-2.1.22/src/langtrace_python_sdk/version.py +1 -0
  14. langtrace_python_sdk-2.1.21/src/langtrace_python_sdk/instrumentation/dspy/__init__.py +0 -3
  15. langtrace_python_sdk-2.1.21/src/langtrace_python_sdk/version.py +0 -1
  16. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/.gitignore +0 -0
  17. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/LICENSE +0 -0
  18. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/README.md +0 -0
  19. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/pyproject.toml +0 -0
  20. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/__init__.py +0 -0
  21. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/__init__.py +0 -0
  22. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/anthropic_example/__init__.py +0 -0
  23. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/anthropic_example/completion.py +0 -0
  24. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/chroma_example/__init__.py +0 -0
  25. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/chroma_example/basic.py +0 -0
  26. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/cohere_example/__init__.py +0 -0
  27. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/cohere_example/chat.py +0 -0
  28. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/cohere_example/chat_stream.py +0 -0
  29. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/cohere_example/embed.py +0 -0
  30. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/cohere_example/rerank.py +0 -0
  31. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/cohere_example/tools.py +0 -0
  32. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/dspy_example/math_problems_cot.py +0 -0
  33. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/dspy_example/program_of_thought_basic.py +0 -0
  34. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/dspy_example/quiz_gen.py +0 -0
  35. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/dspy_example/react.py +0 -0
  36. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/fastapi_example/__init__.py +0 -0
  37. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/fastapi_example/basic_route.py +0 -0
  38. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/hiveagent_example/basic.py +0 -0
  39. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/inspect_ai_example/basic_eval.py +0 -0
  40. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/langchain_example/__init__.py +0 -0
  41. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/langchain_example/basic.py +0 -0
  42. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/langchain_example/groq_example.py +0 -0
  43. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/langchain_example/langgraph_example.py +0 -0
  44. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/langchain_example/tool.py +0 -0
  45. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/llamaindex_example/__init__.py +0 -0
  46. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/llamaindex_example/agent.py +0 -0
  47. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/llamaindex_example/basic.py +0 -0
  48. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/llamaindex_example/data/abramov.txt +0 -0
  49. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/ollama_example/__init__.py +0 -0
  50. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/ollama_example/basic.py +0 -0
  51. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/openai_example/__init__.py +0 -0
  52. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/openai_example/async_tool_calling_nonstreaming.py +0 -0
  53. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/openai_example/async_tool_calling_streaming.py +0 -0
  54. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/openai_example/chat_completion.py +0 -0
  55. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/openai_example/embeddings_create.py +0 -0
  56. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/openai_example/function_calling.py +0 -0
  57. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/openai_example/images_edit.py +0 -0
  58. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/openai_example/images_generate.py +0 -0
  59. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/openai_example/resources/lounge_flamingo.png +0 -0
  60. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/openai_example/resources/mask.png +0 -0
  61. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/openai_example/tool_calling.py +0 -0
  62. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/openai_example/tool_calling_nonstreaming.py +0 -0
  63. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/openai_example/tool_calling_streaming.py +0 -0
  64. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/perplexity_example/basic.py +0 -0
  65. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/pinecone_example/__init__.py +0 -0
  66. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/pinecone_example/basic.py +0 -0
  67. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/qdrant_example/__init__.py +0 -0
  68. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/qdrant_example/basic.py +0 -0
  69. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/weaviate_example/__init__.py +0 -0
  70. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/examples/weaviate_example/query_text.py +0 -0
  71. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/__init__.py +0 -0
  72. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/constants/__init__.py +0 -0
  73. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/constants/exporter/langtrace_exporter.py +0 -0
  74. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/constants/instrumentation/__init__.py +0 -0
  75. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/constants/instrumentation/anthropic.py +0 -0
  76. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/constants/instrumentation/chroma.py +0 -0
  77. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/constants/instrumentation/cohere.py +0 -0
  78. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/constants/instrumentation/groq.py +0 -0
  79. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/constants/instrumentation/ollama.py +0 -0
  80. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/constants/instrumentation/openai.py +0 -0
  81. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/constants/instrumentation/pinecone.py +0 -0
  82. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/constants/instrumentation/qdrant.py +0 -0
  83. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/constants/instrumentation/weaviate.py +0 -0
  84. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/extensions/__init__.py +0 -0
  85. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/extensions/langtrace_exporter.py +0 -0
  86. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/extensions/langtrace_filesystem.py +0 -0
  87. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/anthropic/__init__.py +0 -0
  88. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/anthropic/instrumentation.py +0 -0
  89. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/anthropic/patch.py +0 -0
  90. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/chroma/__init__.py +0 -0
  91. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/chroma/instrumentation.py +0 -0
  92. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/chroma/patch.py +0 -0
  93. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/cohere/__init__.py +0 -0
  94. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/cohere/instrumentation.py +0 -0
  95. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/cohere/patch.py +0 -0
  96. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/groq/__init__.py +0 -0
  97. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/groq/instrumentation.py +0 -0
  98. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/groq/patch.py +0 -0
  99. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/langchain/__init__.py +0 -0
  100. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/langchain/instrumentation.py +0 -0
  101. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/langchain/patch.py +0 -0
  102. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/langchain_community/__init__.py +0 -0
  103. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/langchain_community/instrumentation.py +0 -0
  104. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/langchain_community/patch.py +0 -0
  105. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/langchain_core/__init__.py +0 -0
  106. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/langchain_core/instrumentation.py +0 -0
  107. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/langchain_core/patch.py +0 -0
  108. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/langgraph/__init__.py +0 -0
  109. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/langgraph/instrumentation.py +0 -0
  110. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/langgraph/patch.py +0 -0
  111. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/llamaindex/__init__.py +0 -0
  112. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/llamaindex/instrumentation.py +0 -0
  113. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/llamaindex/patch.py +0 -0
  114. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/ollama/__init__.py +0 -0
  115. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/ollama/instrumentation.py +0 -0
  116. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/ollama/patch.py +0 -0
  117. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/openai/__init__.py +0 -0
  118. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/openai/instrumentation.py +0 -0
  119. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/pinecone/__init__.py +0 -0
  120. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/pinecone/instrumentation.py +0 -0
  121. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/pinecone/patch.py +0 -0
  122. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/qdrant/__init__.py +0 -0
  123. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/qdrant/instrumentation.py +0 -0
  124. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/qdrant/patch.py +0 -0
  125. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/weaviate/__init__.py +0 -0
  126. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/weaviate/instrumentation.py +0 -0
  127. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/instrumentation/weaviate/patch.py +0 -0
  128. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/types/__init__.py +0 -0
  129. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/utils/__init__.py +0 -0
  130. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/utils/langtrace_sampler.py +0 -0
  131. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/utils/llm.py +0 -0
  132. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/utils/misc.py +0 -0
  133. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/utils/prompt_registry.py +0 -0
  134. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/utils/sdk_version_checker.py +0 -0
  135. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/utils/silently_fail.py +0 -0
  136. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/utils/types.py +0 -0
  137. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/langtrace_python_sdk/utils/with_root_span.py +0 -0
  138. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/run_example.py +0 -0
  139. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/__init__.py +0 -0
  140. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/anthropic/cassettes/test_anthropic.yaml +0 -0
  141. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/anthropic/cassettes/test_anthropic_streaming.yaml +0 -0
  142. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/anthropic/cassettes/test_async_anthropic_streaming.yaml +0 -0
  143. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/anthropic/conftest.py +0 -0
  144. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/anthropic/test_anthropic.py +0 -0
  145. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/chroma/conftest.py +0 -0
  146. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/chroma/test_chroma.py +0 -0
  147. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/cohere/cassettes/test_cohere_chat.yaml +0 -0
  148. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/cohere/cassettes/test_cohere_chat_streaming.yaml +0 -0
  149. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/cohere/cassettes/test_cohere_embed.yaml +0 -0
  150. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/cohere/cassettes/test_cohere_rerank.yaml +0 -0
  151. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/cohere/conftest.py +0 -0
  152. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/cohere/test_cohere_chat.py +0 -0
  153. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/cohere/test_cohere_embed.py +0 -0
  154. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/cohere/test_cohere_rerank.py +0 -0
  155. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/conftest.py +0 -0
  156. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/langchain/cassettes/test_langchain.yaml +0 -0
  157. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/langchain/conftest.py +0 -0
  158. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/langchain/test_langchain.py +0 -0
  159. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/openai/cassettes/test_async_chat_completion_streaming.yaml +0 -0
  160. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/openai/cassettes/test_async_image_generation.yaml +0 -0
  161. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/openai/cassettes/test_chat_completion.yaml +0 -0
  162. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/openai/cassettes/test_chat_completion_streaming.yaml +0 -0
  163. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/openai/cassettes/test_image_generation.yaml +0 -0
  164. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/openai/conftest.py +0 -0
  165. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/openai/test_chat_completion.py +0 -0
  166. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/openai/test_embeddings.py +0 -0
  167. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/openai/test_image_generation.py +0 -0
  168. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/pinecone/cassettes/test_query.yaml +0 -0
  169. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/pinecone/cassettes/test_upsert.yaml +0 -0
  170. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/pinecone/conftest.py +0 -0
  171. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/pinecone/test_pinecone.py +0 -0
  172. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/qdrant/conftest.py +0 -0
  173. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/src/tests/qdrant/test_qdrant.py +0 -0
  174. {langtrace_python_sdk-2.1.21 → langtrace_python_sdk-2.1.22}/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.1.21
3
+ Version: 2.1.22
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>
@@ -0,0 +1,70 @@
1
+ import os
2
+
3
+ os.environ["OPENAI_MODEL_NAME"] = "gpt-3.5-turbo"
4
+ os.environ["SERPER_API_KEY"] = "" # serper.dev API key
5
+ from langtrace_python_sdk import langtrace
6
+ from langtrace_python_sdk.utils.with_root_span import with_langtrace_root_span
7
+ from crewai import Crew, Process
8
+ from crewai import Task
9
+ from crewai import Agent
10
+ from crewai_tools import SerperDevTool
11
+ from crewai_tools import YoutubeVideoSearchTool
12
+
13
+ langtrace.init()
14
+
15
+ search_tool = SerperDevTool()
16
+
17
+ # Targeted search within a specific Youtube video's content
18
+ youtube_tool = YoutubeVideoSearchTool(
19
+ youtube_video_url="https://www.youtube.com/watch?v=blqIZGXWUpU"
20
+ )
21
+
22
+ # Creating a senior researcher agent with memory and verbose mode
23
+ researcher = Agent(
24
+ role="Senior Researcher",
25
+ goal="Uncover groundbreaking technologies in {topic}",
26
+ verbose=True,
27
+ memory=True,
28
+ backstory=(
29
+ "Driven by curiosity, you're at the forefront of"
30
+ "innovation, eager to explore and share knowledge that could change"
31
+ "the world."
32
+ ),
33
+ tools=[youtube_tool],
34
+ )
35
+
36
+ # Research task
37
+ research_task = Task(
38
+ description=(
39
+ "Do a {topic} of the given youtube video."
40
+ "Focus on identifying the overall narrative."
41
+ "Your final report should clearly articulate the key points."
42
+ ),
43
+ expected_output="10 key points from the shared video.",
44
+ tools=[youtube_tool],
45
+ agent=researcher,
46
+ callback="research_callback", # Example of task callback
47
+ human_input=True,
48
+ )
49
+
50
+
51
+ # Forming the tech-focused crew with some enhanced configurations
52
+ crew = Crew(
53
+ agents=[researcher],
54
+ tasks=[research_task],
55
+ process=Process.sequential, # Optional: Sequential task execution is default
56
+ memory=False,
57
+ cache=False,
58
+ max_rpm=20,
59
+ )
60
+
61
+ # Starting the task execution process with enhanced feedback
62
+
63
+
64
+ @with_langtrace_root_span("Crew")
65
+ def test_crew():
66
+ result = crew.kickoff(inputs={"topic": "summary"})
67
+ return result
68
+
69
+
70
+ test_crew()
@@ -11,6 +11,7 @@ SERVICE_PROVIDERS = {
11
11
  "ANTHROPIC": "Anthropic",
12
12
  "AZURE": "Azure",
13
13
  "CHROMA": "Chroma",
14
+ "CREWAI": "CrewAI",
14
15
  "DSPY": "DSPy",
15
16
  "GROQ": "Groq",
16
17
  "LANGCHAIN": "Langchain",
@@ -1,6 +1,7 @@
1
1
  from .anthropic import AnthropicInstrumentation
2
2
  from .chroma import ChromaInstrumentation
3
3
  from .cohere import CohereInstrumentation
4
+ from .crewai import CrewAIInstrumentation
4
5
  from .groq import GroqInstrumentation
5
6
  from .langchain import LangchainInstrumentation
6
7
  from .langchain_community import LangchainCommunityInstrumentation
@@ -12,12 +13,13 @@ from .pinecone import PineconeInstrumentation
12
13
  from .qdrant import QdrantInstrumentation
13
14
  from .weaviate import WeaviateInstrumentation
14
15
  from .ollama import OllamaInstrumentor
15
- from .dspy import DspyInstrumentor
16
+ from .dspy import DspyInstrumentation
16
17
 
17
18
  __all__ = [
18
19
  "AnthropicInstrumentation",
19
20
  "ChromaInstrumentation",
20
21
  "CohereInstrumentation",
22
+ "CrewAIInstrumentation",
21
23
  "GroqInstrumentation",
22
24
  "LangchainInstrumentation",
23
25
  "LangchainCommunityInstrumentation",
@@ -29,5 +31,5 @@ __all__ = [
29
31
  "QdrantInstrumentation",
30
32
  "WeaviateInstrumentation",
31
33
  "OllamaInstrumentor",
32
- "DspyInstrumentor",
34
+ "DspyInstrumentation",
33
35
  ]
@@ -0,0 +1,3 @@
1
+ from .instrumentation import CrewAIInstrumentation
2
+
3
+ __all__ = ["CrewAIInstrumentation"]
@@ -0,0 +1,53 @@
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
+ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
18
+ from opentelemetry.trace import get_tracer
19
+ from wrapt import wrap_function_wrapper as _W
20
+ from typing import Collection
21
+ from importlib_metadata import version as v
22
+ from .patch import patch_crew
23
+
24
+
25
+ class CrewAIInstrumentation(BaseInstrumentor):
26
+ """
27
+ The CrewAIInstrumentation class represents the CrewAI instrumentation"""
28
+
29
+ def instrumentation_dependencies(self) -> Collection[str]:
30
+ return ["crewai >= 0.32.0"]
31
+
32
+ def _instrument(self, **kwargs):
33
+ tracer_provider = kwargs.get("tracer_provider")
34
+ tracer = get_tracer(__name__, "", tracer_provider)
35
+ version = v("crewai")
36
+ _W(
37
+ "crewai.crew",
38
+ "Crew.kickoff",
39
+ patch_crew("Crew.kickoff", version, tracer),
40
+ )
41
+ _W(
42
+ "crewai.agent",
43
+ "Agent.execute_task",
44
+ patch_crew("Agent.execute_task", version, tracer),
45
+ )
46
+ _W(
47
+ "crewai.task",
48
+ "Task.execute",
49
+ patch_crew("Task.execute", version, tracer),
50
+ )
51
+
52
+ def _uninstrument(self, **kwargs):
53
+ pass
@@ -0,0 +1,173 @@
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.silently_fail import silently_fail
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
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": "object",
36
+ "output_log_file": "object",
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):
93
+ def traced_method(wrapped, instance, args, kwargs):
94
+
95
+ service_provider = SERVICE_PROVIDERS["CREWAI"]
96
+ extra_attributes = baggage.get_baggage(LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY)
97
+ span_attributes = {
98
+ "langtrace.sdk.name": "langtrace-python-sdk",
99
+ "langtrace.service.name": service_provider,
100
+ "langtrace.service.type": "framework",
101
+ "langtrace.service.version": version,
102
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
103
+ **(extra_attributes if extra_attributes is not None else {}),
104
+ }
105
+
106
+ crew_config = {}
107
+ for key, value in instance.__dict__.items():
108
+ if instance.__class__.__name__ == "Crew":
109
+ if key in crew_properties and value is not None:
110
+ if crew_properties[key] == "json":
111
+ crew_config[key] = json.dumps(value)
112
+ elif crew_properties[key] == "object":
113
+ crew_config[key] = str(value)
114
+ else:
115
+ crew_config[key] = value
116
+ elif instance.__class__.__name__ == "Agent":
117
+ if key in agent_properties and value is not None:
118
+ if agent_properties[key] == "json":
119
+ crew_config[key] = json.dumps(value)
120
+ elif agent_properties[key] == "object":
121
+ crew_config[key] = str(value)
122
+ else:
123
+ crew_config[key] = value
124
+ elif instance.__class__.__name__ == "Task":
125
+ if key in task_properties and value is not None:
126
+ if task_properties[key] == "json":
127
+ crew_config[key] = json.dumps(value)
128
+ elif task_properties[key] == "object":
129
+ crew_config[key] = str(value)
130
+ else:
131
+ crew_config[key] = value
132
+ if crew_config:
133
+ if instance.__class__.__name__ == "Crew":
134
+ if "inputs" in kwargs and kwargs["inputs"]:
135
+ crew_config["inputs"] = json.dumps(kwargs["inputs"])
136
+ span_attributes["crewai.crew.config"] = json.dumps(crew_config)
137
+ elif instance.__class__.__name__ == "Agent":
138
+ if "context" in kwargs and kwargs["context"]:
139
+ crew_config["context"] = json.dumps(kwargs["context"])
140
+ span_attributes["crewai.agent.config"] = json.dumps(crew_config)
141
+ elif instance.__class__.__name__ == "Task":
142
+ span_attributes["crewai.task.config"] = json.dumps(crew_config)
143
+
144
+ attributes = FrameworkSpanAttributes(**span_attributes)
145
+
146
+ with tracer.start_as_current_span(operation_name, kind=SpanKind.CLIENT) as span:
147
+ _set_input_attributes(span, kwargs, attributes)
148
+
149
+ try:
150
+ result = wrapped(*args, **kwargs)
151
+ if result:
152
+ span.set_status(Status(StatusCode.OK))
153
+
154
+ span.end()
155
+ return result
156
+
157
+ except Exception as err:
158
+ # Record the exception in the span
159
+ span.record_exception(err)
160
+
161
+ # Set the span status to indicate an error
162
+ span.set_status(Status(StatusCode.ERROR, str(err)))
163
+
164
+ # Reraise the exception to ensure it's not swallowed
165
+ raise
166
+
167
+ return traced_method
168
+
169
+
170
+ @silently_fail
171
+ def _set_input_attributes(span, kwargs, attributes):
172
+ for field, value in attributes.model_dump(by_alias=True).items():
173
+ set_span_attribute(span, field, value)
@@ -0,0 +1,3 @@
1
+ from .instrumentation import DspyInstrumentation
2
+
3
+ __all__ = ["DspyInstrumentation"]
@@ -22,7 +22,7 @@ from importlib_metadata import version as v
22
22
  from .patch import patch_bootstrapfewshot_optimizer, patch_signature, patch_evaluate
23
23
 
24
24
 
25
- class DspyInstrumentor(BaseInstrumentor):
25
+ class DspyInstrumentation(BaseInstrumentor):
26
26
  """
27
27
  The DspyInstrumentor class represents the DSPy instrumentation"""
28
28
 
@@ -37,24 +37,24 @@ def patch_bootstrapfewshot_optimizer(operation_name, version, tracer):
37
37
  "signature": str(args[0].prog.signature) if args[0].prog.signature else None,
38
38
  }
39
39
  span_attributes["dspy.optimizer.module.prog"] = json.dumps(prog)
40
- if instance.metric:
40
+ if "metric" in instance and instance.metric:
41
41
  span_attributes["dspy.optimizer.metric"] = instance.metric.__name__
42
42
  if kwargs.get("trainset") and len(kwargs.get("trainset")) > 0:
43
43
  span_attributes["dspy.optimizer.trainset"] = str(kwargs.get("trainset"))
44
44
  config = {}
45
- if instance.metric_threshold:
45
+ if "metric_threshold" in instance and instance.metric_threshold:
46
46
  config["metric_threshold"] = instance.metric_threshold
47
- if instance.teacher_settings:
47
+ if "teacher_settings" in instance and instance.teacher_settings:
48
48
  config["teacher_settings"] = instance.teacher_settings
49
- if instance.max_bootstrapped_demos:
49
+ if "max_bootstrapped_demos" in instance and instance.max_bootstrapped_demos:
50
50
  config["max_bootstrapped_demos"] = instance.max_bootstrapped_demos
51
- if instance.max_labeled_demos:
51
+ if "max_labeled_demos" in instance and instance.max_labeled_demos:
52
52
  config["max_labeled_demos"] = instance.max_labeled_demos
53
- if instance.max_rounds:
53
+ if "max_rounds" in instance and instance.max_rounds:
54
54
  config["max_rounds"] = instance.max_rounds
55
- if instance.max_errors:
55
+ if "max_errors" in instance and instance.max_errors:
56
56
  config["max_errors"] = instance.max_errors
57
- if instance.error_count:
57
+ if "error_count" in instance and instance.error_count:
58
58
  config["error_count"] = instance.error_count
59
59
  if config and len(config) > 0:
60
60
  span_attributes["dspy.optimizer.config"] = json.dumps(config)
@@ -149,25 +149,25 @@ def patch_evaluate(operation_name, version, tracer):
149
149
  **(extra_attributes if extra_attributes is not None else {}),
150
150
  }
151
151
 
152
- if instance.devset is not None:
152
+ if "devset" in instance and instance.devset is not None:
153
153
  span_attributes["dspy.evaluate.devset"] = str(instance.devset)
154
- if instance.display is not None:
154
+ if "display" in instance and instance.display is not None:
155
155
  span_attributes["dspy.evaluate.display"] = str(instance.display)
156
- if instance.num_threads is not None:
156
+ if "num_threads" in instance and instance.num_threads is not None:
157
157
  span_attributes["dspy.evaluate.num_threads"] = str(instance.num_threads)
158
- if instance.return_outputs is not None:
158
+ if "return_outputs" in instance and instance.return_outputs is not None:
159
159
  span_attributes["dspy.evaluate.return_outputs"] = str(instance.return_outputs)
160
- if instance.display_table is not None:
160
+ if "display_table" in instance and instance.display_table is not None:
161
161
  span_attributes["dspy.evaluate.display_table"] = str(instance.display_table)
162
- if instance.display_progress is not None:
162
+ if "display_progress" in instance and instance.display_progress is not None:
163
163
  span_attributes["dspy.evaluate.display_progress"] = str(instance.display_progress)
164
- if instance.metric is not None:
164
+ if "metric" in instance and instance.metric is not None:
165
165
  span_attributes["dspy.evaluate.metric"] = instance.metric.__name__
166
- if instance.error_count is not None:
166
+ if "error_count" in instance and instance.error_count is not None:
167
167
  span_attributes["dspy.evaluate.error_count"] = str(instance.error_count)
168
- if instance.error_lock is not None:
168
+ if "error_lock" in instance and instance.error_lock is not None:
169
169
  span_attributes["dspy.evaluate.error_lock"] = str(instance.error_lock)
170
- if instance.max_errors is not None:
170
+ if "max_errors" in instance and instance.max_errors is not None:
171
171
  span_attributes["dspy.evaluate.max_errors"] = str(instance.max_errors)
172
172
  if args and len(args) > 0:
173
173
  span_attributes["dspy.evaluate.args"] = str(args)