langtrace-python-sdk 3.3.14__tar.gz → 3.3.15__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 (283) hide show
  1. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/PKG-INFO +4 -3
  2. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/cohere_example/__init__.py +6 -0
  3. langtrace_python_sdk-3.3.15/src/examples/cohere_example/chat_streamv2.py +17 -0
  4. langtrace_python_sdk-3.3.15/src/examples/cohere_example/chatv2.py +21 -0
  5. langtrace_python_sdk-3.3.15/src/examples/cohere_example/rerankv2.py +23 -0
  6. langtrace_python_sdk-3.3.15/src/langtrace_python_sdk/constants/exporter/langtrace_exporter.py +2 -0
  7. langtrace_python_sdk-3.3.15/src/langtrace_python_sdk/constants/instrumentation/cohere.py +42 -0
  8. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/extensions/langtrace_exporter.py +8 -0
  9. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/cohere/instrumentation.py +25 -0
  10. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/cohere/patch.py +106 -8
  11. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/dspy/patch.py +1 -1
  12. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/openai/patch.py +43 -4
  13. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/langtrace.py +14 -6
  14. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/utils/llm.py +25 -3
  15. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/utils/with_root_span.py +11 -0
  16. langtrace_python_sdk-3.3.15/src/langtrace_python_sdk/version.py +1 -0
  17. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/run_example.py +2 -2
  18. langtrace_python_sdk-3.3.15/src/tests/openai/cassettes/test_embeddings_base_url.yaml +208 -0
  19. langtrace_python_sdk-3.3.15/src/tests/openai/test_embeddings.py +88 -0
  20. langtrace_python_sdk-3.3.15/src/tests/test_session_id.py +59 -0
  21. langtrace_python_sdk-3.3.14/src/langtrace_python_sdk/constants/exporter/langtrace_exporter.py +0 -1
  22. langtrace_python_sdk-3.3.14/src/langtrace_python_sdk/constants/instrumentation/cohere.py +0 -22
  23. langtrace_python_sdk-3.3.14/src/langtrace_python_sdk/version.py +0 -1
  24. langtrace_python_sdk-3.3.14/src/tests/openai/test_embeddings.py +0 -0
  25. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/.gitignore +0 -0
  26. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/LICENSE +0 -0
  27. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/README.md +0 -0
  28. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/pyproject.toml +0 -0
  29. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/__init__.py +0 -0
  30. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/__init__.py +0 -0
  31. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/anthropic_example/__init__.py +0 -0
  32. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/anthropic_example/completion.py +0 -0
  33. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/autogen_example/__init__.py +0 -0
  34. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/autogen_example/main.py +0 -0
  35. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/awsbedrock_examples/__init__.py +0 -0
  36. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/awsbedrock_examples/converse.py +0 -0
  37. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/azureopenai_example/__init__.py +0 -0
  38. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/azureopenai_example/completion.py +0 -0
  39. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/cerebras_example/__init__.py +0 -0
  40. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/cerebras_example/main.py +0 -0
  41. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/chroma_example/__init__.py +0 -0
  42. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/chroma_example/basic.py +0 -0
  43. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/cohere_example/chat.py +0 -0
  44. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/cohere_example/chat_stream.py +0 -0
  45. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/cohere_example/embed.py +0 -0
  46. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/cohere_example/rerank.py +0 -0
  47. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/cohere_example/tools.py +0 -0
  48. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/__init__.py +0 -0
  49. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/basic.py +0 -0
  50. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/instagram_post/__init__.py +0 -0
  51. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/instagram_post/agents.py +0 -0
  52. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/instagram_post/main.py +0 -0
  53. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/instagram_post/tasks.py +0 -0
  54. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/instagram_post/tools/__init__.py +0 -0
  55. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/instagram_post/tools/browser_tools.py +0 -0
  56. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/simple_agent/__init__.py +0 -0
  57. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/simple_agent/agents.py +0 -0
  58. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/simple_agent/main.py +0 -0
  59. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/simple_agent/tasks.py +0 -0
  60. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/trip_planner/__init__.py +0 -0
  61. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/trip_planner/agents.py +0 -0
  62. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/trip_planner/main.py +0 -0
  63. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/trip_planner/tasks.py +0 -0
  64. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/trip_planner/tools/calculator.py +0 -0
  65. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/crewai_example/trip_planner/tools/search_tools.py +0 -0
  66. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/dspy_example/QA_basic.py +0 -0
  67. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/dspy_example/QA_basic_with_chain_of_thought.py +0 -0
  68. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/dspy_example/QA_basic_with_signature.py +0 -0
  69. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/dspy_example/QA_multi_step_with_chain_of_thought.py +0 -0
  70. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/dspy_example/math_problems_cot.py +0 -0
  71. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/dspy_example/math_problems_cot_parallel.py +0 -0
  72. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/dspy_example/optimizers/bootstrap_fewshot.py +0 -0
  73. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/dspy_example/program_of_thought_basic.py +0 -0
  74. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/dspy_example/quiz_gen.py +0 -0
  75. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/dspy_example/react.py +0 -0
  76. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/embedchain_example/simple.py +0 -0
  77. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/fastapi_example/__init__.py +0 -0
  78. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/fastapi_example/basic_route.py +0 -0
  79. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/gemini_example/__init__.py +0 -0
  80. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/gemini_example/function_tools.py +0 -0
  81. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/gemini_example/main.py +0 -0
  82. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/hiveagent_example/basic.py +0 -0
  83. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/inspect_ai_example/basic_eval.py +0 -0
  84. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/langchain_example/__init__.py +0 -0
  85. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/langchain_example/basic.py +0 -0
  86. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/langchain_example/groq_example.py +0 -0
  87. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/langchain_example/langchain_google_example.py +0 -0
  88. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/langchain_example/langgraph_example.py +0 -0
  89. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/langchain_example/langgraph_example_tools.py +0 -0
  90. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/langchain_example/sagemaker.py +0 -0
  91. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/langchain_example/tool.py +0 -0
  92. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/langgraph_example/main.py +0 -0
  93. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/litellm_example/basic.py +0 -0
  94. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/litellm_example/config.yaml +0 -0
  95. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/litellm_example/proxy_basic.py +0 -0
  96. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/llamaindex_example/__init__.py +0 -0
  97. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/llamaindex_example/agent.py +0 -0
  98. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/llamaindex_example/basic.py +0 -0
  99. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/llamaindex_example/data/abramov.txt +0 -0
  100. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/milvus_example/main.py +0 -0
  101. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/mistral_example/__init__.py +0 -0
  102. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/mistral_example/complete.py +0 -0
  103. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/mistral_example/complete_async.py +0 -0
  104. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/mistral_example/embeddings.py +0 -0
  105. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/mongo_vector_search_example/main.py +0 -0
  106. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/ollama_example/__init__.py +0 -0
  107. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/ollama_example/basic.py +0 -0
  108. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/openai_example/__init__.py +0 -0
  109. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/openai_example/async_tool_calling_nonstreaming.py +0 -0
  110. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/openai_example/async_tool_calling_streaming.py +0 -0
  111. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/openai_example/chat_completion.py +0 -0
  112. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/openai_example/chat_completion_tool_choice.py +0 -0
  113. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/openai_example/embeddings_create.py +0 -0
  114. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/openai_example/function_calling.py +0 -0
  115. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/openai_example/images_edit.py +0 -0
  116. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/openai_example/images_generate.py +0 -0
  117. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/openai_example/resources/lounge_flamingo.png +0 -0
  118. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/openai_example/resources/mask.png +0 -0
  119. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/openai_example/send_user_feedback.py +0 -0
  120. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/openai_example/tool_calling.py +0 -0
  121. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/openai_example/tool_calling_nonstreaming.py +0 -0
  122. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/openai_example/tool_calling_streaming.py +0 -0
  123. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/otlp_example/otlp_basic.py +0 -0
  124. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/otlp_example/otlp_with_langtrace.py +0 -0
  125. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/perplexity_example/basic.py +0 -0
  126. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/pinecone_example/__init__.py +0 -0
  127. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/pinecone_example/basic.py +0 -0
  128. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/qdrant_example/__init__.py +0 -0
  129. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/qdrant_example/basic.py +0 -0
  130. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/routellm_example/basic.py +0 -0
  131. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/vertexai_example/__init__.py +0 -0
  132. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/vertexai_example/main.py +0 -0
  133. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/weaviate_example/__init__.py +0 -0
  134. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/examples/weaviate_example/query_text.py +0 -0
  135. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/__init__.py +0 -0
  136. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/__init__.py +0 -0
  137. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/__init__.py +0 -0
  138. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/anthropic.py +0 -0
  139. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/aws_bedrock.py +0 -0
  140. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/chroma.py +0 -0
  141. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/common.py +0 -0
  142. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/embedchain.py +0 -0
  143. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/gemini.py +0 -0
  144. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/groq.py +0 -0
  145. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/litellm.py +0 -0
  146. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/milvus.py +0 -0
  147. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/mistral.py +0 -0
  148. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/ollama.py +0 -0
  149. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/openai.py +0 -0
  150. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/pinecone.py +0 -0
  151. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/pymongo.py +0 -0
  152. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/qdrant.py +0 -0
  153. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/vertexai.py +0 -0
  154. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/constants/instrumentation/weaviate.py +0 -0
  155. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/extensions/__init__.py +0 -0
  156. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/extensions/langtrace_filesystem.py +0 -0
  157. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/__init__.py +0 -0
  158. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/anthropic/__init__.py +0 -0
  159. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/anthropic/instrumentation.py +0 -0
  160. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/anthropic/patch.py +0 -0
  161. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/anthropic/types.py +0 -0
  162. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/autogen/__init__.py +0 -0
  163. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/autogen/instrumentation.py +0 -0
  164. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/autogen/patch.py +0 -0
  165. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/aws_bedrock/__init__.py +0 -0
  166. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/aws_bedrock/instrumentation.py +0 -0
  167. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/aws_bedrock/patch.py +0 -0
  168. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/cerebras/__init__.py +0 -0
  169. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/cerebras/instrumentation.py +0 -0
  170. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/cerebras/patch.py +0 -0
  171. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/chroma/__init__.py +0 -0
  172. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/chroma/instrumentation.py +0 -0
  173. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/chroma/patch.py +0 -0
  174. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/cohere/__init__.py +0 -0
  175. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/crewai/__init__.py +0 -0
  176. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/crewai/instrumentation.py +0 -0
  177. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/crewai/patch.py +0 -0
  178. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/dspy/__init__.py +0 -0
  179. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/dspy/instrumentation.py +0 -0
  180. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/embedchain/__init__.py +0 -0
  181. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/embedchain/instrumentation.py +0 -0
  182. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/embedchain/patch.py +0 -0
  183. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/gemini/__init__.py +0 -0
  184. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/gemini/instrumentation.py +0 -0
  185. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/gemini/patch.py +0 -0
  186. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/groq/__init__.py +0 -0
  187. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/groq/instrumentation.py +0 -0
  188. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/groq/patch.py +0 -0
  189. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/langchain/__init__.py +0 -0
  190. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/langchain/instrumentation.py +0 -0
  191. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/langchain/patch.py +0 -0
  192. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/langchain_community/__init__.py +0 -0
  193. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/langchain_community/instrumentation.py +0 -0
  194. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/langchain_community/patch.py +0 -0
  195. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/langchain_core/__init__.py +0 -0
  196. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/langchain_core/instrumentation.py +0 -0
  197. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/langchain_core/patch.py +0 -0
  198. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/langgraph/__init__.py +0 -0
  199. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/langgraph/instrumentation.py +0 -0
  200. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/langgraph/patch.py +0 -0
  201. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/litellm/__init__.py +0 -0
  202. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/litellm/instrumentation.py +0 -0
  203. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/litellm/patch.py +0 -0
  204. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/litellm/types.py +0 -0
  205. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/llamaindex/__init__.py +0 -0
  206. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/llamaindex/instrumentation.py +0 -0
  207. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/llamaindex/patch.py +0 -0
  208. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/milvus/__init__.py +0 -0
  209. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/milvus/instrumentation.py +0 -0
  210. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/milvus/patch.py +0 -0
  211. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/mistral/__init__.py +0 -0
  212. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/mistral/instrumentation.py +0 -0
  213. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/mistral/patch.py +0 -0
  214. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/ollama/__init__.py +0 -0
  215. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/ollama/instrumentation.py +0 -0
  216. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/ollama/patch.py +0 -0
  217. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/openai/__init__.py +0 -0
  218. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/openai/instrumentation.py +0 -0
  219. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/openai/types.py +0 -0
  220. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/pinecone/__init__.py +0 -0
  221. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/pinecone/instrumentation.py +0 -0
  222. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/pinecone/patch.py +0 -0
  223. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/pymongo/__init__.py +0 -0
  224. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/pymongo/instrumentation.py +0 -0
  225. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/pymongo/patch.py +0 -0
  226. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/qdrant/__init__.py +0 -0
  227. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/qdrant/instrumentation.py +0 -0
  228. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/qdrant/patch.py +0 -0
  229. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/vertexai/__init__.py +0 -0
  230. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/vertexai/instrumentation.py +0 -0
  231. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/vertexai/patch.py +0 -0
  232. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/weaviate/__init__.py +0 -0
  233. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/weaviate/instrumentation.py +0 -0
  234. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/instrumentation/weaviate/patch.py +0 -0
  235. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/types/__init__.py +0 -0
  236. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/utils/__init__.py +0 -0
  237. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/utils/langtrace_sampler.py +0 -0
  238. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/utils/misc.py +0 -0
  239. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/utils/prompt_registry.py +0 -0
  240. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/utils/sdk_version_checker.py +0 -0
  241. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/utils/silently_fail.py +0 -0
  242. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/langtrace_python_sdk/utils/types.py +0 -0
  243. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/__init__.py +0 -0
  244. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/anthropic/cassettes/test_anthropic.yaml +0 -0
  245. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/anthropic/cassettes/test_anthropic_streaming.yaml +0 -0
  246. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/anthropic/cassettes/test_async_anthropic_streaming.yaml +0 -0
  247. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/anthropic/conftest.py +0 -0
  248. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/anthropic/test_anthropic.py +0 -0
  249. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/chroma/conftest.py +0 -0
  250. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/chroma/test_chroma.py +0 -0
  251. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/cohere/cassettes/test_cohere_chat.yaml +0 -0
  252. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/cohere/cassettes/test_cohere_chat_streaming.yaml +0 -0
  253. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/cohere/cassettes/test_cohere_embed.yaml +0 -0
  254. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/cohere/cassettes/test_cohere_rerank.yaml +0 -0
  255. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/cohere/conftest.py +0 -0
  256. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/cohere/test_cohere_chat.py +0 -0
  257. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/cohere/test_cohere_embed.py +0 -0
  258. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/cohere/test_cohere_rerank.py +0 -0
  259. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/conftest.py +0 -0
  260. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/groq/cassettes/test_async_chat_completion.yaml +0 -0
  261. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/groq/cassettes/test_async_chat_completion_streaming.yaml +0 -0
  262. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/groq/cassettes/test_chat_completion.yaml +0 -0
  263. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/groq/cassettes/test_chat_completion_streaming.yaml +0 -0
  264. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/groq/conftest.py +0 -0
  265. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/groq/test_groq.py +0 -0
  266. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/langchain/cassettes/test_langchain.yaml +0 -0
  267. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/langchain/conftest.py +0 -0
  268. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/langchain/test_langchain.py +0 -0
  269. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/openai/cassettes/test_async_chat_completion_streaming.yaml +0 -0
  270. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/openai/cassettes/test_async_image_generation.yaml +0 -0
  271. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/openai/cassettes/test_chat_completion.yaml +0 -0
  272. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/openai/cassettes/test_chat_completion_streaming.yaml +0 -0
  273. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/openai/cassettes/test_image_generation.yaml +0 -0
  274. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/openai/conftest.py +0 -0
  275. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/openai/test_chat_completion.py +0 -0
  276. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/openai/test_image_generation.py +0 -0
  277. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/pinecone/cassettes/test_query.yaml +0 -0
  278. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/pinecone/cassettes/test_upsert.yaml +0 -0
  279. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/pinecone/conftest.py +0 -0
  280. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/pinecone/test_pinecone.py +0 -0
  281. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/qdrant/conftest.py +0 -0
  282. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/qdrant/test_qdrant.py +0 -0
  283. {langtrace_python_sdk-3.3.14 → langtrace_python_sdk-3.3.15}/src/tests/utils.py +0 -0
@@ -1,10 +1,11 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: langtrace-python-sdk
3
- Version: 3.3.14
3
+ Version: 3.3.15
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>
7
- License: Apache-2.0
7
+ License-Expression: Apache-2.0
8
+ License-File: LICENSE
8
9
  Classifier: License :: OSI Approved :: Apache Software License
9
10
  Classifier: Operating System :: OS Independent
10
11
  Classifier: Programming Language :: Python :: 3
@@ -1,8 +1,11 @@
1
1
  from examples.cohere_example.chat import chat_comp
2
+ from examples.cohere_example.chatv2 import chat_v2
3
+ from examples.cohere_example.chat_streamv2 import chat_stream_v2
2
4
  from examples.cohere_example.chat_stream import chat_stream
3
5
  from examples.cohere_example.tools import tool_calling
4
6
  from examples.cohere_example.embed import embed
5
7
  from examples.cohere_example.rerank import rerank
8
+ from examples.cohere_example.rerankv2 import rerank_v2
6
9
  from langtrace_python_sdk import with_langtrace_root_span
7
10
 
8
11
 
@@ -10,8 +13,11 @@ class CohereRunner:
10
13
 
11
14
  @with_langtrace_root_span("Cohere")
12
15
  def run(self):
16
+ chat_v2()
17
+ chat_stream_v2()
13
18
  chat_comp()
14
19
  chat_stream()
15
20
  tool_calling()
16
21
  embed()
17
22
  rerank()
23
+ rerank_v2()
@@ -0,0 +1,17 @@
1
+ import os
2
+ from langtrace_python_sdk import langtrace
3
+ import cohere
4
+
5
+ langtrace.init(api_key=os.getenv("LANGTRACE_API_KEY"))
6
+ co = cohere.ClientV2(api_key=os.getenv("COHERE_API_KEY"))
7
+
8
+ def chat_stream_v2():
9
+ res = co.chat_stream(
10
+ model="command-r-plus-08-2024",
11
+ messages=[{"role": "user", "content": "Write a title for a blog post about API design. Only output the title text"}],
12
+ )
13
+
14
+ for event in res:
15
+ if event:
16
+ if event.type == "content-delta":
17
+ print(event.delta.message.content.text)
@@ -0,0 +1,21 @@
1
+ import os
2
+ from langtrace_python_sdk import langtrace
3
+ import cohere
4
+
5
+ langtrace.init(api_key=os.getenv("LANGTRACE_API_KEY"))
6
+
7
+
8
+ def chat_v2():
9
+ co = cohere.ClientV2(api_key=os.getenv("COHERE_API_KEY"))
10
+
11
+ res = co.chat(
12
+ model="command-r-plus-08-2024",
13
+ messages=[
14
+ {
15
+ "role": "user",
16
+ "content": "Write a title for a blog post about API design. Only output the title text.",
17
+ }
18
+ ],
19
+ )
20
+
21
+ print(res.message.content[0].text)
@@ -0,0 +1,23 @@
1
+ import os
2
+ from langtrace_python_sdk import langtrace
3
+ import cohere
4
+
5
+ langtrace.init(api_key=os.getenv("LANGTRACE_API_KEY"))
6
+ co = cohere.ClientV2(api_key=os.getenv("COHERE_API_KEY"))
7
+
8
+ docs = [
9
+ "Carson City is the capital city of the American state of Nevada.",
10
+ "The Commonwealth of the Northern Mariana Islands is a group of islands in the Pacific Ocean. Its capital is Saipan.",
11
+ "Capitalization or capitalisation in English grammar is the use of a capital letter at the start of a word. English usage varies from capitalization in other languages.",
12
+ "Washington, D.C. (also known as simply Washington or D.C., and officially as the District of Columbia) is the capital of the United States. It is a federal district.",
13
+ "Capital punishment has existed in the United States since beforethe United States was a country. As of 2017, capital punishment is legal in 30 of the 50 states.",
14
+ ]
15
+
16
+ def rerank_v2():
17
+ response = co.rerank(
18
+ model="rerank-v3.5",
19
+ query="What is the capital of the United States?",
20
+ documents=docs,
21
+ top_n=3,
22
+ )
23
+ print(response)
@@ -0,0 +1,2 @@
1
+ LANGTRACE_REMOTE_URL = "https://app.langtrace.ai"
2
+ LANGTRACE_SESSION_ID_HEADER = "x-langtrace-session-id"
@@ -0,0 +1,42 @@
1
+ APIS = {
2
+ "CHAT_CREATE": {
3
+ "URL": "https://api.cohere.ai",
4
+ "METHOD": "cohere.client.chat",
5
+ "ENDPOINT": "/v1/chat",
6
+ },
7
+ "CHAT_CREATE_V2": {
8
+ "URL": "https://api.cohere.ai",
9
+ "METHOD": "cohere.client_v2.chat",
10
+ "ENDPOINT": "/v2/chat",
11
+ },
12
+ "EMBED": {
13
+ "URL": "https://api.cohere.ai",
14
+ "METHOD": "cohere.client.embed",
15
+ "ENDPOINT": "/v1/embed",
16
+ },
17
+ "EMBED_V2": {
18
+ "URL": "https://api.cohere.ai",
19
+ "METHOD": "cohere.client_v2.embed",
20
+ "ENDPOINT": "/v2/embed",
21
+ },
22
+ "CHAT_STREAM": {
23
+ "URL": "https://api.cohere.ai",
24
+ "METHOD": "cohere.client.chat_stream",
25
+ "ENDPOINT": "/v1/chat",
26
+ },
27
+ "CHAT_STREAM_V2": {
28
+ "URL": "https://api.cohere.ai",
29
+ "METHOD": "cohere.client_v2.chat_stream",
30
+ "ENDPOINT": "/v2/chat",
31
+ },
32
+ "RERANK": {
33
+ "URL": "https://api.cohere.ai",
34
+ "METHOD": "cohere.client.rerank",
35
+ "ENDPOINT": "/v1/rerank",
36
+ },
37
+ "RERANK_V2": {
38
+ "URL": "https://api.cohere.ai",
39
+ "METHOD": "cohere.client_v2.rerank",
40
+ "ENDPOINT": "/v2/rerank",
41
+ },
42
+ }
@@ -9,6 +9,7 @@ from opentelemetry.trace.span import format_trace_id
9
9
 
10
10
  from langtrace_python_sdk.constants.exporter.langtrace_exporter import (
11
11
  LANGTRACE_REMOTE_URL,
12
+ LANGTRACE_SESSION_ID_HEADER,
12
13
  )
13
14
  from colorama import Fore
14
15
  from requests.exceptions import RequestException
@@ -51,12 +52,14 @@ class LangTraceExporter(SpanExporter):
51
52
  api_key: str
52
53
  api_host: str
53
54
  disable_logging: bool
55
+ session_id: str
54
56
 
55
57
  def __init__(
56
58
  self,
57
59
  api_host,
58
60
  api_key: str = None,
59
61
  disable_logging: bool = False,
62
+ session_id: str = None,
60
63
  ) -> None:
61
64
  self.api_key = api_key or os.environ.get("LANGTRACE_API_KEY")
62
65
  self.api_host = (
@@ -65,6 +68,7 @@ class LangTraceExporter(SpanExporter):
65
68
  else api_host
66
69
  )
67
70
  self.disable_logging = disable_logging
71
+ self.session_id = session_id or os.environ.get("LANGTRACE_SESSION_ID")
68
72
 
69
73
  def export(self, spans: typing.Sequence[ReadableSpan]) -> SpanExportResult:
70
74
  """
@@ -82,6 +86,10 @@ class LangTraceExporter(SpanExporter):
82
86
  "User-Agent": "LangtraceExporter",
83
87
  }
84
88
 
89
+ # Add session ID if available
90
+ if self.session_id:
91
+ headers[LANGTRACE_SESSION_ID_HEADER] = self.session_id
92
+
85
93
  # Check if the OTEL_EXPORTER_OTLP_HEADERS environment variable is set
86
94
  otel_headers = os.getenv("OTEL_EXPORTER_OTLP_HEADERS", None)
87
95
  if otel_headers:
@@ -23,6 +23,7 @@ from wrapt import wrap_function_wrapper
23
23
 
24
24
  from langtrace_python_sdk.instrumentation.cohere.patch import (
25
25
  chat_create,
26
+ chat_create_v2,
26
27
  chat_stream,
27
28
  embed,
28
29
  rerank,
@@ -48,6 +49,18 @@ class CohereInstrumentation(BaseInstrumentor):
48
49
  chat_create("cohere.client.chat", version, tracer),
49
50
  )
50
51
 
52
+ wrap_function_wrapper(
53
+ "cohere.client_v2",
54
+ "ClientV2.chat",
55
+ chat_create_v2("cohere.client_v2.chat", version, tracer),
56
+ )
57
+
58
+ wrap_function_wrapper(
59
+ "cohere.client_v2",
60
+ "ClientV2.chat_stream",
61
+ chat_create_v2("cohere.client_v2.chat", version, tracer, stream=True),
62
+ )
63
+
51
64
  wrap_function_wrapper(
52
65
  "cohere.client",
53
66
  "Client.chat_stream",
@@ -60,12 +73,24 @@ class CohereInstrumentation(BaseInstrumentor):
60
73
  embed("cohere.client.embed", version, tracer),
61
74
  )
62
75
 
76
+ wrap_function_wrapper(
77
+ "cohere.client_v2",
78
+ "ClientV2.embed",
79
+ embed("cohere.client.embed", version, tracer, v2=True),
80
+ )
81
+
63
82
  wrap_function_wrapper(
64
83
  "cohere.client",
65
84
  "Client.rerank",
66
85
  rerank("cohere.client.rerank", version, tracer),
67
86
  )
68
87
 
88
+ wrap_function_wrapper(
89
+ "cohere.client_v2",
90
+ "ClientV2.rerank",
91
+ rerank("cohere.client.rerank", version, tracer, v2=True),
92
+ )
93
+
69
94
  def _instrument_module(self, module_name):
70
95
  pass
71
96
 
@@ -24,6 +24,7 @@ from langtrace_python_sdk.utils.llm import (
24
24
  get_span_name,
25
25
  set_event_completion,
26
26
  set_usage_attributes,
27
+ StreamWrapper
27
28
  )
28
29
  from langtrace.trace_attributes import Event, LLMSpanAttributes
29
30
  from langtrace_python_sdk.utils import set_span_attribute
@@ -38,7 +39,7 @@ from langtrace_python_sdk.constants.instrumentation.common import (
38
39
  from langtrace.trace_attributes import SpanAttributes
39
40
 
40
41
 
41
- def rerank(original_method, version, tracer):
42
+ def rerank(original_method, version, tracer, v2=False):
42
43
  """Wrap the `rerank` method."""
43
44
 
44
45
  def traced_method(wrapped, instance, args, kwargs):
@@ -49,8 +50,8 @@ def rerank(original_method, version, tracer):
49
50
  **get_llm_request_attributes(kwargs, operation_name="rerank"),
50
51
  **get_llm_url(instance),
51
52
  SpanAttributes.LLM_REQUEST_MODEL: kwargs.get("model") or "command-r-plus",
52
- SpanAttributes.LLM_URL: APIS["RERANK"]["URL"],
53
- SpanAttributes.LLM_PATH: APIS["RERANK"]["ENDPOINT"],
53
+ SpanAttributes.LLM_URL: APIS["RERANK" if not v2 else "RERANK_V2"]["URL"],
54
+ SpanAttributes.LLM_PATH: APIS["RERANK" if not v2 else "RERANK_V2"]["ENDPOINT"],
54
55
  SpanAttributes.LLM_REQUEST_DOCUMENTS: json.dumps(
55
56
  kwargs.get("documents"), cls=datetime_encoder
56
57
  ),
@@ -61,7 +62,7 @@ def rerank(original_method, version, tracer):
61
62
  attributes = LLMSpanAttributes(**span_attributes)
62
63
 
63
64
  span = tracer.start_span(
64
- name=get_span_name(APIS["RERANK"]["METHOD"]), kind=SpanKind.CLIENT
65
+ name=get_span_name(APIS["RERANK" if not v2 else "RERANK_V2"]["METHOD"]), kind=SpanKind.CLIENT
65
66
  )
66
67
  for field, value in attributes.model_dump(by_alias=True).items():
67
68
  set_span_attribute(span, field, value)
@@ -119,7 +120,7 @@ def rerank(original_method, version, tracer):
119
120
  return traced_method
120
121
 
121
122
 
122
- def embed(original_method, version, tracer):
123
+ def embed(original_method, version, tracer, v2=False):
123
124
  """Wrap the `embed` method."""
124
125
 
125
126
  def traced_method(wrapped, instance, args, kwargs):
@@ -129,8 +130,8 @@ def embed(original_method, version, tracer):
129
130
  **get_langtrace_attributes(version, service_provider),
130
131
  **get_llm_request_attributes(kwargs, operation_name="embed"),
131
132
  **get_llm_url(instance),
132
- SpanAttributes.LLM_URL: APIS["EMBED"]["URL"],
133
- SpanAttributes.LLM_PATH: APIS["EMBED"]["ENDPOINT"],
133
+ SpanAttributes.LLM_URL: APIS["EMBED" if not v2 else "EMBED_V2"]["URL"],
134
+ SpanAttributes.LLM_PATH: APIS["EMBED" if not v2 else "EMBED_V2"]["ENDPOINT"],
134
135
  SpanAttributes.LLM_REQUEST_EMBEDDING_INPUTS: json.dumps(
135
136
  kwargs.get("texts")
136
137
  ),
@@ -143,7 +144,7 @@ def embed(original_method, version, tracer):
143
144
  attributes = LLMSpanAttributes(**span_attributes)
144
145
 
145
146
  span = tracer.start_span(
146
- name=get_span_name(APIS["EMBED"]["METHOD"]),
147
+ name=get_span_name(APIS["EMBED" if not v2 else "EMBED_V2"]["METHOD"]),
147
148
  kind=SpanKind.CLIENT,
148
149
  )
149
150
  for field, value in attributes.model_dump(by_alias=True).items():
@@ -343,6 +344,103 @@ def chat_create(original_method, version, tracer):
343
344
  return traced_method
344
345
 
345
346
 
347
+ def chat_create_v2(original_method, version, tracer, stream=False):
348
+ """Wrap the `chat_create` method for Cohere API v2."""
349
+
350
+ def traced_method(wrapped, instance, args, kwargs):
351
+ service_provider = SERVICE_PROVIDERS["COHERE"]
352
+
353
+ messages = kwargs.get("messages", [])
354
+ if kwargs.get("preamble"):
355
+ messages = [{"role": "system", "content": kwargs["preamble"]}] + messages
356
+
357
+ span_attributes = {
358
+ **get_langtrace_attributes(version, service_provider),
359
+ **get_llm_request_attributes(kwargs, prompts=messages),
360
+ **get_llm_url(instance),
361
+ SpanAttributes.LLM_REQUEST_MODEL: kwargs.get("model") or "command-r-plus",
362
+ SpanAttributes.LLM_URL: APIS["CHAT_CREATE_V2"]["URL"],
363
+ SpanAttributes.LLM_PATH: APIS["CHAT_CREATE_V2"]["ENDPOINT"],
364
+ **get_extra_attributes(),
365
+ }
366
+
367
+ attributes = LLMSpanAttributes(**span_attributes)
368
+
369
+ for attr_name in ["max_input_tokens", "conversation_id", "connectors", "tools", "tool_results"]:
370
+ value = kwargs.get(attr_name)
371
+ if value is not None:
372
+ if attr_name == "max_input_tokens":
373
+ attributes.llm_max_input_tokens = str(value)
374
+ elif attr_name == "conversation_id":
375
+ attributes.conversation_id = value
376
+ else:
377
+ setattr(attributes, f"llm_{attr_name}", json.dumps(value))
378
+
379
+ span = tracer.start_span(
380
+ name=get_span_name(APIS["CHAT_CREATE_V2"]["METHOD"]),
381
+ kind=SpanKind.CLIENT
382
+ )
383
+
384
+ for field, value in attributes.model_dump(by_alias=True).items():
385
+ set_span_attribute(span, field, value)
386
+
387
+ try:
388
+ result = wrapped(*args, **kwargs)
389
+
390
+ if stream:
391
+ return StreamWrapper(
392
+ result,
393
+ span,
394
+ tool_calls=kwargs.get("tools") is not None,
395
+ )
396
+ else:
397
+ if hasattr(result, "id") and result.id is not None:
398
+ span.set_attribute(SpanAttributes.LLM_GENERATION_ID, result.id)
399
+ span.set_attribute(SpanAttributes.LLM_RESPONSE_ID, result.id)
400
+
401
+ if (hasattr(result, "message") and
402
+ hasattr(result.message, "content") and
403
+ len(result.message.content) > 0 and
404
+ hasattr(result.message.content[0], "text") and
405
+ result.message.content[0].text is not None and
406
+ result.message.content[0].text != ""):
407
+ responses = [{
408
+ "role": result.message.role,
409
+ "content": result.message.content[0].text
410
+ }]
411
+ set_event_completion(span, responses)
412
+ if hasattr(result, "tool_calls") and result.tool_calls is not None:
413
+ tool_calls = [tool_call.json() for tool_call in result.tool_calls]
414
+ span.set_attribute(
415
+ SpanAttributes.LLM_TOOL_RESULTS,
416
+ json.dumps(tool_calls)
417
+ )
418
+ if hasattr(result, "usage") and result.usage is not None:
419
+ if (hasattr(result.usage, "billed_units") and
420
+ result.usage.billed_units is not None):
421
+ usage = result.usage.billed_units
422
+ for metric, value in {
423
+ "input": usage.input_tokens or 0,
424
+ "output": usage.output_tokens or 0,
425
+ "total": (usage.input_tokens or 0) + (usage.output_tokens or 0),
426
+ }.items():
427
+ span.set_attribute(
428
+ f"gen_ai.usage.{metric}_tokens",
429
+ int(value)
430
+ )
431
+ span.set_status(StatusCode.OK)
432
+ span.end()
433
+ return result
434
+
435
+ except Exception as error:
436
+ span.record_exception(error)
437
+ span.set_status(Status(StatusCode.ERROR, str(error)))
438
+ span.end()
439
+ raise
440
+
441
+ return traced_method
442
+
443
+
346
444
  def chat_stream(original_method, version, tracer):
347
445
  """Wrap the `messages_stream` method."""
348
446
 
@@ -50,7 +50,7 @@ def patch_bootstrapfewshot_optimizer(operation_name, version, tracer):
50
50
  ),
51
51
  }
52
52
  span_attributes["dspy.optimizer.module.prog"] = json.dumps(prog)
53
- if hasattr(instance, "metric"):
53
+ if hasattr(instance, "metric") and getattr(instance, "metric") is not None:
54
54
  span_attributes["dspy.optimizer.metric"] = getattr(
55
55
  instance, "metric"
56
56
  ).__name__
@@ -342,8 +342,12 @@ def async_chat_completions_create(version: str, tracer: Tracer) -> Callable:
342
342
  service_provider = SERVICE_PROVIDERS["PPLX"]
343
343
  elif "azure" in get_base_url(instance):
344
344
  service_provider = SERVICE_PROVIDERS["AZURE"]
345
+ elif "groq" in get_base_url(instance):
346
+ service_provider = SERVICE_PROVIDERS["GROQ"]
345
347
  elif "x.ai" in get_base_url(instance):
346
348
  service_provider = SERVICE_PROVIDERS["XAI"]
349
+ elif "deepseek" in get_base_url(instance):
350
+ service_provider = SERVICE_PROVIDERS["DEEPSEEK"]
347
351
  llm_prompts = []
348
352
  for item in kwargs.get("messages", []):
349
353
  tools = get_tool_calls(item)
@@ -431,6 +435,18 @@ def embeddings_create(version: str, tracer: Tracer) -> Callable:
431
435
  kwargs: EmbeddingsCreateKwargs,
432
436
  ) -> Any:
433
437
  service_provider = SERVICE_PROVIDERS["OPENAI"]
438
+ base_url = get_base_url(instance)
439
+
440
+ if "perplexity" in base_url:
441
+ service_provider = SERVICE_PROVIDERS["PPLX"]
442
+ elif "azure" in base_url:
443
+ service_provider = SERVICE_PROVIDERS["AZURE"]
444
+ elif "groq" in base_url:
445
+ service_provider = SERVICE_PROVIDERS["GROQ"]
446
+ elif "x.ai" in base_url:
447
+ service_provider = SERVICE_PROVIDERS["XAI"]
448
+ elif "deepseek" in base_url:
449
+ service_provider = SERVICE_PROVIDERS["DEEPSEEK"]
434
450
 
435
451
  span_attributes = {
436
452
  **get_langtrace_attributes(version, service_provider, vendor_type="llm"),
@@ -469,7 +485,6 @@ def embeddings_create(version: str, tracer: Tracer) -> Callable:
469
485
  kind=SpanKind.CLIENT,
470
486
  context=set_span_in_context(trace.get_current_span()),
471
487
  ) as span:
472
-
473
488
  set_span_attributes(span, attributes)
474
489
  try:
475
490
  # Attempt to call the original method
@@ -507,17 +522,27 @@ def async_embeddings_create(version: str, tracer: Tracer) -> Callable:
507
522
  ) -> Awaitable[Any]:
508
523
 
509
524
  service_provider = SERVICE_PROVIDERS["OPENAI"]
525
+ base_url = get_base_url(instance)
526
+ if "perplexity" in base_url:
527
+ service_provider = SERVICE_PROVIDERS["PPLX"]
528
+ elif "azure" in base_url:
529
+ service_provider = SERVICE_PROVIDERS["AZURE"]
530
+ elif "groq" in base_url:
531
+ service_provider = SERVICE_PROVIDERS["GROQ"]
532
+ elif "x.ai" in base_url:
533
+ service_provider = SERVICE_PROVIDERS["XAI"]
534
+ elif "deepseek" in base_url:
535
+ service_provider = SERVICE_PROVIDERS["DEEPSEEK"]
510
536
 
511
537
  span_attributes = {
512
538
  **get_langtrace_attributes(version, service_provider, vendor_type="llm"),
513
539
  **get_llm_request_attributes(kwargs, operation_name="embed"),
540
+ **get_llm_url(instance),
514
541
  SpanAttributes.LLM_PATH: APIS["EMBEDDINGS_CREATE"]["ENDPOINT"],
515
542
  SpanAttributes.LLM_REQUEST_DIMENSIONS: kwargs.get("dimensions"),
516
543
  **get_extra_attributes(), # type: ignore
517
544
  }
518
545
 
519
- attributes = LLMSpanAttributes(**filter_valid_attributes(span_attributes))
520
-
521
546
  encoding_format = kwargs.get("encoding_format")
522
547
  if encoding_format is not None:
523
548
  if not isinstance(encoding_format, list):
@@ -530,17 +555,31 @@ def async_embeddings_create(version: str, tracer: Tracer) -> Callable:
530
555
  span_attributes[SpanAttributes.LLM_REQUEST_EMBEDDING_INPUTS] = json.dumps(
531
556
  [kwargs.get("input", "")]
532
557
  )
558
+ span_attributes[SpanAttributes.LLM_PROMPTS] = json.dumps(
559
+ [
560
+ {
561
+ "role": "user",
562
+ "content": kwargs.get("input"),
563
+ }
564
+ ]
565
+ )
566
+
567
+ attributes = LLMSpanAttributes(**filter_valid_attributes(span_attributes))
533
568
 
534
569
  with tracer.start_as_current_span(
535
570
  name=get_span_name(APIS["EMBEDDINGS_CREATE"]["METHOD"]),
536
571
  kind=SpanKind.CLIENT,
537
572
  context=set_span_in_context(trace.get_current_span()),
538
573
  ) as span:
539
-
540
574
  set_span_attributes(span, attributes)
541
575
  try:
542
576
  # Attempt to call the original method
543
577
  result = await wrapped(*args, **kwargs)
578
+ usage = getattr(result, "usage", None)
579
+ if usage:
580
+ set_usage_attributes(
581
+ span, {"prompt_tokens": getattr(usage, "prompt_tokens", 0)}
582
+ )
544
583
  span.set_status(StatusCode.OK)
545
584
  return result
546
585
  except Exception as err:
@@ -39,6 +39,7 @@ from opentelemetry.exporter.otlp.proto.http.trace_exporter import (
39
39
  )
40
40
  from langtrace_python_sdk.constants.exporter.langtrace_exporter import (
41
41
  LANGTRACE_REMOTE_URL,
42
+ LANGTRACE_SESSION_ID_HEADER,
42
43
  )
43
44
  from langtrace_python_sdk.instrumentation import (
44
45
  AnthropicInstrumentation,
@@ -98,6 +99,7 @@ class LangtraceConfig:
98
99
  or os.environ.get("LANGTRACE_HEADERS")
99
100
  or os.environ.get("OTEL_EXPORTER_OTLP_HEADERS")
100
101
  )
102
+ self.session_id = kwargs.get("session_id") or os.environ.get("LANGTRACE_SESSION_ID")
101
103
 
102
104
 
103
105
  def get_host(config: LangtraceConfig) -> str:
@@ -134,15 +136,19 @@ def setup_tracer_provider(config: LangtraceConfig, host: str) -> TracerProvider:
134
136
 
135
137
 
136
138
  def get_headers(config: LangtraceConfig):
137
- if not config.headers:
138
- return {
139
- "x-api-key": config.api_key,
140
- }
139
+ headers = {
140
+ "x-api-key": config.api_key,
141
+ }
142
+
143
+ if config.session_id:
144
+ headers[LANGTRACE_SESSION_ID_HEADER] = config.session_id
141
145
 
142
146
  if isinstance(config.headers, str):
143
- return parse_env_headers(config.headers, liberal=True)
147
+ headers.update(parse_env_headers(config.headers, liberal=True))
148
+ elif config.headers:
149
+ headers.update(config.headers)
144
150
 
145
- return config.headers
151
+ return headers
146
152
 
147
153
 
148
154
  def get_exporter(config: LangtraceConfig, host: str):
@@ -215,6 +221,7 @@ def init(
215
221
  service_name: Optional[str] = None,
216
222
  disable_logging: bool = False,
217
223
  headers: Dict[str, str] = {},
224
+ session_id: Optional[str] = None,
218
225
  ):
219
226
 
220
227
  check_if_sdk_is_outdated()
@@ -229,6 +236,7 @@ def init(
229
236
  service_name=service_name,
230
237
  disable_logging=disable_logging,
231
238
  headers=headers,
239
+ session_id=session_id,
232
240
  )
233
241
 
234
242
  if config.disable_logging:
@@ -162,11 +162,12 @@ def get_llm_url(instance):
162
162
 
163
163
 
164
164
  def get_base_url(instance):
165
- return (
165
+ base_url = (
166
166
  str(instance._client._base_url)
167
167
  if hasattr(instance, "_client") and hasattr(instance._client, "_base_url")
168
168
  else ""
169
169
  )
170
+ return base_url
170
171
 
171
172
 
172
173
  def is_streaming(kwargs):
@@ -393,8 +394,19 @@ class StreamWrapper:
393
394
  if hasattr(chunk, "text") and chunk.text is not None:
394
395
  content = [chunk.text]
395
396
 
397
+ # CohereV2
398
+ if (hasattr(chunk, "delta") and
399
+ chunk.delta is not None and
400
+ hasattr(chunk.delta, "message") and
401
+ chunk.delta.message is not None and
402
+ hasattr(chunk.delta.message, "content") and
403
+ chunk.delta.message.content is not None and
404
+ hasattr(chunk.delta.message.content, "text") and
405
+ chunk.delta.message.content.text is not None):
406
+ content = [chunk.delta.message.content.text]
407
+
396
408
  # Anthropic
397
- if hasattr(chunk, "delta") and chunk.delta is not None:
409
+ if hasattr(chunk, "delta") and chunk.delta is not None and not hasattr(chunk.delta, "message"):
398
410
  content = [chunk.delta.text] if hasattr(chunk.delta, "text") else []
399
411
 
400
412
  if isinstance(chunk, dict):
@@ -408,7 +420,17 @@ class StreamWrapper:
408
420
 
409
421
  # Anthropic & OpenAI
410
422
  if hasattr(chunk, "type") and chunk.type == "message_start":
411
- self.prompt_tokens = chunk.message.usage.input_tokens
423
+ if hasattr(chunk.message, "usage") and chunk.message.usage is not None:
424
+ self.prompt_tokens = chunk.message.usage.input_tokens
425
+
426
+ # CohereV2
427
+ if hasattr(chunk, "type") and chunk.type == "message-end":
428
+ if (hasattr(chunk, "delta") and chunk.delta is not None and
429
+ hasattr(chunk.delta, "usage") and chunk.delta.usage is not None and
430
+ hasattr(chunk.delta.usage, "billed_units") and chunk.delta.usage.billed_units is not None):
431
+ usage = chunk.delta.usage.billed_units
432
+ self.completion_tokens = int(usage.output_tokens)
433
+ self.prompt_tokens = int(usage.input_tokens)
412
434
 
413
435
  if hasattr(chunk, "usage") and chunk.usage is not None:
414
436
  if hasattr(chunk.usage, "output_tokens"):
@@ -61,6 +61,11 @@ def with_langtrace_root_span(
61
61
  span_id = str(span.get_span_context().span_id)
62
62
  trace_id = str(span.get_span_context().trace_id)
63
63
 
64
+ # Attach session ID if available
65
+ session_id = os.environ.get("LANGTRACE_SESSION_ID")
66
+ if session_id:
67
+ span.set_attribute("session.id", session_id)
68
+
64
69
  if (
65
70
  "span_id" in func.__code__.co_varnames
66
71
  and "trace_id" in func.__code__.co_varnames
@@ -82,6 +87,12 @@ def with_langtrace_root_span(
82
87
  ) as span:
83
88
  span_id = span.get_span_context().span_id
84
89
  trace_id = span.get_span_context().trace_id
90
+
91
+ # Attach session ID if available
92
+ session_id = os.environ.get("LANGTRACE_SESSION_ID")
93
+ if session_id:
94
+ span.set_attribute("session.id", session_id)
95
+
85
96
  if (
86
97
  "span_id" in func.__code__.co_varnames
87
98
  and "trace_id" in func.__code__.co_varnames
@@ -0,0 +1 @@
1
+ __version__ = "3.3.15"