langtrace-python-sdk 2.1.12__py3-none-any.whl → 2.1.14__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/__init__.py +1 -0
- examples/anthropic_example/__init__.py +8 -0
- examples/anthropic_example/completion.py +1 -2
- examples/chroma_example/__init__.py +8 -1
- examples/chroma_example/basic.py +1 -1
- examples/cohere_example/__init__.py +17 -0
- examples/cohere_example/chat.py +1 -1
- examples/cohere_example/chat_stream.py +1 -1
- examples/cohere_example/embed.py +1 -1
- examples/cohere_example/rerank.py +1 -1
- examples/cohere_example/tools.py +1 -1
- examples/fastapi_example/__init__.py +6 -0
- examples/fastapi_example/basic_route.py +2 -0
- examples/langchain_example/__init__.py +10 -0
- examples/langchain_example/basic.py +3 -3
- examples/llamaindex_example/__init__.py +11 -0
- examples/llamaindex_example/agent.py +4 -3
- examples/llamaindex_example/basic.py +2 -2
- examples/openai_example/__init__.py +21 -0
- examples/openai_example/async_tool_calling_nonstreaming.py +3 -3
- examples/openai_example/async_tool_calling_streaming.py +2 -1
- examples/openai_example/chat_completion.py +3 -3
- examples/openai_example/embeddings_create.py +2 -2
- examples/openai_example/function_calling.py +3 -2
- examples/openai_example/images_edit.py +40 -0
- examples/openai_example/resources/lounge_flamingo.png +0 -0
- examples/openai_example/resources/mask.png +0 -0
- examples/pinecone_example/__init__.py +9 -0
- examples/pinecone_example/basic.py +7 -2
- examples/qdrant_example/__init__.py +8 -0
- examples/weaviate_example/__init__.py +26 -0
- examples/weaviate_example/query_text.py +12 -8
- langtrace_python_sdk/__init__.py +6 -1
- langtrace_python_sdk/constants/instrumentation/openai.py +4 -0
- langtrace_python_sdk/instrumentation/openai/instrumentation.py +9 -1
- langtrace_python_sdk/instrumentation/openai/patch.py +85 -3
- langtrace_python_sdk/version.py +1 -1
- {langtrace_python_sdk-2.1.12.dist-info → langtrace_python_sdk-2.1.14.dist-info}/METADATA +8 -7
- {langtrace_python_sdk-2.1.12.dist-info → langtrace_python_sdk-2.1.14.dist-info}/RECORD +41 -36
- {langtrace_python_sdk-2.1.12.dist-info → langtrace_python_sdk-2.1.14.dist-info}/WHEEL +0 -0
- {langtrace_python_sdk-2.1.12.dist-info → langtrace_python_sdk-2.1.14.dist-info}/licenses/LICENSE +0 -0
examples/__init__.py
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -7,12 +7,11 @@ from langtrace_python_sdk import langtrace, with_langtrace_root_span
|
|
|
7
7
|
|
|
8
8
|
_ = load_dotenv(find_dotenv())
|
|
9
9
|
|
|
10
|
-
langtrace.init(
|
|
10
|
+
langtrace.init()
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
@with_langtrace_root_span("messages_create")
|
|
14
14
|
def messages_create():
|
|
15
|
-
|
|
16
15
|
client = anthropic.Anthropic()
|
|
17
16
|
|
|
18
17
|
message = client.messages.create(
|
examples/chroma_example/basic.py
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from examples.cohere_example.chat import chat_comp
|
|
2
|
+
from examples.cohere_example.chat_stream import chat_stream
|
|
3
|
+
from examples.cohere_example.tools import tool_calling
|
|
4
|
+
from examples.cohere_example.embed import embed
|
|
5
|
+
from examples.cohere_example.rerank import rerank
|
|
6
|
+
from langtrace_python_sdk import with_langtrace_root_span
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class CohereRunner:
|
|
10
|
+
|
|
11
|
+
@with_langtrace_root_span("Cohere")
|
|
12
|
+
def run(self):
|
|
13
|
+
chat_comp()
|
|
14
|
+
chat_stream()
|
|
15
|
+
tool_calling()
|
|
16
|
+
embed()
|
|
17
|
+
rerank()
|
examples/cohere_example/chat.py
CHANGED
examples/cohere_example/embed.py
CHANGED
examples/cohere_example/tools.py
CHANGED
|
@@ -7,7 +7,9 @@ from langchain_openai import ChatOpenAI, OpenAIEmbeddings
|
|
|
7
7
|
from openai import OpenAI
|
|
8
8
|
|
|
9
9
|
from langtrace_python_sdk import langtrace
|
|
10
|
+
from dotenv import load_dotenv
|
|
10
11
|
|
|
12
|
+
load_dotenv()
|
|
11
13
|
langtrace.init(write_spans_to_console=True)
|
|
12
14
|
app = FastAPI()
|
|
13
15
|
client = OpenAI()
|
|
@@ -18,7 +18,7 @@ _ = load_dotenv(find_dotenv())
|
|
|
18
18
|
langtrace.init()
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
@with_additional_attributes({"user.id": "1234", "user.feedback.rating": 1})
|
|
21
|
+
# @with_additional_attributes({"user.id": "1234", "user.feedback.rating": 1})
|
|
22
22
|
def api_call_1():
|
|
23
23
|
llm = ChatOpenAI()
|
|
24
24
|
prompt = ChatPromptTemplate.from_messages(
|
|
@@ -33,7 +33,7 @@ def api_call_1():
|
|
|
33
33
|
print(res)
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
@with_additional_attributes({"user.id": "37373", "user.feedback.rating": 1})
|
|
36
|
+
# @with_additional_attributes({"user.id": "37373", "user.feedback.rating": 1})
|
|
37
37
|
def api_call_2():
|
|
38
38
|
llm = ChatOpenAI()
|
|
39
39
|
prompt = ChatPromptTemplate.from_messages(
|
|
@@ -49,7 +49,7 @@ def api_call_2():
|
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
@with_langtrace_root_span()
|
|
52
|
-
def
|
|
52
|
+
def basic_app():
|
|
53
53
|
api_call_1()
|
|
54
54
|
api_call_2()
|
|
55
55
|
|
|
@@ -12,7 +12,7 @@ import nest_asyncio
|
|
|
12
12
|
|
|
13
13
|
nest_asyncio.apply()
|
|
14
14
|
|
|
15
|
-
langtrace.init(write_spans_to_console=
|
|
15
|
+
langtrace.init(write_spans_to_console=False)
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
def multiply(a: int, b: int) -> int:
|
|
@@ -82,5 +82,6 @@ class YourOpenAIAgent:
|
|
|
82
82
|
|
|
83
83
|
|
|
84
84
|
# agent = YourOpenAIAgent(tools=[multiply_tool, add_tool])
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
def main():
|
|
86
|
+
llm = OpenAI(model="gpt-3.5-turbo-0613")
|
|
87
|
+
agent = OpenAIAgent.from_tools([multiply_tool, add_tool], llm=llm, verbose=True)
|
|
@@ -7,11 +7,11 @@ from langtrace_python_sdk.utils.with_root_span import with_langtrace_root_span
|
|
|
7
7
|
_ = load_dotenv(find_dotenv())
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
langtrace.init(write_spans_to_console=
|
|
10
|
+
langtrace.init(write_spans_to_console=False)
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
@with_langtrace_root_span()
|
|
14
|
-
def
|
|
14
|
+
def basic_app():
|
|
15
15
|
documents = SimpleDirectoryReader(
|
|
16
16
|
"src/examples/llamaindex_example/data"
|
|
17
17
|
).load_data()
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from langtrace_python_sdk import with_langtrace_root_span
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class OpenAIRunner:
|
|
5
|
+
@with_langtrace_root_span("OpenAI")
|
|
6
|
+
def run(self):
|
|
7
|
+
import asyncio
|
|
8
|
+
from .async_tool_calling_nonstreaming import run_conversation
|
|
9
|
+
from .async_tool_calling_streaming import (
|
|
10
|
+
run_conversation as run_conversation_streaming,
|
|
11
|
+
)
|
|
12
|
+
from .chat_completion import chat_completion as chat_completion_example
|
|
13
|
+
from .embeddings_create import embeddings_create as embeddings_create_example
|
|
14
|
+
from .function_calling import function_calling as function_example
|
|
15
|
+
from .images_edit import image_edit
|
|
16
|
+
|
|
17
|
+
asyncio.run(run_conversation())
|
|
18
|
+
asyncio.run(run_conversation_streaming())
|
|
19
|
+
chat_completion_example()
|
|
20
|
+
embeddings_create_example()
|
|
21
|
+
function_example()
|
|
@@ -3,13 +3,12 @@ import json
|
|
|
3
3
|
from dotenv import find_dotenv, load_dotenv
|
|
4
4
|
from openai import AsyncOpenAI
|
|
5
5
|
|
|
6
|
-
from langtrace_python_sdk import langtrace
|
|
6
|
+
from langtrace_python_sdk import langtrace, with_langtrace_root_span
|
|
7
7
|
|
|
8
|
-
# from langtrace_python_sdk.utils.with_root_span import with_langtrace_root_span
|
|
9
8
|
|
|
10
9
|
_ = load_dotenv(find_dotenv())
|
|
11
10
|
|
|
12
|
-
langtrace.init(
|
|
11
|
+
langtrace.init()
|
|
13
12
|
|
|
14
13
|
client = AsyncOpenAI()
|
|
15
14
|
|
|
@@ -30,6 +29,7 @@ def get_current_weather(location, unit="fahrenheit"):
|
|
|
30
29
|
return json.dumps({"location": location, "temperature": "unknown"})
|
|
31
30
|
|
|
32
31
|
|
|
32
|
+
@with_langtrace_root_span("Run Conversation")
|
|
33
33
|
async def run_conversation():
|
|
34
34
|
# Step 1: send the conversation and available functions to the model
|
|
35
35
|
messages = [
|
|
@@ -3,7 +3,7 @@ import json
|
|
|
3
3
|
from dotenv import find_dotenv, load_dotenv
|
|
4
4
|
from openai import AsyncOpenAI
|
|
5
5
|
|
|
6
|
-
from langtrace_python_sdk import langtrace
|
|
6
|
+
from langtrace_python_sdk import langtrace, with_langtrace_root_span
|
|
7
7
|
|
|
8
8
|
# from langtrace_python_sdk.utils.with_root_span import with_langtrace_root_span
|
|
9
9
|
|
|
@@ -42,6 +42,7 @@ def get_current_time(location):
|
|
|
42
42
|
return json.dumps({"location": location, "time": "unknown"})
|
|
43
43
|
|
|
44
44
|
|
|
45
|
+
@with_langtrace_root_span("Run Conversation Streaming")
|
|
45
46
|
async def run_conversation():
|
|
46
47
|
# Step 1: send the conversation and available functions to the model
|
|
47
48
|
messages = [
|
|
@@ -9,11 +9,11 @@ from langtrace_python_sdk.utils.with_root_span import (
|
|
|
9
9
|
|
|
10
10
|
_ = load_dotenv(find_dotenv())
|
|
11
11
|
|
|
12
|
-
langtrace.init(write_spans_to_console=
|
|
12
|
+
langtrace.init(write_spans_to_console=False)
|
|
13
13
|
client = OpenAI()
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
@with_additional_attributes({"user.id": "1234", "user.feedback.rating": 1})
|
|
17
17
|
def api():
|
|
18
18
|
response = client.chat.completions.create(
|
|
19
19
|
model="gpt-4",
|
|
@@ -27,7 +27,7 @@ def api():
|
|
|
27
27
|
return response
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
@with_langtrace_root_span("Chat Completion")
|
|
31
31
|
def chat_completion():
|
|
32
32
|
response = api()
|
|
33
33
|
# print(response)
|
|
@@ -6,12 +6,12 @@ from langtrace_python_sdk.utils.with_root_span import with_langtrace_root_span
|
|
|
6
6
|
|
|
7
7
|
_ = load_dotenv(find_dotenv())
|
|
8
8
|
|
|
9
|
-
langtrace.init(write_spans_to_console=
|
|
9
|
+
langtrace.init(write_spans_to_console=False)
|
|
10
10
|
|
|
11
11
|
client = OpenAI()
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
@with_langtrace_root_span()
|
|
14
|
+
@with_langtrace_root_span("Embeddings Create")
|
|
15
15
|
def embeddings_create():
|
|
16
16
|
result = client.embeddings.create(
|
|
17
17
|
model="text-embedding-ada-002",
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
from dotenv import find_dotenv, load_dotenv
|
|
4
4
|
from openai import OpenAI
|
|
5
5
|
|
|
6
|
-
from langtrace_python_sdk import langtrace
|
|
6
|
+
from langtrace_python_sdk import langtrace, with_langtrace_root_span
|
|
7
7
|
|
|
8
8
|
_ = load_dotenv(find_dotenv())
|
|
9
9
|
|
|
10
|
-
langtrace.init(write_spans_to_console=
|
|
10
|
+
langtrace.init(write_spans_to_console=False)
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
client = OpenAI()
|
|
@@ -34,6 +34,7 @@ student_custom_functions = [
|
|
|
34
34
|
]
|
|
35
35
|
|
|
36
36
|
|
|
37
|
+
@with_langtrace_root_span("Function Calling")
|
|
37
38
|
def function_calling():
|
|
38
39
|
response = client.chat.completions.create(
|
|
39
40
|
model="gpt-3.5-turbo",
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from dotenv import find_dotenv, load_dotenv
|
|
2
|
+
from openai import OpenAI
|
|
3
|
+
|
|
4
|
+
from langtrace_python_sdk import langtrace
|
|
5
|
+
|
|
6
|
+
# from PIL import Image
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
_ = load_dotenv(find_dotenv())
|
|
10
|
+
|
|
11
|
+
langtrace.init(write_spans_to_console=False)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
client = OpenAI()
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# use this to convert the image to RGBA
|
|
18
|
+
# def convert_to_rgba():
|
|
19
|
+
# Image.open("./resources/image.png").convert("RGBA").save("./resources/image_with_alpha.png")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def image_edit():
|
|
23
|
+
|
|
24
|
+
response = client.images.edit(
|
|
25
|
+
model="dall-e-2",
|
|
26
|
+
image=open("./resources/lounge_flamingo.png", "rb"),
|
|
27
|
+
mask=open("./resources/mask.png", "rb"),
|
|
28
|
+
prompt="A sunlit indoor lounge area with a pool and duck standing in side with flamingo.",
|
|
29
|
+
n=1,
|
|
30
|
+
size="1024x1024",
|
|
31
|
+
response_format="url",
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
image_url = response.data[0].url
|
|
35
|
+
print(image_url)
|
|
36
|
+
print(response)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# image_edit()
|
|
40
|
+
# convert_to_rgba()
|
|
Binary file
|
|
Binary file
|
|
@@ -6,7 +6,11 @@ from dotenv import find_dotenv, load_dotenv
|
|
|
6
6
|
from openai import OpenAI
|
|
7
7
|
from pinecone import Pinecone, ServerlessSpec
|
|
8
8
|
|
|
9
|
-
from langtrace_python_sdk import
|
|
9
|
+
from langtrace_python_sdk import (
|
|
10
|
+
langtrace,
|
|
11
|
+
with_langtrace_root_span,
|
|
12
|
+
with_additional_attributes,
|
|
13
|
+
)
|
|
10
14
|
from langtrace_python_sdk.utils.with_root_span import SendUserFeedback
|
|
11
15
|
|
|
12
16
|
_ = load_dotenv(find_dotenv())
|
|
@@ -28,7 +32,8 @@ def create_index():
|
|
|
28
32
|
)
|
|
29
33
|
|
|
30
34
|
|
|
31
|
-
@
|
|
35
|
+
@with_additional_attributes({"db.embedding_model": "text-embedding-ada-002"})
|
|
36
|
+
@with_langtrace_root_span("Pinecone Basic")
|
|
32
37
|
def basic(span_id=None, trace_id=None):
|
|
33
38
|
|
|
34
39
|
result = client.embeddings.create(
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from .query_text import (
|
|
2
|
+
create,
|
|
3
|
+
insert,
|
|
4
|
+
query_data_bm25,
|
|
5
|
+
query_fetch_object_by_id,
|
|
6
|
+
query_fetch_objects,
|
|
7
|
+
query_hybrid,
|
|
8
|
+
query_near_object,
|
|
9
|
+
query_data_near_text,
|
|
10
|
+
query_data_near_vector,
|
|
11
|
+
)
|
|
12
|
+
from langtrace_python_sdk import with_langtrace_root_span
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class WeaviateRunner:
|
|
16
|
+
@with_langtrace_root_span("Weaviate")
|
|
17
|
+
def run(self):
|
|
18
|
+
create()
|
|
19
|
+
insert()
|
|
20
|
+
query_data_bm25()
|
|
21
|
+
# query_fetch_object_by_id()
|
|
22
|
+
# query_fetch_objects()
|
|
23
|
+
# query_hybrid()
|
|
24
|
+
# query_near_object()
|
|
25
|
+
# query_data_near_text()
|
|
26
|
+
# query_data_near_vector()
|
|
@@ -21,7 +21,9 @@ from weaviate.collections.classes.grpc import Move
|
|
|
21
21
|
|
|
22
22
|
import langtrace_python_sdk.langtrace as langtrace
|
|
23
23
|
from langtrace_python_sdk import with_langtrace_root_span
|
|
24
|
+
from dotenv import load_dotenv
|
|
24
25
|
|
|
26
|
+
load_dotenv()
|
|
25
27
|
# Set these environment variables
|
|
26
28
|
WCS_DEMO_URL = os.environ["WCS_DEMO_URL"]
|
|
27
29
|
WCS_DEMO_RO_KEY = os.environ["WCS_DEMO_RO_KEY"]
|
|
@@ -37,17 +39,19 @@ client = weaviate.connect_to_wcs(
|
|
|
37
39
|
langtrace.init()
|
|
38
40
|
|
|
39
41
|
|
|
40
|
-
@with_langtrace_root_span()
|
|
42
|
+
@with_langtrace_root_span("create")
|
|
41
43
|
def create():
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
if not client.collections.get("Question"):
|
|
45
|
+
questions = client.collections.create(
|
|
46
|
+
name="Question",
|
|
47
|
+
# Set the vectorizer to "text2vec-openai" to use the OpenAI API for vector-related operations
|
|
48
|
+
vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_openai(),
|
|
49
|
+
# Ensure the `generative-openai` module is used for generative queries
|
|
50
|
+
generative_config=wvc.config.Configure.Generative.openai(),
|
|
51
|
+
)
|
|
49
52
|
|
|
50
53
|
|
|
54
|
+
@with_langtrace_root_span("insert")
|
|
51
55
|
def insert():
|
|
52
56
|
resp = requests.get(
|
|
53
57
|
"https://raw.githubusercontent.com/weaviate-tutorials/quickstart/main/data/jeopardy_tiny.json"
|
langtrace_python_sdk/__init__.py
CHANGED
|
@@ -15,13 +15,18 @@ limitations under the License.
|
|
|
15
15
|
"""
|
|
16
16
|
|
|
17
17
|
from langtrace_python_sdk import langtrace
|
|
18
|
-
from langtrace_python_sdk.utils.with_root_span import
|
|
18
|
+
from langtrace_python_sdk.utils.with_root_span import (
|
|
19
|
+
with_langtrace_root_span,
|
|
20
|
+
with_additional_attributes,
|
|
21
|
+
)
|
|
22
|
+
|
|
19
23
|
from langtrace_python_sdk.utils.prompt_registry import get_prompt_from_registry
|
|
20
24
|
from langtrace_python_sdk.utils.with_root_span import SendUserFeedback
|
|
21
25
|
|
|
22
26
|
__all__ = [
|
|
23
27
|
"langtrace",
|
|
24
28
|
"with_langtrace_root_span",
|
|
29
|
+
"with_additional_attributes",
|
|
25
30
|
"get_prompt_from_registry",
|
|
26
31
|
"SendUserFeedback",
|
|
27
32
|
]
|
|
@@ -40,6 +40,10 @@ APIS = {
|
|
|
40
40
|
"METHOD": OpenAIMethods.IMAGES_GENERATION.value,
|
|
41
41
|
"ENDPOINT": "/images/generations",
|
|
42
42
|
},
|
|
43
|
+
"IMAGES_EDIT": {
|
|
44
|
+
"METHOD": OpenAIMethods.IMAGES_EDIT.value,
|
|
45
|
+
"ENDPOINT": "/images/edits",
|
|
46
|
+
},
|
|
43
47
|
"EMBEDDINGS_CREATE": {
|
|
44
48
|
"METHOD": OpenAIMethods.EMBEDDINGS_CREATE.value,
|
|
45
49
|
"ENDPOINT": "/embeddings",
|
|
@@ -28,6 +28,7 @@ from langtrace_python_sdk.instrumentation.openai.patch import (
|
|
|
28
28
|
async_images_generate,
|
|
29
29
|
chat_completions_create,
|
|
30
30
|
embeddings_create,
|
|
31
|
+
images_edit,
|
|
31
32
|
images_generate,
|
|
32
33
|
)
|
|
33
34
|
|
|
@@ -37,7 +38,7 @@ logging.basicConfig(level=logging.FATAL)
|
|
|
37
38
|
class OpenAIInstrumentation(BaseInstrumentor):
|
|
38
39
|
|
|
39
40
|
def instrumentation_dependencies(self) -> Collection[str]:
|
|
40
|
-
return ["openai >= 0.27.0"]
|
|
41
|
+
return ["openai >= 0.27.0", "trace-attributes >= 4.0.5"]
|
|
41
42
|
|
|
42
43
|
def _instrument(self, **kwargs):
|
|
43
44
|
tracer_provider = kwargs.get("tracer_provider")
|
|
@@ -69,6 +70,13 @@ class OpenAIInstrumentation(BaseInstrumentor):
|
|
|
69
70
|
"AsyncImages.generate",
|
|
70
71
|
async_images_generate("openai.images.generate", version, tracer),
|
|
71
72
|
)
|
|
73
|
+
|
|
74
|
+
wrap_function_wrapper(
|
|
75
|
+
"openai.resources.images",
|
|
76
|
+
"Images.edit",
|
|
77
|
+
images_edit("openai.images.edit", version, tracer),
|
|
78
|
+
)
|
|
79
|
+
|
|
72
80
|
wrap_function_wrapper(
|
|
73
81
|
"openai.resources.embeddings",
|
|
74
82
|
"Embeddings.create",
|
|
@@ -16,20 +16,19 @@ limitations under the License.
|
|
|
16
16
|
|
|
17
17
|
import json
|
|
18
18
|
|
|
19
|
+
from importlib_metadata import version as v
|
|
19
20
|
from langtrace.trace_attributes import Event, LLMSpanAttributes
|
|
20
21
|
from opentelemetry import baggage
|
|
21
22
|
from opentelemetry.trace import SpanKind
|
|
22
23
|
from opentelemetry.trace.status import Status, StatusCode
|
|
23
24
|
|
|
25
|
+
from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
|
|
24
26
|
from langtrace_python_sdk.constants.instrumentation.common import (
|
|
25
27
|
LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY,
|
|
26
28
|
SERVICE_PROVIDERS,
|
|
27
29
|
)
|
|
28
30
|
from langtrace_python_sdk.constants.instrumentation.openai import APIS
|
|
29
31
|
from langtrace_python_sdk.utils.llm import calculate_prompt_tokens, estimate_tokens
|
|
30
|
-
from importlib_metadata import version as v
|
|
31
|
-
|
|
32
|
-
from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
|
|
33
32
|
|
|
34
33
|
|
|
35
34
|
def images_generate(original_method, version, tracer):
|
|
@@ -187,6 +186,89 @@ def async_images_generate(original_method, version, tracer):
|
|
|
187
186
|
return traced_method
|
|
188
187
|
|
|
189
188
|
|
|
189
|
+
def images_edit(original_method, version, tracer):
|
|
190
|
+
"""
|
|
191
|
+
Wrap the `edit` method of the `Images` class to trace it.
|
|
192
|
+
"""
|
|
193
|
+
|
|
194
|
+
def traced_method(wrapped, instance, args, kwargs):
|
|
195
|
+
base_url = (
|
|
196
|
+
str(instance._client._base_url)
|
|
197
|
+
if hasattr(instance, "_client") and hasattr(instance._client, "_base_url")
|
|
198
|
+
else ""
|
|
199
|
+
)
|
|
200
|
+
service_provider = SERVICE_PROVIDERS["OPENAI"]
|
|
201
|
+
extra_attributes = baggage.get_baggage(LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY)
|
|
202
|
+
|
|
203
|
+
span_attributes = {
|
|
204
|
+
"langtrace.sdk.name": "langtrace-python-sdk",
|
|
205
|
+
"langtrace.service.name": service_provider,
|
|
206
|
+
"langtrace.service.type": "llm",
|
|
207
|
+
"langtrace.service.version": version,
|
|
208
|
+
"langtrace.version": v(LANGTRACE_SDK_NAME),
|
|
209
|
+
"url.full": base_url,
|
|
210
|
+
"llm.api": APIS["IMAGES_EDIT"]["ENDPOINT"],
|
|
211
|
+
"llm.model": kwargs.get("model"),
|
|
212
|
+
"llm.response_format": kwargs.get("response_format"),
|
|
213
|
+
"llm.image.size": kwargs.get("size"),
|
|
214
|
+
"llm.prompts": json.dumps(
|
|
215
|
+
[
|
|
216
|
+
{
|
|
217
|
+
"role": kwargs.get("user", "user"),
|
|
218
|
+
"content": kwargs.get("prompt", []),
|
|
219
|
+
}
|
|
220
|
+
]
|
|
221
|
+
),
|
|
222
|
+
"llm.top_k": kwargs.get("n"),
|
|
223
|
+
**(extra_attributes if extra_attributes is not None else {}),
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
attributes = LLMSpanAttributes(**span_attributes)
|
|
227
|
+
|
|
228
|
+
with tracer.start_as_current_span(
|
|
229
|
+
APIS["IMAGES_EDIT"]["METHOD"], kind=SpanKind.CLIENT
|
|
230
|
+
) as span:
|
|
231
|
+
for field, value in attributes.model_dump(by_alias=True).items():
|
|
232
|
+
if value is not None:
|
|
233
|
+
span.set_attribute(field, value)
|
|
234
|
+
try:
|
|
235
|
+
# Attempt to call the original method
|
|
236
|
+
result = wrapped(*args, **kwargs)
|
|
237
|
+
|
|
238
|
+
response = []
|
|
239
|
+
# Parse each image object
|
|
240
|
+
for each_data in result.data:
|
|
241
|
+
response.append(
|
|
242
|
+
{
|
|
243
|
+
"role": "assistant",
|
|
244
|
+
"content": {
|
|
245
|
+
"url": each_data.url,
|
|
246
|
+
"revised_prompt": each_data.revised_prompt,
|
|
247
|
+
"base64": each_data.b64_json,
|
|
248
|
+
},
|
|
249
|
+
}
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
span.add_event(
|
|
253
|
+
name="response",
|
|
254
|
+
attributes={"llm.responses": json.dumps(response)},
|
|
255
|
+
)
|
|
256
|
+
|
|
257
|
+
span.set_status(StatusCode.OK)
|
|
258
|
+
return result
|
|
259
|
+
except Exception as err:
|
|
260
|
+
# Record the exception in the span
|
|
261
|
+
span.record_exception(err)
|
|
262
|
+
|
|
263
|
+
# Set the span status to indicate an error
|
|
264
|
+
span.set_status(Status(StatusCode.ERROR, str(err)))
|
|
265
|
+
|
|
266
|
+
# Reraise the exception to ensure it's not swallowed
|
|
267
|
+
raise
|
|
268
|
+
|
|
269
|
+
return traced_method
|
|
270
|
+
|
|
271
|
+
|
|
190
272
|
def chat_completions_create(original_method, version, tracer):
|
|
191
273
|
"""Wrap the `create` method of the `ChatCompletion` class to trace it."""
|
|
192
274
|
|
langtrace_python_sdk/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "2.1.
|
|
1
|
+
__version__ = "2.1.14"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: langtrace-python-sdk
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.14
|
|
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>
|
|
@@ -19,7 +19,7 @@ Requires-Dist: opentelemetry-instrumentation>=0.46b0
|
|
|
19
19
|
Requires-Dist: opentelemetry-sdk>=1.25.0
|
|
20
20
|
Requires-Dist: sqlalchemy
|
|
21
21
|
Requires-Dist: tiktoken>=0.1.1
|
|
22
|
-
Requires-Dist: trace-attributes
|
|
22
|
+
Requires-Dist: trace-attributes<6.0.0,>=5.0.0
|
|
23
23
|
Provides-Extra: dev
|
|
24
24
|
Requires-Dist: anthropic; extra == 'dev'
|
|
25
25
|
Requires-Dist: chromadb; extra == 'dev'
|
|
@@ -193,7 +193,7 @@ langtrace.init(custom_remote_exporter=<your_exporter>, batch=<True or False>)
|
|
|
193
193
|
- `@with_langtrace_root_span` - this decorator is designed to organize and relate different spans, in a hierarchical manner. When you're performing multiple operations that you want to monitor together as a unit, this function helps by establishing a "parent" (`LangtraceRootSpan` or whatever is passed to `name`) span. Then, any calls to the LLM APIs made within the given function (fn) will be considered "children" of this parent span. This setup is especially useful for tracking the performance or behavior of a group of operations collectively, rather than individually.
|
|
194
194
|
|
|
195
195
|
```python
|
|
196
|
-
from langtrace_python_sdk
|
|
196
|
+
from langtrace_python_sdk import with_langtrace_root_span
|
|
197
197
|
|
|
198
198
|
@with_langtrace_root_span()
|
|
199
199
|
def example():
|
|
@@ -208,10 +208,8 @@ def example():
|
|
|
208
208
|
- `with_additional_attributes` - this function is designed to enhance the traces by adding custom attributes to the current context. These custom attributes provide extra details about the operations being performed, making it easier to analyze and understand their behavior.
|
|
209
209
|
|
|
210
210
|
```python
|
|
211
|
-
from langtrace_python_sdk
|
|
212
|
-
|
|
213
|
-
with_additional_attributes,
|
|
214
|
-
)
|
|
211
|
+
from langtrace_python_sdk import with_langtrace_root_span, with_additional_attributes
|
|
212
|
+
|
|
215
213
|
|
|
216
214
|
@with_additional_attributes({"user.id": "1234", "user.feedback.rating": 1})
|
|
217
215
|
def api_call1():
|
|
@@ -277,6 +275,9 @@ Langtrace automatically captures traces from the following vendors:
|
|
|
277
275
|
|
|
278
276
|
We welcome contributions to this project. To get started, fork this repository and start developing. To get involved, join our [Discord](https://discord.langtrace.ai) workspace.
|
|
279
277
|
|
|
278
|
+
If you want to run any of the examples go to `run_example.py` file, you will find `ENABLED_EXAMPLES`. choose the example you want to run and just toggle the flag to `True` and run the file using `python src/run_example.py`
|
|
279
|
+
|
|
280
|
+
|
|
280
281
|
---
|
|
281
282
|
|
|
282
283
|
## Security
|
|
@@ -1,44 +1,49 @@
|
|
|
1
|
-
examples/__init__.py,sha256=
|
|
2
|
-
examples/anthropic_example/__init__.py,sha256=
|
|
3
|
-
examples/anthropic_example/completion.py,sha256=
|
|
4
|
-
examples/chroma_example/__init__.py,sha256=
|
|
5
|
-
examples/chroma_example/basic.py,sha256=
|
|
6
|
-
examples/cohere_example/__init__.py,sha256=
|
|
7
|
-
examples/cohere_example/chat.py,sha256=
|
|
8
|
-
examples/cohere_example/chat_stream.py,sha256=
|
|
9
|
-
examples/cohere_example/embed.py,sha256=
|
|
10
|
-
examples/cohere_example/rerank.py,sha256=
|
|
11
|
-
examples/cohere_example/tools.py,sha256=
|
|
12
|
-
examples/fastapi_example/
|
|
1
|
+
examples/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
2
|
+
examples/anthropic_example/__init__.py,sha256=03us1YuvAJR6fqXX8NH2kROBfTmyz7KzFVY01UlL-tM,237
|
|
3
|
+
examples/anthropic_example/completion.py,sha256=LXcuXxRx9hy4b9Woq0aCBx_PS0QYmYi2bT2N96CgS_Q,686
|
|
4
|
+
examples/chroma_example/__init__.py,sha256=Mrf8KptW1hhzu6WDdRRTxbaB-0kM7x5u-Goc_zR7G5c,203
|
|
5
|
+
examples/chroma_example/basic.py,sha256=oO7-__8HptnFXLVKbnPgoz02yM-CAPi721xsbUb_gYg,868
|
|
6
|
+
examples/cohere_example/__init__.py,sha256=oYpsnS-dKOlWLkPEUWhXxi1vfxa77bt_DOdkJHg__7g,502
|
|
7
|
+
examples/cohere_example/chat.py,sha256=1CPrqr45UmhByxAn9on0L06ixVqS3jc9tLT88pduTzw,888
|
|
8
|
+
examples/cohere_example/chat_stream.py,sha256=daWGrj2yucN9sWKGiPzTw18clh23Grv-MIJT_OpUkpA,611
|
|
9
|
+
examples/cohere_example/embed.py,sha256=p9BJvOg09JVb8BfTCb63v3uh_wOsi_OyrCAJdXXrE6E,496
|
|
10
|
+
examples/cohere_example/rerank.py,sha256=e7OU0A2FzfiQDuOmCy3Kg5LLNYGRmRIK5LqeLnTWlP4,1118
|
|
11
|
+
examples/cohere_example/tools.py,sha256=a5uvS058tcwU6PJbF9EDO6LPVmPj2LoW4Vn8Web3Iq8,1656
|
|
12
|
+
examples/fastapi_example/__init__.py,sha256=INIfvJP7zC_KkJCtulS1qbh61-MJTPAHnzAgzeKi0yU,87
|
|
13
|
+
examples/fastapi_example/basic_route.py,sha256=_IRXjkOtJQ-bTIGa1WbvUF_2LF4bjghjyXt4YrHaRvw,1170
|
|
13
14
|
examples/hiveagent_example/basic.py,sha256=Sd7I5w8w5Xx7ODaydTY30yiq9HwJDMKHQywrZjgehP0,441
|
|
14
|
-
examples/langchain_example/__init__.py,sha256=
|
|
15
|
-
examples/langchain_example/basic.py,sha256=
|
|
15
|
+
examples/langchain_example/__init__.py,sha256=t28923ZDDejZabsvINnYwpLyb63WFwPde-Nmzdg-kH4,254
|
|
16
|
+
examples/langchain_example/basic.py,sha256=988C40-bcMq-AM7xL_4v6FHgYliQL1SJM_YcLY-3WMM,2661
|
|
16
17
|
examples/langchain_example/groq_example.py,sha256=9dBbOWZCVJ29PpB1NbJhc9MThmtwrlOpdNIxPl7d8f8,787
|
|
17
18
|
examples/langchain_example/langgraph_example.py,sha256=7C2a4Sg0PKbbab03CVkStO3MzT7C-O1UtdmObvBXurM,2005
|
|
18
19
|
examples/langchain_example/tool.py,sha256=8T8_IDbgA58XbsfyH5_xhA8ZKQfyfyFxF8wor-PsRjA,2556
|
|
19
|
-
examples/llamaindex_example/__init__.py,sha256=
|
|
20
|
-
examples/llamaindex_example/agent.py,sha256=
|
|
21
|
-
examples/llamaindex_example/basic.py,sha256=
|
|
20
|
+
examples/llamaindex_example/__init__.py,sha256=4w8Hz5pfmMzhkHAbBim6jwxHxMicaN4xi1Of9pODO8g,252
|
|
21
|
+
examples/llamaindex_example/agent.py,sha256=AukhBJwPC5_KFYQrDbEE00c-_6Yt2SCPZHii5B3mh-o,2795
|
|
22
|
+
examples/llamaindex_example/basic.py,sha256=bDp2TlnfzviS9wi6ox-vfPo3e79QuStHD0sJJQXr_w0,656
|
|
22
23
|
examples/llamaindex_example/data/abramov.txt,sha256=Ou-GyWZm5AjHLgxviBoRE9ikNv5MScsF0cd--0vVVhI,32667
|
|
23
|
-
examples/openai_example/__init__.py,sha256=
|
|
24
|
-
examples/openai_example/async_tool_calling_nonstreaming.py,sha256=
|
|
25
|
-
examples/openai_example/async_tool_calling_streaming.py,sha256=
|
|
26
|
-
examples/openai_example/chat_completion.py,sha256=
|
|
27
|
-
examples/openai_example/embeddings_create.py,sha256=
|
|
28
|
-
examples/openai_example/function_calling.py,sha256=
|
|
24
|
+
examples/openai_example/__init__.py,sha256=6l2FePb3vYBJVwIT4qfdtOLobKLZ6iO16Fe31TUwNz8,827
|
|
25
|
+
examples/openai_example/async_tool_calling_nonstreaming.py,sha256=FhbDX91RLhTrNd5IGPI0CxRdCjTRcNLlWkYdLqHGbVs,3838
|
|
26
|
+
examples/openai_example/async_tool_calling_streaming.py,sha256=LaSKmn_Unv55eTHXYdEmKjo39eNuB3ASOBV-m8U1HfU,7136
|
|
27
|
+
examples/openai_example/chat_completion.py,sha256=4JUv8VPcXTfYydCFxPOE3Nb5jYlbzJlvcErB8qmMano,1267
|
|
28
|
+
examples/openai_example/embeddings_create.py,sha256=sqz-zh3pEaB17gVYeY0QE76QxRwsmo6wV8yjAfg1ljg,522
|
|
29
|
+
examples/openai_example/function_calling.py,sha256=zz-JdCcpP7uCXG21EYXF1Y39IKj6gYt2fOP5N_ywpnc,2338
|
|
30
|
+
examples/openai_example/images_edit.py,sha256=0hG5OYTSUBrcwSxbqN67brPYjf1pRJs8vqGzu-UjK6c,887
|
|
29
31
|
examples/openai_example/images_generate.py,sha256=SZNY8Visk7JUpx5QhNxTNINHmPAGdCUayF-Q7_iCr50,470
|
|
30
32
|
examples/openai_example/tool_calling.py,sha256=_IV7KoSI_37u1TTZWdVa58BYjkDfhSurvM86xwaNNhY,2316
|
|
31
33
|
examples/openai_example/tool_calling_nonstreaming.py,sha256=Yc848IooZRXNynHL6z0kOgJ4qbmL_NOufcb2VmWRukI,3847
|
|
32
34
|
examples/openai_example/tool_calling_streaming.py,sha256=mV1RbyAoVhumGRPpqPWQ6PMhnJyeifrlELd2-K1qJ_w,7015
|
|
35
|
+
examples/openai_example/resources/lounge_flamingo.png,sha256=aspniTtmWqwLp3YUhYqAe2ze8nJaq-bTSW7uUJudtd0,2416234
|
|
36
|
+
examples/openai_example/resources/mask.png,sha256=mUE9Dfp-x8jI0Nh4WGr0P9pueUqEZfpjwxR-6Rxzxz4,2483660
|
|
33
37
|
examples/perplexity_example/basic.py,sha256=bp7n27gaugJkaFVyt8pjaEfi66lYcqP6eFFjPewUShY,668
|
|
34
|
-
examples/pinecone_example/__init__.py,sha256=
|
|
35
|
-
examples/pinecone_example/basic.py,sha256=
|
|
36
|
-
examples/qdrant_example/__init__.py,sha256=
|
|
38
|
+
examples/pinecone_example/__init__.py,sha256=98UBOq9wQdSw6JK7Hfh_AUDVZzL76IAs-kV4sktoDYg,210
|
|
39
|
+
examples/pinecone_example/basic.py,sha256=RpcdCrpNEExad3nmagkF5M211PgNoqu5j_edX8jw2No,1576
|
|
40
|
+
examples/qdrant_example/__init__.py,sha256=Ze9xEzW8FiHUO58YBa8JeHNOwcmo3dpYH77AkdyglKU,197
|
|
37
41
|
examples/qdrant_example/basic.py,sha256=DCMjHSuBZKkhEjCkwy5d5La9WMyW0lCWqtcZWiFCEm4,1425
|
|
38
|
-
examples/weaviate_example/
|
|
39
|
-
|
|
42
|
+
examples/weaviate_example/__init__.py,sha256=8JMDBsRSEV10HfTd-YC7xb4txBjD3la56snk-Bbg2Kw,618
|
|
43
|
+
examples/weaviate_example/query_text.py,sha256=qz9o-fTDzX5AW5m8BJF-TfmBdokxh492NfnmnPUMU3s,64814
|
|
44
|
+
langtrace_python_sdk/__init__.py,sha256=rted5SGmbbJyqFzT4_Sjfn-Eie2rQwAULa_jMJldAmE,1034
|
|
40
45
|
langtrace_python_sdk/langtrace.py,sha256=pN-xJRXrtvJIenMOH0-xlNXcnqL9qMjg28SrW-PMRU0,6978
|
|
41
|
-
langtrace_python_sdk/version.py,sha256=
|
|
46
|
+
langtrace_python_sdk/version.py,sha256=otJNk418s7IUoP3b0ZQy4k9fA8qhpkQusp3zKCHD2bQ,23
|
|
42
47
|
langtrace_python_sdk/constants/__init__.py,sha256=P8QvYwt5czUNDZsKS64vxm9Dc41ptGbuF1TFtAF6nv4,44
|
|
43
48
|
langtrace_python_sdk/constants/exporter/langtrace_exporter.py,sha256=5MNjnAOg-4am78J3gVMH6FSwq5N8TOj72ugkhsw4vi0,46
|
|
44
49
|
langtrace_python_sdk/constants/instrumentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -47,7 +52,7 @@ langtrace_python_sdk/constants/instrumentation/chroma.py,sha256=hiPGYdHS0Yj4Kh3e
|
|
|
47
52
|
langtrace_python_sdk/constants/instrumentation/cohere.py,sha256=tf9sDfb5K3qOAHChEE5o8eYWPZ1io58VsOjZDCZPxfw,577
|
|
48
53
|
langtrace_python_sdk/constants/instrumentation/common.py,sha256=TCHX8uqIJD2p9sONGrlX6Q3b5Mj859PTP-c729ogKcY,782
|
|
49
54
|
langtrace_python_sdk/constants/instrumentation/groq.py,sha256=VFXmIl4aqGY_fS0PAmjPj_Qm7Tibxbx7Ur_e7rQpqXc,134
|
|
50
|
-
langtrace_python_sdk/constants/instrumentation/openai.py,sha256=
|
|
55
|
+
langtrace_python_sdk/constants/instrumentation/openai.py,sha256=uEOH5UXapU2DSf2AdgXTRhhJEHGWXUNFkUGD5QafflM,1164
|
|
51
56
|
langtrace_python_sdk/constants/instrumentation/pinecone.py,sha256=Xaqqw-xBO0JJLGk75hiCUQGztNm0HiVaLQvjtYK7VJM,472
|
|
52
57
|
langtrace_python_sdk/constants/instrumentation/qdrant.py,sha256=yL7BopNQTXW7L7Z-gVM2PdusKD7r9qqcATvczFd7NtQ,1999
|
|
53
58
|
langtrace_python_sdk/constants/instrumentation/weaviate.py,sha256=Iytf2OpB_irZYEmvOQ7Pf483EdG5Bh59GxaBlXck0yY,1501
|
|
@@ -82,8 +87,8 @@ langtrace_python_sdk/instrumentation/llamaindex/__init__.py,sha256=rHvuqpuQKLj57
|
|
|
82
87
|
langtrace_python_sdk/instrumentation/llamaindex/instrumentation.py,sha256=8iAg-Oxwf2W4S60qRfO5mvzORYxublgq7FdGWqUB4q8,2965
|
|
83
88
|
langtrace_python_sdk/instrumentation/llamaindex/patch.py,sha256=LwnI9DCC5wcnixPUOmwIWSE7ryTk1J0xFBYdJja8t_Q,4324
|
|
84
89
|
langtrace_python_sdk/instrumentation/openai/__init__.py,sha256=VPHRNCQEdkizIVP2d0Uw_a7t8XOTSTprEIB8oboJFbs,95
|
|
85
|
-
langtrace_python_sdk/instrumentation/openai/instrumentation.py,sha256=
|
|
86
|
-
langtrace_python_sdk/instrumentation/openai/patch.py,sha256=
|
|
90
|
+
langtrace_python_sdk/instrumentation/openai/instrumentation.py,sha256=A0BJHRLcZ74TNVg6I0I9M5YWvSpAtXwMmME6N5CEQ_M,2945
|
|
91
|
+
langtrace_python_sdk/instrumentation/openai/patch.py,sha256=ugf3y-20YVqJmHsheQaL3EEy7FPbOgEMtcG5dOYjxiE,40553
|
|
87
92
|
langtrace_python_sdk/instrumentation/pinecone/__init__.py,sha256=DzXyGh9_MGWveJvXULkFwdkf7PbG2s3bAWtT1Dmz7Ok,99
|
|
88
93
|
langtrace_python_sdk/instrumentation/pinecone/instrumentation.py,sha256=mxQXe3oAOPLsMJGlEzAe6zpgK7RtWfqmcNmGW_gQXX4,1900
|
|
89
94
|
langtrace_python_sdk/instrumentation/pinecone/patch.py,sha256=nZUHZ_1HfLjByJS0gkvrDRj69JbdnfWpezk6zl1EMvU,5000
|
|
@@ -138,7 +143,7 @@ tests/pinecone/cassettes/test_query.yaml,sha256=b5v9G3ssUy00oG63PlFUR3JErF2Js-5A
|
|
|
138
143
|
tests/pinecone/cassettes/test_upsert.yaml,sha256=neWmQ1v3d03V8WoLl8FoFeeCYImb8pxlJBWnFd_lITU,38607
|
|
139
144
|
tests/qdrant/conftest.py,sha256=9n0uHxxIjWk9fbYc4bx-uP8lSAgLBVx-cV9UjnsyCHM,381
|
|
140
145
|
tests/qdrant/test_qdrant.py,sha256=pzjAjVY2kmsmGfrI2Gs2xrolfuaNHz7l1fqGQCjp5_o,3353
|
|
141
|
-
langtrace_python_sdk-2.1.
|
|
142
|
-
langtrace_python_sdk-2.1.
|
|
143
|
-
langtrace_python_sdk-2.1.
|
|
144
|
-
langtrace_python_sdk-2.1.
|
|
146
|
+
langtrace_python_sdk-2.1.14.dist-info/METADATA,sha256=cPyxda06xLH5QI-6uAMqaifqB3zQN02e1qFzeY9kXPk,12038
|
|
147
|
+
langtrace_python_sdk-2.1.14.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
|
|
148
|
+
langtrace_python_sdk-2.1.14.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
149
|
+
langtrace_python_sdk-2.1.14.dist-info/RECORD,,
|
|
File without changes
|
{langtrace_python_sdk-2.1.12.dist-info → langtrace_python_sdk-2.1.14.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|