Skip to content

Commit c21ad0d

Browse files
committed
Rework counters
1 parent 4cc1031 commit c21ad0d

16 files changed

+14
-1766
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ Graphsignal tracer is highly lightweight. The overhead per trace is measured to
8484

8585
The Graphsignal tracer only establishes outbound connections to `api.graphsignal.com` to send data; inbound connections or commands are not possible.
8686

87-
Payloads, such as prompts and completions, are recorded by default in case of automatic tracing. To disable, set `record_payloads=False` in `graphsignal.configure`.
87+
Content and sensitive information, such as prompts and completions, are not recorded.
8888

8989

9090
## Troubleshooting

graphsignal/__init__.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ def configure(
7171
deployment: Optional[str] = None,
7272
tags: Optional[Dict[str, str]] = None,
7373
auto_instrument: Optional[bool] = None,
74-
record_payloads: Optional[bool] = None,
7574
profiling_rate: Optional[float] = None,
7675
debug_mode: Optional[bool] = None
7776
) -> None:
@@ -85,7 +84,6 @@ def configure(
8584
api_url = _read_config_param("api_url", str, api_url)
8685
tags = _read_config_tags(tags)
8786
auto_instrument = _read_config_param("auto_instrument", bool, auto_instrument, default_value=True)
88-
record_payloads = _read_config_param("record_payloads", bool, record_payloads, default_value=True)
8987
profiling_rate = _read_config_param("profiling_rate", float, profiling_rate, default_value=0.1)
9088
debug_mode = _read_config_param("debug_mode", bool, debug_mode, default_value=False)
9189

@@ -98,7 +96,6 @@ def configure(
9896
api_url=api_url,
9997
tags=tags,
10098
auto_instrument=auto_instrument,
101-
record_payloads=record_payloads,
10299
profiling_rate=profiling_rate,
103100
debug_mode=debug_mode)
104101
_tracer.setup()

graphsignal/client/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
from graphsignal.client.models.metric import Metric
4040
from graphsignal.client.models.metric_type import MetricType
4141
from graphsignal.client.models.param import Param
42-
from graphsignal.client.models.payload import Payload
4342
from graphsignal.client.models.profile import Profile
4443
from graphsignal.client.models.rate import Rate
4544
from graphsignal.client.models.score import Score

graphsignal/client/api/default_api.py

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,6 @@ def _query_scores_serialize(
452452
def query_spans(
453453
self,
454454
tags: Annotated[Optional[StrictStr], Field(description="Filter spans by tags. Provide tags as a semicolon-separated list of key-value pairs (e.g., 'key1:value1;key2:value2').")] = None,
455-
text: Annotated[Optional[StrictStr], Field(description="Filter spans by text. Provide text to search for in span payloads.")] = None,
456455
start_time: Annotated[Optional[datetime], Field(description="Start time for filtering spans, in ISO format.")] = None,
457456
end_time: Annotated[Optional[datetime], Field(description="End time for filtering spans, in ISO format.")] = None,
458457
limit: Annotated[Optional[StrictInt], Field(description="Limit the number of returned spans. Default is 100. Max is 1000.")] = None,
@@ -476,8 +475,6 @@ def query_spans(
476475
477476
:param tags: Filter spans by tags. Provide tags as a semicolon-separated list of key-value pairs (e.g., 'key1:value1;key2:value2').
478477
:type tags: str
479-
:param text: Filter spans by text. Provide text to search for in span payloads.
480-
:type text: str
481478
:param start_time: Start time for filtering spans, in ISO format.
482479
:type start_time: datetime
483480
:param end_time: End time for filtering spans, in ISO format.
@@ -510,7 +507,6 @@ def query_spans(
510507

511508
_param = self._query_spans_serialize(
512509
tags=tags,
513-
text=text,
514510
start_time=start_time,
515511
end_time=end_time,
516512
limit=limit,
@@ -540,7 +536,6 @@ def query_spans(
540536
def query_spans_with_http_info(
541537
self,
542538
tags: Annotated[Optional[StrictStr], Field(description="Filter spans by tags. Provide tags as a semicolon-separated list of key-value pairs (e.g., 'key1:value1;key2:value2').")] = None,
543-
text: Annotated[Optional[StrictStr], Field(description="Filter spans by text. Provide text to search for in span payloads.")] = None,
544539
start_time: Annotated[Optional[datetime], Field(description="Start time for filtering spans, in ISO format.")] = None,
545540
end_time: Annotated[Optional[datetime], Field(description="End time for filtering spans, in ISO format.")] = None,
546541
limit: Annotated[Optional[StrictInt], Field(description="Limit the number of returned spans. Default is 100. Max is 1000.")] = None,
@@ -564,8 +559,6 @@ def query_spans_with_http_info(
564559
565560
:param tags: Filter spans by tags. Provide tags as a semicolon-separated list of key-value pairs (e.g., 'key1:value1;key2:value2').
566561
:type tags: str
567-
:param text: Filter spans by text. Provide text to search for in span payloads.
568-
:type text: str
569562
:param start_time: Start time for filtering spans, in ISO format.
570563
:type start_time: datetime
571564
:param end_time: End time for filtering spans, in ISO format.
@@ -598,7 +591,6 @@ def query_spans_with_http_info(
598591

599592
_param = self._query_spans_serialize(
600593
tags=tags,
601-
text=text,
602594
start_time=start_time,
603595
end_time=end_time,
604596
limit=limit,
@@ -628,7 +620,6 @@ def query_spans_with_http_info(
628620
def query_spans_without_preload_content(
629621
self,
630622
tags: Annotated[Optional[StrictStr], Field(description="Filter spans by tags. Provide tags as a semicolon-separated list of key-value pairs (e.g., 'key1:value1;key2:value2').")] = None,
631-
text: Annotated[Optional[StrictStr], Field(description="Filter spans by text. Provide text to search for in span payloads.")] = None,
632623
start_time: Annotated[Optional[datetime], Field(description="Start time for filtering spans, in ISO format.")] = None,
633624
end_time: Annotated[Optional[datetime], Field(description="End time for filtering spans, in ISO format.")] = None,
634625
limit: Annotated[Optional[StrictInt], Field(description="Limit the number of returned spans. Default is 100. Max is 1000.")] = None,
@@ -652,8 +643,6 @@ def query_spans_without_preload_content(
652643
653644
:param tags: Filter spans by tags. Provide tags as a semicolon-separated list of key-value pairs (e.g., 'key1:value1;key2:value2').
654645
:type tags: str
655-
:param text: Filter spans by text. Provide text to search for in span payloads.
656-
:type text: str
657646
:param start_time: Start time for filtering spans, in ISO format.
658647
:type start_time: datetime
659648
:param end_time: End time for filtering spans, in ISO format.
@@ -686,7 +675,6 @@ def query_spans_without_preload_content(
686675

687676
_param = self._query_spans_serialize(
688677
tags=tags,
689-
text=text,
690678
start_time=start_time,
691679
end_time=end_time,
692680
limit=limit,
@@ -711,7 +699,6 @@ def query_spans_without_preload_content(
711699
def _query_spans_serialize(
712700
self,
713701
tags,
714-
text,
715702
start_time,
716703
end_time,
717704
limit,
@@ -742,10 +729,6 @@ def _query_spans_serialize(
742729

743730
_query_params.append(('tags', tags))
744731

745-
if text is not None:
746-
747-
_query_params.append(('text', text))
748-
749732
if start_time is not None:
750733
if isinstance(start_time, datetime):
751734
_query_params.append(

graphsignal/client/models/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
from graphsignal.client.models.metric import Metric
2323
from graphsignal.client.models.metric_type import MetricType
2424
from graphsignal.client.models.param import Param
25-
from graphsignal.client.models.payload import Payload
2625
from graphsignal.client.models.profile import Profile
2726
from graphsignal.client.models.rate import Rate
2827
from graphsignal.client.models.score import Score

graphsignal/client/models/payload.py

Lines changed: 0 additions & 91 deletions
This file was deleted.

graphsignal/client/models/span.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
from graphsignal.client.models.counter import Counter
2323
from graphsignal.client.models.exception import Exception
2424
from graphsignal.client.models.param import Param
25-
from graphsignal.client.models.payload import Payload
2625
from graphsignal.client.models.profile import Profile
2726
from graphsignal.client.models.tag import Tag
2827
from typing import Optional, Set
@@ -42,9 +41,8 @@ class Span(BaseModel):
4241
exceptions: Optional[List[Exception]] = Field(default=None, description="List of exceptions occurred during the span.")
4342
params: Optional[List[Param]] = Field(default=None, description="List of parameters associated with the span.")
4443
counters: Optional[List[Counter]] = Field(default=None, description="Counters associated with the span.")
45-
payloads: Optional[List[Payload]] = Field(default=None, description="List of payloads related to the span.")
4644
profiles: Optional[List[Profile]] = Field(default=None, description="List of profiles related to the span.")
47-
__properties: ClassVar[List[str]] = ["span_id", "root_span_id", "parent_span_id", "linked_span_ids", "start_us", "end_us", "tags", "exceptions", "params", "counters", "payloads", "profiles"]
45+
__properties: ClassVar[List[str]] = ["span_id", "root_span_id", "parent_span_id", "linked_span_ids", "start_us", "end_us", "tags", "exceptions", "params", "counters", "profiles"]
4846

4947
model_config = ConfigDict(
5048
populate_by_name=True,
@@ -113,13 +111,6 @@ def to_dict(self) -> Dict[str, Any]:
113111
if _item_counters:
114112
_items.append(_item_counters.to_dict())
115113
_dict['counters'] = _items
116-
# override the default output from pydantic by calling `to_dict()` of each item in payloads (list)
117-
_items = []
118-
if self.payloads:
119-
for _item_payloads in self.payloads:
120-
if _item_payloads:
121-
_items.append(_item_payloads.to_dict())
122-
_dict['payloads'] = _items
123114
# override the default output from pydantic by calling `to_dict()` of each item in profiles (list)
124115
_items = []
125116
if self.profiles:
@@ -149,7 +140,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
149140
"exceptions": [Exception.from_dict(_item) for _item in obj["exceptions"]] if obj.get("exceptions") is not None else None,
150141
"params": [Param.from_dict(_item) for _item in obj["params"]] if obj.get("params") is not None else None,
151142
"counters": [Counter.from_dict(_item) for _item in obj["counters"]] if obj.get("counters") is not None else None,
152-
"payloads": [Payload.from_dict(_item) for _item in obj["payloads"]] if obj.get("payloads") is not None else None,
153143
"profiles": [Profile.from_dict(_item) for _item in obj["profiles"]] if obj.get("profiles") is not None else None
154144
})
155145
return _obj

graphsignal/recorders/openai_recorder.py

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,6 @@ def trace_chat_completion(self, span, args, kwargs, ret, exc):
222222
span.set_counter('uncached_prompt_tokens', total_prompt_tokens)
223223
span.inc_counter_metric('usage', 'prompt_tokens', total_prompt_tokens)
224224
span.inc_counter_metric('usage', 'uncached_prompt_tokens', total_prompt_tokens)
225-
226-
span.set_payload('request', params)
227225
else:
228226
ret = ret.model_dump()
229227

@@ -233,10 +231,6 @@ def trace_chat_completion(self, span, args, kwargs, ret, exc):
233231
if ret and 'usage' in ret and not exc:
234232
self.read_usage(span, ret['usage'])
235233

236-
span.set_payload('request', params)
237-
if ret:
238-
span.set_payload('response', ret)
239-
240234
def trace_chat_completion_data(self, span, item):
241235
item = item.model_dump()
242236

@@ -247,8 +241,6 @@ def trace_chat_completion_data(self, span, item):
247241
span.inc_counter_metric('usage', 'completion_tokens', 1)
248242
span.inc_counter('output_tokens', 1)
249243

250-
span.append_payload('response', [item])
251-
252244
if item and 'usage' in item:
253245
self.read_usage(span, item['usage'])
254246

@@ -274,9 +266,6 @@ def trace_embedding(self, span, args, kwargs, ret, exc):
274266
span.set_counter('prompt_tokens', usage['prompt_tokens'])
275267
span.inc_counter_metric('usage', 'prompt_tokens', usage['prompt_tokens'])
276268

277-
278-
span.set_payload('request', params)
279-
280269
def trace_image_generation(self, span, args, kwargs, ret, exc):
281270
params = kwargs
282271

@@ -301,16 +290,13 @@ def trace_image_edit(self, span, args, kwargs, ret, exc):
301290
def trace_image_endpoint(self, span, args, kwargs, ret, exc):
302291
params = kwargs
303292

304-
span.set_payload('request', params, params)
305-
306293
if ret and 'data' in ret:
307294
image_data = []
308295
for image in ret['data']:
309296
if 'url' in image:
310297
image_data.append(image['url'])
311298
elif 'b64_json' in image:
312299
image_data.append(image['b64_json'])
313-
span.set_payload('response', image_data)
314300

315301
def trace_audio_transcription(self, span, args, kwargs, ret, exc):
316302
params = kwargs
@@ -320,13 +306,6 @@ def trace_audio_transcription(self, span, args, kwargs, ret, exc):
320306
span.set_tag('model', params['model'])
321307
span.set_param('model', params['model'])
322308

323-
span.set_payload('request', params)
324-
325-
ret = ret.model_dump()
326-
327-
if ret and 'text' in ret:
328-
span.set_payload('response', ret['text'])
329-
330309
def trace_audio_translation(self, span, args, kwargs, ret, exc):
331310
params = kwargs
332311

@@ -335,21 +314,10 @@ def trace_audio_translation(self, span, args, kwargs, ret, exc):
335314
span.set_tag('model', params['model'])
336315
span.set_param('model', params['model'])
337316

338-
input_data = {}
339-
340-
span.set_payload('request', params)
341-
342-
ret = ret.model_dump()
343-
344-
if ret and 'text' in ret:
345-
span.set_payload('request', ret['text'])
346-
347317
def trace_moderation(self, span, args, kwargs, ret, exc):
348318
params = kwargs
349319

350320
self.set_common_tags(span, 'moderations', params)
351321
if 'model' in params:
352322
span.set_tag('model', params['model'])
353323
span.set_param('model', params['model'])
354-
355-
span.set_payload('request', params)

0 commit comments

Comments
 (0)