Skip to content

Commit 1fa3f85

Browse files
authored
fix: weaviate create collection tracing (#298)
1 parent d231f90 commit 1fa3f85

File tree

5 files changed

+37
-16
lines changed

5 files changed

+37
-16
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ classifiers=[
1818
"Operating System :: OS Independent",
1919
]
2020
dependencies = [
21-
'trace-attributes==7.0.1',
21+
'trace-attributes==7.0.3',
2222
'opentelemetry-api>=1.25.0',
2323
'opentelemetry-sdk>=1.25.0',
2424
'opentelemetry-instrumentation>=0.47b0',

src/examples/weaviate_example/query_text.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@
1515
import requests
1616
import weaviate
1717
import weaviate.classes as wvc
18+
import weaviate.classes.config as wc
19+
from dotenv import load_dotenv
1820
from weaviate.classes.aggregate import GroupByAggregate
1921
from weaviate.classes.query import Filter, HybridFusion, MetadataQuery
2022
from weaviate.collections.classes.grpc import Move
2123

2224
import langtrace_python_sdk.langtrace as langtrace
2325
from langtrace_python_sdk import with_langtrace_root_span
24-
from dotenv import load_dotenv
2526

2627
load_dotenv()
2728
# Set these environment variables
@@ -44,11 +45,16 @@ def create():
4445
if not client.collections.get("Question"):
4546
questions = client.collections.create(
4647
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-
)
48+
properties=[
49+
wc.Property(name="answer", data_type=wc.DataType.TEXT),
50+
wc.Property(name="question", data_type=wc.DataType.TEXT),
51+
wc.Property(name="category", data_type=wc.DataType.TEXT),
52+
],
53+
# Define the vectorizer module
54+
vectorizer_config=wc.Configure.Vectorizer.text2vec_openai(),
55+
# Define the generative module
56+
generative_config=wc.Configure.Generative.openai(),
57+
)
5258

5359

5460
@with_langtrace_root_span("insert")

src/langtrace_python_sdk/instrumentation/weaviate/instrumentation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class WeaviateInstrumentation(BaseInstrumentor):
3737
"""
3838

3939
def instrumentation_dependencies(self) -> Collection[str]:
40-
return ["weaviate-client >= 4.6.1", "trace-attributes >= 4.0.2"]
40+
return ["weaviate-client >= 4.6.1", "trace-attributes >= 7.0.3"]
4141

4242
def _instrument(self, **kwargs):
4343
tracer_provider = kwargs.get("tracer_provider")

src/langtrace_python_sdk/instrumentation/weaviate/patch.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,21 @@
1616

1717
import json
1818

19+
from importlib_metadata import version as v
1920
from langtrace.trace_attributes import DatabaseSpanAttributes
20-
from langtrace_python_sdk.utils.llm import get_span_name
2121
from opentelemetry import baggage, trace
2222
from opentelemetry.trace import SpanKind
23-
from opentelemetry.trace.status import Status, StatusCode
2423
from opentelemetry.trace.propagation import set_span_in_context
24+
from opentelemetry.trace.status import Status, StatusCode
25+
26+
from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
2527
from langtrace_python_sdk.constants.instrumentation.common import (
2628
LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY,
2729
SERVICE_PROVIDERS,
2830
)
2931
from langtrace_python_sdk.constants.instrumentation.weaviate import APIS
32+
from langtrace_python_sdk.utils.llm import get_span_name
3033
from langtrace_python_sdk.utils.misc import extract_input_params, to_iso_format
31-
from importlib_metadata import version as v
32-
33-
from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
3434

3535
# Predefined metadata response attributes
3636
METADATA_ATTRIBUTES = [
@@ -45,6 +45,22 @@
4545
]
4646

4747

48+
def extract_inputs(args, kwargs):
49+
extracted_params = {}
50+
kwargs_without_properties = {k: v for k, v in kwargs.items() if k != "properties"}
51+
extracted_params.update(extract_input_params(args, kwargs_without_properties))
52+
53+
if kwargs.get("properties", None):
54+
extracted_params["properties"] = []
55+
for each_prop in kwargs.get("properties"):
56+
if hasattr(each_prop, "_to_dict"):
57+
# append properties to extracted_params
58+
extracted_params["properties"].append(each_prop._to_dict())
59+
60+
extracted_params["properties"] = json.dumps(extracted_params["properties"])
61+
return extracted_params
62+
63+
4864
def extract_metadata(metadata):
4965
# Extraction response Query metadata
5066
extracted_metadata = {
@@ -126,7 +142,7 @@ def traced_method(wrapped, instance, args, kwargs):
126142
"db.system": "weaviate",
127143
"db.operation": api["OPERATION"],
128144
"db.collection.name": collection_name,
129-
"db.query": json.dumps(extract_input_params(args, kwargs)),
145+
"db.query": json.dumps(extract_inputs(args, kwargs)),
130146
**(extra_attributes if extra_attributes is not None else {}),
131147
}
132148

@@ -143,7 +159,6 @@ def traced_method(wrapped, instance, args, kwargs):
143159
try:
144160
# Attempt to call the original method
145161
result = wrapped(*args, **kwargs)
146-
print(result)
147162
if api["OPERATION"] in ["query", "generate"]:
148163
span.add_event(
149164
name="db.response",
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "2.2.24"
1+
__version__ = "2.2.25"

0 commit comments

Comments
 (0)