ragaai-catalyst 2.1.4b4__py3-none-any.whl → 2.1.4b6__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.
- ragaai_catalyst/tracers/agentic_tracing/tracers/agent_tracer.py +14 -5
- ragaai_catalyst/tracers/agentic_tracing/tracers/base.py +85 -0
- ragaai_catalyst/tracers/agentic_tracing/tracers/llm_tracer.py +15 -5
- ragaai_catalyst/tracers/agentic_tracing/tracers/main_tracer.py +3 -0
- ragaai_catalyst/tracers/agentic_tracing/tracers/tool_tracer.py +15 -5
- ragaai_catalyst/tracers/tracer.py +3 -2
- {ragaai_catalyst-2.1.4b4.dist-info → ragaai_catalyst-2.1.4b6.dist-info}/METADATA +1 -1
- {ragaai_catalyst-2.1.4b4.dist-info → ragaai_catalyst-2.1.4b6.dist-info}/RECORD +10 -10
- {ragaai_catalyst-2.1.4b4.dist-info → ragaai_catalyst-2.1.4b6.dist-info}/WHEEL +0 -0
- {ragaai_catalyst-2.1.4b4.dist-info → ragaai_catalyst-2.1.4b6.dist-info}/top_level.txt +0 -0
@@ -66,8 +66,8 @@ class AgentTracerMixin:
|
|
66
66
|
if metrics:
|
67
67
|
if isinstance(metrics, dict):
|
68
68
|
metrics = [metrics]
|
69
|
-
|
70
|
-
|
69
|
+
try:
|
70
|
+
for metric in metrics:
|
71
71
|
self.span(name).add_metrics(
|
72
72
|
name=metric["name"],
|
73
73
|
score=metric["score"],
|
@@ -77,8 +77,10 @@ class AgentTracerMixin:
|
|
77
77
|
metadata=metric.get("metadata", {}),
|
78
78
|
config=metric.get("config", {}),
|
79
79
|
)
|
80
|
-
|
81
|
-
|
80
|
+
except ValueError as e:
|
81
|
+
logger.error(f"Validation Error: {e}")
|
82
|
+
except Exception as e:
|
83
|
+
logger.error(f"Error adding metric: {e}")
|
82
84
|
if feedback:
|
83
85
|
self.span(name).add_feedback(feedback)
|
84
86
|
|
@@ -525,7 +527,14 @@ class AgentTracerMixin:
|
|
525
527
|
# metrics
|
526
528
|
metrics = []
|
527
529
|
if name in self.span_attributes_dict:
|
528
|
-
|
530
|
+
raw_metrics = self.span_attributes_dict[name].metrics or []
|
531
|
+
for metric in raw_metrics:
|
532
|
+
base_metric_name = metric["name"]
|
533
|
+
counter = sum(1 for x in self.visited_metrics if x.startswith(base_metric_name))
|
534
|
+
metric_name = f'{base_metric_name}_{counter}' if counter > 0 else base_metric_name
|
535
|
+
self.visited_metrics.append(metric_name)
|
536
|
+
metric["name"] = metric_name
|
537
|
+
metrics.append(metric)
|
529
538
|
|
530
539
|
component = {
|
531
540
|
"id": kwargs["component_id"],
|
@@ -9,6 +9,8 @@ from typing import List, Any
|
|
9
9
|
import uuid
|
10
10
|
import sys
|
11
11
|
import tempfile
|
12
|
+
import threading
|
13
|
+
import time
|
12
14
|
from ....ragaai_catalyst import RagaAICatalyst
|
13
15
|
from ..data.data_structure import (
|
14
16
|
Trace,
|
@@ -78,6 +80,7 @@ class BaseTracer:
|
|
78
80
|
self.dataset_name = self.user_details["dataset_name"] # Access the dataset_name
|
79
81
|
self.project_id = self.user_details["project_id"] # Access the project_id
|
80
82
|
self.trace_name = self.user_details["trace_name"] # Access the trace_name
|
83
|
+
self.visited_metrics = []
|
81
84
|
|
82
85
|
# Initialize trace data
|
83
86
|
self.trace_id = None
|
@@ -86,6 +89,14 @@ class BaseTracer:
|
|
86
89
|
self.file_tracker = TrackName()
|
87
90
|
self.span_attributes_dict = {}
|
88
91
|
|
92
|
+
self.interval_time = self.user_details['interval_time']
|
93
|
+
self.memory_usage_list = []
|
94
|
+
self.cpu_usage_list = []
|
95
|
+
self.disk_usage_list = []
|
96
|
+
self.network_usage_list = []
|
97
|
+
self.tracking_thread = None
|
98
|
+
self.tracking = False
|
99
|
+
|
89
100
|
def _get_system_info(self) -> SystemInfo:
|
90
101
|
# Get OS info
|
91
102
|
os_info = OSInfo(
|
@@ -157,8 +168,49 @@ class BaseTracer:
|
|
157
168
|
|
158
169
|
return Resources(cpu=cpu, memory=mem, disk=disk_resource, network=net)
|
159
170
|
|
171
|
+
def _track_memory_usage(self):
|
172
|
+
self.memory_usage_list = []
|
173
|
+
while self.tracking:
|
174
|
+
memory_usage = psutil.Process().memory_info().rss
|
175
|
+
self.memory_usage_list.append(memory_usage / (1024 * 1024)) # Convert to MB and append to the list
|
176
|
+
time.sleep(self.interval_time)
|
177
|
+
|
178
|
+
def _track_cpu_usage(self):
|
179
|
+
self.cpu_usage_list = []
|
180
|
+
while self.tracking:
|
181
|
+
cpu_usage = psutil.cpu_percent(interval=self.interval_time)
|
182
|
+
self.cpu_usage_list.append(cpu_usage)
|
183
|
+
time.sleep(self.interval_time)
|
184
|
+
|
185
|
+
def _track_disk_usage(self):
|
186
|
+
self.disk_usage_list = []
|
187
|
+
while self.tracking:
|
188
|
+
disk_io = psutil.disk_io_counters()
|
189
|
+
self.disk_usage_list.append({
|
190
|
+
'disk_read': disk_io.read_bytes / (1024 * 1024), # Convert to MB
|
191
|
+
'disk_write': disk_io.write_bytes / (1024 * 1024) # Convert to MB
|
192
|
+
})
|
193
|
+
time.sleep(self.interval_time)
|
194
|
+
|
195
|
+
def _track_network_usage(self):
|
196
|
+
self.network_usage_list = []
|
197
|
+
while self.tracking:
|
198
|
+
net_io = psutil.net_io_counters()
|
199
|
+
self.network_usage_list.append({
|
200
|
+
'uploads': net_io.bytes_sent / (1024 * 1024), # Convert to MB
|
201
|
+
'downloads': net_io.bytes_recv / (1024 * 1024) # Convert to MB
|
202
|
+
})
|
203
|
+
time.sleep(self.interval_time)
|
204
|
+
|
160
205
|
def start(self):
|
161
206
|
"""Initialize a new trace"""
|
207
|
+
self.tracking = True
|
208
|
+
self.tracking_thread = threading.Thread(target=self._track_memory_usage)
|
209
|
+
self.tracking_thread.start()
|
210
|
+
threading.Thread(target=self._track_cpu_usage).start()
|
211
|
+
threading.Thread(target=self._track_disk_usage).start()
|
212
|
+
threading.Thread(target=self._track_network_usage).start()
|
213
|
+
|
162
214
|
metadata = Metadata(
|
163
215
|
cost={},
|
164
216
|
tokens={},
|
@@ -197,6 +249,38 @@ class BaseTracer:
|
|
197
249
|
self.trace.data[0]["end_time"] = datetime.now().astimezone().isoformat()
|
198
250
|
self.trace.end_time = datetime.now().astimezone().isoformat()
|
199
251
|
|
252
|
+
#track memory usage
|
253
|
+
self.tracking = False
|
254
|
+
if self.tracking_thread is not None:
|
255
|
+
self.tracking_thread.join()
|
256
|
+
self.trace.metadata.resources.memory.values = self.memory_usage_list
|
257
|
+
|
258
|
+
#track cpu usage
|
259
|
+
self.trace.metadata.resources.cpu.values = self.cpu_usage_list
|
260
|
+
|
261
|
+
#track network and disk usage
|
262
|
+
network_upoloads, network_downloads = 0, 0
|
263
|
+
disk_read, disk_write = 0, 0
|
264
|
+
for network_usage, disk_usage in zip(self.network_usage_list, self.disk_usage_list):
|
265
|
+
network_upoloads += network_usage['uploads']
|
266
|
+
network_downloads += network_usage['downloads']
|
267
|
+
disk_read += disk_usage['disk_read']
|
268
|
+
disk_write += disk_usage['disk_write']
|
269
|
+
|
270
|
+
#track disk usage
|
271
|
+
self.trace.metadata.resources.disk.read = [disk_read / len(self.disk_usage_list)]
|
272
|
+
self.trace.metadata.resources.disk.write = [disk_write / len(self.disk_usage_list)]
|
273
|
+
|
274
|
+
#track network usage
|
275
|
+
self.trace.metadata.resources.network.uploads = [network_upoloads / len(self.network_usage_list)]
|
276
|
+
self.trace.metadata.resources.network.downloads = [network_downloads / len(self.network_usage_list)]
|
277
|
+
|
278
|
+
# update interval time
|
279
|
+
self.trace.metadata.resources.cpu.interval = float(self.interval_time)
|
280
|
+
self.trace.metadata.resources.memory.interval = float(self.interval_time)
|
281
|
+
self.trace.metadata.resources.disk.interval = float(self.interval_time)
|
282
|
+
self.trace.metadata.resources.network.interval = float(self.interval_time)
|
283
|
+
|
200
284
|
# Change span ids to int
|
201
285
|
self.trace = self._change_span_ids_to_int(self.trace)
|
202
286
|
self.trace = self._change_agent_input_output(self.trace)
|
@@ -802,3 +886,4 @@ class BaseTracer:
|
|
802
886
|
if span_name not in self.span_attributes_dict:
|
803
887
|
self.span_attributes_dict[span_name] = SpanAttributes(span_name)
|
804
888
|
return self.span_attributes_dict[span_name]
|
889
|
+
|
@@ -363,7 +363,14 @@ class LLMTracerMixin:
|
|
363
363
|
# metrics
|
364
364
|
metrics = []
|
365
365
|
if name in self.span_attributes_dict:
|
366
|
-
|
366
|
+
raw_metrics = self.span_attributes_dict[name].metrics or []
|
367
|
+
for metric in raw_metrics:
|
368
|
+
base_metric_name = metric["name"]
|
369
|
+
counter = sum(1 for x in self.visited_metrics if x.startswith(base_metric_name))
|
370
|
+
metric_name = f'{base_metric_name}_{counter}' if counter > 0 else base_metric_name
|
371
|
+
self.visited_metrics.append(metric_name)
|
372
|
+
metric["name"] = metric_name
|
373
|
+
metrics.append(metric)
|
367
374
|
|
368
375
|
component = {
|
369
376
|
"id": component_id,
|
@@ -621,8 +628,8 @@ class LLMTracerMixin:
|
|
621
628
|
if metrics:
|
622
629
|
if isinstance(metrics, dict):
|
623
630
|
metrics = [metrics]
|
624
|
-
|
625
|
-
|
631
|
+
try:
|
632
|
+
for metric in metrics:
|
626
633
|
self.span(name).add_metrics(
|
627
634
|
name=metric["name"],
|
628
635
|
score=metric["score"],
|
@@ -632,8 +639,11 @@ class LLMTracerMixin:
|
|
632
639
|
metadata=metric.get("metadata", {}),
|
633
640
|
config=metric.get("config", {}),
|
634
641
|
)
|
635
|
-
|
636
|
-
|
642
|
+
except ValueError as e:
|
643
|
+
logger.error(f"Validation Error: {e}")
|
644
|
+
except Exception as e:
|
645
|
+
logger.error(f"Error adding metric: {e}")
|
646
|
+
|
637
647
|
if feedback:
|
638
648
|
self.span(name).add_feedback(feedback)
|
639
649
|
|
@@ -209,6 +209,9 @@ class AgenticTracing(
|
|
209
209
|
# Deactivate network tracing
|
210
210
|
self.network_tracer.deactivate_patches()
|
211
211
|
|
212
|
+
# Clear visited metrics when stopping trace
|
213
|
+
self.visited_metrics.clear()
|
214
|
+
|
212
215
|
# Stop base tracer (includes saving to file)
|
213
216
|
super().stop()
|
214
217
|
|
@@ -63,8 +63,8 @@ class ToolTracerMixin:
|
|
63
63
|
if metrics:
|
64
64
|
if isinstance(metrics, dict):
|
65
65
|
metrics = [metrics]
|
66
|
-
|
67
|
-
|
66
|
+
try:
|
67
|
+
for metric in metrics:
|
68
68
|
self.span(name).add_metrics(
|
69
69
|
name=metric["name"],
|
70
70
|
score=metric["score"],
|
@@ -74,8 +74,11 @@ class ToolTracerMixin:
|
|
74
74
|
metadata=metric.get("metadata", {}),
|
75
75
|
config=metric.get("config", {}),
|
76
76
|
)
|
77
|
-
|
78
|
-
logger.error(f"Error
|
77
|
+
except ValueError as e:
|
78
|
+
logger.error(f"Validation Error: {e}")
|
79
|
+
except Exception as e:
|
80
|
+
logger.error(f"Error adding metric: {e}")
|
81
|
+
|
79
82
|
if feedback:
|
80
83
|
self.span(name).add_feedback(feedback)
|
81
84
|
|
@@ -275,7 +278,14 @@ class ToolTracerMixin:
|
|
275
278
|
# metrics
|
276
279
|
metrics = []
|
277
280
|
if name in self.span_attributes_dict:
|
278
|
-
|
281
|
+
raw_metrics = self.span_attributes_dict[name].metrics or []
|
282
|
+
for metric in raw_metrics:
|
283
|
+
base_metric_name = metric["name"]
|
284
|
+
counter = sum(1 for x in self.visited_metrics if x.startswith(base_metric_name))
|
285
|
+
metric_name = f'{base_metric_name}_{counter}' if counter > 0 else base_metric_name
|
286
|
+
self.visited_metrics.append(metric_name)
|
287
|
+
metric["name"] = metric_name
|
288
|
+
metrics.append(metric)
|
279
289
|
|
280
290
|
start_time = kwargs["start_time"]
|
281
291
|
component = {
|
@@ -25,7 +25,6 @@ from ragaai_catalyst.tracers.agentic_tracing.utils.trace_utils import load_model
|
|
25
25
|
|
26
26
|
logger = logging.getLogger(__name__)
|
27
27
|
|
28
|
-
|
29
28
|
class Tracer(AgenticTracing):
|
30
29
|
NUM_PROJECTS = 100
|
31
30
|
TIMEOUT = 10
|
@@ -48,7 +47,8 @@ class Tracer(AgenticTracing):
|
|
48
47
|
'file_io':True,
|
49
48
|
'network':True,
|
50
49
|
'custom':True
|
51
|
-
}
|
50
|
+
},
|
51
|
+
interval_time=2,
|
52
52
|
# auto_instrumentation=True/False # to control automatic instrumentation of everything
|
53
53
|
|
54
54
|
):
|
@@ -70,6 +70,7 @@ class Tracer(AgenticTracing):
|
|
70
70
|
"project_name": project_name,
|
71
71
|
"project_id": None, # Will be set after project validation
|
72
72
|
"dataset_name": dataset_name,
|
73
|
+
"interval_time": interval_time,
|
73
74
|
"trace_name": trace_name if trace_name else f"trace_{datetime.datetime.now().strftime('%Y%m%d%H%M%S')}",
|
74
75
|
"trace_user_detail": {"metadata": metadata} if metadata else {}
|
75
76
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: ragaai_catalyst
|
3
|
-
Version: 2.1.
|
3
|
+
Version: 2.1.4b6
|
4
4
|
Summary: RAGA AI CATALYST
|
5
5
|
Author-email: Kiran Scaria <kiran.scaria@raga.ai>, Kedar Gaikwad <kedar.gaikwad@raga.ai>, Dushyant Mahajan <dushyant.mahajan@raga.ai>, Siddhartha Kosti <siddhartha.kosti@raga.ai>, Ritika Goel <ritika.goel@raga.ai>, Vijay Chaurasia <vijay.chaurasia@raga.ai>
|
6
6
|
Requires-Python: <3.13,>=3.9
|
@@ -13,7 +13,7 @@ ragaai_catalyst/synthetic_data_generation.py,sha256=uDV9tNwto2xSkWg5XHXUvjErW-4P
|
|
13
13
|
ragaai_catalyst/utils.py,sha256=TlhEFwLyRU690HvANbyoRycR3nQ67lxVUQoUOfTPYQ0,3772
|
14
14
|
ragaai_catalyst/tracers/__init__.py,sha256=yxepo7iVjTNI_wFdk3Z6Ghu64SazVyszCPEHYrX5WQk,50
|
15
15
|
ragaai_catalyst/tracers/llamaindex_callback.py,sha256=HGs0TgtSgn8xXL8CSgdL9ymvYQGxZCNmPY5tRTw-I4s,14047
|
16
|
-
ragaai_catalyst/tracers/tracer.py,sha256=
|
16
|
+
ragaai_catalyst/tracers/tracer.py,sha256=UX-01NYWcH2y4UW1W287Cn-jy760rgaFqu8llJbeMdg,15654
|
17
17
|
ragaai_catalyst/tracers/upload_traces.py,sha256=hs0PEmit3n3_uUqrdbwcBdyK5Nbkik3JQVwJMEwYTd4,4796
|
18
18
|
ragaai_catalyst/tracers/agentic_tracing/README.md,sha256=X4QwLb7-Jg7GQMIXj-SerZIgDETfw-7VgYlczOR8ZeQ,4508
|
19
19
|
ragaai_catalyst/tracers/agentic_tracing/__init__.py,sha256=yf6SKvOPSpH-9LiKaoLKXwqj5sez8F_5wkOb91yp0oE,260
|
@@ -26,14 +26,14 @@ ragaai_catalyst/tracers/agentic_tracing/tests/__init__.py,sha256=47DEQpj8HBSa-_T
|
|
26
26
|
ragaai_catalyst/tracers/agentic_tracing/tests/ai_travel_agent.py,sha256=S4rCcKzU_5SB62BYEbNn_1VbbTdG4396N8rdZ3ZNGcE,5654
|
27
27
|
ragaai_catalyst/tracers/agentic_tracing/tests/unique_decorator_test.py,sha256=Xk1cLzs-2A3dgyBwRRnCWs7Eubki40FVonwd433hPN8,4805
|
28
28
|
ragaai_catalyst/tracers/agentic_tracing/tracers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
29
|
-
ragaai_catalyst/tracers/agentic_tracing/tracers/agent_tracer.py,sha256=
|
30
|
-
ragaai_catalyst/tracers/agentic_tracing/tracers/base.py,sha256=
|
29
|
+
ragaai_catalyst/tracers/agentic_tracing/tracers/agent_tracer.py,sha256=aLiq5nPie5TT61QYtvAtvErsxjPFYiUxjayn5aCX1_k,25543
|
30
|
+
ragaai_catalyst/tracers/agentic_tracing/tracers/base.py,sha256=u2DX_BsMGsuJkWqN6ucxboMO8GnvOcArKJe5L08y-YI,35014
|
31
31
|
ragaai_catalyst/tracers/agentic_tracing/tracers/custom_tracer.py,sha256=uay8lU7T-CKsVu8KvWX31qfMqufK9S3Ive7XKo2Ksmk,12252
|
32
32
|
ragaai_catalyst/tracers/agentic_tracing/tracers/langgraph_tracer.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
33
|
-
ragaai_catalyst/tracers/agentic_tracing/tracers/llm_tracer.py,sha256=
|
34
|
-
ragaai_catalyst/tracers/agentic_tracing/tracers/main_tracer.py,sha256=
|
33
|
+
ragaai_catalyst/tracers/agentic_tracing/tracers/llm_tracer.py,sha256=fn5qxb365GmQkJy_yZAY5TiiWRMFKPNJdYk8KFr8uWA,29343
|
34
|
+
ragaai_catalyst/tracers/agentic_tracing/tracers/main_tracer.py,sha256=nxUOQSyWBTnbsZfxmr1lje2OggqNf9fwtGUb-sBo6mI,15215
|
35
35
|
ragaai_catalyst/tracers/agentic_tracing/tracers/network_tracer.py,sha256=CviGiAg0W0krJxORMBDTosQytIoJDQ5RwU6xt_U_mOg,10408
|
36
|
-
ragaai_catalyst/tracers/agentic_tracing/tracers/tool_tracer.py,sha256=
|
36
|
+
ragaai_catalyst/tracers/agentic_tracing/tracers/tool_tracer.py,sha256=4h6epgRHPVRfTrCznwc6KPK6xevwBaZwE-q0Zj-4Kkk,12160
|
37
37
|
ragaai_catalyst/tracers/agentic_tracing/tracers/user_interaction_tracer.py,sha256=bhSUhNQCuJXKjgJAXhjKEYjnHMpYN90FSZdR84fNIKU,4614
|
38
38
|
ragaai_catalyst/tracers/agentic_tracing/upload/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
39
39
|
ragaai_catalyst/tracers/agentic_tracing/upload/upload_agentic_traces.py,sha256=1MDKXAAPzOEdxFKWWQrRgrmM3kz--DGXSywGXQmR3lQ,6041
|
@@ -60,7 +60,7 @@ ragaai_catalyst/tracers/instrumentators/llamaindex.py,sha256=SMrRlR4xM7k9HK43hak
|
|
60
60
|
ragaai_catalyst/tracers/instrumentators/openai.py,sha256=14R4KW9wQCR1xysLfsP_nxS7cqXrTPoD8En4MBAaZUU,379
|
61
61
|
ragaai_catalyst/tracers/utils/__init__.py,sha256=KeMaZtYaTojilpLv65qH08QmpYclfpacDA0U3wg6Ybw,64
|
62
62
|
ragaai_catalyst/tracers/utils/utils.py,sha256=ViygfJ7vZ7U0CTSA1lbxVloHp4NSlmfDzBRNCJuMhis,2374
|
63
|
-
ragaai_catalyst-2.1.
|
64
|
-
ragaai_catalyst-2.1.
|
65
|
-
ragaai_catalyst-2.1.
|
66
|
-
ragaai_catalyst-2.1.
|
63
|
+
ragaai_catalyst-2.1.4b6.dist-info/METADATA,sha256=DiX0GlNTSTjVKVNaj0sIp5Bvtbpw5gLaPZJws6gPHUw,12770
|
64
|
+
ragaai_catalyst-2.1.4b6.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
65
|
+
ragaai_catalyst-2.1.4b6.dist-info/top_level.txt,sha256=HpgsdRgEJMk8nqrU6qdCYk3di7MJkDL0B19lkc7dLfM,16
|
66
|
+
ragaai_catalyst-2.1.4b6.dist-info/RECORD,,
|
File without changes
|
File without changes
|