langtrace-python-sdk 1.2.21__py3-none-any.whl → 1.2.25__py3-none-any.whl
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.
- examples/perplexity_example/basic.py +21 -0
- langtrace_python_sdk/constants/exporter/langtrace_exporter.py +1 -1
- langtrace_python_sdk/constants/instrumentation/common.py +1 -0
- langtrace_python_sdk/extensions/langtrace_exporter.py +6 -7
- langtrace_python_sdk/instrumentation/openai/patch.py +6 -0
- langtrace_python_sdk/langtrace.py +3 -3
- langtrace_python_sdk/version.py +1 -1
- {langtrace_python_sdk-1.2.21.dist-info → langtrace_python_sdk-1.2.25.dist-info}/METADATA +63 -1
- {langtrace_python_sdk-1.2.21.dist-info → langtrace_python_sdk-1.2.25.dist-info}/RECORD +11 -10
- {langtrace_python_sdk-1.2.21.dist-info → langtrace_python_sdk-1.2.25.dist-info}/WHEEL +0 -0
- {langtrace_python_sdk-1.2.21.dist-info → langtrace_python_sdk-1.2.25.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from openai import OpenAI
|
|
2
|
+
|
|
3
|
+
from langtrace_python_sdk import langtrace
|
|
4
|
+
from langtrace_python_sdk.utils.with_root_span import (
|
|
5
|
+
with_additional_attributes, with_langtrace_root_span)
|
|
6
|
+
|
|
7
|
+
# _ = load_dotenv(find_dotenv())
|
|
8
|
+
|
|
9
|
+
langtrace.init(batch=False, write_to_langtrace_cloud=False, debug_log_to_console=True)
|
|
10
|
+
client = OpenAI(base_url="https://api.perplexity.ai", api_key="PPLX_API_KEY")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@with_additional_attributes({"user.id": "1234", "user.feedback.rating": 1})
|
|
14
|
+
def basic():
|
|
15
|
+
response = client.chat.completions.create(
|
|
16
|
+
model="pplx-70b-online",
|
|
17
|
+
messages=[{"role": "user", "content": "What is the capital of France?"}],
|
|
18
|
+
stream=False,
|
|
19
|
+
)
|
|
20
|
+
print(response)
|
|
21
|
+
return response
|
|
@@ -1 +1 @@
|
|
|
1
|
-
LANGTRACE_REMOTE_URL = "https://langtrace.ai
|
|
1
|
+
LANGTRACE_REMOTE_URL = "https://langtrace.ai"
|
|
@@ -2,13 +2,12 @@ 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
|
-
)
|
|
8
5
|
import requests
|
|
9
6
|
from opentelemetry.sdk.trace.export import ReadableSpan, SpanExporter, SpanExportResult
|
|
10
7
|
from opentelemetry.trace.span import format_trace_id
|
|
11
8
|
|
|
9
|
+
from langtrace_python_sdk.constants.exporter.langtrace_exporter import LANGTRACE_REMOTE_URL
|
|
10
|
+
|
|
12
11
|
|
|
13
12
|
class LangTraceExporter(SpanExporter):
|
|
14
13
|
"""
|
|
@@ -49,9 +48,10 @@ class LangTraceExporter(SpanExporter):
|
|
|
49
48
|
api_key: str
|
|
50
49
|
write_to_remote_url: bool
|
|
51
50
|
|
|
52
|
-
def __init__(self, api_key: str = None, write_to_remote_url: bool = False) -> None:
|
|
53
|
-
self.api_key = api_key
|
|
51
|
+
def __init__(self, api_key: str = None, write_to_remote_url: bool = False, api_host: typing.Optional[str] = None) -> None:
|
|
52
|
+
self.api_key = api_key or os.environ.get("LANGTRACE_API_KEY")
|
|
54
53
|
self.write_to_remote_url = write_to_remote_url
|
|
54
|
+
self.api_host: str = api_host or LANGTRACE_REMOTE_URL
|
|
55
55
|
|
|
56
56
|
if self.write_to_remote_url and not self.api_key:
|
|
57
57
|
raise ValueError("No API key provided")
|
|
@@ -66,7 +66,6 @@ class LangTraceExporter(SpanExporter):
|
|
|
66
66
|
Returns:
|
|
67
67
|
The result of the export SUCCESS or FAILURE
|
|
68
68
|
"""
|
|
69
|
-
|
|
70
69
|
data = [
|
|
71
70
|
{
|
|
72
71
|
"traceId": format_trace_id(span.get_span_context().trace_id),
|
|
@@ -86,7 +85,7 @@ class LangTraceExporter(SpanExporter):
|
|
|
86
85
|
# Send data to remote URL
|
|
87
86
|
try:
|
|
88
87
|
requests.post(
|
|
89
|
-
url=
|
|
88
|
+
url=f"{self.api_host}/api/trace",
|
|
90
89
|
data=json.dumps(data),
|
|
91
90
|
headers={"Content-Type": "application/json", "x-api-key": self.api_key},
|
|
92
91
|
)
|
|
@@ -97,6 +97,12 @@ def chat_completions_create(original_method, version, tracer):
|
|
|
97
97
|
else ""
|
|
98
98
|
)
|
|
99
99
|
service_provider = SERVICE_PROVIDERS["OPENAI"]
|
|
100
|
+
# If base url contains perplexity or azure, set the service provider accordingly
|
|
101
|
+
if "perplexity" in base_url:
|
|
102
|
+
service_provider = SERVICE_PROVIDERS["PPLX"]
|
|
103
|
+
elif "azure" in base_url:
|
|
104
|
+
service_provider = SERVICE_PROVIDERS["AZURE"]
|
|
105
|
+
|
|
100
106
|
extra_attributes = baggage.get_baggage(LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY)
|
|
101
107
|
|
|
102
108
|
span_attributes = {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
from typing import Optional
|
|
2
2
|
from opentelemetry import trace
|
|
3
3
|
from opentelemetry.sdk.trace import TracerProvider
|
|
4
4
|
from opentelemetry.sdk.trace.export import (
|
|
@@ -40,12 +40,12 @@ def init(
|
|
|
40
40
|
write_to_langtrace_cloud: bool = True,
|
|
41
41
|
debug_log_to_console: bool = False,
|
|
42
42
|
custom_remote_exporter=None,
|
|
43
|
+
api_host: Optional[str] = None,
|
|
43
44
|
):
|
|
44
|
-
|
|
45
45
|
provider = TracerProvider()
|
|
46
46
|
|
|
47
47
|
remote_write_exporter = (
|
|
48
|
-
LangTraceExporter(api_key, write_to_langtrace_cloud)
|
|
48
|
+
LangTraceExporter(api_key, write_to_langtrace_cloud, api_host=api_host)
|
|
49
49
|
if custom_remote_exporter is None
|
|
50
50
|
else custom_remote_exporter
|
|
51
51
|
)
|
langtrace_python_sdk/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "1.2.
|
|
1
|
+
__version__ = "1.2.25"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: langtrace-python-sdk
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.25
|
|
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>
|
|
@@ -72,6 +72,68 @@ from langtrace_python_sdk import langtrace # Must precede any llm module imports
|
|
|
72
72
|
langtrace.init() # LANGTRACE_API_KEY as an ENVIRONMENT variable
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
+
## FastAPI Quick Start
|
|
76
|
+
Initialize FastAPI project and add this inside the ```main.py``` file
|
|
77
|
+
|
|
78
|
+
```python
|
|
79
|
+
from fastapi import FastAPI
|
|
80
|
+
from langtrace_python_sdk import langtrace
|
|
81
|
+
from openai import OpenAI
|
|
82
|
+
|
|
83
|
+
langtrace.init()
|
|
84
|
+
app = FastAPI()
|
|
85
|
+
client = OpenAI()
|
|
86
|
+
|
|
87
|
+
@app.get("/")
|
|
88
|
+
def root():
|
|
89
|
+
client.chat.completions.create(
|
|
90
|
+
model="gpt-4",
|
|
91
|
+
messages=[{"role": "user", "content": "Say this is a test three times"}],
|
|
92
|
+
stream=False,
|
|
93
|
+
)
|
|
94
|
+
return {"Hello": "World"}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Django Quick Start
|
|
98
|
+
Initialize django project and add this inside the ```__init.py__``` file
|
|
99
|
+
```python
|
|
100
|
+
from langtrace_python_sdk import langtrace
|
|
101
|
+
from openai import OpenAI
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
langtrace.init()
|
|
105
|
+
client = OpenAI()
|
|
106
|
+
|
|
107
|
+
client.chat.completions.create(
|
|
108
|
+
model="gpt-4",
|
|
109
|
+
messages=[{"role": "user", "content": "Say this is a test three times"}],
|
|
110
|
+
stream=False,
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Flask Quick Start
|
|
116
|
+
Initialize flask project and this inside ```app.py``` file
|
|
117
|
+
```python
|
|
118
|
+
from flask import Flask
|
|
119
|
+
from langtrace_python_sdk import langtrace
|
|
120
|
+
from openai import OpenAI
|
|
121
|
+
|
|
122
|
+
langtrace.init()
|
|
123
|
+
client = OpenAI()
|
|
124
|
+
app = Flask(__name__)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@app.route("/")
|
|
128
|
+
def main():
|
|
129
|
+
client.chat.completions.create(
|
|
130
|
+
model="gpt-4",
|
|
131
|
+
messages=[{"role": "user", "content": "Say this is a test three times"}],
|
|
132
|
+
stream=False,
|
|
133
|
+
)
|
|
134
|
+
return "Hello, World!"
|
|
135
|
+
```
|
|
136
|
+
|
|
75
137
|
## Langtrace Self Hosted
|
|
76
138
|
|
|
77
139
|
Get started by adding simply two lines to your code and see traces being logged to the console!
|
|
@@ -14,21 +14,22 @@ examples/openai/chat_completion.py,sha256=ynVWdvEwDxNPpkWu9fv4al7_1mm3rFilFvqkrc
|
|
|
14
14
|
examples/openai/embeddings_create.py,sha256=AhDNAqg-WzRYLJAE_b2RKGjuVCh4aZSU7MxcZv2kCHQ,518
|
|
15
15
|
examples/openai/function_calling.py,sha256=Zd1gkl1TU-g_cxXox3_8vmFRZVyZSyyLaboEJLc6N2A,2375
|
|
16
16
|
examples/openai/images_generate.py,sha256=ZioxTuHKE_yYlhpESqXKVzdkiwdegkmLVB7N8T2LU00,506
|
|
17
|
+
examples/perplexity_example/basic.py,sha256=jEqZnY9cmDezMAwMvKaZeRk7vW1H68Zc2de3gDnb6hg,704
|
|
17
18
|
examples/pinecone_example/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
19
|
examples/pinecone_example/basic.py,sha256=hdV6-5Fmol9zeyFzDtdabD62vkqUJ4lCHG2YcVNpIpI,933
|
|
19
20
|
langtrace_python_sdk/__init__.py,sha256=SlHg447-nQBbw8exRNJP_OyHUZ39Sldb7aaQ35hIRm8,262
|
|
20
|
-
langtrace_python_sdk/langtrace.py,sha256=
|
|
21
|
-
langtrace_python_sdk/version.py,sha256=
|
|
21
|
+
langtrace_python_sdk/langtrace.py,sha256=0gT4eCn8-hSSfI-B5zxUmd7weHvuCsnS4B7N4EmFzHs,3251
|
|
22
|
+
langtrace_python_sdk/version.py,sha256=9j001fhDZzLSWs6YCbGQFuK5ERX5EUWz3RKLN8l5JS8,23
|
|
22
23
|
langtrace_python_sdk/constants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
|
-
langtrace_python_sdk/constants/exporter/langtrace_exporter.py,sha256=
|
|
24
|
+
langtrace_python_sdk/constants/exporter/langtrace_exporter.py,sha256=5MNjnAOg-4am78J3gVMH6FSwq5N8TOj72ugkhsw4vi0,46
|
|
24
25
|
langtrace_python_sdk/constants/instrumentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
26
|
langtrace_python_sdk/constants/instrumentation/anthropic.py,sha256=YX3llt3zwDY6XrYk3CB8WEVqgrzRXEw_ffyk56JoF3k,126
|
|
26
27
|
langtrace_python_sdk/constants/instrumentation/chroma.py,sha256=hiPGYdHS0Yj4Kh3eaYBbuCAl_swqIygu80yFqkOgdak,955
|
|
27
|
-
langtrace_python_sdk/constants/instrumentation/common.py,sha256=
|
|
28
|
+
langtrace_python_sdk/constants/instrumentation/common.py,sha256=cLJDG_wbTZnoy0sQRjTbuouWs6vuCUvhM_gRATeKY1o,628
|
|
28
29
|
langtrace_python_sdk/constants/instrumentation/openai.py,sha256=9VF6ic9Ed3bpSvdp6iNmrpx2Ppo6DPav3hoUcqSQSv0,1048
|
|
29
30
|
langtrace_python_sdk/constants/instrumentation/pinecone.py,sha256=Xaqqw-xBO0JJLGk75hiCUQGztNm0HiVaLQvjtYK7VJM,472
|
|
30
31
|
langtrace_python_sdk/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
|
-
langtrace_python_sdk/extensions/langtrace_exporter.py,sha256=
|
|
32
|
+
langtrace_python_sdk/extensions/langtrace_exporter.py,sha256=K-grSUEBkSGfo_LwyyZDr_iz3oDy1mHnx34FfD-qFSQ,4067
|
|
32
33
|
langtrace_python_sdk/instrumentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
34
|
langtrace_python_sdk/instrumentation/anthropic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
35
|
langtrace_python_sdk/instrumentation/anthropic/instrumentation.py,sha256=DTvz6fNMMxYc2z6oqOveBX6mIXHoOFeOoosyXB2HJ6Y,1159
|
|
@@ -50,14 +51,14 @@ langtrace_python_sdk/instrumentation/llamaindex/instrumentation.py,sha256=wVSvxS
|
|
|
50
51
|
langtrace_python_sdk/instrumentation/llamaindex/patch.py,sha256=NqBsPM4eE3yMu1aIev8p8yH5Thsv72JL68ABEZNe2ug,2043
|
|
51
52
|
langtrace_python_sdk/instrumentation/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
52
53
|
langtrace_python_sdk/instrumentation/openai/instrumentation.py,sha256=stlFopPggB8mgnn4QdVh41rmA8mlzH5x-C00XHfApCE,1408
|
|
53
|
-
langtrace_python_sdk/instrumentation/openai/patch.py,sha256=
|
|
54
|
+
langtrace_python_sdk/instrumentation/openai/patch.py,sha256=0XPs8KNHxBZ-L_L_M4GThq0z3xZaE4C9NT1pcxc3k2o,15617
|
|
54
55
|
langtrace_python_sdk/instrumentation/pinecone/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
56
|
langtrace_python_sdk/instrumentation/pinecone/instrumentation.py,sha256=o0EUd5jvHaDKOUTj4NjnL5UfDHDHxyXkWGlTW4oeRDk,1784
|
|
56
57
|
langtrace_python_sdk/instrumentation/pinecone/patch.py,sha256=5lF7hQmg2-U2EWtOC0w8_peRaNMysBomb0fjiNoS6eQ,2200
|
|
57
58
|
langtrace_python_sdk/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
58
59
|
langtrace_python_sdk/utils/llm.py,sha256=4z2e-md_ELXCEuOIRVWracR6qH2pmsOxCqpkuF9_3Nw,1589
|
|
59
60
|
langtrace_python_sdk/utils/with_root_span.py,sha256=N7ONrcF0myZbHBy5gpQffDbX-Kf63Crsz9szG0i3m08,1889
|
|
60
|
-
langtrace_python_sdk-1.2.
|
|
61
|
-
langtrace_python_sdk-1.2.
|
|
62
|
-
langtrace_python_sdk-1.2.
|
|
63
|
-
langtrace_python_sdk-1.2.
|
|
61
|
+
langtrace_python_sdk-1.2.25.dist-info/METADATA,sha256=LJykh5FPkALqNHlY9yFiMtVEe7k8ReIqEh4cwth8BcY,9018
|
|
62
|
+
langtrace_python_sdk-1.2.25.dist-info/WHEEL,sha256=as-1oFTWSeWBgyzh0O_qF439xqBe6AbBgt4MfYe5zwY,87
|
|
63
|
+
langtrace_python_sdk-1.2.25.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
64
|
+
langtrace_python_sdk-1.2.25.dist-info/RECORD,,
|
|
File without changes
|
{langtrace_python_sdk-1.2.21.dist-info → langtrace_python_sdk-1.2.25.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|