diff --git a/pyproject.toml b/pyproject.toml index dcc37153..593f1870 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,7 @@ classifiers=[ "Operating System :: OS Independent", ] dependencies = [ - 'trace-attributes==7.0.1', + 'trace-attributes==7.0.3', 'opentelemetry-api>=1.25.0', 'opentelemetry-sdk>=1.25.0', 'opentelemetry-instrumentation>=0.47b0', diff --git a/src/examples/weaviate_example/query_text.py b/src/examples/weaviate_example/query_text.py index e223a676..9927859f 100644 --- a/src/examples/weaviate_example/query_text.py +++ b/src/examples/weaviate_example/query_text.py @@ -15,13 +15,14 @@ import requests import weaviate import weaviate.classes as wvc +import weaviate.classes.config as wc +from dotenv import load_dotenv from weaviate.classes.aggregate import GroupByAggregate from weaviate.classes.query import Filter, HybridFusion, MetadataQuery from weaviate.collections.classes.grpc import Move import langtrace_python_sdk.langtrace as langtrace from langtrace_python_sdk import with_langtrace_root_span -from dotenv import load_dotenv load_dotenv() # Set these environment variables @@ -44,11 +45,16 @@ def create(): if not client.collections.get("Question"): questions = client.collections.create( name="Question", - # Set the vectorizer to "text2vec-openai" to use the OpenAI API for vector-related operations - vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_openai(), - # Ensure the `generative-openai` module is used for generative queries - generative_config=wvc.config.Configure.Generative.openai(), - ) + properties=[ + wc.Property(name="answer", data_type=wc.DataType.TEXT), + wc.Property(name="question", data_type=wc.DataType.TEXT), + wc.Property(name="category", data_type=wc.DataType.TEXT), + ], + # Define the vectorizer module + vectorizer_config=wc.Configure.Vectorizer.text2vec_openai(), + # Define the generative module + generative_config=wc.Configure.Generative.openai(), + ) @with_langtrace_root_span("insert") diff --git a/src/langtrace_python_sdk/instrumentation/weaviate/instrumentation.py b/src/langtrace_python_sdk/instrumentation/weaviate/instrumentation.py index 32f19119..b51a3acd 100644 --- a/src/langtrace_python_sdk/instrumentation/weaviate/instrumentation.py +++ b/src/langtrace_python_sdk/instrumentation/weaviate/instrumentation.py @@ -37,7 +37,7 @@ class WeaviateInstrumentation(BaseInstrumentor): """ def instrumentation_dependencies(self) -> Collection[str]: - return ["weaviate-client >= 4.6.1", "trace-attributes >= 4.0.2"] + return ["weaviate-client >= 4.6.1", "trace-attributes >= 7.0.3"] def _instrument(self, **kwargs): tracer_provider = kwargs.get("tracer_provider") diff --git a/src/langtrace_python_sdk/instrumentation/weaviate/patch.py b/src/langtrace_python_sdk/instrumentation/weaviate/patch.py index 46ce5ac3..f39e60cf 100644 --- a/src/langtrace_python_sdk/instrumentation/weaviate/patch.py +++ b/src/langtrace_python_sdk/instrumentation/weaviate/patch.py @@ -16,21 +16,21 @@ import json +from importlib_metadata import version as v from langtrace.trace_attributes import DatabaseSpanAttributes -from langtrace_python_sdk.utils.llm import get_span_name from opentelemetry import baggage, trace from opentelemetry.trace import SpanKind -from opentelemetry.trace.status import Status, StatusCode from opentelemetry.trace.propagation import set_span_in_context +from opentelemetry.trace.status import Status, StatusCode + +from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME from langtrace_python_sdk.constants.instrumentation.common import ( LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY, SERVICE_PROVIDERS, ) from langtrace_python_sdk.constants.instrumentation.weaviate import APIS +from langtrace_python_sdk.utils.llm import get_span_name from langtrace_python_sdk.utils.misc import extract_input_params, to_iso_format -from importlib_metadata import version as v - -from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME # Predefined metadata response attributes METADATA_ATTRIBUTES = [ @@ -45,6 +45,22 @@ ] +def extract_inputs(args, kwargs): + extracted_params = {} + kwargs_without_properties = {k: v for k, v in kwargs.items() if k != "properties"} + extracted_params.update(extract_input_params(args, kwargs_without_properties)) + + if kwargs.get("properties", None): + extracted_params["properties"] = [] + for each_prop in kwargs.get("properties"): + if hasattr(each_prop, "_to_dict"): + # append properties to extracted_params + extracted_params["properties"].append(each_prop._to_dict()) + + extracted_params["properties"] = json.dumps(extracted_params["properties"]) + return extracted_params + + def extract_metadata(metadata): # Extraction response Query metadata extracted_metadata = { @@ -126,7 +142,7 @@ def traced_method(wrapped, instance, args, kwargs): "db.system": "weaviate", "db.operation": api["OPERATION"], "db.collection.name": collection_name, - "db.query": json.dumps(extract_input_params(args, kwargs)), + "db.query": json.dumps(extract_inputs(args, kwargs)), **(extra_attributes if extra_attributes is not None else {}), } @@ -143,7 +159,6 @@ def traced_method(wrapped, instance, args, kwargs): try: # Attempt to call the original method result = wrapped(*args, **kwargs) - print(result) if api["OPERATION"] in ["query", "generate"]: span.add_event( name="db.response", diff --git a/src/langtrace_python_sdk/version.py b/src/langtrace_python_sdk/version.py index 0ec7f4c0..fcbcb6e6 100644 --- a/src/langtrace_python_sdk/version.py +++ b/src/langtrace_python_sdk/version.py @@ -1 +1 @@ -__version__ = "2.2.24" +__version__ = "2.2.25"