langtrace-python-sdk 2.2.20__tar.gz → 2.2.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 (211) hide show
  1. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/PKG-INFO +1 -1
  2. langtrace_python_sdk-2.2.22/src/examples/crewai_example/simple_agent/agents.py +32 -0
  3. langtrace_python_sdk-2.2.22/src/examples/crewai_example/simple_agent/main.py +48 -0
  4. langtrace_python_sdk-2.2.22/src/examples/crewai_example/simple_agent/tasks.py +21 -0
  5. langtrace_python_sdk-2.2.22/src/examples/crewai_example/trip_planner/agents.py +54 -0
  6. langtrace_python_sdk-2.2.22/src/examples/crewai_example/trip_planner/main.py +96 -0
  7. langtrace_python_sdk-2.2.22/src/examples/crewai_example/trip_planner/tasks.py +120 -0
  8. langtrace_python_sdk-2.2.22/src/examples/crewai_example/trip_planner/tools/calculator.py +16 -0
  9. langtrace_python_sdk-2.2.22/src/examples/crewai_example/trip_planner/tools/search_tools.py +73 -0
  10. langtrace_python_sdk-2.2.22/src/langtrace_python_sdk/extensions/__init__.py +0 -0
  11. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/anthropic/patch.py +6 -58
  12. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/cohere/patch.py +5 -13
  13. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/langchain_core/instrumentation.py +18 -3
  14. langtrace_python_sdk-2.2.22/src/langtrace_python_sdk/instrumentation/ollama/patch.py +157 -0
  15. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/utils/llm.py +62 -36
  16. langtrace_python_sdk-2.2.22/src/langtrace_python_sdk/version.py +1 -0
  17. langtrace_python_sdk-2.2.22/src/tests/__init__.py +0 -0
  18. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/anthropic/test_anthropic.py +0 -4
  19. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/cohere/test_cohere_chat.py +0 -2
  20. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/openai/test_chat_completion.py +0 -6
  21. langtrace_python_sdk-2.2.22/src/tests/openai/test_embeddings.py +0 -0
  22. langtrace_python_sdk-2.2.20/src/langtrace_python_sdk/instrumentation/ollama/patch.py +0 -224
  23. langtrace_python_sdk-2.2.20/src/langtrace_python_sdk/version.py +0 -1
  24. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/.gitignore +0 -0
  25. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/LICENSE +0 -0
  26. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/README.md +0 -0
  27. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/pyproject.toml +0 -0
  28. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/__init__.py +0 -0
  29. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/__init__.py +0 -0
  30. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/anthropic_example/__init__.py +0 -0
  31. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/anthropic_example/completion.py +0 -0
  32. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/chroma_example/__init__.py +0 -0
  33. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/chroma_example/basic.py +0 -0
  34. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/cohere_example/__init__.py +0 -0
  35. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/cohere_example/chat.py +0 -0
  36. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/cohere_example/chat_stream.py +0 -0
  37. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/cohere_example/embed.py +0 -0
  38. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/cohere_example/rerank.py +0 -0
  39. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/cohere_example/tools.py +0 -0
  40. {langtrace_python_sdk-2.2.20/src/langtrace_python_sdk/constants/instrumentation → langtrace_python_sdk-2.2.22/src/examples/crewai_example}/__init__.py +0 -0
  41. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/crewai_example/basic.py +0 -0
  42. {langtrace_python_sdk-2.2.20/src/langtrace_python_sdk/extensions → langtrace_python_sdk-2.2.22/src/examples/crewai_example/simple_agent}/__init__.py +0 -0
  43. {langtrace_python_sdk-2.2.20/src/tests → langtrace_python_sdk-2.2.22/src/examples/crewai_example/trip_planner}/__init__.py +0 -0
  44. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/dspy_example/math_problems_cot.py +0 -0
  45. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/dspy_example/math_problems_cot_parallel.py +0 -0
  46. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/dspy_example/program_of_thought_basic.py +0 -0
  47. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/dspy_example/quiz_gen.py +0 -0
  48. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/dspy_example/react.py +0 -0
  49. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/fastapi_example/__init__.py +0 -0
  50. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/fastapi_example/basic_route.py +0 -0
  51. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/gemini_example/__init__.py +0 -0
  52. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/gemini_example/function_tools.py +0 -0
  53. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/gemini_example/main.py +0 -0
  54. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/hiveagent_example/basic.py +0 -0
  55. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/inspect_ai_example/basic_eval.py +0 -0
  56. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/langchain_example/__init__.py +0 -0
  57. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/langchain_example/basic.py +0 -0
  58. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/langchain_example/groq_example.py +0 -0
  59. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/langchain_example/langgraph_example.py +0 -0
  60. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/langchain_example/sagemaker.py +0 -0
  61. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/langchain_example/tool.py +0 -0
  62. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/llamaindex_example/__init__.py +0 -0
  63. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/llamaindex_example/agent.py +0 -0
  64. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/llamaindex_example/basic.py +0 -0
  65. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/llamaindex_example/data/abramov.txt +0 -0
  66. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/ollama_example/__init__.py +0 -0
  67. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/ollama_example/basic.py +0 -0
  68. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/openai_example/__init__.py +0 -0
  69. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/openai_example/async_tool_calling_nonstreaming.py +0 -0
  70. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/openai_example/async_tool_calling_streaming.py +0 -0
  71. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/openai_example/chat_completion.py +0 -0
  72. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/openai_example/chat_completion_tool_choice.py +0 -0
  73. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/openai_example/embeddings_create.py +0 -0
  74. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/openai_example/function_calling.py +0 -0
  75. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/openai_example/images_edit.py +0 -0
  76. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/openai_example/images_generate.py +0 -0
  77. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/openai_example/resources/lounge_flamingo.png +0 -0
  78. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/openai_example/resources/mask.png +0 -0
  79. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/openai_example/send_user_feedback.py +0 -0
  80. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/openai_example/tool_calling.py +0 -0
  81. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/openai_example/tool_calling_nonstreaming.py +0 -0
  82. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/openai_example/tool_calling_streaming.py +0 -0
  83. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/otlp_example/otlp_basic.py +0 -0
  84. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/otlp_example/otlp_with_langtrace.py +0 -0
  85. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/perplexity_example/basic.py +0 -0
  86. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/pinecone_example/__init__.py +0 -0
  87. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/pinecone_example/basic.py +0 -0
  88. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/qdrant_example/__init__.py +0 -0
  89. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/qdrant_example/basic.py +0 -0
  90. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/routellm_example/basic.py +0 -0
  91. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/vertexai_example/__init__.py +0 -0
  92. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/vertexai_example/main.py +0 -0
  93. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/weaviate_example/__init__.py +0 -0
  94. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/examples/weaviate_example/query_text.py +0 -0
  95. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/__init__.py +0 -0
  96. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/constants/__init__.py +0 -0
  97. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/constants/exporter/langtrace_exporter.py +0 -0
  98. /langtrace_python_sdk-2.2.20/src/tests/openai/test_embeddings.py → /langtrace_python_sdk-2.2.22/src/langtrace_python_sdk/constants/instrumentation/__init__.py +0 -0
  99. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/constants/instrumentation/anthropic.py +0 -0
  100. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/constants/instrumentation/chroma.py +0 -0
  101. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/constants/instrumentation/cohere.py +0 -0
  102. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/constants/instrumentation/common.py +0 -0
  103. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/constants/instrumentation/gemini.py +0 -0
  104. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/constants/instrumentation/groq.py +0 -0
  105. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/constants/instrumentation/ollama.py +0 -0
  106. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/constants/instrumentation/openai.py +0 -0
  107. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/constants/instrumentation/pinecone.py +0 -0
  108. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/constants/instrumentation/qdrant.py +0 -0
  109. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/constants/instrumentation/vertexai.py +0 -0
  110. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/constants/instrumentation/weaviate.py +0 -0
  111. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/extensions/langtrace_exporter.py +0 -0
  112. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/extensions/langtrace_filesystem.py +0 -0
  113. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/__init__.py +0 -0
  114. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/anthropic/__init__.py +0 -0
  115. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/anthropic/instrumentation.py +0 -0
  116. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/chroma/__init__.py +0 -0
  117. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/chroma/instrumentation.py +0 -0
  118. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/chroma/patch.py +0 -0
  119. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/cohere/__init__.py +0 -0
  120. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/cohere/instrumentation.py +0 -0
  121. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/crewai/__init__.py +0 -0
  122. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/crewai/instrumentation.py +0 -0
  123. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/crewai/patch.py +0 -0
  124. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/dspy/__init__.py +0 -0
  125. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/dspy/instrumentation.py +0 -0
  126. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/dspy/patch.py +0 -0
  127. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/gemini/__init__.py +0 -0
  128. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/gemini/instrumentation.py +0 -0
  129. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/gemini/patch.py +0 -0
  130. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/groq/__init__.py +0 -0
  131. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/groq/instrumentation.py +0 -0
  132. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/groq/patch.py +0 -0
  133. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/langchain/__init__.py +0 -0
  134. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/langchain/instrumentation.py +0 -0
  135. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/langchain/patch.py +0 -0
  136. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/langchain_community/__init__.py +0 -0
  137. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/langchain_community/instrumentation.py +0 -0
  138. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/langchain_community/patch.py +0 -0
  139. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/langchain_core/__init__.py +0 -0
  140. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/langchain_core/patch.py +0 -0
  141. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/langgraph/__init__.py +0 -0
  142. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/langgraph/instrumentation.py +0 -0
  143. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/langgraph/patch.py +0 -0
  144. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/llamaindex/__init__.py +0 -0
  145. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/llamaindex/instrumentation.py +0 -0
  146. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/llamaindex/patch.py +0 -0
  147. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/ollama/__init__.py +0 -0
  148. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/ollama/instrumentation.py +0 -0
  149. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/openai/__init__.py +0 -0
  150. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/openai/instrumentation.py +0 -0
  151. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/openai/patch.py +0 -0
  152. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/pinecone/__init__.py +0 -0
  153. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/pinecone/instrumentation.py +0 -0
  154. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/pinecone/patch.py +0 -0
  155. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/qdrant/__init__.py +0 -0
  156. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/qdrant/instrumentation.py +0 -0
  157. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/qdrant/patch.py +0 -0
  158. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/vertexai/__init__.py +0 -0
  159. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/vertexai/instrumentation.py +0 -0
  160. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/vertexai/patch.py +0 -0
  161. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/weaviate/__init__.py +0 -0
  162. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/weaviate/instrumentation.py +0 -0
  163. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/instrumentation/weaviate/patch.py +0 -0
  164. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/langtrace.py +0 -0
  165. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/types/__init__.py +0 -0
  166. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/utils/__init__.py +0 -0
  167. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/utils/langtrace_sampler.py +0 -0
  168. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/utils/misc.py +0 -0
  169. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/utils/prompt_registry.py +0 -0
  170. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/utils/sdk_version_checker.py +0 -0
  171. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/utils/silently_fail.py +0 -0
  172. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/utils/types.py +0 -0
  173. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/langtrace_python_sdk/utils/with_root_span.py +0 -0
  174. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/run_example.py +0 -0
  175. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/anthropic/cassettes/test_anthropic.yaml +0 -0
  176. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/anthropic/cassettes/test_anthropic_streaming.yaml +0 -0
  177. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/anthropic/cassettes/test_async_anthropic_streaming.yaml +0 -0
  178. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/anthropic/conftest.py +0 -0
  179. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/chroma/conftest.py +0 -0
  180. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/chroma/test_chroma.py +0 -0
  181. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/cohere/cassettes/test_cohere_chat.yaml +0 -0
  182. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/cohere/cassettes/test_cohere_chat_streaming.yaml +0 -0
  183. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/cohere/cassettes/test_cohere_embed.yaml +0 -0
  184. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/cohere/cassettes/test_cohere_rerank.yaml +0 -0
  185. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/cohere/conftest.py +0 -0
  186. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/cohere/test_cohere_embed.py +0 -0
  187. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/cohere/test_cohere_rerank.py +0 -0
  188. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/conftest.py +0 -0
  189. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/groq/cassettes/test_async_chat_completion.yaml +0 -0
  190. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/groq/cassettes/test_async_chat_completion_streaming.yaml +0 -0
  191. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/groq/cassettes/test_chat_completion.yaml +0 -0
  192. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/groq/cassettes/test_chat_completion_streaming.yaml +0 -0
  193. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/groq/conftest.py +0 -0
  194. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/groq/test_groq.py +0 -0
  195. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/langchain/cassettes/test_langchain.yaml +0 -0
  196. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/langchain/conftest.py +0 -0
  197. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/langchain/test_langchain.py +0 -0
  198. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/openai/cassettes/test_async_chat_completion_streaming.yaml +0 -0
  199. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/openai/cassettes/test_async_image_generation.yaml +0 -0
  200. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/openai/cassettes/test_chat_completion.yaml +0 -0
  201. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/openai/cassettes/test_chat_completion_streaming.yaml +0 -0
  202. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/openai/cassettes/test_image_generation.yaml +0 -0
  203. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/openai/conftest.py +0 -0
  204. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/openai/test_image_generation.py +0 -0
  205. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/pinecone/cassettes/test_query.yaml +0 -0
  206. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/pinecone/cassettes/test_upsert.yaml +0 -0
  207. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/pinecone/conftest.py +0 -0
  208. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/pinecone/test_pinecone.py +0 -0
  209. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/qdrant/conftest.py +0 -0
  210. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.22}/src/tests/qdrant/test_qdrant.py +0 -0
  211. {langtrace_python_sdk-2.2.20 → langtrace_python_sdk-2.2.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.2.20
3
+ Version: 2.2.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,32 @@
1
+ from crewai import Agent
2
+ from langchain_openai import ChatOpenAI
3
+ from langchain_anthropic import ChatAnthropic
4
+ from langchain_cohere import ChatCohere
5
+ from langchain_ollama import ChatOllama
6
+
7
+
8
+ class PoetryAgents:
9
+ def __init__(self):
10
+ self.open_ai = ChatOpenAI(
11
+ model_name="gpt-4", temperature=0.7, stream_usage=True
12
+ )
13
+ self.anthropic = ChatAnthropic(
14
+ model_name="claude-3-5-sonnet-20240620", temperature=0.7
15
+ )
16
+
17
+ self.cohere = ChatCohere(model="command-r", temperature=0.7)
18
+ self.ollama = ChatOllama(model="llama3", temperature=0.7)
19
+
20
+ def create_poet_agent(self):
21
+ return Agent(
22
+ role="Expert Poetry Writer",
23
+ backstory="""
24
+ I am an Expert in poetry writing and creative expression.
25
+ I have been writing poetry for over 10 years and have published several collections.
26
+ I have a deep understanding of various poetic forms, styles, and themes. I am here to help you create beautiful and meaningful poetry that resonates with your emotions and experiences.
27
+ """,
28
+ goal="""Create a poem that captures the essence of a given theme or emotion""",
29
+ allow_delegation=False,
30
+ verbose=True,
31
+ llm=self.ollama,
32
+ )
@@ -0,0 +1,48 @@
1
+ from crewai import Crew
2
+ from textwrap import dedent
3
+ from .agents import PoetryAgents
4
+ from .tasks import PoetryTasks
5
+ from langtrace_python_sdk import langtrace
6
+ from dotenv import load_dotenv
7
+ import agentops
8
+
9
+ load_dotenv()
10
+ agentops.init()
11
+ langtrace.init(write_spans_to_console=False, batch=False)
12
+
13
+
14
+ class PoetryCrew:
15
+ def __init__(self, topic) -> None:
16
+ self.topic = topic
17
+
18
+ def run(self):
19
+ agents = PoetryAgents()
20
+ tasks = PoetryTasks()
21
+
22
+ poetry_agent = agents.create_poet_agent()
23
+
24
+ create_poem = tasks.create_poem(poetry_agent, self.topic)
25
+
26
+ crew = Crew(agents=[poetry_agent], tasks=[create_poem], verbose=True)
27
+ res = crew.kickoff()
28
+ return res
29
+
30
+
31
+ # This is the main function that you will use to run your custom crew.
32
+ if __name__ == "__main__":
33
+ print("## Welcome to Poetry Crew")
34
+ print("-------------------------------")
35
+ topic = input(
36
+ dedent(
37
+ """
38
+ What topic do you want to write a poem on?
39
+ """
40
+ )
41
+ )
42
+
43
+ poetry_crew = PoetryCrew(topic=topic)
44
+ result = poetry_crew.run()
45
+ print("\n\n########################")
46
+ print("## Here is you poem")
47
+ print("########################\n")
48
+ print(result)
@@ -0,0 +1,21 @@
1
+ from crewai import Task
2
+ from textwrap import dedent
3
+
4
+
5
+ class PoetryTasks:
6
+ def create_poem(self, agent, topic):
7
+ return Task(
8
+ description=dedent(
9
+ f"""
10
+ **Task**: Create a Poem on {topic}
11
+ **Description**: Write a poem on the given topic that captures the essence of the theme or emotion.
12
+ The poem should be creative, expressive, and resonate with the reader's emotions and experiences.
13
+ Your poem should be well-structured, engaging, and evoke a sense of beauty and meaning.
14
+
15
+ **Parameters**:
16
+ - Topic: {topic}
17
+ """
18
+ ),
19
+ expected_output="A creative and expressive poem that captures the essence of the given topic.",
20
+ agent=agent,
21
+ )
@@ -0,0 +1,54 @@
1
+ from crewai import Agent
2
+ from langchain_openai import ChatOpenAI
3
+ from langchain_ollama import ChatOllama
4
+ from langchain_cohere import ChatCohere
5
+ from langchain_anthropic import ChatAnthropic
6
+ from dotenv import load_dotenv
7
+
8
+ load_dotenv()
9
+
10
+
11
+ class TravelAgents:
12
+ def __init__(self):
13
+ self.OpenAIGPT35 = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.7)
14
+ self.OpenAIGPT4 = ChatOpenAI(model_name="gpt-4", temperature=0.7)
15
+ self.Ollama = ChatOllama(model="openhermes")
16
+ self.Cohere = ChatCohere(model="command-r")
17
+ self.Anthropic = ChatAnthropic(model="claude-3-5-sonnet")
18
+
19
+ def expert_travel_agent(self):
20
+ return Agent(
21
+ role="Expert Travel Agent",
22
+ backstory="""
23
+ I am an Expert in travel planning and itinerary creation.
24
+ I have been in the travel industry for over 10 years and have helped thousands of clients plan their dream vacations.
25
+ I have extensive knowledge of popular travel destinations, local attractions, and travel logistics. I am here to help you create a personalized travel itinerary that suits your preferences and budget.
26
+ """,
27
+ goal="""Create a 7 day travel itinerary with detailed per-day plans, include budget, packing suggestions, and local/safety tips.""",
28
+ # tools=[tool_1, tool_2],
29
+ allow_delegation=False,
30
+ verbose=True,
31
+ llm=self.OpenAIGPT4,
32
+ )
33
+
34
+ def city_selection_expert(self):
35
+ return Agent(
36
+ role="City Selection Expert",
37
+ backstory="""Expert at analyzing and selecting the best cities for travel based on data""",
38
+ goal="""Select the best cities based on weather, season, prices and traveler preferences""",
39
+ # tools=[tool_1, tool_2],
40
+ allow_delegation=False,
41
+ verbose=True,
42
+ llm=self.OpenAIGPT4,
43
+ )
44
+
45
+ def local_tour_guide(self):
46
+ return Agent(
47
+ role="Local Expert at this city",
48
+ goal="Provide the BEST insights about the selected city",
49
+ backstory="""A knowledgeable local guide with extensive information about the city, it's attractions and customs""",
50
+ # tools=[tool_1, tool_2],
51
+ allow_delegation=False,
52
+ verbose=True,
53
+ llm=self.OpenAIGPT4,
54
+ )
@@ -0,0 +1,96 @@
1
+ from crewai import Crew
2
+ from textwrap import dedent
3
+ from .agents import TravelAgents
4
+ from .tasks import TravelTasks
5
+ from langtrace_python_sdk import langtrace
6
+ from dotenv import load_dotenv
7
+
8
+ load_dotenv()
9
+
10
+ langtrace.init()
11
+
12
+
13
+ class TripCrew:
14
+ def __init__(self, origin, cities, date_range, interests):
15
+ self.origin = origin
16
+ self.cities = cities
17
+ self.date_range = date_range
18
+ self.interests = interests
19
+
20
+ def run(self):
21
+ # Define your custom agents and tasks in agents.py and tasks.py
22
+ agents = TravelAgents()
23
+ tasks = TravelTasks()
24
+
25
+ # Define your custom agents and tasks here
26
+ expert_travel_agent = agents.expert_travel_agent()
27
+ city_selection_expert = agents.city_selection_expert()
28
+ local_tour_guide = agents.local_tour_guide()
29
+
30
+ # Custom tasks include agent name and variables as input
31
+ plan_itinerary = tasks.plan_itinerary(
32
+ expert_travel_agent, self.cities, self.date_range, self.interests
33
+ )
34
+
35
+ identify_city = tasks.identify_city(
36
+ city_selection_expert,
37
+ self.origin,
38
+ self.cities,
39
+ self.interests,
40
+ self.date_range,
41
+ )
42
+
43
+ gather_city_info = tasks.gather_city_info(
44
+ local_tour_guide, self.cities, self.date_range, self.interests
45
+ )
46
+
47
+ # Define your custom crew here
48
+ crew = Crew(
49
+ agents=[expert_travel_agent, city_selection_expert, local_tour_guide],
50
+ tasks=[plan_itinerary, identify_city, gather_city_info],
51
+ verbose=True,
52
+ )
53
+
54
+ result = crew.kickoff()
55
+ return result
56
+
57
+
58
+ # This is the main function that you will use to run your custom crew.
59
+ if __name__ == "__main__":
60
+ print("## Welcome to Trip Planner Crew")
61
+ print("-------------------------------")
62
+ origin = input(
63
+ dedent(
64
+ """
65
+ From where will you be traveling from?
66
+ """
67
+ )
68
+ )
69
+ cities = input(
70
+ dedent(
71
+ """
72
+ What are the cities options you are interested in visiting?
73
+ """
74
+ )
75
+ )
76
+ date_range = input(
77
+ dedent(
78
+ """
79
+ What is the date range you are interested in traveling?
80
+ """
81
+ )
82
+ )
83
+ interests = input(
84
+ dedent(
85
+ """
86
+ What are some of your high level interests and hobbies?
87
+ """
88
+ )
89
+ )
90
+
91
+ trip_crew = TripCrew(origin, cities, date_range, interests)
92
+ result = trip_crew.run()
93
+ print("\n\n########################")
94
+ print("## Here is you Trip Plan")
95
+ print("########################\n")
96
+ print(result)
@@ -0,0 +1,120 @@
1
+ from crewai import Task
2
+ from textwrap import dedent
3
+
4
+ """
5
+ Creating Tasks Cheat Sheet:
6
+ - Begin with the end in mind. Identify the specific outcome your tasks are aiming to achieve.
7
+ - Break down the outcome into actionable tasks, assigning each task to the appropriate agent.
8
+ - Ensure tasks are descriptive, providing clear instructions and expected deliverables.
9
+
10
+ Goal:
11
+ - Develop a detailed itinerary, including city selection, attractions, and practical travel advice.
12
+
13
+ Key Steps for Task Creation:
14
+ 1. Identify the Desired Outcome: Define what success looks like for your project.
15
+ - A detailed 7 day travel itenerary.
16
+
17
+ 2. Task Breakdown: Divide the goal into smaller, manageable tasks that agents can execute.
18
+ - Itenerary Planning: develop a detailed plan for each day of the trip.
19
+ - City Selection: Analayze and pick the best cities to visit.
20
+ - Local Tour Guide: Find a local expert to provide insights and recommendations.
21
+
22
+ 3. Assign Tasks to Agents: Match tasks with agents based on their roles and expertise.
23
+
24
+ 4. Task Description Template:
25
+ - Use this template as a guide to define each task in your CrewAI application.
26
+ - This template helps ensure that each task is clearly defined, actionable, and aligned with the specific goals of your project.
27
+
28
+ Template:
29
+ ---------
30
+ def [task_name](self, agent, [parameters]):
31
+ return Task(description=dedent(f'''
32
+ **Task**: [Provide a concise name or summary of the task.]
33
+ **Description**: [Detailed description of what the agent is expected to do, including actionable steps and expected outcomes. This should be clear and direct, outlining the specific actions required to complete the task.]
34
+
35
+ **Parameters**:
36
+ - [Parameter 1]: [Description]
37
+ - [Parameter 2]: [Description]
38
+ ... [Add more parameters as needed.]
39
+
40
+ **Note**: [Optional section for incentives or encouragement for high-quality work. This can include tips, additional context, or motivations to encourage agents to deliver their best work.]
41
+
42
+ '''), agent=agent)
43
+
44
+ """
45
+
46
+
47
+ class TravelTasks:
48
+ def __tip_section(self):
49
+ return "If you do your BEST WORK, I'll give you a $10,000 commission!"
50
+
51
+ def plan_itinerary(self, agent, city, travel_dates, interests):
52
+ return Task(
53
+ description=dedent(
54
+ f"""
55
+ **Task**: Develop a 7-Day Travel Itinerary
56
+ **Description**: Expand the city guide into a full 7-day travel itinerary with detailed
57
+ per-day plans, including weather forecasts, places to eat, packing suggestions,
58
+ and a budget breakdown. You MUST suggest actual places to visit, actual hotels to stay,
59
+ and actual restaurants to go to. This itinerary should cover all aspects of the trip,
60
+ from arrival to departure, integrating the city guide information with practical travel logistics.
61
+
62
+ **Parameters**:
63
+ - City: {city}
64
+ - Trip Date: {travel_dates}
65
+ - Traveler Interests: {interests}
66
+
67
+ **Note**: {self.__tip_section()}
68
+ """
69
+ ),
70
+ expected_output="A detailed 7-day travel itinerary with per-day plans, budget breakdown, and practical travel advice.",
71
+ agent=agent,
72
+ )
73
+
74
+ def identify_city(self, agent, origin, cities, interests, travel_dates):
75
+ return Task(
76
+ description=dedent(
77
+ f"""
78
+ **Task**: Identify the Best City for the Trip
79
+ **Description**: Analyze and select the best city for the trip based on specific
80
+ criteria such as weather patterns, seasonal events, and travel costs.
81
+ This task involves comparing multiple cities, considering factors like current weather
82
+ conditions, upcoming cultural or seasonal events, and overall travel expenses.
83
+ Your final answer must be a detailed report on the chosen city,
84
+ including actual flight costs, weather forecast, and attractions.
85
+
86
+
87
+ **Parameters**:
88
+ - Origin: {origin}
89
+ - Cities: {cities}
90
+ - Interests: {interests}
91
+ - Travel Date: {travel_dates}
92
+
93
+ **Note**: {self.__tip_section()}
94
+ """
95
+ ),
96
+ agent=agent,
97
+ expected_output="A detailed report on the best city for the trip, including flight costs, weather forecast, and attractions.",
98
+ )
99
+
100
+ def gather_city_info(self, agent, city, travel_dates, interests):
101
+ return Task(
102
+ description=dedent(
103
+ f"""
104
+ **Task**: Gather In-depth City Guide Information
105
+ **Description**: Compile an in-depth guide for the selected city, gathering information about
106
+ key attractions, local customs, special events, and daily activity recommendations.
107
+ This guide should provide a thorough overview of what the city has to offer, including
108
+ hidden gems, cultural hotspots, must-visit landmarks, weather forecasts, and high-level costs.
109
+
110
+ **Parameters**:
111
+ - Cities: {city}
112
+ - Interests: {interests}
113
+ - Travel Date: {travel_dates}
114
+
115
+ **Note**: {self.__tip_section()}
116
+ """
117
+ ),
118
+ expected_output="An in-depth city guide with detailed information on attractions, local customs, events, and daily activity recommendations.",
119
+ agent=agent,
120
+ )
@@ -0,0 +1,16 @@
1
+ from langchain.tools import tool
2
+
3
+
4
+ class CalculatorTools:
5
+
6
+ @tool("Make a calculation")
7
+ def calculate(self, operation):
8
+ """Useful to perform any mathematical calculations,
9
+ like sum, minus, multiplication, division, etc.
10
+ The input to this tool should be a mathematical
11
+ expression, a couple examples are `200*7` or `5000/2*10`
12
+ """
13
+ try:
14
+ return eval(operation)
15
+ except SyntaxError:
16
+ return "Error: Invalid syntax in mathematical expression"
@@ -0,0 +1,73 @@
1
+ import json
2
+ import os
3
+
4
+ import requests
5
+ from langchain.tools import tool
6
+
7
+
8
+ class SearchTools:
9
+
10
+ @tool("Search the internet")
11
+ def search_internet(self, query):
12
+ """Useful to search the internet
13
+ about a a given topic and return relevant results"""
14
+ top_result_to_return = 4
15
+ url = "https://google.serper.dev/search"
16
+ payload = json.dumps({"q": query})
17
+ headers = {
18
+ "X-API-KEY": os.environ["SERPER_API_KEY"],
19
+ "content-type": "application/json",
20
+ }
21
+ response = requests.request(
22
+ "POST", url, headers=headers, data=payload, timeout=2000
23
+ )
24
+ # check if there is an organic key
25
+ if "organic" not in response.json():
26
+ return "Sorry, I couldn't find anything about that, there could be an error with you serper api key."
27
+ else:
28
+ results = response.json()["organic"]
29
+ string = []
30
+ for result in results[:top_result_to_return]:
31
+ try:
32
+ string.append(
33
+ "\n".join(
34
+ [
35
+ f"Title: {result['title']}",
36
+ f"Link: {result['link']}",
37
+ f"Snippet: {result['snippet']}",
38
+ "\n-----------------",
39
+ ]
40
+ )
41
+ )
42
+ except KeyError:
43
+ next
44
+
45
+ return "\n".join(string)
46
+
47
+
48
+ # from pydantic import BaseModel, Field
49
+ # from langchain.tools import tool
50
+
51
+ # # Define a Pydantic model for the tool's input parameters
52
+ # class CalculationInput(BaseModel):
53
+ # operation: str = Field(..., description="The mathematical operation to perform")
54
+ # factor: float = Field(..., description="A factor by which to multiply the result of the operation")
55
+
56
+ # # Use the tool decorator with the args_schema parameter pointing to the Pydantic model
57
+ # @tool("perform_calculation", args_schema=CalculationInput, return_direct=True)
58
+ # def perform_calculation(operation: str, factor: float) -> str:
59
+ # """
60
+ # Performs a specified mathematical operation and multiplies the result by a given factor.
61
+
62
+ # Parameters:
63
+ # - operation (str): A string representing a mathematical operation (e.g., "10 + 5").
64
+ # - factor (float): A factor by which to multiply the result of the operation.
65
+
66
+ # Returns:
67
+ # - A string representation of the calculation result.
68
+ # """
69
+ # # Perform the calculation
70
+ # result = eval(operation) * factor
71
+
72
+ # # Return the result as a string
73
+ # return f"The result of '{operation}' multiplied by {factor} is {result}."
@@ -17,8 +17,11 @@ limitations under the License.
17
17
  import json
18
18
 
19
19
  from langtrace.trace_attributes import Event, LLMSpanAttributes
20
- from langtrace_python_sdk.utils import set_span_attribute, silently_fail
20
+ from langtrace_python_sdk.utils import set_span_attribute
21
+ from langtrace_python_sdk.utils.silently_fail import silently_fail
22
+
21
23
  from langtrace_python_sdk.utils.llm import (
24
+ StreamWrapper,
22
25
  get_extra_attributes,
23
26
  get_langtrace_attributes,
24
27
  get_llm_request_attributes,
@@ -26,7 +29,6 @@ from langtrace_python_sdk.utils.llm import (
26
29
  get_span_name,
27
30
  is_streaming,
28
31
  set_event_completion,
29
- set_event_completion_chunk,
30
32
  set_usage_attributes,
31
33
  )
32
34
  from opentelemetry.trace import SpanKind
@@ -83,61 +85,7 @@ def messages_create(original_method, version, tracer):
83
85
  span.end()
84
86
  raise
85
87
 
86
- def handle_streaming_response(result, span):
87
- """Process and yield streaming response chunks."""
88
- result_content = []
89
- span.add_event(Event.STREAM_START.value)
90
- input_tokens = 0
91
- output_tokens = 0
92
- try:
93
- for chunk in result:
94
- if (
95
- hasattr(chunk, "message")
96
- and chunk.message is not None
97
- and hasattr(chunk.message, "model")
98
- and chunk.message.model is not None
99
- ):
100
- span.set_attribute(
101
- SpanAttributes.LLM_RESPONSE_MODEL, chunk.message.model
102
- )
103
- content = ""
104
- if hasattr(chunk, "delta") and chunk.delta is not None:
105
- content = chunk.delta.text if hasattr(chunk.delta, "text") else ""
106
- # Assuming content needs to be aggregated before processing
107
- result_content.append(content if len(content) > 0 else "")
108
-
109
- if hasattr(chunk, "message") and hasattr(chunk.message, "usage"):
110
- input_tokens += (
111
- chunk.message.usage.input_tokens
112
- if hasattr(chunk.message.usage, "input_tokens")
113
- else 0
114
- )
115
- output_tokens += (
116
- chunk.message.usage.output_tokens
117
- if hasattr(chunk.message.usage, "output_tokens")
118
- else 0
119
- )
120
-
121
- # Assuming span.add_event is part of a larger logging or event system
122
- # Add event for each chunk of content
123
- if content:
124
- set_event_completion_chunk(span, "".join(content))
125
-
126
- # Assuming this is part of a generator, yield chunk or aggregated content
127
- yield content
128
- finally:
129
-
130
- # Finalize span after processing all chunks
131
- span.add_event(Event.STREAM_END.value)
132
- set_usage_attributes(
133
- span, {"input_tokens": input_tokens, "output_tokens": output_tokens}
134
- )
135
- completion = [{"role": "assistant", "content": "".join(result_content)}]
136
- set_event_completion(span, completion)
137
-
138
- span.set_status(StatusCode.OK)
139
- span.end()
140
-
88
+ @silently_fail
141
89
  def set_response_attributes(result, span, kwargs):
142
90
  if not is_streaming(kwargs):
143
91
  if hasattr(result, "content") and result.content is not None:
@@ -174,7 +122,7 @@ def messages_create(original_method, version, tracer):
174
122
  span.end()
175
123
  return result
176
124
  else:
177
- return handle_streaming_response(result, span)
125
+ return StreamWrapper(result, span)
178
126
 
179
127
  # return the wrapped method
180
128
  return traced_method
@@ -407,15 +407,8 @@ def chat_stream(original_method, version, tracer):
407
407
  try:
408
408
  # Attempt to call the original method
409
409
  result = wrapped(*args, **kwargs)
410
- span.add_event(Event.STREAM_START.value)
411
410
  try:
412
411
  for event in result:
413
- if hasattr(event, "text") and event.text is not None:
414
- content = event.text
415
- else:
416
- content = ""
417
- set_event_completion_chunk(span, "".join(content))
418
-
419
412
  if (
420
413
  hasattr(event, "finish_reason")
421
414
  and event.finish_reason == "COMPLETE"
@@ -496,15 +489,14 @@ def chat_stream(original_method, version, tracer):
496
489
  (usage.input_tokens or 0)
497
490
  + (usage.output_tokens or 0),
498
491
  )
499
-
500
- span.set_attribute(
501
- "search_units",
502
- usage.search_units or 0,
503
- )
492
+ if usage.search_units is not None:
493
+ span.set_attribute(
494
+ "search_units",
495
+ usage.search_units or 0,
496
+ )
504
497
 
505
498
  yield event
506
499
  finally:
507
- span.add_event(Event.STREAM_END.value)
508
500
  span.set_status(StatusCode.OK)
509
501
  span.end()
510
502
 
@@ -66,8 +66,14 @@ def patch_module_classes(
66
66
  if name.startswith("_") or name in exclude_classes:
67
67
  continue
68
68
  # loop through all public methods of the class
69
- for method_name, method in inspect.getmembers(obj, predicate=inspect.isfunction):
70
- if method_name in exclude_methods or method.__qualname__.split('.')[0] != name:
69
+ for method_name, method in inspect.getmembers(
70
+ obj, predicate=inspect.isfunction
71
+ ):
72
+ if (
73
+ method_name in exclude_methods
74
+ or method.__qualname__.split(".")[0] != name
75
+ or method_name.startswith("_")
76
+ ):
71
77
  continue
72
78
  try:
73
79
  method_path = f"{name}.{method_name}"
@@ -108,6 +114,9 @@ class LangchainCoreInstrumentation(BaseInstrumentor):
108
114
  "format",
109
115
  "format_messages",
110
116
  "format_prompt",
117
+ "__or__",
118
+ "__init__",
119
+ "__repr__",
111
120
  ]
112
121
  exclude_classes = [
113
122
  "BaseChatPromptTemplate",
@@ -125,7 +134,13 @@ class LangchainCoreInstrumentation(BaseInstrumentor):
125
134
  modules_to_patch = [
126
135
  ("langchain_core.retrievers", "retriever", generic_patch, True, True),
127
136
  ("langchain_core.prompts.chat", "prompt", generic_patch, True, True),
128
- ("langchain_core.language_models.llms", "generate", generic_patch, True, True),
137
+ (
138
+ "langchain_core.language_models.llms",
139
+ "generate",
140
+ generic_patch,
141
+ True,
142
+ True,
143
+ ),
129
144
  ("langchain_core.runnables.base", "runnable", runnable_patch, True, True),
130
145
  (
131
146
  "langchain_core.runnables.passthrough",