test_api_config_bedrock.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import sys
  2. import pytest
  3. from lightrag.api.config import get_default_host, parse_args
  4. pytestmark = pytest.mark.offline
  5. def _clear_bedrock_auth_env(monkeypatch):
  6. for key in (
  7. "LLM_BINDING",
  8. "EMBEDDING_BINDING",
  9. "QUERY_LLM_BINDING",
  10. "QUERY_LLM_BINDING_API_KEY",
  11. "AWS_ACCESS_KEY_ID",
  12. "AWS_SECRET_ACCESS_KEY",
  13. "AWS_SESSION_TOKEN",
  14. "AWS_BEARER_TOKEN_BEDROCK",
  15. "QUERY_AWS_ACCESS_KEY_ID",
  16. "QUERY_AWS_SECRET_ACCESS_KEY",
  17. ):
  18. monkeypatch.delenv(key, raising=False)
  19. def test_bedrock_default_host_uses_sdk_default_endpoint(monkeypatch):
  20. monkeypatch.delenv("LLM_BINDING_HOST", raising=False)
  21. assert get_default_host("bedrock") == "DEFAULT_BEDROCK_ENDPOINT"
  22. def test_bedrock_custom_host_is_returned(monkeypatch):
  23. monkeypatch.setenv("LLM_BINDING_HOST", "https://proxy.example.com")
  24. assert get_default_host("bedrock") == "https://proxy.example.com"
  25. def test_bedrock_env_binding_alias_is_normalized(monkeypatch):
  26. _clear_bedrock_auth_env(monkeypatch)
  27. monkeypatch.setattr(sys, "argv", ["lightrag-server"])
  28. monkeypatch.setenv("LLM_BINDING", "aws_bedrock")
  29. monkeypatch.setenv("EMBEDDING_BINDING", "aws_bedrock")
  30. monkeypatch.setenv("AWS_BEARER_TOKEN_BEDROCK", "absk-test")
  31. args = parse_args()
  32. assert args.llm_binding == "bedrock"
  33. assert args.embedding_binding == "bedrock"
  34. def test_bedrock_cli_binding_alias_is_not_supported(monkeypatch):
  35. monkeypatch.setattr(
  36. sys, "argv", ["lightrag-server", "--llm-binding", "aws_bedrock"]
  37. )
  38. with pytest.raises(SystemExit):
  39. parse_args()
  40. def test_bedrock_role_env_binding_alias_is_normalized(monkeypatch):
  41. _clear_bedrock_auth_env(monkeypatch)
  42. monkeypatch.setattr(sys, "argv", ["lightrag-server"])
  43. monkeypatch.setenv("QUERY_LLM_BINDING", "aws_bedrock")
  44. monkeypatch.setenv("QUERY_LLM_MODEL", "us.amazon.nova-lite-v1:0")
  45. monkeypatch.setenv("QUERY_AWS_REGION", "us-west-2")
  46. monkeypatch.setenv("QUERY_AWS_ACCESS_KEY_ID", "akid")
  47. monkeypatch.setenv("QUERY_AWS_SECRET_ACCESS_KEY", "secret")
  48. args = parse_args()
  49. assert args.query_llm_binding == "bedrock"
  50. assert args.query_aws_region == "us-west-2"
  51. def test_bedrock_role_api_key_is_rejected(monkeypatch):
  52. _clear_bedrock_auth_env(monkeypatch)
  53. monkeypatch.setattr(sys, "argv", ["lightrag-server"])
  54. monkeypatch.setenv("QUERY_LLM_BINDING", "bedrock")
  55. monkeypatch.setenv("QUERY_LLM_MODEL", "us.amazon.nova-lite-v1:0")
  56. monkeypatch.setenv("QUERY_LLM_BINDING_API_KEY", "absk-role")
  57. with pytest.raises(SystemExit, match="does not support QUERY_LLM_BINDING_API_KEY"):
  58. parse_args()
  59. def test_bedrock_binding_requires_sigv4_pair_or_bearer_token(monkeypatch):
  60. _clear_bedrock_auth_env(monkeypatch)
  61. monkeypatch.setattr(sys, "argv", ["lightrag-server"])
  62. monkeypatch.setenv("LLM_BINDING", "bedrock")
  63. monkeypatch.setenv("EMBEDDING_BINDING", "ollama")
  64. with pytest.raises(ValueError, match="Bedrock LLM binding requires"):
  65. parse_args()
  66. def test_bedrock_binding_rejects_partial_sigv4_pair(monkeypatch):
  67. _clear_bedrock_auth_env(monkeypatch)
  68. monkeypatch.setattr(sys, "argv", ["lightrag-server"])
  69. monkeypatch.setenv("LLM_BINDING", "bedrock")
  70. monkeypatch.setenv("EMBEDDING_BINDING", "ollama")
  71. monkeypatch.setenv("AWS_ACCESS_KEY_ID", "akid")
  72. with pytest.raises(ValueError, match="Bedrock LLM binding requires"):
  73. parse_args()
  74. def test_bedrock_binding_accepts_sigv4_pair(monkeypatch):
  75. _clear_bedrock_auth_env(monkeypatch)
  76. monkeypatch.setattr(sys, "argv", ["lightrag-server"])
  77. monkeypatch.setenv("LLM_BINDING", "bedrock")
  78. monkeypatch.setenv("EMBEDDING_BINDING", "ollama")
  79. monkeypatch.setenv("AWS_ACCESS_KEY_ID", "akid")
  80. monkeypatch.setenv("AWS_SECRET_ACCESS_KEY", "secret")
  81. args = parse_args()
  82. assert args.llm_binding == "bedrock"
  83. def test_bedrock_binding_accepts_bearer_token(monkeypatch):
  84. _clear_bedrock_auth_env(monkeypatch)
  85. monkeypatch.setattr(sys, "argv", ["lightrag-server"])
  86. monkeypatch.setenv("LLM_BINDING", "bedrock")
  87. monkeypatch.setenv("EMBEDDING_BINDING", "ollama")
  88. monkeypatch.setenv("AWS_BEARER_TOKEN_BEDROCK", "absk-test")
  89. args = parse_args()
  90. assert args.llm_binding == "bedrock"
  91. def test_bedrock_role_requires_complete_role_sigv4_pair(monkeypatch):
  92. _clear_bedrock_auth_env(monkeypatch)
  93. monkeypatch.setattr(sys, "argv", ["lightrag-server"])
  94. monkeypatch.setenv("QUERY_LLM_BINDING", "bedrock")
  95. monkeypatch.setenv("QUERY_LLM_MODEL", "us.amazon.nova-lite-v1:0")
  96. monkeypatch.setenv("QUERY_AWS_ACCESS_KEY_ID", "akid")
  97. with pytest.raises(ValueError, match="Bedrock role 'query' requires"):
  98. parse_args()