fleet-python 0.2.70__py3-none-any.whl → 0.2.71__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.
fleet/__init__.py CHANGED
@@ -73,7 +73,7 @@ from . import env
73
73
  from . import global_client as _global_client
74
74
  from ._async import global_client as _async_global_client
75
75
 
76
- __version__ = "0.2.70"
76
+ __version__ = "0.2.71"
77
77
 
78
78
  __all__ = [
79
79
  # Core classes
fleet/_async/__init__.py CHANGED
@@ -44,7 +44,7 @@ from ..types import VerifierFunction
44
44
  from .. import env
45
45
  from . import global_client as _async_global_client
46
46
 
47
- __version__ = "0.2.70"
47
+ __version__ = "0.2.71"
48
48
 
49
49
  __all__ = [
50
50
  # Core classes
fleet/_async/base.py CHANGED
@@ -25,7 +25,7 @@ from .exceptions import (
25
25
  try:
26
26
  from .. import __version__
27
27
  except ImportError:
28
- __version__ = "0.2.70"
28
+ __version__ = "0.2.71"
29
29
 
30
30
  logger = logging.getLogger(__name__)
31
31
 
fleet/_async/tasks.py CHANGED
@@ -296,6 +296,8 @@ def verifier_from_string(
296
296
  try:
297
297
  import inspect
298
298
  import re
299
+ import json
300
+ import string
299
301
  from .verifiers.verifier import AsyncVerifierFunction
300
302
  from fleet.verifiers.code import TASK_SUCCESSFUL_SCORE, TASK_FAILED_SCORE
301
303
  from fleet.verifiers.db import IgnoreConfig
@@ -307,12 +309,51 @@ def verifier_from_string(
307
309
  cleaned_code = re.sub(r"from fleet import.*verifier.*\n", "", cleaned_code)
308
310
  cleaned_code = re.sub(r"import.*verifier.*\n", "", cleaned_code)
309
311
 
312
+ # Define helper functions for verifier execution
313
+ _TRANSLATOR = str.maketrans(string.punctuation, " " * len(string.punctuation))
314
+
315
+ def _normalize_text(value: str) -> str:
316
+ text = value.lower().translate(_TRANSLATOR)
317
+ return "".join(text.split())
318
+
319
+ def _stringify_content(content: Any) -> str:
320
+ if isinstance(content, (dict, list)):
321
+ return json.dumps(content, sort_keys=True)
322
+ return str(content)
323
+
324
+ def normalized_contains(target: str, blob: Any) -> bool:
325
+ normalized_target = _normalize_text(target)
326
+ normalized_blob = _normalize_text(_stringify_content(blob))
327
+ return normalized_target in normalized_blob
328
+
329
+ def extract_numbers(text: str) -> list:
330
+ cleaned_text = text.replace(',', '')
331
+ pattern = r'-?\d+\.?\d*'
332
+ matches = re.findall(pattern, cleaned_text)
333
+ return [float(num) for num in matches]
334
+
335
+ def contains_number(text: str, target_number) -> bool:
336
+ numbers = extract_numbers(text)
337
+ try:
338
+ if isinstance(target_number, str):
339
+ target_number = target_number.replace(',', '')
340
+ target = float(target_number)
341
+ except (ValueError, AttributeError):
342
+ return False
343
+ return target in numbers
344
+
310
345
  # Create a local namespace for executing the code
311
346
  local_namespace = {
312
347
  "TASK_SUCCESSFUL_SCORE": TASK_SUCCESSFUL_SCORE,
313
348
  "TASK_FAILED_SCORE": TASK_FAILED_SCORE,
314
349
  "IgnoreConfig": IgnoreConfig,
315
350
  "Environment": object, # Add Environment type if needed
351
+ "normalized_contains": normalized_contains,
352
+ "extract_numbers": extract_numbers,
353
+ "contains_number": contains_number,
354
+ "json": json,
355
+ "re": re,
356
+ "string": string,
316
357
  }
317
358
 
318
359
  # Execute the cleaned verifier code in the namespace
fleet/base.py CHANGED
@@ -25,7 +25,7 @@ from .exceptions import (
25
25
  try:
26
26
  from . import __version__
27
27
  except ImportError:
28
- __version__ = "0.2.70"
28
+ __version__ = "0.2.71"
29
29
 
30
30
  logger = logging.getLogger(__name__)
31
31
 
fleet/tasks.py CHANGED
@@ -289,6 +289,8 @@ def verifier_from_string(
289
289
  try:
290
290
  import inspect
291
291
  import re
292
+ import json
293
+ import string
292
294
  from .verifiers import SyncVerifierFunction
293
295
  from .verifiers.code import TASK_SUCCESSFUL_SCORE, TASK_FAILED_SCORE
294
296
  from .verifiers.db import IgnoreConfig
@@ -300,6 +302,39 @@ def verifier_from_string(
300
302
  cleaned_code = re.sub(r"from fleet import.*verifier.*\n", "", cleaned_code)
301
303
  cleaned_code = re.sub(r"import.*verifier.*\n", "", cleaned_code)
302
304
 
305
+ # Define helper functions for verifier execution
306
+ _TRANSLATOR = str.maketrans(string.punctuation, " " * len(string.punctuation))
307
+
308
+ def _normalize_text(value: str) -> str:
309
+ text = value.lower().translate(_TRANSLATOR)
310
+ return "".join(text.split())
311
+
312
+ def _stringify_content(content: Any) -> str:
313
+ if isinstance(content, (dict, list)):
314
+ return json.dumps(content, sort_keys=True)
315
+ return str(content)
316
+
317
+ def normalized_contains(target: str, blob: Any) -> bool:
318
+ normalized_target = _normalize_text(target)
319
+ normalized_blob = _normalize_text(_stringify_content(blob))
320
+ return normalized_target in normalized_blob
321
+
322
+ def extract_numbers(text: str) -> list:
323
+ cleaned_text = text.replace(',', '')
324
+ pattern = r'-?\d+\.?\d*'
325
+ matches = re.findall(pattern, cleaned_text)
326
+ return [float(num) for num in matches]
327
+
328
+ def contains_number(text: str, target_number) -> bool:
329
+ numbers = extract_numbers(text)
330
+ try:
331
+ if isinstance(target_number, str):
332
+ target_number = target_number.replace(',', '')
333
+ target = float(target_number)
334
+ except (ValueError, AttributeError):
335
+ return False
336
+ return target in numbers
337
+
303
338
  # Create a globals namespace with all required imports
304
339
  exec_globals = globals().copy()
305
340
  exec_globals.update(
@@ -308,6 +343,12 @@ def verifier_from_string(
308
343
  "TASK_FAILED_SCORE": TASK_FAILED_SCORE,
309
344
  "IgnoreConfig": IgnoreConfig,
310
345
  "Environment": object, # Add Environment type if needed
346
+ "normalized_contains": normalized_contains,
347
+ "extract_numbers": extract_numbers,
348
+ "contains_number": contains_number,
349
+ "json": json,
350
+ "re": re,
351
+ "string": string,
311
352
  }
312
353
  )
313
354
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fleet-python
3
- Version: 0.2.70
3
+ Version: 0.2.71
4
4
  Summary: Python SDK for Fleet environments
5
5
  Author-email: Fleet AI <nic@fleet.so>
6
6
  License: Apache-2.0
@@ -21,22 +21,22 @@ examples/openai_simple_example.py,sha256=HmiufucrAZne7tHq9uoEsDWlEhjNC265bQAyIGB
21
21
  examples/query_builder_example.py,sha256=-cOMfWGNifYfYEt_Ds73XpwATZvFDL6F4KTkVxdMjzg,3951
22
22
  examples/quickstart.py,sha256=1VT39IRRhemsJgxi0O0gprdpcw7HB4pYO97GAYagIcg,3788
23
23
  examples/test_cdp_logging.py,sha256=AkCwQCgOTQEI8w3v0knWK_4eXMph7L9x07wj9yIYM10,2836
24
- fleet/__init__.py,sha256=TumoqC49tWQWtj2B2GiHgxgSfnj1xwkLlldkVIo1i14,4218
25
- fleet/base.py,sha256=KX25a60_SOquqrj81vBK3men3cG0_nmiAuEh2t3Y94I,9501
24
+ fleet/__init__.py,sha256=HRXR5gVBiGzIY4lgvt-2ni6t3J_4nLnexzXxk2Qzc5w,4218
25
+ fleet/base.py,sha256=zE4I8P0TEV0DuqxcspxUvZz0FxC_zegonZZLAiiZ0Yc,9501
26
26
  fleet/client.py,sha256=PR3TiLEDadect1EKwpJCU_WArH3Kpjh8n90oMxAXPaM,37160
27
27
  fleet/config.py,sha256=n_wh9Sahu3gGE7nHJ7kqNFUH1qDiBtF4bgZq9MvIBMU,319
28
28
  fleet/exceptions.py,sha256=fUmPwWhnT8SR97lYsRq0kLHQHKtSh2eJS0VQ2caSzEI,5055
29
29
  fleet/global_client.py,sha256=frrDAFNM2ywN0JHLtlm9qbE1dQpnQJsavJpb7xSR_bU,1072
30
30
  fleet/models.py,sha256=7ZRUVBT0_6tiJkotWLTj52oVaeDfP4OsjjkWJxhf8CA,15409
31
- fleet/tasks.py,sha256=jee0RqbIGzqbtYmTUtGWtVbgiiomy6ywfH-DJrF4nSo,18363
31
+ fleet/tasks.py,sha256=yh1mY9_sfAyzv_o3L_WlWveclqSkYGNKNrNAsLyIhvM,20081
32
32
  fleet/types.py,sha256=L4Y82xICf1tzyCLqhLYUgEoaIIS5h9T05TyFNHSWs3s,652
33
- fleet/_async/__init__.py,sha256=0vIHueFbjbmRiSBtM9B_8Sjox8pOUL-ce66wdp1TpZs,9101
34
- fleet/_async/base.py,sha256=NdUNxAeToYeRD5fRRKT9bzqLv1IBqNUQvDFilKmfCY8,9522
33
+ fleet/_async/__init__.py,sha256=uN9LVRW1WFGEt2aDOCyGhJYgiswziQ1hZIB-jDArxRk,9101
34
+ fleet/_async/base.py,sha256=UL7BHkobj2eN5-Am52-r0a3Fvt2aNJjkXyhTAwFTUok,9522
35
35
  fleet/_async/client.py,sha256=LWJYR-e7wyChKABVTD0jHF-MzCnh6Tb43VzQKMytZe0,37723
36
36
  fleet/_async/exceptions.py,sha256=fUmPwWhnT8SR97lYsRq0kLHQHKtSh2eJS0VQ2caSzEI,5055
37
37
  fleet/_async/global_client.py,sha256=4WskpLHbsDEgWW7hXMD09W-brkp4euy8w2ZJ88594rQ,1103
38
38
  fleet/_async/models.py,sha256=-3xv2QyoHsvYcWmdKLf9Z93md8XB17DBeJCxdRCB3bo,13571
39
- fleet/_async/tasks.py,sha256=stYJay2f261-ekRfOQo9RVGndbL09M_QjjFar71BYwk,18387
39
+ fleet/_async/tasks.py,sha256=t02dfoh9fGmEUHl_h72gKCINIMwQCS0uUBLNMmynNI8,20081
40
40
  fleet/_async/env/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
41
  fleet/_async/env/client.py,sha256=FqetvDlABeHLaAc8UF_m_2OFEhXy4ZqH7ly_Nh8p3uA,3479
42
42
  fleet/_async/instance/__init__.py,sha256=PtmJq8J8bh0SOQ2V55QURz5GJfobozwtQoqhaOk3_tI,515
@@ -69,12 +69,12 @@ fleet/verifiers/decorator.py,sha256=RuTjjDijbicNfMSjA7HcTpKueEki5dzNOdTuHS7UoZs,
69
69
  fleet/verifiers/parse.py,sha256=qz9AfJrTbjlg-LU-lE8Ciqi7Yt2a8-cs17FdpjTLhMk,8550
70
70
  fleet/verifiers/sql_differ.py,sha256=TqTLWyK3uOyLbitT6HYzYEzuSFC39wcyhgk3rcm__k8,6525
71
71
  fleet/verifiers/verifier.py,sha256=npnTBB-A1Cl66gNOGPR6UaybvcDy6C6_hWchyIJeDyc,14252
72
- fleet_python-0.2.70.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
72
+ fleet_python-0.2.71.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
73
73
  scripts/fix_sync_imports.py,sha256=X9fWLTpiPGkSHsjyQUDepOJkxOqw1DPj7nd8wFlFqLQ,8368
74
74
  scripts/unasync.py,sha256=vWVQxRWX8SRZO5cmzEhpvnG_REhCWXpidIGIpWmEcvI,696
75
75
  tests/__init__.py,sha256=Re1SdyxH8NfyL1kjhi7SQkGP1mYeWB-D6UALqdIMd8I,35
76
76
  tests/test_verifier_from_string.py,sha256=Lxi3TpFHFb-hG4-UhLKZJkqo84ax9YJY8G6beO-1erM,13581
77
- fleet_python-0.2.70.dist-info/METADATA,sha256=j26JuOscnwPwiQyc4ICc_0mbInNctVnhk9WA8AecOB0,3304
78
- fleet_python-0.2.70.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
79
- fleet_python-0.2.70.dist-info/top_level.txt,sha256=qb1zIbtEktyhRFZdqVytwg54l64qtoZL0wjHB4bUg3c,29
80
- fleet_python-0.2.70.dist-info/RECORD,,
77
+ fleet_python-0.2.71.dist-info/METADATA,sha256=4zYpvyQpTrt2q9aAcjPLwVyO8wXp3dnvJGzb1uzxAMk,3304
78
+ fleet_python-0.2.71.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
79
+ fleet_python-0.2.71.dist-info/top_level.txt,sha256=qb1zIbtEktyhRFZdqVytwg54l64qtoZL0wjHB4bUg3c,29
80
+ fleet_python-0.2.71.dist-info/RECORD,,