langtrace-python-sdk 1.2.5__tar.gz → 1.2.7__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 (67) hide show
  1. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/PKG-INFO +15 -1
  2. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/pyproject.toml +22 -2
  3. langtrace_python_sdk-1.2.7/src/langtrace_python_sdk/constants/exporter/langtrace_exporter.py +1 -0
  4. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/extensions/langtrace_exporter.py +8 -14
  5. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/anthropic/patch.py +13 -2
  6. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/langtrace.py +6 -4
  7. langtrace_python_sdk-1.2.7/src/langtrace_python_sdk/version.py +1 -0
  8. langtrace_python_sdk-1.2.5/src/langtrace_python_sdk/version.py +0 -1
  9. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/.gitignore +0 -0
  10. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/LICENSE +0 -0
  11. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/README.md +0 -0
  12. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/__init__.py +0 -0
  13. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/__init__.py +0 -0
  14. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/anthropic_example/__init__.py +0 -0
  15. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/anthropic_example/completion.py +0 -0
  16. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/chroma_example/__init__.py +0 -0
  17. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/chroma_example/basic.py +0 -0
  18. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/langchain_example/__init__.py +0 -0
  19. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/langchain_example/basic.py +0 -0
  20. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/langchain_example/tool.py +0 -0
  21. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/llamaindex_example/__init__.py +0 -0
  22. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/llamaindex_example/basic.py +0 -0
  23. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/llamaindex_example/data/abramov.txt +0 -0
  24. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/openai/__init__.py +0 -0
  25. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/openai/chat_completion.py +0 -0
  26. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/openai/embeddings_create.py +0 -0
  27. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/openai/function_calling.py +0 -0
  28. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/openai/images_generate.py +0 -0
  29. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/pinecone_example/__init__.py +0 -0
  30. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/examples/pinecone_example/basic.py +0 -0
  31. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/__init__.py +0 -0
  32. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/constants/__init__.py +0 -0
  33. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/constants/instrumentation/__init__.py +0 -0
  34. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/constants/instrumentation/anthropic.py +0 -0
  35. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/constants/instrumentation/chroma.py +0 -0
  36. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/constants/instrumentation/common.py +0 -0
  37. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/constants/instrumentation/openai.py +0 -0
  38. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/constants/instrumentation/pinecone.py +0 -0
  39. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/extensions/__init__.py +0 -0
  40. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/__init__.py +0 -0
  41. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/anthropic/__init__.py +0 -0
  42. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/anthropic/instrumentation.py +0 -0
  43. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/chroma/__init__.py +0 -0
  44. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/chroma/instrumentation.py +0 -0
  45. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/chroma/patch.py +0 -0
  46. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/langchain/__init__.py +0 -0
  47. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/langchain/instrumentation.py +0 -0
  48. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/langchain/patch.py +0 -0
  49. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/langchain_community/__init__.py +0 -0
  50. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/langchain_community/instrumentation.py +0 -0
  51. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/langchain_community/patch.py +0 -0
  52. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/langchain_core/__init__.py +0 -0
  53. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/langchain_core/instrumentation.py +0 -0
  54. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/langchain_core/patch.py +0 -0
  55. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/llamaindex/__init__.py +0 -0
  56. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/llamaindex/instrumentation.py +0 -0
  57. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/llamaindex/patch.py +0 -0
  58. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/openai/__init__.py +0 -0
  59. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/openai/instrumentation.py +0 -0
  60. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/openai/patch.py +0 -0
  61. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/pinecone/__init__.py +0 -0
  62. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/pinecone/instrumentation.py +0 -0
  63. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/instrumentation/pinecone/patch.py +0 -0
  64. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/utils/__init__.py +0 -0
  65. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/utils/llm.py +0 -0
  66. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/langtrace_python_sdk/utils/with_root_span.py +0 -0
  67. {langtrace_python_sdk-1.2.5 → langtrace_python_sdk-1.2.7}/src/run_example.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: langtrace-python-sdk
3
- Version: 1.2.5
3
+ Version: 1.2.7
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>
@@ -10,6 +10,20 @@ Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or l
10
10
  Classifier: Operating System :: OS Independent
11
11
  Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: >=3.9
13
+ Requires-Dist: opentelemetry-api
14
+ Requires-Dist: opentelemetry-instrumentation
15
+ Requires-Dist: opentelemetry-sdk
16
+ Requires-Dist: pinecone-client
17
+ Requires-Dist: tiktoken
18
+ Requires-Dist: trace-attributes
19
+ Provides-Extra: dev
20
+ Requires-Dist: anthropic; extra == 'dev'
21
+ Requires-Dist: chromadb; extra == 'dev'
22
+ Requires-Dist: langchain; extra == 'dev'
23
+ Requires-Dist: langchain-openai; extra == 'dev'
24
+ Requires-Dist: llama-index; extra == 'dev'
25
+ Requires-Dist: openai; extra == 'dev'
26
+ Requires-Dist: python-dotenv; extra == 'dev'
13
27
  Description-Content-Type: text/markdown
14
28
 
15
29
  # What is Langtrace?
@@ -17,10 +17,30 @@ classifiers=[
17
17
  "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
18
18
  "Operating System :: OS Independent",
19
19
  ]
20
- dependencies = []
20
+ dependencies = [
21
+ 'trace-attributes',
22
+ 'opentelemetry-api',
23
+ 'opentelemetry-sdk',
24
+ 'opentelemetry-instrumentation',
25
+ 'pinecone-client',
26
+ 'tiktoken'
27
+ ]
21
28
 
22
29
  requires-python = ">=3.9"
23
30
 
31
+ [project.optional-dependencies]
32
+ dev = [
33
+ "openai",
34
+ "anthropic",
35
+ "python-dotenv",
36
+ "langchain",
37
+ "langchain-openai",
38
+ "llama-index",
39
+ "langchain-openai",
40
+ "chromadb"
41
+ ]
42
+
43
+
24
44
 
25
45
  [project.urls]
26
46
  Homepage = "https://github.com/Scale3-Labs/langtrace-python-sdk"
@@ -35,7 +55,7 @@ include = [
35
55
  ]
36
56
 
37
57
  [tool.hatch.build.targets.wheel]
38
- packages = ["src/langtrace_python_sdk"]
58
+ packages = ["src/langtrace_python_sdk", "src/examples"]
39
59
 
40
60
  # [tool.semantic_release]
41
61
  # version_variable = "pyproject.toml:version" # version location
@@ -0,0 +1 @@
1
+ LANGTRACE_REMOTE_URL = "https://app.langtrace.ai/api/trace"
@@ -2,9 +2,11 @@ import json
2
2
  import os
3
3
  import typing
4
4
 
5
+ from langtrace_python_sdk.constants.exporter.langtrace_exporter import (
6
+ LANGTRACE_REMOTE_URL,
7
+ )
5
8
  import requests
6
- from opentelemetry.sdk.trace.export import (ReadableSpan, SpanExporter,
7
- SpanExportResult)
9
+ from opentelemetry.sdk.trace.export import ReadableSpan, SpanExporter, SpanExportResult
8
10
  from opentelemetry.trace.span import format_trace_id
9
11
 
10
12
 
@@ -22,7 +24,6 @@ class LangTraceExporter(SpanExporter):
22
24
  **Attributes:**
23
25
 
24
26
  * `api_key` (str): An API key to authenticate with the LangTrace collector (required).
25
- * `url` (str): The URL of the LangTrace collector endpoint (required if `write_to_remote_url` is True).
26
27
  * `write_to_remote_url` (bool): A flag indicating whether to send spans to the remote URL (defaults to False).
27
28
 
28
29
  **Methods:**
@@ -46,22 +47,15 @@ class LangTraceExporter(SpanExporter):
46
47
  """
47
48
 
48
49
  api_key: str
49
- url: str
50
50
  write_to_remote_url: bool
51
51
 
52
- def __init__(
53
- self, api_key: str = None, url: str = None, write_to_remote_url: bool = False
54
- ) -> None:
55
- self.api_key = api_key if api_key else os.environ.get("API_KEY")
56
- self.url = url if url else os.environ.get("URL")
52
+ def __init__(self, api_key: str = None, write_to_remote_url: bool = False) -> None:
53
+ self.api_key = api_key if api_key else os.environ.get("LANGTRACE_API_KEY")
57
54
  self.write_to_remote_url = write_to_remote_url
58
55
 
59
56
  if self.write_to_remote_url and not self.api_key:
60
57
  raise ValueError("No API key provided")
61
58
 
62
- if self.write_to_remote_url and not self.url:
63
- raise ValueError("No URL provided")
64
-
65
59
  def export(self, spans: typing.Sequence[ReadableSpan]) -> SpanExportResult:
66
60
  """
67
61
  Exports a batch of telemetry data.
@@ -92,11 +86,11 @@ class LangTraceExporter(SpanExporter):
92
86
  # Send data to remote URL
93
87
  try:
94
88
  requests.post(
95
- url=self.url,
89
+ url=LANGTRACE_REMOTE_URL,
96
90
  data=json.dumps(data),
97
91
  headers={"Content-Type": "application/json", "x-api-key": self.api_key},
98
92
  )
99
- print(f"Traces sent To {self.url}")
93
+ print(f"Traces sent To {LANGTRACE_REMOTE_URL}")
100
94
  return SpanExportResult.SUCCESS
101
95
  except Exception as e:
102
96
  print("Error sending data to remote URL", e)
@@ -8,7 +8,8 @@ from opentelemetry.trace import SpanKind
8
8
  from opentelemetry.trace.status import Status, StatusCode
9
9
 
10
10
  from langtrace_python_sdk.constants.instrumentation.anthropic import APIS
11
- from langtrace_python_sdk.constants.instrumentation.common import SERVICE_PROVIDERS
11
+ from langtrace_python_sdk.constants.instrumentation.common import \
12
+ SERVICE_PROVIDERS
12
13
 
13
14
 
14
15
  def messages_create(original_method, version, tracer):
@@ -21,6 +22,16 @@ def messages_create(original_method, version, tracer):
21
22
  else ""
22
23
  )
23
24
  service_provider = SERVICE_PROVIDERS["ANTHROPIC"]
25
+
26
+ # extract system from kwargs and attach as a role to the prompts
27
+ # we do this to keep it consistent with the openai
28
+ prompts = json.dumps(kwargs.get("messages", []))
29
+ system = kwargs.get("system")
30
+ if system:
31
+ prompts = json.dumps(
32
+ [{"role": "system", "content": system}] + kwargs.get("messages", [])
33
+ )
34
+
24
35
  span_attributes = {
25
36
  "langtrace.service.name": service_provider,
26
37
  "langtrace.service.type": "llm",
@@ -29,7 +40,7 @@ def messages_create(original_method, version, tracer):
29
40
  "url.full": base_url,
30
41
  "llm.api": APIS["MESSAGES_CREATE"]["ENDPOINT"],
31
42
  "llm.model": kwargs.get("model"),
32
- "llm.prompts": json.dumps(kwargs.get("messages", [])),
43
+ "llm.prompts": prompts,
33
44
  "llm.stream": kwargs.get("stream"),
34
45
  }
35
46
 
@@ -37,17 +37,19 @@ def init(
37
37
  api_key: str = None,
38
38
  batch: bool = True,
39
39
  write_to_langtrace_cloud: bool = True,
40
- remote_url: str = None,
41
40
  debug_log_to_console: bool = False,
42
- custom_remote_exporter = None
41
+ custom_remote_exporter=None,
43
42
  ):
44
43
 
45
44
  provider = TracerProvider()
46
45
 
47
- remote_write_exporter = LangTraceExporter(api_key, remote_url, write_to_langtrace_cloud) if custom_remote_exporter is None else custom_remote_exporter
46
+ remote_write_exporter = (
47
+ LangTraceExporter(api_key, write_to_langtrace_cloud)
48
+ if custom_remote_exporter is None
49
+ else custom_remote_exporter
50
+ )
48
51
  console_exporter = ConsoleSpanExporter()
49
52
  batch_processor_remote = BatchSpanProcessor(remote_write_exporter)
50
- simple_processor_remote = SimpleSpanProcessor(remote_write_exporter)
51
53
  batch_processor_console = BatchSpanProcessor(console_exporter)
52
54
  simple_processor_console = SimpleSpanProcessor(console_exporter)
53
55
 
@@ -0,0 +1 @@
1
+ __version__ = "1.2.7"
@@ -1 +0,0 @@
1
- __version__ = "1.2.5"