ragaai-catalyst 2.1.7.5b2__py3-none-any.whl → 2.1.7.5b4__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.
@@ -257,7 +257,10 @@ class Dataset:
257
257
  def generate_schema(mapping):
258
258
  result = {}
259
259
  for column, schema_element in mapping.items():
260
- result[column] = {"columnType": schema_element}
260
+ if isinstance(schema_element, dict):
261
+ result[column] = schema_element
262
+ else:
263
+ result[column] = {"columnType": schema_element}
261
264
  return result
262
265
 
263
266
  try:
@@ -171,7 +171,7 @@ class Evaluation:
171
171
  user_dataset_columns = [item["displayName"] for item in user_dataset_schema]
172
172
  variableName = None
173
173
  for key, val in schema_mapping.items():
174
- if "".join(val.split("_")).lower()==schemaName:
174
+ if val==schemaName: #"".join(val.split("_")).lower()==schemaName or val.lower()==schemaName:
175
175
  if key in user_dataset_columns:
176
176
  variableName=key
177
177
  else:
@@ -198,7 +198,7 @@ class Evaluation:
198
198
 
199
199
  for field in requiredFields:
200
200
  schemaName = field["name"]
201
- variableName = self._get_variablename_from_user_schema_mapping(schemaName.lower(), metric_name, schema_mapping, metric_to_evaluate)
201
+ variableName = self._get_variablename_from_user_schema_mapping(schemaName, metric_name, schema_mapping, metric_to_evaluate)
202
202
  mapping.append({"schemaName": schemaName, "variableName": variableName})
203
203
  return mapping
204
204
 
@@ -2,6 +2,7 @@ import os
2
2
  import logging
3
3
  import requests
4
4
  import time
5
+ import threading
5
6
  from typing import Dict, Optional, Union
6
7
  import re
7
8
  logger = logging.getLogger("RagaAICatalyst")
@@ -12,6 +13,7 @@ logging_level = (
12
13
  class RagaAICatalyst:
13
14
  BASE_URL = None
14
15
  TIMEOUT = 10 # Default timeout in seconds
16
+ TOKEN_EXPIRY_TIME = 6 # Default token expiration time (6 hours in hours)
15
17
 
16
18
  def __init__(
17
19
  self,
@@ -19,6 +21,7 @@ class RagaAICatalyst:
19
21
  secret_key,
20
22
  api_keys: Optional[Dict[str, str]] = None,
21
23
  base_url: Optional[str] = None,
24
+ token_expiry_time: Optional[float] = 6,
22
25
  ):
23
26
  """
24
27
  Initializes a new instance of the RagaAICatalyst class.
@@ -28,6 +31,7 @@ class RagaAICatalyst:
28
31
  secret_key (str): The secret key for the RagaAICatalyst.
29
32
  api_keys (Optional[Dict[str, str]]): A dictionary of API keys for different services. Defaults to None.
30
33
  base_url (Optional[str]): The base URL for the RagaAICatalyst API. Defaults to None.
34
+ token_expiry_time (Optional[float]): The time in hours before the token expires. Defaults to 0.1 hours.
31
35
 
32
36
  Raises:
33
37
  ValueError: If the RAGAAI_CATALYST_ACCESS_KEY and RAGAAI_CATALYST_SECRET_KEY environment variables are not set.
@@ -49,6 +53,14 @@ class RagaAICatalyst:
49
53
  access_key, secret_key
50
54
  )
51
55
 
56
+ # Initialize token management
57
+ self._token_expiry = None
58
+ self._token_refresh_lock = threading.Lock()
59
+ self._refresh_thread = None
60
+
61
+ # Set token expiration time (convert hours to seconds)
62
+ RagaAICatalyst.TOKEN_EXPIRY_TIME = token_expiry_time * 60 * 60
63
+
52
64
  RagaAICatalyst.BASE_URL = (
53
65
  os.getenv("RAGAAI_CATALYST_BASE_URL")
54
66
  if os.getenv("RAGAAI_CATALYST_BASE_URL")
@@ -143,78 +155,168 @@ class RagaAICatalyst:
143
155
  """Get the API key for a specific service."""
144
156
  return self.api_keys.get(service)
145
157
 
146
- @staticmethod
147
- def get_token() -> Union[str, None]:
158
+ # Token expiration time is now configurable via the token_expiry_time parameter
159
+ # Default is 6 hours, but can be changed to 23 hours or any other value
160
+
161
+ def _get_credentials(self) -> tuple[str, str]:
162
+ """Get access key and secret key from instance or environment."""
163
+ access_key = self.access_key or os.getenv("RAGAAI_CATALYST_ACCESS_KEY")
164
+ secret_key = self.secret_key or os.getenv("RAGAAI_CATALYST_SECRET_KEY")
165
+ return access_key, secret_key
166
+
167
+ def _refresh_token_async(self):
168
+ """Refresh token in background thread."""
169
+ try:
170
+ self.get_token(force_refresh=True)
171
+ except Exception as e:
172
+ logger.error(f"Background token refresh failed: {str(e)}")
173
+
174
+ def _schedule_token_refresh(self):
175
+ """Schedule a token refresh to happen 20 seconds before expiration."""
176
+ if not self._token_expiry:
177
+ return
178
+
179
+ # Calculate when to refresh (20 seconds before expiration)
180
+ current_time = time.time()
181
+ refresh_buffer = min(20, RagaAICatalyst.TOKEN_EXPIRY_TIME * 0.05) # 20 seconds or 5% of expiry time, whichever is smaller
182
+ time_until_refresh = max(self._token_expiry - current_time - refresh_buffer, 1) # At least 1 second
183
+
184
+ def delayed_refresh():
185
+ # Sleep until it's time to refresh
186
+ time.sleep(time_until_refresh)
187
+ logger.debug(f"Scheduled token refresh triggered")
188
+ self._refresh_token_async()
189
+
190
+ # Start a new thread for the delayed refresh
191
+ if not self._refresh_thread or not self._refresh_thread.is_alive():
192
+ self._refresh_thread = threading.Thread(target=delayed_refresh)
193
+ self._refresh_thread.daemon = True
194
+ self._refresh_thread.start()
195
+ logger.debug(f"Token refresh scheduled in {time_until_refresh:.1f} seconds")
196
+
197
+ def get_token(self, force_refresh=False) -> Union[str, None]:
148
198
  """
149
- Retrieves a token from the server using the provided access key and secret key.
199
+ Retrieves or refreshes a token using the provided credentials.
200
+
201
+ Args:
202
+ force_refresh (bool): If True, forces a token refresh regardless of expiration.
150
203
 
151
204
  Returns:
152
205
  - A string representing the token if successful.
153
- - None if the access key or secret key is not set or if there is an error retrieving the token.
154
-
155
- Raises:
156
- - requests.exceptions.HTTPError: If there is an HTTP error while retrieving the token.
157
- - requests.exceptions.RequestException: If there is an error while retrieving the token.
158
- - ValueError: If there is a JSON decoding error or if authentication fails.
159
- - Exception: If there is an unexpected error while retrieving the token.
206
+ - None if credentials are not set or if there is an error.
160
207
  """
161
- access_key = os.getenv("RAGAAI_CATALYST_ACCESS_KEY")
162
- secret_key = os.getenv("RAGAAI_CATALYST_SECRET_KEY")
208
+ with self._token_refresh_lock:
209
+ current_token = os.getenv("RAGAAI_CATALYST_TOKEN")
210
+ current_time = time.time()
163
211
 
164
- if not access_key or not secret_key:
165
- logger.error(
166
- "RAGAAI_CATALYST_ACCESS_KEY or RAGAAI_CATALYST_SECRET_KEY is not set"
167
- )
168
- return None
212
+ # Check if we need to refresh the token
213
+ if not force_refresh and current_token and self._token_expiry and current_time < self._token_expiry:
214
+ return current_token
169
215
 
170
- headers = {"Content-Type": "application/json"}
171
- json_data = {"accessKey": access_key, "secretKey": secret_key}
216
+ access_key, secret_key = self._get_credentials()
217
+ if not access_key or not secret_key:
218
+ logger.error("Access key or secret key is not set")
219
+ return None
172
220
 
173
- start_time = time.time()
174
- endpoint = f"{RagaAICatalyst.BASE_URL}/token"
175
- response = requests.post(
176
- endpoint,
177
- headers=headers,
178
- json=json_data,
179
- timeout=RagaAICatalyst.TIMEOUT,
180
- )
181
- elapsed_ms = (time.time() - start_time) * 1000
182
- logger.debug(
183
- f"API Call: [POST] {endpoint} | Status: {response.status_code} | Time: {elapsed_ms:.2f}ms")
221
+ headers = {"Content-Type": "application/json"}
222
+ json_data = {"accessKey": access_key, "secretKey": secret_key}
223
+
224
+ start_time = time.time()
225
+ endpoint = f"{self.BASE_URL}/token"
226
+ response = requests.post(
227
+ endpoint,
228
+ headers=headers,
229
+ json=json_data,
230
+ timeout=self.TIMEOUT,
231
+ )
232
+ elapsed_ms = (time.time() - start_time) * 1000
233
+ logger.debug(
234
+ f"API Call: [POST] {endpoint} | Status: {response.status_code} | Time: {elapsed_ms:.2f}ms")
184
235
 
185
- # Handle specific status codes before raising an error
186
- if response.status_code == 400:
236
+ # Handle specific status codes before raising an error
237
+ if response.status_code == 400:
238
+ token_response = response.json()
239
+ if token_response.get("message") == "Please enter valid credentials":
240
+ raise Exception(
241
+ "Authentication failed. Invalid credentials provided. Please check your Access key and Secret key. \nTo view or create new keys, navigate to Settings -> Authenticate in the RagaAI Catalyst dashboard."
242
+ )
243
+
244
+ response.raise_for_status()
187
245
  token_response = response.json()
188
- if token_response.get("message") == "Please enter valid credentials":
189
- raise Exception(
190
- "Authentication failed. Invalid credentials provided. Please check your Access key and Secret key. \nTo view or create new keys, navigate to Settings -> Authenticate in the RagaAI Catalyst dashboard."
191
- )
192
246
 
193
- response.raise_for_status()
247
+ if not token_response.get("success", False):
248
+ logger.error(
249
+ "Token retrieval was not successful: %s",
250
+ token_response.get("message", "Unknown error"),
251
+ )
252
+ return None
253
+
254
+ token = token_response.get("data", {}).get("token")
255
+ if token:
256
+ os.environ["RAGAAI_CATALYST_TOKEN"] = token
257
+ self._token_expiry = time.time() + RagaAICatalyst.TOKEN_EXPIRY_TIME
258
+ logger.debug(f"Token refreshed successfully. Next refresh in {RagaAICatalyst.TOKEN_EXPIRY_TIME/3600:.1f} hours")
259
+
260
+ # Schedule token refresh 20 seconds before expiration
261
+ self._schedule_token_refresh()
262
+
263
+ return token
264
+ else:
265
+ logger.error("Token(s) not set")
266
+ return None
194
267
 
195
- token_response = response.json()
268
+ def ensure_valid_token(self) -> Union[str, None]:
269
+ """
270
+ Ensures a valid token is available, with different handling for missing token vs expired token:
271
+ - Missing token: Synchronous retrieval (fail fast)
272
+ - Expired token: Synchronous refresh (since token is needed immediately)
196
273
 
197
- if not token_response.get("success", False):
198
- logger.error(
199
- "Token retrieval was not successful: %s",
200
- token_response.get("message", "Unknown error"),
201
- )
202
- return None
274
+ Returns:
275
+ - A string representing the valid token if successful.
276
+ - None if unable to obtain a valid token.
277
+ """
278
+ current_token = os.getenv("RAGAAI_CATALYST_TOKEN")
279
+ current_time = time.time()
280
+
281
+ # Case 1: No token - synchronous retrieval (fail fast)
282
+ if not current_token:
283
+ return self.get_token(force_refresh=True)
284
+
285
+ # Case 2: Token expired - synchronous refresh (since we need a valid token now)
286
+ if not self._token_expiry or current_time >= self._token_expiry:
287
+ logger.info("Token expired, refreshing synchronously")
288
+ return self.get_token(force_refresh=True)
289
+
290
+ # Case 3: Token valid but approaching expiry (less than 10% of lifetime remaining)
291
+ # Start background refresh but return current token
292
+ token_remaining_time = self._token_expiry - current_time
293
+ if token_remaining_time < (RagaAICatalyst.TOKEN_EXPIRY_TIME * 0.1):
294
+ if not self._refresh_thread or not self._refresh_thread.is_alive():
295
+ logger.info("Token approaching expiry, starting background refresh")
296
+ self._refresh_thread = threading.Thread(target=self._refresh_token_async)
297
+ self._refresh_thread.daemon = True
298
+ self._refresh_thread.start()
299
+
300
+ # Return current token (which is valid)
301
+ return current_token
302
+
303
+ def get_auth_header(self) -> Dict[str, str]:
304
+ """
305
+ Returns a dictionary containing the Authorization header with a valid token.
306
+ This method should be used instead of directly accessing os.getenv("RAGAAI_CATALYST_TOKEN").
203
307
 
204
- token = token_response.get("data", {}).get("token")
308
+ Returns:
309
+ - A dictionary with the Authorization header if successful.
310
+ - An empty dictionary if no valid token could be obtained.
311
+ """
312
+ token = self.ensure_valid_token()
205
313
  if token:
206
- os.environ["RAGAAI_CATALYST_TOKEN"] = token
207
- print("Token(s) set successfully")
208
- return token
209
- else:
210
- logger.error("Token(s) not set")
211
- return None
314
+ return {"Authorization": f"Bearer {token}"}
315
+ return {}
212
316
 
213
317
  def project_use_cases(self):
214
318
  try:
215
- headers = {
216
- "Authorization": f'Bearer {os.getenv("RAGAAI_CATALYST_TOKEN")}',
217
- }
319
+ headers = self.get_auth_header()
218
320
  start_time = time.time()
219
321
  endpoint = f"{RagaAICatalyst.BASE_URL}/v2/llm/usecase"
220
322
  response = requests.get(
@@ -57,9 +57,26 @@ class UploadAgenticTraces:
57
57
  presignedURLs = response.json()["data"]["presignedUrls"][0]
58
58
  presignedurl = self.update_presigned_url(presignedURLs,self.base_url)
59
59
  return presignedurl
60
+ else:
61
+ # If POST fails, try GET
62
+ response = requests.request("GET",
63
+ endpoint,
64
+ headers=headers,
65
+ data=payload,
66
+ timeout=self.timeout)
67
+ elapsed_ms = (time.time() - start_time) * 1000
68
+ logger.debug(
69
+ f"API Call: [GET] {endpoint} | Status: {response.status_code} | Time: {elapsed_ms:.2f}ms")
70
+ if response.status_code == 200:
71
+ presignedURLs = response.json()["data"]["presignedUrls"][0]
72
+ presignedurl = self.update_presigned_url(presignedURLs,self.base_url)
73
+ return presignedurl
74
+
75
+ logger.error(f"Error while getting presigned url: {response.json()['message']}")
76
+ return None
60
77
 
61
78
  except requests.exceptions.RequestException as e:
62
- print(f"Error while getting presigned url: {e}")
79
+ logger.error(f"Error while getting presigned url: {e}")
63
80
  return None
64
81
 
65
82
  def update_presigned_url(self, presigned_url, base_url):
@@ -98,6 +98,20 @@ def _fetch_presigned_url(project_name, dataset_name, base_url=None, timeout=120)
98
98
  presigned_url = update_presigned_url(presigned_url,url_base)
99
99
  return presigned_url
100
100
  else:
101
+ # If POST fails, try GET
102
+ response = requests.request("GET",
103
+ endpoint,
104
+ headers=headers,
105
+ data=payload,
106
+ timeout=timeout)
107
+ elapsed_ms = (time.time() - start_time) * 1000
108
+ logger.debug(
109
+ f"API Call: [GET] {endpoint} | Status: {response.status_code} | Time: {elapsed_ms:.2f}ms")
110
+ if response.status_code == 200:
111
+ presigned_url = response.json()["data"]["presignedUrls"][0]
112
+ presigned_url = update_presigned_url(presigned_url,url_base)
113
+ return presigned_url
114
+
101
115
  logger.error(f"Failed to fetch code hashes: {response.json()['message']}")
102
116
  raise Exception(f"Failed to fetch code hashes: {response.json()['message']}")
103
117
  except requests.exceptions.RequestException as e:
@@ -402,7 +402,50 @@ class Tracer(AgenticTracing):
402
402
  def recursive_mask_values(obj, parent_key=None):
403
403
  """Apply masking to all values in nested structure."""
404
404
  if isinstance(obj, dict):
405
- return {k: recursive_mask_values(v, k) for k, v in obj.items()}
405
+ if self.tracer_type == "langchain":
406
+ # Special handling for LangChain data
407
+ if isinstance(obj, dict):
408
+ if obj.get("name", "") == "retrieve_documents.langchain.workflow":
409
+ prompt_structured_data = {
410
+ "traceloop.entity.input": json.dumps({
411
+ "kwargs": {
412
+ "input": masking_func(json.loads(obj.get("attributes", {}).get("traceloop.entity.input", "")).get("kwargs", {}).get("input", "")),
413
+ }
414
+ })
415
+ }
416
+ prompt_data = {
417
+ "name": "retrieve_documents.langchain.workflow",
418
+ "attributes": prompt_structured_data,
419
+ }
420
+ return prompt_data
421
+ elif obj.get("name", "") == "PromptTemplate.langchain.task":
422
+ context_structured_data = {
423
+ "traceloop.entity.input": json.dumps({
424
+ "kwargs": {
425
+ "context": masking_func(json.loads(obj.get("attributes", {}).get("traceloop.entity.input", "")).get("kwargs", {}).get("context", "")),
426
+ }
427
+ }),
428
+ "traceloop.entity.output": json.dumps({
429
+ "kwargs": {
430
+ "text": masking_func(json.loads(obj.get("attributes", {}).get("traceloop.entity.output", "")).get("kwargs", {}).get("text", "")),
431
+ }
432
+ })
433
+ }
434
+ context_data = {
435
+ "name": "PromptTemplate.langchain.task",
436
+ "attributes": context_structured_data,
437
+ }
438
+ return context_data
439
+ elif obj.get("name", "") == "ChatOpenAI.langchain.task":
440
+ response_structured_data = {"gen_ai.completion.0.content": masking_func(obj.get("attributes", {}).get("gen_ai.completion.0.content", "")),
441
+ "gen_ai.prompt.0.content": masking_func(obj.get("attributes", {}).get("gen_ai.prompt.0.content", ""))}
442
+ response_data = {
443
+ "name": "ChatOpenAI.langchain.task",
444
+ "attributes" : response_structured_data
445
+ }
446
+ return response_data
447
+ else:
448
+ return {k: recursive_mask_values(v, k) for k, v in obj.items()}
406
449
  elif isinstance(obj, list):
407
450
  return [recursive_mask_values(item, parent_key) for item in obj]
408
451
  elif isinstance(obj, str):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ragaai_catalyst
3
- Version: 2.1.7.5b2
3
+ Version: 2.1.7.5b4
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>, Tushar Kumar <tushar.kumar@raga.ai>
6
6
  Requires-Python: <=3.13.2,>=3.10
@@ -1,14 +1,14 @@
1
1
  ragaai_catalyst/__init__.py,sha256=2wfkucAbb3Bt_p2KHelkg9zBQp4yC4iZanltyieG18w,895
2
2
  ragaai_catalyst/_version.py,sha256=JKt9KaVNOMVeGs8ojO6LvIZr7ZkMzNN-gCcvryy4x8E,460
3
- ragaai_catalyst/dataset.py,sha256=LefpZDCTkLoimZr0GEGK2awjOjhy8zSU-29EtqLrSG0,29404
4
- ragaai_catalyst/evaluation.py,sha256=O96CydYVPh3duUmXjY6REIXMOR-tOPixSG-Qhrf636A,22955
3
+ ragaai_catalyst/dataset.py,sha256=kQy-fiU9zxVrNJkHG8ILGR_3UTIz4rUM7iOsEf4jVZs,29535
4
+ ragaai_catalyst/evaluation.py,sha256=acCNQtoN2eM9NTehKEATquZ5hNu6Ijv7wisvaaJ4u7c,22993
5
5
  ragaai_catalyst/experiment.py,sha256=8yQo1phCHlpnJ-4CqCaIbLXg_1ZlAuLGI9kqGBl-OTE,18859
6
6
  ragaai_catalyst/guard_executor.py,sha256=f2FXQSW17z4-eor61J_mtD0z-xBm9yordq8giB-GN_U,14006
7
7
  ragaai_catalyst/guardrails_manager.py,sha256=_VrARJ1udmCF8TklNKy7XTQUaM8ATDhTOAGDonBkFro,14245
8
8
  ragaai_catalyst/internal_api_completion.py,sha256=DdICI5yfEudiOAIC8L4oxH0Qz7kX-BZCdo9IWsi2gNo,2965
9
9
  ragaai_catalyst/prompt_manager.py,sha256=W8ypramzOprrJ7-22d5vkBXIuIQ8v9XAzKDGxKsTK28,16550
10
10
  ragaai_catalyst/proxy_call.py,sha256=CHxldeceZUaLU-to_hs_Kf1z_b2vHMssLS_cOBedu78,5499
11
- ragaai_catalyst/ragaai_catalyst.py,sha256=1FaeK_VZpJLQ1ZqEWpMyI8J8M2MI0abLLLDFWY9W-4A,19580
11
+ ragaai_catalyst/ragaai_catalyst.py,sha256=W_heG_ab650rzQkAhSOoxaNy3JKHAIXNvivxtOPpyeg,24590
12
12
  ragaai_catalyst/redteaming_old.py,sha256=W2d89Ok8W-C8g7TBM3fDIFLof3q9FuYSr0jcryH2XQo,7097
13
13
  ragaai_catalyst/synthetic_data_generation.py,sha256=7lIWa3nwgW2-FlJrDaGxTN6OE4-dbbhLtKNOBQufhho,37952
14
14
  ragaai_catalyst/utils.py,sha256=TlhEFwLyRU690HvANbyoRycR3nQ67lxVUQoUOfTPYQ0,3772
@@ -31,7 +31,7 @@ ragaai_catalyst/tracers/distributed.py,sha256=MwlBwIxCAng-OI-7Ove_rkE1mTLeuW4Jw-
31
31
  ragaai_catalyst/tracers/langchain_callback.py,sha256=CB75zzG3-DkYTELj0vI1MOHQTY0MuQJfoHIXz9Cl8S8,34568
32
32
  ragaai_catalyst/tracers/llamaindex_callback.py,sha256=ZY0BJrrlz-P9Mg2dX-ZkVKG3gSvzwqBtk7JL_05MiYA,14028
33
33
  ragaai_catalyst/tracers/llamaindex_instrumentation.py,sha256=Ys_jLkvVqo12bKgXDmkp4TxJu9HkBATrFE8cIcTYxWw,14329
34
- ragaai_catalyst/tracers/tracer.py,sha256=pKHP5PK4au9Gdis-anYmu2PTmqWc4tNDrJvZWWRLQVo,40753
34
+ ragaai_catalyst/tracers/tracer.py,sha256=W5dS2h4IQrqbE_rgFY-1CrVCSs7WSFrDCny9_RASyjY,43593
35
35
  ragaai_catalyst/tracers/upload_traces.py,sha256=yfg1vHP5quz2Vb8xkas_vzXwIrTVqRwrmFNCTrWvFdg,6938
36
36
  ragaai_catalyst/tracers/agentic_tracing/README.md,sha256=X4QwLb7-Jg7GQMIXj-SerZIgDETfw-7VgYlczOR8ZeQ,4508
37
37
  ragaai_catalyst/tracers/agentic_tracing/__init__.py,sha256=yf6SKvOPSpH-9LiKaoLKXwqj5sez8F_5wkOb91yp0oE,260
@@ -55,8 +55,8 @@ ragaai_catalyst/tracers/agentic_tracing/tracers/tool_tracer.py,sha256=xxrliKPfdf
55
55
  ragaai_catalyst/tracers/agentic_tracing/tracers/user_interaction_tracer.py,sha256=bhSUhNQCuJXKjgJAXhjKEYjnHMpYN90FSZdR84fNIKU,4614
56
56
  ragaai_catalyst/tracers/agentic_tracing/upload/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
57
  ragaai_catalyst/tracers/agentic_tracing/upload/trace_uploader.py,sha256=qGinKWnb-NSEfIfIOsL37tB9AS8-dKa_-nNNHkUmtuE,12955
58
- ragaai_catalyst/tracers/agentic_tracing/upload/upload_agentic_traces.py,sha256=10mSqz9X83wfEuciVlPnbCcAqG4N9dgoZ4EFxH1jQb4,8636
59
- ragaai_catalyst/tracers/agentic_tracing/upload/upload_code.py,sha256=DjHOh7JpS3ksJ0swsXItAgYZhxlXsIOzt9kYtdxoUQY,6727
58
+ ragaai_catalyst/tracers/agentic_tracing/upload/upload_agentic_traces.py,sha256=u7QwUbG73zeWi-5WQ4scLo7wfw184Qd8c03TxgfoUe4,9567
59
+ ragaai_catalyst/tracers/agentic_tracing/upload/upload_code.py,sha256=eNjKt8xC2IIs_mC9WdLaP_vUxWpYHVi2OXgJyn2oSx8,7443
60
60
  ragaai_catalyst/tracers/agentic_tracing/upload/upload_local_metric.py,sha256=m1O8lKpxKwtHofXLW3fTHX5yfqDW5GxoveARlg5cTw4,2571
61
61
  ragaai_catalyst/tracers/agentic_tracing/upload/upload_trace_metric.py,sha256=hRuh-cczHbeM_Spbf9HTYd149uSs1zP0TvkYuZKF4ec,4296
62
62
  ragaai_catalyst/tracers/agentic_tracing/utils/__init__.py,sha256=XdB3X_ufe4RVvGorxSqAiB9dYv4UD7Hvvuw3bsDUppY,60
@@ -88,8 +88,8 @@ ragaai_catalyst/tracers/utils/model_prices_and_context_window_backup.json,sha256
88
88
  ragaai_catalyst/tracers/utils/rag_trace_json_converter.py,sha256=adCKk7Nj8307XYYg2sB-QT-66OShOs2iTGwNVwqbHig,19373
89
89
  ragaai_catalyst/tracers/utils/trace_json_converter.py,sha256=E0_QfciQMMpCtQYrNB4l8HJhlaFalr5bkMqkVRgQahY,14073
90
90
  ragaai_catalyst/tracers/utils/utils.py,sha256=ViygfJ7vZ7U0CTSA1lbxVloHp4NSlmfDzBRNCJuMhis,2374
91
- ragaai_catalyst-2.1.7.5b2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
92
- ragaai_catalyst-2.1.7.5b2.dist-info/METADATA,sha256=elCAm8gzY4PlNrlyL5G3iicELxdvr8j-Yr7niKTE-z8,17607
93
- ragaai_catalyst-2.1.7.5b2.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
94
- ragaai_catalyst-2.1.7.5b2.dist-info/top_level.txt,sha256=HpgsdRgEJMk8nqrU6qdCYk3di7MJkDL0B19lkc7dLfM,16
95
- ragaai_catalyst-2.1.7.5b2.dist-info/RECORD,,
91
+ ragaai_catalyst-2.1.7.5b4.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
92
+ ragaai_catalyst-2.1.7.5b4.dist-info/METADATA,sha256=Z0X9VzL8SIUjeobOKLCf70qmiBwp79VQwyTTbCt6MxQ,17607
93
+ ragaai_catalyst-2.1.7.5b4.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
94
+ ragaai_catalyst-2.1.7.5b4.dist-info/top_level.txt,sha256=HpgsdRgEJMk8nqrU6qdCYk3di7MJkDL0B19lkc7dLfM,16
95
+ ragaai_catalyst-2.1.7.5b4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.3.1)
2
+ Generator: setuptools (80.4.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5