nvidia-nat-test 1.3.0rc5__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 CHANGED
@@ -220,7 +220,19 @@ def azure_openai_keys_fixture(fail_missing: bool):
220
220
  yield require_env_variables(
221
221
  varnames=["AZURE_OPENAI_API_KEY", "AZURE_OPENAI_ENDPOINT"],
222
222
  reason="Azure integration tests require the `AZURE_OPENAI_API_KEY` and `AZURE_OPENAI_ENDPOINT` environment "
223
- "variable to be defined.",
223
+ "variables to be defined.",
224
+ fail_missing=fail_missing)
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.",
224
236
  fail_missing=fail_missing)
225
237
 
226
238
 
@@ -291,8 +303,15 @@ def examples_dir_fixture(root_repo_dir: Path) -> Path:
291
303
  return root_repo_dir / "examples"
292
304
 
293
305
 
294
- @pytest.fixture(name="require_etcd", scope="session")
295
- def require_etcd_fixture(fail_missing: bool = False) -> bool:
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:
296
315
  """
297
316
  To run these tests, an etcd server must be running
298
317
  """
@@ -300,21 +319,22 @@ def require_etcd_fixture(fail_missing: bool = False) -> bool:
300
319
 
301
320
  host = os.getenv("NAT_CI_ETCD_HOST", "localhost")
302
321
  port = os.getenv("NAT_CI_ETCD_PORT", "2379")
303
- health_url = f"http://{host}:{port}/health"
322
+ url = f"http://{host}:{port}"
323
+ health_url = f"{url}/health"
304
324
 
305
325
  try:
306
326
  response = requests.get(health_url, timeout=5)
307
327
  response.raise_for_status()
308
- return True
328
+ return url
309
329
  except: # noqa: E722
310
- failure_reason = f"Unable to connect to etcd server at {health_url}"
330
+ failure_reason = f"Unable to connect to etcd server at {url}"
311
331
  if fail_missing:
312
332
  raise RuntimeError(failure_reason)
313
333
  pytest.skip(reason=failure_reason)
314
334
 
315
335
 
316
336
  @pytest.fixture(name="milvus_uri", scope="session")
317
- def milvus_uri_fixture(require_etcd: bool, fail_missing: bool = False) -> str:
337
+ def milvus_uri_fixture(etcd_url: str, fail_missing: bool = False) -> str:
318
338
  """
319
339
  To run these tests, a Milvus server must be running
320
340
  """
@@ -445,7 +465,7 @@ def fixture_redis_server(fail_missing: bool) -> Generator[dict[str, str | int]]:
445
465
  pytest.skip(f"Error connecting to Redis server: {e}, skipping redis tests")
446
466
 
447
467
 
448
- @pytest_asyncio.fixture(name="mysql_server", scope="module")
468
+ @pytest_asyncio.fixture(name="mysql_server", scope="session")
449
469
  async def fixture_mysql_server(fail_missing: bool) -> AsyncGenerator[dict[str, str | int]]:
450
470
  """Fixture to safely skip MySQL based tests if MySQL is not running"""
451
471
  host = os.environ.get('NAT_CI_MYSQL_HOST', '127.0.0.1')
@@ -468,7 +488,7 @@ async def fixture_mysql_server(fail_missing: bool) -> AsyncGenerator[dict[str, s
468
488
  pytest.skip(f"Error connecting to MySQL server: {e}, skipping MySQL tests")
469
489
 
470
490
 
471
- @pytest.fixture(name="minio_server", scope="module")
491
+ @pytest.fixture(name="minio_server", scope="session")
472
492
  def minio_server_fixture(fail_missing: bool) -> Generator[dict[str, str | int]]:
473
493
  """Fixture to safely skip MinIO based tests if MinIO is not running"""
474
494
  host = os.getenv("NAT_CI_MINIO_HOST", "localhost")
@@ -495,17 +515,76 @@ def minio_server_fixture(fail_missing: bool) -> Generator[dict[str, str | int]]:
495
515
  aws_access_key_id=aws_access_key_id,
496
516
  aws_secret_access_key=aws_secret_access_key,
497
517
  endpoint_url=endpoint_url)
498
- client.head_bucket(Bucket=bucket_name)
518
+ client.list_buckets()
499
519
  yield minio_info
500
520
  except ImportError:
501
521
  if fail_missing:
502
522
  raise
503
523
  pytest.skip("aioboto3 not installed, skipping MinIO tests")
504
524
  except Exception as e:
505
- import botocore.exceptions
506
- if isinstance(e, botocore.exceptions.ClientError) and e.response['Error']['Code'] == '404':
507
- yield minio_info # Bucket does not exist, but server is reachable
508
- elif fail_missing:
525
+ if fail_missing:
509
526
  raise
510
527
  else:
511
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:
556
+ raise
557
+ else:
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.0rc5
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-rc5
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=_lvtcIlik9_khvxv3Z0YaNY_zUSwQrSTwBLdkYWOO20,18179
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.0rc5.dist-info/licenses/LICENSE-3rd-party.txt,sha256=fOk5jMmCX9YoKWyYzTtfgl-SUy477audFC5hNY4oP7Q,284609
13
- nvidia_nat_test-1.3.0rc5.dist-info/licenses/LICENSE.md,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
14
- nvidia_nat_test-1.3.0rc5.dist-info/METADATA,sha256=ZaVNW-iOPV0oZjBpjZWDuozbtNaOj-GtN_GjEclFTqw,1914
15
- nvidia_nat_test-1.3.0rc5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
16
- nvidia_nat_test-1.3.0rc5.dist-info/entry_points.txt,sha256=7dOP9XB6iMDqvav3gYx9VWUwA8RrFzhbAa8nGeC8e4Y,99
17
- nvidia_nat_test-1.3.0rc5.dist-info/top_level.txt,sha256=8-CJ2cP6-f0ZReXe5Hzqp-5pvzzHz-5Ds5H2bGqh1-U,4
18
- nvidia_nat_test-1.3.0rc5.dist-info/RECORD,,
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,,