nemo-evaluator 0.1.76__tar.gz → 0.1.78__tar.gz
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.
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/PKG-INFO +1 -1
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/interceptors/caching_interceptor.py +69 -1
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/package_info.py +1 -1
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator.egg-info/PKG-INFO +1 -1
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/LICENSE +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/README.md +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/pyproject.toml +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/setup.cfg +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/__init__.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/__init__.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/adapter_config.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/caching/__init__.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/caching/diskcaching.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/decorators.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/interceptors/__init__.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/interceptors/endpoint_interceptor.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/interceptors/logging_interceptor.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/interceptors/payload_modifier_interceptor.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/interceptors/progress_tracking_interceptor.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/interceptors/raise_client_error_interceptor.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/interceptors/reasoning_interceptor.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/interceptors/response_stats_interceptor.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/interceptors/system_message_interceptor.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/pipeline.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/registry.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/reports/__init__.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/reports/post_eval_report_hook.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/reports/templates/__init__.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/reports/templates/simple_template.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/server.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/types.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/api/__init__.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/api/api_dataclasses.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/cli/__init__.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/cli/example.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/client/__init__.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/client/adapter_transport.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/client/client.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/core/__init__.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/core/entrypoint.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/core/evaluate.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/core/input.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/core/resources.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/core/utils.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/logging/__init__.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/logging/config.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/logging/context.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/logging/utils.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/resources/framework_tpl.yml +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/resources/init_tpl.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/resources/output_tpl.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/sandbox/__init__.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/sandbox/base.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/sandbox/ecs_fargate.py +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator.egg-info/SOURCES.txt +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator.egg-info/dependency_links.txt +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator.egg-info/entry_points.txt +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator.egg-info/requires.txt +0 -0
- {nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator.egg-info/top_level.txt +0 -0
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
import hashlib
|
|
19
19
|
import json
|
|
20
|
+
import re
|
|
20
21
|
import threading
|
|
21
22
|
from typing import Any, final
|
|
22
23
|
|
|
@@ -118,6 +119,70 @@ class CachingInterceptor(RequestToResponseInterceptor, ResponseInterceptor):
|
|
|
118
119
|
max_saved_responses=self.max_saved_responses,
|
|
119
120
|
)
|
|
120
121
|
|
|
122
|
+
@staticmethod
|
|
123
|
+
def sanitize_request_data_for_logging(data: Any) -> Any:
|
|
124
|
+
"""
|
|
125
|
+
Sanitize request data for logging by replacing image content with brief descriptions.
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
data: Request data to sanitize (can be dict, list, or any other type)
|
|
129
|
+
|
|
130
|
+
Returns:
|
|
131
|
+
Sanitized version of the data with images replaced by brief descriptions
|
|
132
|
+
"""
|
|
133
|
+
if isinstance(data, dict):
|
|
134
|
+
sanitized = {}
|
|
135
|
+
for key, value in data.items():
|
|
136
|
+
# Check if this is an image_url field
|
|
137
|
+
if key == "image_url" and isinstance(value, dict):
|
|
138
|
+
url = value.get("url", "")
|
|
139
|
+
if isinstance(url, str) and url.startswith("data:image/"):
|
|
140
|
+
# Extract image format and calculate approximate size
|
|
141
|
+
match = re.match(r"data:image/([^;]+);base64,(.+)", url)
|
|
142
|
+
if match:
|
|
143
|
+
image_format = match.group(1)
|
|
144
|
+
base64_data = match.group(2)
|
|
145
|
+
size_bytes = (
|
|
146
|
+
len(base64_data) * 3 // 4
|
|
147
|
+
) # Approximate decoded size
|
|
148
|
+
sanitized[key] = {
|
|
149
|
+
"url": f"<image: format={image_format}, size≈{size_bytes} bytes>"
|
|
150
|
+
}
|
|
151
|
+
else:
|
|
152
|
+
sanitized[key] = {"url": "<image data>"}
|
|
153
|
+
else:
|
|
154
|
+
sanitized[key] = (
|
|
155
|
+
CachingInterceptor.sanitize_request_data_for_logging(value)
|
|
156
|
+
)
|
|
157
|
+
# Check if this is a url field with base64 image data
|
|
158
|
+
elif (
|
|
159
|
+
key == "url"
|
|
160
|
+
and isinstance(value, str)
|
|
161
|
+
and value.startswith("data:image/")
|
|
162
|
+
):
|
|
163
|
+
match = re.match(r"data:image/([^;]+);base64,(.+)", value)
|
|
164
|
+
if match:
|
|
165
|
+
image_format = match.group(1)
|
|
166
|
+
base64_data = match.group(2)
|
|
167
|
+
size_bytes = len(base64_data) * 3 // 4
|
|
168
|
+
sanitized[key] = (
|
|
169
|
+
f"<image: format={image_format}, size≈{size_bytes} bytes>"
|
|
170
|
+
)
|
|
171
|
+
else:
|
|
172
|
+
sanitized[key] = "<image data>"
|
|
173
|
+
else:
|
|
174
|
+
sanitized[key] = (
|
|
175
|
+
CachingInterceptor.sanitize_request_data_for_logging(value)
|
|
176
|
+
)
|
|
177
|
+
return sanitized
|
|
178
|
+
elif isinstance(data, list):
|
|
179
|
+
return [
|
|
180
|
+
CachingInterceptor.sanitize_request_data_for_logging(item)
|
|
181
|
+
for item in data
|
|
182
|
+
]
|
|
183
|
+
else:
|
|
184
|
+
return data
|
|
185
|
+
|
|
121
186
|
@staticmethod
|
|
122
187
|
def _generate_cache_key(data: Any) -> str:
|
|
123
188
|
"""
|
|
@@ -201,7 +266,10 @@ class CachingInterceptor(RequestToResponseInterceptor, ResponseInterceptor):
|
|
|
201
266
|
|
|
202
267
|
# Check cache. Create cache key that will be used everywhere (also if no cache hit)
|
|
203
268
|
req.rctx.cache_key = self._generate_cache_key(request_data)
|
|
204
|
-
|
|
269
|
+
|
|
270
|
+
# Sanitize request data for logging (replace images with brief descriptions)
|
|
271
|
+
sanitized_request_data = self.sanitize_request_data_for_logging(request_data)
|
|
272
|
+
self.logger.debug("Intercepted request", request_data=sanitized_request_data)
|
|
205
273
|
self.logger.debug(
|
|
206
274
|
"Processing request for caching",
|
|
207
275
|
cache_key=req.rctx.cache_key[:8] + "...",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/adapter_config.py
RENAMED
|
File without changes
|
{nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/caching/__init__.py
RENAMED
|
File without changes
|
{nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/caching/diskcaching.py
RENAMED
|
File without changes
|
|
File without changes
|
{nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/interceptors/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/adapters/reports/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/client/adapter_transport.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator/resources/framework_tpl.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{nemo_evaluator-0.1.76 → nemo_evaluator-0.1.78}/src/nemo_evaluator.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|