ragaai-catalyst 2.1.5b40__py3-none-any.whl → 2.1.5.1b1__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.
@@ -2,26 +2,44 @@ import litellm
2
2
  import json
3
3
  import requests
4
4
  import os
5
+ from google import genai
6
+ from google.genai.types import GenerateContentConfig
7
+ from typing import Optional, List, Dict, Any
5
8
  import logging
6
9
  logger = logging.getLogger('LiteLLM')
7
10
  logger.setLevel(logging.ERROR)
8
11
 
9
12
  class GuardExecutor:
10
13
 
11
- def __init__(self,id,guard_manager,field_map={}):
12
- self.deployment_id = id
14
+ def __init__(self,guard_manager,input_deployment_id = None,output_deployment_id=None,field_map={}):
13
15
  self.field_map = field_map
14
16
  self.guard_manager = guard_manager
15
- self.deployment_details = self.guard_manager.get_deployment(id)
16
- if not self.deployment_details:
17
- raise ValueError('Error in getting deployment details')
17
+ try:
18
+ if input_deployment_id:
19
+ self.input_deployment_id = input_deployment_id
20
+ self.input_deployment_details = self.guard_manager.get_deployment(input_deployment_id)
21
+ if output_deployment_id:
22
+ self.output_deployment_id = output_deployment_id
23
+ self.output_deployment_details = self.guard_manager.get_deployment(output_deployment_id)
24
+ if input_deployment_id and output_deployment_id:
25
+ # check if 2 deployments are mapped to same dataset
26
+ pass
27
+ for guardrail in self.input_deployment_details['data']['guardrailsResponse']:
28
+ maps = guardrail['metricSpec']['config']['mappings']
29
+ for _map in maps:
30
+ if _map['schemaName']=='Response':
31
+ raise ValueError('Response field mapping found in input guardrails')
32
+ except Exception as e:
33
+ raise ValueError('Error in fetching deployment details')
18
34
  self.base_url = guard_manager.base_url
19
35
  for key in field_map.keys():
20
36
  if key not in ['prompt','context','response','instruction']:
21
37
  print('Keys in field map should be in ["prompt","context","response","instruction"]')
38
+ self.current_trace_id = None
39
+ self.id_2_doc = {}
22
40
 
23
- def execute_deployment(self,payload):
24
- api = self.base_url + f'/guardrail/deployment/{self.deployment_id}/ingest'
41
+ def execute_deployment(self, deployment_id, payload):
42
+ api = self.base_url + f'/guardrail/deployment/{deployment_id}/ingest'
25
43
 
26
44
  payload = json.dumps(payload)
27
45
  headers = {
@@ -42,17 +60,58 @@ class GuardExecutor:
42
60
  print(response.json()['message'])
43
61
  return None
44
62
 
45
- def llm_executor(self,messages,model_params,llm_caller):
63
+ def llm_executor(self,prompt,model_params,llm_caller):
64
+ messages = [{
65
+ 'role':'user',
66
+ 'content':prompt
67
+ }]
68
+ if self.current_trace_id:
69
+ doc = self.id_2_doc[self.current_trace_id]
70
+ messages[0]['content'] = messages[0]['content'] + '\n' + doc.get('context','')
46
71
  if llm_caller == 'litellm':
47
72
  model_params['messages'] = messages
48
73
  response = litellm.completion(**model_params)
49
- return response
74
+ return response['choices'][0].message.content
75
+ elif llm_caller == 'genai':
76
+ genai_client = genai.Client(api_key=os.getenv('GENAI_API_KEY'))
77
+ model_params['messages'] = messages
78
+ response = genai_client.models.generate(**model_params)
79
+ return response.text
50
80
  else:
51
81
  print(f"{llm_caller} not supported currently, use litellm as llm caller")
82
+ '''
83
+ elif llm_caller == 'anthropic':
84
+ response = anthropic.completion(prompt=messages, **model_params)
85
+ return response['completion']
86
+ elif llm_caller == 'langchain':
87
+ response = langchain.completion(prompt=messages, **model_params)
88
+ return response['choices'][0].text
89
+ elif llm_caller == 'azure_openai':
90
+ response = azure_openai.completion(prompt=messages, **model_params)
91
+ return response['choices'][0].text
92
+ elif llm_caller == 'aws_bedrock':
93
+ response = aws_bedrock.completion(prompt=messages, **model_params)
94
+ return response['choices'][0].text
95
+ elif llm_caller == 'meta':
96
+ response = meta.completion(prompt=messages, **model_params)
97
+ return response['choices'][0].text
98
+ elif llm_csller == 'llamaindex':
99
+ response = llamaindex.completion(prompt=messages, **model_params)
100
+ return response['choices'][0].text'''
101
+
102
+ def set_input_params(self, prompt: None, context: None, instruction: None, **kwargs):
103
+ if 'latest' not in self.id_2_doc:
104
+ self.id_2_doc['latest'] = {}
105
+ if prompt:
106
+ self.id_2_doc['latest']['prompt'] = prompt
107
+ if context:
108
+ self.id_2_doc['latest']['context'] = context
109
+ if instruction:
110
+ self.id_2_doc['latest']['instruction'] = instruction
52
111
 
53
112
 
54
- def __call__(self,messages,prompt_params,model_params,llm_caller='litellm'):
55
- for key in self.field_map:
113
+ def __call__(self,prompt,prompt_params,model_params,llm_caller='litellm'):
114
+ '''for key in self.field_map:
56
115
  if key not in ['prompt','response']:
57
116
  if self.field_map[key] not in prompt_params:
58
117
  raise ValueError(f'{key} added as field map but not passed as prompt parameter')
@@ -66,32 +125,144 @@ class GuardExecutor:
66
125
  msg['content'] += '\n' + prompt_params[context_var]
67
126
  doc = dict()
68
127
  doc['prompt'] = prompt
69
- doc['context'] = prompt_params[context_var]
128
+ doc['context'] = prompt_params[context_var]'''
70
129
 
71
- # inactive the guardrails that needs Response variable
72
- #deployment_response = self.execute_deployment(doc)
130
+ # Run the input guardrails
131
+ alternate_response,input_deployment_response = self.execute_input_guardrails(prompt,prompt_params)
132
+ if input_deployment_response and input_deployment_response['data']['status'].lower() == 'fail':
133
+ return alternate_response, None, input_deployment_response
73
134
 
74
135
  # activate only guardrails that require response
75
136
  try:
76
- llm_response = self.llm_executor(messages,model_params,llm_caller)
137
+ llm_response = self.llm_executor(prompt,model_params,llm_caller)
77
138
  except Exception as e:
78
139
  print('Error in running llm:',str(e))
79
- return None
80
- doc['response'] = llm_response['choices'][0].message.content
140
+ return None, None, input_deployment_response
81
141
  if 'instruction' in self.field_map:
82
142
  instruction = prompt_params[self.field_map['instruction']]
83
- doc['instruction'] = instruction
84
- response = self.execute_deployment(doc)
85
- if response and response['data']['status'] == 'FAIL':
86
- print('Guardrail deployment run retured failed status, replacing with alternate response')
87
- return response['data']['alternateResponse'],llm_response,response
143
+ alternate_op_response,output_deployment_response = self.execute_output_guardrails(llm_response)
144
+ if output_deployment_response and output_deployment_response['data']['status'].lower() == 'fail':
145
+ return alternate_op_response,llm_response,output_deployment_response
88
146
  else:
89
- return None,llm_response,response
147
+ return None,llm_response,output_deployment_response
90
148
 
149
+ def set_variables(self,prompt,prompt_params):
150
+ for key in self.field_map:
151
+ if key not in ['prompt', 'response']:
152
+ if self.field_map[key] not in prompt_params:
153
+ raise ValueError(f'{key} added as field map but not passed as prompt parameter')
154
+ context_var = self.field_map.get('context', None)
155
+
156
+ doc = dict()
157
+ doc['prompt'] = prompt
158
+ doc['context'] = prompt_params[context_var]
159
+ if 'instruction' in self.field_map:
160
+ instruction = prompt_params[self.field_map['instruction']]
161
+ doc['instruction'] = instruction
162
+ return doc
163
+
164
+ def execute_input_guardrails(self, prompt, prompt_params):
165
+ doc = self.set_variables(prompt,prompt_params)
166
+ deployment_response = self.execute_deployment(self.input_deployment_id,doc)
167
+ self.current_trace_id = deployment_response['data']['results'][0]['executionId']
168
+ self.id_2_doc[self.current_trace_id] = doc
169
+ if deployment_response and deployment_response['data']['status'].lower() == 'fail':
170
+ return deployment_response['data']['alternateResponse'], deployment_response
171
+ elif deployment_response:
172
+ return None, deployment_response
91
173
 
174
+ def execute_output_guardrails(self, llm_response: str, prompt=None, prompt_params=None) -> None:
175
+ if not prompt: # user has not passed input
176
+ if self.current_trace_id not in self.id_2_doc:
177
+ raise Exception(f'No input doc found for trace_id: {self.current_trace_id}')
178
+ else:
179
+ doc = self.id_2_doc[self.current_trace_id]
180
+ doc['response'] = llm_response
181
+ else:
182
+ doc = self.set_variables(prompt,prompt_params)
183
+ deployment_response = self.execute_deployment(self.output_deployment_id,doc)
184
+ del self.id_2_doc[self.current_trace_id]
185
+ if deployment_response and deployment_response['data']['status'].lower() == 'fail':
186
+ return deployment_response['data']['alternateResponse'], deployment_response
187
+ elif deployment_response:
188
+ return None, deployment_response
92
189
 
93
190
 
94
-
191
+ '''
192
+ # doc = dict()
193
+ # doc['response'] = llm_response
194
+ # if trace_id:
195
+ # doc['trace_id'] = trace_id
196
+ trace_id = self.current_trace_id
197
+ if not trace_id:
198
+ for key in self.field_map:
199
+ if key not in ['prompt', 'response']:
200
+ if not prompt_params or self.field_map[key] not in prompt_params:
201
+ if key not in self.id_2_doc.get('latest', {}):
202
+ raise ValueError(f'{key} added as field map but not passed as prompt parameter or set in executor')
203
+ elif key == 'prompt':
204
+ if not messages:
205
+ if key not in self.id_2_doc.get('latest', {}):
206
+ raise ValueError('messages should be provided when prompt is used as field or prompt should be set in executor')
207
+ # raise Exception(f'\'doc_id\' not provided and there is no doc_id currently available. Either run \'execute_input_guardrails\' or pass a valid \'doc_id\'')
208
+ #deployment_details = self.guard_manager.get_deployment(self.output_deployment_id)
209
+ #deployed_guardrails = deployment_details['data']['guardrailsResponse']
210
+
211
+ for guardrail in deployed_guardrails:
212
+ metric_spec_mappings = guardrail['metricSpec']['config']['mappings']
213
+ var_names = [mapping['variableNmae'].lower() for mapping in metric_spec_mappings]
214
+ for var_name in var_names:
215
+ if var_name not in ['prompt', 'response']:
216
+ if var_name not in self.field_map:
217
+ raise ValueError(f'{var_name} requrired for {guardrail} guardrail in deployment {self.deployment_id} but not added as field map')
218
+ if not prompt_params or (self.field_map[var_name] not in prompt_params):
219
+ if var_name not in self.id_2_doc.get('latest', {}):
220
+ raise ValueError(f'{var_name} added as field map but not passed as prompt parameter')
221
+ elif var_name == 'prompt':
222
+ if not messages:
223
+ if var_name not in self.id_2_doc.get('latest', {}):
224
+ raise ValueError('messages must be provided if doc_id is not provided')
225
+
226
+ prompt = None
227
+ if messages:
228
+ for msg in messages:
229
+ if 'role' in msg:
230
+ if msg['role'] == 'user':
231
+ prompt = msg['content']
232
+ else:
233
+ prompt = self.id_2_doc['latest']['prompt']
234
+ context_var = self.field_map.get('context', None)
235
+ doc = dict()
236
+ doc['prompt'] = prompt
237
+ if context_var and prompt_params and context_var in prompt_params:
238
+ doc['context'] = prompt_params[self.field_map[context_var]]
239
+ elif context_var:
240
+ doc['context'] = self.id_2_doc['latest']['context']
241
+ elif 'latest' in self.id_2_doc and 'context' in self.id_2_doc['latest'] and self.id_2_doc['latest']['context']:
242
+ doc['context'] = self.id_2_doc['latest']['context']
243
+ else:
244
+ doc['context'] = ''
245
+ if 'instruction' in self.field_map:
246
+ if prompt_params and 'instruction' in prompt_params:
247
+ instruction = prompt_params[self.field_map['instruction']]
248
+ elif 'latest' in self.id_2_doc and 'instruction' in self.id_2_doc['latest'] and self.id_2_doc['latest']['instruction']:
249
+ instruction = self.id_2_doc['latest']['instruction']
250
+ else:
251
+ raise ValueError('instruction added as field map but not passed as prompt parameter or set in executor')
252
+ doc['instruction'] = instruction
253
+ elif trace_id not in self.id_2_doc:
254
+ raise Exception(f'trace_id {trace_id} is not valid. Please run \'execute_input_guardrails\' first')
255
+ else:
256
+ doc = self.id_2_doc[trace_id]
257
+ doc['response'] = llm_response
258
+ response = self.execute_deployment(doc)
259
+ if response and response['data']['status'] == 'FAIL':
260
+ print('Guardrail deployment run retured failed status, replacing with alternate response')
261
+ return response['data']['alternateResponse'], llm_response, response
262
+ else:
263
+ self.current_trace_id = None
264
+ return None, llm_response, response
265
+ '''
95
266
 
96
267
 
97
268
 
@@ -1,6 +1,9 @@
1
1
  import requests
2
2
  import json
3
3
  import os
4
+ import logging
5
+ logger = logging.getLogger(__name__)
6
+ from .utils import response_checker
4
7
  from .ragaai_catalyst import RagaAICatalyst
5
8
 
6
9
 
@@ -107,20 +110,82 @@ class GuardrailsManager:
107
110
  return response.json()["data"]
108
111
 
109
112
 
110
- def create_deployment(self, deployment_name):
113
+ def list_datasets(self):
114
+ """
115
+ Retrieves a list of datasets for a given project.
116
+
117
+ Returns:
118
+ list: A list of dataset names.
119
+
120
+ Raises:
121
+ None.
122
+ """
123
+
124
+ def make_request():
125
+ headers = {
126
+ 'Content-Type': 'application/json',
127
+ "Authorization": f"Bearer {os.getenv('RAGAAI_CATALYST_TOKEN')}",
128
+ "X-Project-Id": str(self.project_id),
129
+ }
130
+ json_data = {"size": 12, "page": "0", "projectId": str(self.project_id), "search": ""}
131
+ try:
132
+ response = requests.post(
133
+ f"{self.base_url}/v2/llm/dataset",
134
+ headers=headers,
135
+ json=json_data,
136
+ timeout=30,
137
+ )
138
+ response.raise_for_status()
139
+ return response
140
+ except requests.exceptions.RequestException as e:
141
+ logger.error(f"Failed to list datasets: {e}")
142
+ raise
143
+
144
+ try:
145
+ response = make_request()
146
+ response_checker(response, "Dataset.list_datasets")
147
+ if response.status_code == 401:
148
+ response = make_request() # Retry the request
149
+ if response.status_code != 200:
150
+ return {
151
+ "status_code": response.status_code,
152
+ "message": response.json(),
153
+ }
154
+ datasets = response.json()["data"]["content"]
155
+ dataset_list = [dataset["name"] for dataset in datasets]
156
+ return dataset_list
157
+ except Exception as e:
158
+ logger.error(f"Error in list_datasets: {e}")
159
+ raise
160
+
161
+
162
+ def create_deployment(self, deployment_name, deployment_dataset_name):
111
163
  """
112
164
  Create a new deployment ID with the given name.
113
165
 
114
166
  :param deployment_name: The name of the new deployment.
167
+ :param deployment_dataset_name: The name of the tracking dataset.
115
168
  :raises ValueError: If a deployment with the given name already exists.
116
169
  """
117
170
  self.deployment_name = deployment_name
171
+ self.deployment_dataset_name = deployment_dataset_name
118
172
  list_deployment_ids = self.list_deployment_ids()
119
173
  list_deployment_names = [_["name"] for _ in list_deployment_ids]
120
174
  if deployment_name in list_deployment_names:
121
175
  raise ValueError(f"Deployment with '{deployment_name}' already exists, choose a unique name")
122
176
 
123
- payload = json.dumps({"name": str(deployment_name)})
177
+ # Check if dataset name exists
178
+ list_datasets = self.list_datasets()
179
+ # Assuming this method exists to get list of datasets
180
+ is_new_dataset = deployment_dataset_name not in list_datasets
181
+
182
+ payload = json.dumps({
183
+ "name": str(deployment_name),
184
+ "trackingDataset": {
185
+ "addNew": is_new_dataset,
186
+ "name": str(deployment_dataset_name)
187
+ }
188
+ })
124
189
  headers = {
125
190
  'Authorization': f'Bearer {os.getenv("RAGAAI_CATALYST_TOKEN")}',
126
191
  'Content-Type': 'application/json',
@@ -74,6 +74,10 @@ def extract_model_name(args, kwargs, result):
74
74
  return "gemini-1.5-pro"
75
75
  if "gemini-pro" in model:
76
76
  return "gemini-pro"
77
+
78
+ if 'response_metadata' in dir(result):
79
+ if 'model_name' in result.response_metadata:
80
+ model = result.response_metadata['model_name']
77
81
 
78
82
  return model or "default"
79
83
 
@@ -116,8 +120,8 @@ def extract_token_usage(result):
116
120
  # Run the coroutine in the current event loop
117
121
  result = loop.run_until_complete(result)
118
122
 
119
- # Handle text attribute responses (JSON string or Vertex AI)
120
- if hasattr(result, "text"):
123
+ # Handle text attribute responses (JSON string for Vertex AI)
124
+ if hasattr(result, "text") and isinstance(result.text, (str, bytes, bytearray)):
121
125
  # First try parsing as JSON for OpenAI responses
122
126
  try:
123
127
  import json
@@ -162,11 +166,26 @@ def extract_token_usage(result):
162
166
  # Handle Google GenerativeAI format with usage_metadata
163
167
  if hasattr(result, "usage_metadata"):
164
168
  metadata = result.usage_metadata
165
- return {
166
- "prompt_tokens": getattr(metadata, "prompt_token_count", 0),
167
- "completion_tokens": getattr(metadata, "candidates_token_count", 0),
168
- "total_tokens": getattr(metadata, "total_token_count", 0)
169
- }
169
+ if hasattr(metadata, "prompt_token_count"):
170
+ return {
171
+ "prompt_tokens": getattr(metadata, "prompt_token_count", 0),
172
+ "completion_tokens": getattr(metadata, "candidates_token_count", 0),
173
+ "total_tokens": getattr(metadata, "total_token_count", 0)
174
+ }
175
+ elif hasattr(metadata, "input_tokens"):
176
+ return {
177
+ "prompt_tokens": getattr(metadata, "input_tokens", 0),
178
+ "completion_tokens": getattr(metadata, "output_tokens", 0),
179
+ "total_tokens": getattr(metadata, "total_tokens", 0)
180
+ }
181
+ elif "input_tokens" in metadata:
182
+ return {
183
+ "prompt_tokens": metadata["input_tokens"],
184
+ "completion_tokens": metadata["output_tokens"],
185
+ "total_tokens": metadata["total_tokens"]
186
+ }
187
+
188
+
170
189
 
171
190
  # Handle ChatResponse format with raw usuage
172
191
  if hasattr(result, "raw") and hasattr(result.raw, "usage"):
@@ -337,9 +337,15 @@ class LangchainTracer(BaseCallbackHandler):
337
337
 
338
338
  try:
339
339
  from langchain.chains import create_retrieval_chain, RetrievalQA
340
+ from langchain_core.runnables import RunnableBinding
341
+ from langchain_core.runnables import RunnableSequence
342
+ from langchain.chains import ConversationalRetrievalChain
340
343
  components_to_patch["RetrievalQA"] = (RetrievalQA, "from_chain_type")
341
344
  components_to_patch["create_retrieval_chain"] = (create_retrieval_chain, None)
342
345
  components_to_patch['RetrievalQA.invoke'] = (RetrievalQA, 'invoke')
346
+ components_to_patch["RunnableBinding"] = (RunnableBinding, "invoke")
347
+ components_to_patch["RunnableSequence"] = (RunnableSequence, "invoke")
348
+ components_to_patch["ConversationalRetrievalChain"] = (ConversationalRetrievalChain, "invoke")
343
349
  except ImportError:
344
350
  logger.debug("Langchain chains not available for patching")
345
351
 
@@ -407,10 +413,16 @@ class LangchainTracer(BaseCallbackHandler):
407
413
  elif name == "ChatOpenAI_ChatModels":
408
414
  from langchain.chat_models import ChatOpenAI as ChatOpenAI_ChatModels
409
415
  imported_components[name] = ChatOpenAI_ChatModels
410
- elif name in ["RetrievalQA", "create_retrieval_chain", 'RetrievalQA.invoke']:
416
+ elif name in ["RetrievalQA", "create_retrieval_chain", 'RetrievalQA.invoke', "RunnableBinding", "RunnableSequence","ConversationalRetrievalChain"]:
411
417
  from langchain.chains import create_retrieval_chain, RetrievalQA
418
+ from langchain_core.runnables import RunnableBinding
419
+ from langchain_core.runnables import RunnableSequence
420
+ from langchain.chains import ConversationalRetrievalChain
412
421
  imported_components["RetrievalQA"] = RetrievalQA
413
422
  imported_components["create_retrieval_chain"] = create_retrieval_chain
423
+ imported_components["RunnableBinding"] = RunnableBinding
424
+ imported_components["RunnableSequence"] = RunnableSequence
425
+ imported_components["ConversationalRetrievalChain"] = ConversationalRetrievalChain
414
426
  except ImportError:
415
427
  logger.debug(f"{name} not available for restoration")
416
428
 
@@ -414,7 +414,7 @@ class Tracer(AgenticTracing):
414
414
  with open(filepath_3, 'w') as f:
415
415
  json.dump(final_result, f, indent=2)
416
416
 
417
- print(filepath_3)
417
+ # print(filepath_3)
418
418
  else:
419
419
  logger.warning("No valid langchain traces found in final_result")
420
420
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: ragaai_catalyst
3
- Version: 2.1.5b40
3
+ Version: 2.1.5.1b1
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,>=3.9
@@ -24,6 +24,7 @@ Requires-Dist: pandas
24
24
  Requires-Dist: groq>=0.11.0
25
25
  Requires-Dist: PyPDF2>=3.0.1
26
26
  Requires-Dist: google-generativeai>=0.8.2
27
+ Requires-Dist: google-genai>=1.3.0
27
28
  Requires-Dist: Markdown>=3.7
28
29
  Requires-Dist: litellm==1.51.1
29
30
  Requires-Dist: tenacity==8.3.0
@@ -56,8 +57,6 @@ RagaAI Catalyst is a comprehensive platform designed to enhance the management a
56
57
 
57
58
  ![RagaAI Catalyst](docs/img/main.png)
58
59
 
59
- ![RagaAI Catalyst](docs/img/main.png)
60
-
61
60
  ## Table of Contents
62
61
 
63
62
  - [RagaAI Catalyst](#ragaai-catalyst)
@@ -3,8 +3,8 @@ ragaai_catalyst/_version.py,sha256=JKt9KaVNOMVeGs8ojO6LvIZr7ZkMzNN-gCcvryy4x8E,4
3
3
  ragaai_catalyst/dataset.py,sha256=YCj8Ovu6y38KEw-1HCe4xQWkmYPgfNTtMa8Q0g6B62o,29401
4
4
  ragaai_catalyst/evaluation.py,sha256=O96CydYVPh3duUmXjY6REIXMOR-tOPixSG-Qhrf636A,22955
5
5
  ragaai_catalyst/experiment.py,sha256=8yQo1phCHlpnJ-4CqCaIbLXg_1ZlAuLGI9kqGBl-OTE,18859
6
- ragaai_catalyst/guard_executor.py,sha256=llPbE3DyVtrybojXknzBZj8-dtUrGBQwi9-ZiPJxGRo,3762
7
- ragaai_catalyst/guardrails_manager.py,sha256=DILMOAASK57FH9BLq_8yC1AQzRJ8McMFLwCXgYwNAd4,11904
6
+ ragaai_catalyst/guard_executor.py,sha256=WyosKLgEsAERJTtzs6wA4F1uDl8wKoiNZtTdyTPvOAw,13651
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
@@ -28,10 +28,10 @@ ragaai_catalyst/redteaming/utils/issue_description.py,sha256=iB0XbeOjdqHTPrikCKS
28
28
  ragaai_catalyst/redteaming/utils/rt.png,sha256=HzVC8bz_4UgwafKXuMe8RJVI6CyK_UmSgo53ceAOQK8,282154
29
29
  ragaai_catalyst/tracers/__init__.py,sha256=LfgTes-nHpazssbGKnn8kyLZNr49kIPrlkrqqoTFTfc,301
30
30
  ragaai_catalyst/tracers/distributed.py,sha256=MwlBwIxCAng-OI-7Ove_rkE1mTLeuW4Jw-wWEVJBNlI,9968
31
- ragaai_catalyst/tracers/langchain_callback.py,sha256=KooENtkX0Hp0S_d_1WI3iH3qNVt-ZcnwOKVlydv4dUk,33518
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=ZA57OqwDZblU9iPR4Lj5t7gEeqLUmOi_Wa10NxMGQsc,27825
34
+ ragaai_catalyst/tracers/tracer.py,sha256=oaag7-VdUufR5LygnKcUgjTvlAEcxToVxNYkQCWEhkg,27827
35
35
  ragaai_catalyst/tracers/upload_traces.py,sha256=OKsc-Obf8bJvKBprt3dqj8GQQNkoX3kT_t8TBDi9YDQ,5670
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
@@ -65,7 +65,7 @@ ragaai_catalyst/tracers/agentic_tracing/utils/create_dataset_schema.py,sha256=xH
65
65
  ragaai_catalyst/tracers/agentic_tracing/utils/file_name_tracker.py,sha256=YG601l1a29ov9VPu9Vl4RXxgL7l16k54_WWnoTNoG58,2064
66
66
  ragaai_catalyst/tracers/agentic_tracing/utils/generic.py,sha256=WwXT01xmp8MSr7KinuDCSK9a1ifpLcT7ajFkvYviG_A,1190
67
67
  ragaai_catalyst/tracers/agentic_tracing/utils/get_user_trace_metrics.py,sha256=vPZ4dn4EHFW0kqd1GyRpsYXbfrRrd0DXCmh-pzsDBNE,1109
68
- ragaai_catalyst/tracers/agentic_tracing/utils/llm_utils.py,sha256=Z01wEEGVlWx-45rHPCKDmeusfpjdS2-LXKYNhsAgjJE,21548
68
+ ragaai_catalyst/tracers/agentic_tracing/utils/llm_utils.py,sha256=McKB7TQchmFcgg2h0zg-inuxxKaRjcwbqV_OnRzzYEw,22387
69
69
  ragaai_catalyst/tracers/agentic_tracing/utils/model_costs.json,sha256=2tzGw_cKCTPcfjEm7iGvFE6pTw7gMTPzeBov_MTaXNY,321336
70
70
  ragaai_catalyst/tracers/agentic_tracing/utils/span_attributes.py,sha256=qmODERcFZhc8MX24boFCXkkh6sJ-vZngRHPvxhyWFeE,4347
71
71
  ragaai_catalyst/tracers/agentic_tracing/utils/supported_llm_provider.toml,sha256=LvFDivDIE96Zasp-fgDEqUJ5GEQZUawQucR3aOcSUTY,926
@@ -90,8 +90,8 @@ ragaai_catalyst/tracers/utils/langchain_tracer_extraction_logic.py,sha256=XS2_x2
90
90
  ragaai_catalyst/tracers/utils/model_prices_and_context_window_backup.json,sha256=C3uwkibJ08C9sOX-54kulZYmJlIpZ-SQpfE6HNGrjbM,343502
91
91
  ragaai_catalyst/tracers/utils/trace_json_converter.py,sha256=qXSYKr4JMUpGQsB3mnr9_2qH6FqzUhCynNqlDp1IWTs,12440
92
92
  ragaai_catalyst/tracers/utils/utils.py,sha256=ViygfJ7vZ7U0CTSA1lbxVloHp4NSlmfDzBRNCJuMhis,2374
93
- ragaai_catalyst-2.1.5b40.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
94
- ragaai_catalyst-2.1.5b40.dist-info/METADATA,sha256=9R85Gfk5NuK3Q2TrvsYwza4g66Zqfzk3uf4mFihCdlI,22060
95
- ragaai_catalyst-2.1.5b40.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
96
- ragaai_catalyst-2.1.5b40.dist-info/top_level.txt,sha256=HpgsdRgEJMk8nqrU6qdCYk3di7MJkDL0B19lkc7dLfM,16
97
- ragaai_catalyst-2.1.5b40.dist-info/RECORD,,
93
+ ragaai_catalyst-2.1.5.1b1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
94
+ ragaai_catalyst-2.1.5.1b1.dist-info/METADATA,sha256=e0NQYAkSe9ivCqBqAFPv0zjz5IuS_PwOTFZUjB7BVKM,22057
95
+ ragaai_catalyst-2.1.5.1b1.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
96
+ ragaai_catalyst-2.1.5.1b1.dist-info/top_level.txt,sha256=HpgsdRgEJMk8nqrU6qdCYk3di7MJkDL0B19lkc7dLfM,16
97
+ ragaai_catalyst-2.1.5.1b1.dist-info/RECORD,,