nvidia-nat-test 1.3.0rc4__py3-none-any.whl → 1.3.0rc6__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.
Potentially problematic release.
This version of nvidia-nat-test might be problematic. Click here for more details.
- nat/test/plugin.py +120 -14
- {nvidia_nat_test-1.3.0rc4.dist-info → nvidia_nat_test-1.3.0rc6.dist-info}/METADATA +2 -2
- {nvidia_nat_test-1.3.0rc4.dist-info → nvidia_nat_test-1.3.0rc6.dist-info}/RECORD +8 -8
- {nvidia_nat_test-1.3.0rc4.dist-info → nvidia_nat_test-1.3.0rc6.dist-info}/WHEEL +0 -0
- {nvidia_nat_test-1.3.0rc4.dist-info → nvidia_nat_test-1.3.0rc6.dist-info}/entry_points.txt +0 -0
- {nvidia_nat_test-1.3.0rc4.dist-info → nvidia_nat_test-1.3.0rc6.dist-info}/licenses/LICENSE-3rd-party.txt +0 -0
- {nvidia_nat_test-1.3.0rc4.dist-info → nvidia_nat_test-1.3.0rc6.dist-info}/licenses/LICENSE.md +0 -0
- {nvidia_nat_test-1.3.0rc4.dist-info → nvidia_nat_test-1.3.0rc6.dist-info}/top_level.txt +0 -0
nat/test/plugin.py
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
import os
|
|
17
17
|
import subprocess
|
|
18
|
+
import types
|
|
18
19
|
import typing
|
|
19
20
|
from collections.abc import AsyncGenerator
|
|
20
21
|
from collections.abc import Generator
|
|
@@ -219,10 +220,48 @@ def azure_openai_keys_fixture(fail_missing: bool):
|
|
|
219
220
|
yield require_env_variables(
|
|
220
221
|
varnames=["AZURE_OPENAI_API_KEY", "AZURE_OPENAI_ENDPOINT"],
|
|
221
222
|
reason="Azure integration tests require the `AZURE_OPENAI_API_KEY` and `AZURE_OPENAI_ENDPOINT` environment "
|
|
222
|
-
"
|
|
223
|
+
"variables to be defined.",
|
|
223
224
|
fail_missing=fail_missing)
|
|
224
225
|
|
|
225
226
|
|
|
227
|
+
@pytest.fixture(name="langfuse_keys", scope='session')
|
|
228
|
+
def langfuse_keys_fixture(fail_missing: bool):
|
|
229
|
+
"""
|
|
230
|
+
Use for integration tests that require Langfuse credentials.
|
|
231
|
+
"""
|
|
232
|
+
yield require_env_variables(
|
|
233
|
+
varnames=["LANGFUSE_PUBLIC_KEY", "LANGFUSE_SECRET_KEY"],
|
|
234
|
+
reason="Langfuse integration tests require the `LANGFUSE_PUBLIC_KEY` and `LANGFUSE_SECRET_KEY` environment "
|
|
235
|
+
"variables to be defined.",
|
|
236
|
+
fail_missing=fail_missing)
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
@pytest.fixture(name="wandb_api_key", scope='session')
|
|
240
|
+
def wandb_api_key_fixture(fail_missing: bool):
|
|
241
|
+
"""
|
|
242
|
+
Use for integration tests that require a Weights & Biases API key.
|
|
243
|
+
"""
|
|
244
|
+
yield require_env_variables(
|
|
245
|
+
varnames=["WANDB_API_KEY"],
|
|
246
|
+
reason="Weights & Biases integration tests require the `WANDB_API_KEY` environment variable to be defined.",
|
|
247
|
+
fail_missing=fail_missing)
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
@pytest.fixture(name="weave", scope='session')
|
|
251
|
+
def require_weave_fixture(fail_missing: bool) -> types.ModuleType:
|
|
252
|
+
"""
|
|
253
|
+
Use for integration tests that require Weave to be running.
|
|
254
|
+
"""
|
|
255
|
+
try:
|
|
256
|
+
import weave
|
|
257
|
+
return weave
|
|
258
|
+
except Exception as e:
|
|
259
|
+
reason = "Weave must be installed to run weave based tests"
|
|
260
|
+
if fail_missing:
|
|
261
|
+
raise RuntimeError(reason) from e
|
|
262
|
+
pytest.skip(reason=reason)
|
|
263
|
+
|
|
264
|
+
|
|
226
265
|
@pytest.fixture(name="require_docker", scope='session')
|
|
227
266
|
def require_docker_fixture(fail_missing: bool) -> "DockerClient":
|
|
228
267
|
"""
|
|
@@ -264,8 +303,15 @@ def examples_dir_fixture(root_repo_dir: Path) -> Path:
|
|
|
264
303
|
return root_repo_dir / "examples"
|
|
265
304
|
|
|
266
305
|
|
|
267
|
-
@pytest.fixture(name="
|
|
268
|
-
def
|
|
306
|
+
@pytest.fixture(name="env_without_nat_log_level", scope='function')
|
|
307
|
+
def env_without_nat_log_level_fixture() -> dict[str, str]:
|
|
308
|
+
env = os.environ.copy()
|
|
309
|
+
env.pop("NAT_LOG_LEVEL", None)
|
|
310
|
+
return env
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
@pytest.fixture(name="etcd_url", scope="session")
|
|
314
|
+
def etcd_url_fixture(fail_missing: bool = False) -> str:
|
|
269
315
|
"""
|
|
270
316
|
To run these tests, an etcd server must be running
|
|
271
317
|
"""
|
|
@@ -273,21 +319,22 @@ def require_etcd_fixture(fail_missing: bool = False) -> bool:
|
|
|
273
319
|
|
|
274
320
|
host = os.getenv("NAT_CI_ETCD_HOST", "localhost")
|
|
275
321
|
port = os.getenv("NAT_CI_ETCD_PORT", "2379")
|
|
276
|
-
|
|
322
|
+
url = f"http://{host}:{port}"
|
|
323
|
+
health_url = f"{url}/health"
|
|
277
324
|
|
|
278
325
|
try:
|
|
279
326
|
response = requests.get(health_url, timeout=5)
|
|
280
327
|
response.raise_for_status()
|
|
281
|
-
return
|
|
328
|
+
return url
|
|
282
329
|
except: # noqa: E722
|
|
283
|
-
failure_reason = f"Unable to connect to etcd server at {
|
|
330
|
+
failure_reason = f"Unable to connect to etcd server at {url}"
|
|
284
331
|
if fail_missing:
|
|
285
332
|
raise RuntimeError(failure_reason)
|
|
286
333
|
pytest.skip(reason=failure_reason)
|
|
287
334
|
|
|
288
335
|
|
|
289
336
|
@pytest.fixture(name="milvus_uri", scope="session")
|
|
290
|
-
def milvus_uri_fixture(
|
|
337
|
+
def milvus_uri_fixture(etcd_url: str, fail_missing: bool = False) -> str:
|
|
291
338
|
"""
|
|
292
339
|
To run these tests, a Milvus server must be running
|
|
293
340
|
"""
|
|
@@ -418,7 +465,7 @@ def fixture_redis_server(fail_missing: bool) -> Generator[dict[str, str | int]]:
|
|
|
418
465
|
pytest.skip(f"Error connecting to Redis server: {e}, skipping redis tests")
|
|
419
466
|
|
|
420
467
|
|
|
421
|
-
@pytest_asyncio.fixture(name="mysql_server", scope="
|
|
468
|
+
@pytest_asyncio.fixture(name="mysql_server", scope="session")
|
|
422
469
|
async def fixture_mysql_server(fail_missing: bool) -> AsyncGenerator[dict[str, str | int]]:
|
|
423
470
|
"""Fixture to safely skip MySQL based tests if MySQL is not running"""
|
|
424
471
|
host = os.environ.get('NAT_CI_MYSQL_HOST', '127.0.0.1')
|
|
@@ -441,7 +488,7 @@ async def fixture_mysql_server(fail_missing: bool) -> AsyncGenerator[dict[str, s
|
|
|
441
488
|
pytest.skip(f"Error connecting to MySQL server: {e}, skipping MySQL tests")
|
|
442
489
|
|
|
443
490
|
|
|
444
|
-
@pytest.fixture(name="minio_server", scope="
|
|
491
|
+
@pytest.fixture(name="minio_server", scope="session")
|
|
445
492
|
def minio_server_fixture(fail_missing: bool) -> Generator[dict[str, str | int]]:
|
|
446
493
|
"""Fixture to safely skip MinIO based tests if MinIO is not running"""
|
|
447
494
|
host = os.getenv("NAT_CI_MINIO_HOST", "localhost")
|
|
@@ -468,17 +515,76 @@ def minio_server_fixture(fail_missing: bool) -> Generator[dict[str, str | int]]:
|
|
|
468
515
|
aws_access_key_id=aws_access_key_id,
|
|
469
516
|
aws_secret_access_key=aws_secret_access_key,
|
|
470
517
|
endpoint_url=endpoint_url)
|
|
471
|
-
client.
|
|
518
|
+
client.list_buckets()
|
|
472
519
|
yield minio_info
|
|
473
520
|
except ImportError:
|
|
474
521
|
if fail_missing:
|
|
475
522
|
raise
|
|
476
523
|
pytest.skip("aioboto3 not installed, skipping MinIO tests")
|
|
477
524
|
except Exception as e:
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
525
|
+
if fail_missing:
|
|
526
|
+
raise
|
|
527
|
+
else:
|
|
528
|
+
pytest.skip(f"Error connecting to MinIO server: {e}, skipping MinIO tests")
|
|
529
|
+
|
|
530
|
+
|
|
531
|
+
@pytest.fixture(name="langfuse_bucket", scope="session")
|
|
532
|
+
def langfuse_bucket_fixture(fail_missing: bool, minio_server: dict[str, str | int]) -> Generator[str]:
|
|
533
|
+
|
|
534
|
+
bucket_name = os.getenv("NAT_CI_LANGFUSE_BUCKET", "langfuse")
|
|
535
|
+
try:
|
|
536
|
+
import botocore.session
|
|
537
|
+
session = botocore.session.get_session()
|
|
538
|
+
|
|
539
|
+
client = session.create_client("s3",
|
|
540
|
+
aws_access_key_id=minio_server["aws_access_key_id"],
|
|
541
|
+
aws_secret_access_key=minio_server["aws_secret_access_key"],
|
|
542
|
+
endpoint_url=minio_server["endpoint_url"])
|
|
543
|
+
|
|
544
|
+
buckets = client.list_buckets()
|
|
545
|
+
bucket_names = [b['Name'] for b in buckets['Buckets']]
|
|
546
|
+
if bucket_name not in bucket_names:
|
|
547
|
+
client.create_bucket(Bucket=bucket_name)
|
|
548
|
+
|
|
549
|
+
yield bucket_name
|
|
550
|
+
except ImportError:
|
|
551
|
+
if fail_missing:
|
|
552
|
+
raise
|
|
553
|
+
pytest.skip("aioboto3 not installed, skipping MinIO tests")
|
|
554
|
+
except Exception as e:
|
|
555
|
+
if fail_missing:
|
|
482
556
|
raise
|
|
483
557
|
else:
|
|
484
558
|
pytest.skip(f"Error connecting to MinIO server: {e}, skipping MinIO tests")
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
@pytest.fixture(name="langfuse_url", scope="session")
|
|
562
|
+
def langfuse_url_fixture(fail_missing: bool, langfuse_bucket: str) -> str:
|
|
563
|
+
"""
|
|
564
|
+
To run these tests, a langfuse server must be running.
|
|
565
|
+
"""
|
|
566
|
+
import requests
|
|
567
|
+
|
|
568
|
+
host = os.getenv("NAT_CI_LANGFUSE_HOST", "localhost")
|
|
569
|
+
port = int(os.getenv("NAT_CI_LANGFUSE_PORT", "3000"))
|
|
570
|
+
url = f"http://{host}:{port}"
|
|
571
|
+
health_endpoint = f"{url}/api/public/health"
|
|
572
|
+
try:
|
|
573
|
+
response = requests.get(health_endpoint, timeout=5)
|
|
574
|
+
response.raise_for_status()
|
|
575
|
+
|
|
576
|
+
return url
|
|
577
|
+
except Exception as e:
|
|
578
|
+
reason = f"Unable to connect to Langfuse server at {url}: {e}"
|
|
579
|
+
if fail_missing:
|
|
580
|
+
raise RuntimeError(reason)
|
|
581
|
+
pytest.skip(reason=reason)
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
@pytest.fixture(name="langfuse_trace_url", scope="session")
|
|
585
|
+
def langfuse_trace_url_fixture(langfuse_url: str) -> str:
|
|
586
|
+
"""
|
|
587
|
+
The langfuse_url fixture provides the base url, however the general.telemetry.tracing["langfuse"].endpoint expects
|
|
588
|
+
the trace url which is what this fixture provides.
|
|
589
|
+
"""
|
|
590
|
+
return f"{langfuse_url}/api/public/otel/v1/traces"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nvidia-nat-test
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.0rc6
|
|
4
4
|
Summary: Testing utilities for NeMo Agent toolkit
|
|
5
5
|
Author: NVIDIA Corporation
|
|
6
6
|
Maintainer: NVIDIA Corporation
|
|
@@ -16,7 +16,7 @@ Requires-Python: <3.14,>=3.11
|
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
17
|
License-File: LICENSE-3rd-party.txt
|
|
18
18
|
License-File: LICENSE.md
|
|
19
|
-
Requires-Dist: nvidia-nat==v1.3.0-
|
|
19
|
+
Requires-Dist: nvidia-nat==v1.3.0-rc6
|
|
20
20
|
Requires-Dist: langchain-community~=0.3
|
|
21
21
|
Requires-Dist: pytest~=8.3
|
|
22
22
|
Dynamic: license-file
|
|
@@ -5,14 +5,14 @@ nat/test/functions.py,sha256=ZxXVzfaLBGOpR5qtmMrKU7q-M9-vVGGj3Xi5mrw4vHY,3557
|
|
|
5
5
|
nat/test/llm.py,sha256=f6bz6arAQjhjuOKFrLfu_U1LbiyFzQmpM-q8b-WKSrU,9550
|
|
6
6
|
nat/test/memory.py,sha256=xki_A2yiMhEZuQk60K7t04QRqf32nQqnfzD5Iv7fkvw,1456
|
|
7
7
|
nat/test/object_store_tests.py,sha256=PyJioOtoSzILPq6LuD-sOZ_89PIcgXWZweoHBQpK2zQ,4281
|
|
8
|
-
nat/test/plugin.py,sha256=
|
|
8
|
+
nat/test/plugin.py,sha256=NV4JcUnqhBhQzO4sc3P8JDBlwWohmu5TYVCWRbNPwVo,20911
|
|
9
9
|
nat/test/register.py,sha256=o1BEA5fyxyFyCxXhQ6ArmtuNpgRyTEfvw6HdBgECPLI,897
|
|
10
10
|
nat/test/tool_test_runner.py,sha256=SxavwXHkvCQDl_PUiiiqgvGfexKJJTeBdI5i1qk6AzI,21712
|
|
11
11
|
nat/test/utils.py,sha256=Lml187P9SUP3IB_HhBaU1XNhiljcpOFFZOAxgQR1vQo,5936
|
|
12
|
-
nvidia_nat_test-1.3.
|
|
13
|
-
nvidia_nat_test-1.3.
|
|
14
|
-
nvidia_nat_test-1.3.
|
|
15
|
-
nvidia_nat_test-1.3.
|
|
16
|
-
nvidia_nat_test-1.3.
|
|
17
|
-
nvidia_nat_test-1.3.
|
|
18
|
-
nvidia_nat_test-1.3.
|
|
12
|
+
nvidia_nat_test-1.3.0rc6.dist-info/licenses/LICENSE-3rd-party.txt,sha256=fOk5jMmCX9YoKWyYzTtfgl-SUy477audFC5hNY4oP7Q,284609
|
|
13
|
+
nvidia_nat_test-1.3.0rc6.dist-info/licenses/LICENSE.md,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
14
|
+
nvidia_nat_test-1.3.0rc6.dist-info/METADATA,sha256=-YItT2dhstrLBrPi7KyCSl0voptobrmQopZrQ4eKmA0,1914
|
|
15
|
+
nvidia_nat_test-1.3.0rc6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
16
|
+
nvidia_nat_test-1.3.0rc6.dist-info/entry_points.txt,sha256=7dOP9XB6iMDqvav3gYx9VWUwA8RrFzhbAa8nGeC8e4Y,99
|
|
17
|
+
nvidia_nat_test-1.3.0rc6.dist-info/top_level.txt,sha256=8-CJ2cP6-f0ZReXe5Hzqp-5pvzzHz-5Ds5H2bGqh1-U,4
|
|
18
|
+
nvidia_nat_test-1.3.0rc6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nvidia_nat_test-1.3.0rc4.dist-info → nvidia_nat_test-1.3.0rc6.dist-info}/licenses/LICENSE.md
RENAMED
|
File without changes
|
|
File without changes
|