test_api_config_vlm_enable.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. """Offline tests for VLM_PROCESS_ENABLE and renamed role timeout vars."""
  2. from __future__ import annotations
  3. import sys
  4. import pytest
  5. from lightrag.api.config import parse_args
  6. pytestmark = pytest.mark.offline
  7. def _reset_vlm_env(monkeypatch):
  8. for key in (
  9. "VLM_PROCESS_ENABLE",
  10. "VLM_LLM_BINDING",
  11. "VLM_LLM_MODEL",
  12. "VLM_LLM_BINDING_HOST",
  13. "VLM_LLM_BINDING_API_KEY",
  14. "VLM_LLM_TIMEOUT",
  15. "EXTRACT_LLM_TIMEOUT",
  16. "KEYWORD_LLM_TIMEOUT",
  17. "QUERY_LLM_TIMEOUT",
  18. "LLM_TIMEOUT_VLM_LLM",
  19. "LLM_TIMEOUT_EXTRACT_LLM",
  20. "LLM_TIMEOUT_KEYWORD_LLM",
  21. "LLM_TIMEOUT_QUERY_LLM",
  22. ):
  23. monkeypatch.delenv(key, raising=False)
  24. def test_vlm_process_enable_defaults_to_false(monkeypatch):
  25. _reset_vlm_env(monkeypatch)
  26. monkeypatch.setattr(sys, "argv", ["lightrag-server"])
  27. monkeypatch.setenv("LLM_BINDING", "openai")
  28. args = parse_args()
  29. assert args.vlm_process_enable is False
  30. def test_vlm_process_enable_true_with_openai_passes(monkeypatch):
  31. _reset_vlm_env(monkeypatch)
  32. monkeypatch.setattr(sys, "argv", ["lightrag-server"])
  33. monkeypatch.setenv("LLM_BINDING", "openai")
  34. monkeypatch.setenv("VLM_PROCESS_ENABLE", "true")
  35. args = parse_args()
  36. assert args.vlm_process_enable is True
  37. def test_vlm_process_enable_rejects_lollms_base_binding(monkeypatch):
  38. _reset_vlm_env(monkeypatch)
  39. monkeypatch.setattr(sys, "argv", ["lightrag-server"])
  40. monkeypatch.setenv("LLM_BINDING", "lollms")
  41. monkeypatch.setenv("VLM_PROCESS_ENABLE", "true")
  42. with pytest.raises(SystemExit) as exc:
  43. parse_args()
  44. assert "lollms" in str(exc.value).lower()
  45. def test_vlm_process_enable_rejects_lollms_role_binding(monkeypatch):
  46. _reset_vlm_env(monkeypatch)
  47. monkeypatch.setattr(sys, "argv", ["lightrag-server"])
  48. monkeypatch.setenv("LLM_BINDING", "openai")
  49. monkeypatch.setenv("VLM_PROCESS_ENABLE", "true")
  50. monkeypatch.setenv("VLM_LLM_BINDING", "lollms")
  51. # Cross-provider validation needs model + key; fill them so the lollms
  52. # branch is the only failure path.
  53. monkeypatch.setenv("VLM_LLM_MODEL", "anything")
  54. monkeypatch.setenv("VLM_LLM_BINDING_HOST", "http://localhost:9600")
  55. monkeypatch.setenv("VLM_LLM_BINDING_API_KEY", "placeholder")
  56. with pytest.raises(SystemExit) as exc:
  57. parse_args()
  58. assert "lollms" in str(exc.value).lower()
  59. def test_role_timeout_uses_new_variable_names(monkeypatch):
  60. _reset_vlm_env(monkeypatch)
  61. monkeypatch.setattr(sys, "argv", ["lightrag-server"])
  62. monkeypatch.setenv("LLM_BINDING", "openai")
  63. monkeypatch.setenv("EXTRACT_LLM_TIMEOUT", "240")
  64. monkeypatch.setenv("KEYWORD_LLM_TIMEOUT", "120")
  65. monkeypatch.setenv("QUERY_LLM_TIMEOUT", "60")
  66. monkeypatch.setenv("VLM_LLM_TIMEOUT", "300")
  67. args = parse_args()
  68. assert args.extract_llm_timeout == 240
  69. assert args.keyword_llm_timeout == 120
  70. assert args.query_llm_timeout == 60
  71. assert args.vlm_llm_timeout == 300
  72. def test_role_timeout_legacy_variables_no_longer_have_effect(monkeypatch):
  73. """The breaking-change migration: legacy LLM_TIMEOUT_{ROLE}_LLM is silently ignored."""
  74. _reset_vlm_env(monkeypatch)
  75. monkeypatch.setattr(sys, "argv", ["lightrag-server"])
  76. monkeypatch.setenv("LLM_BINDING", "openai")
  77. monkeypatch.setenv("LLM_TIMEOUT_EXTRACT_LLM", "999")
  78. monkeypatch.setenv("LLM_TIMEOUT_VLM_LLM", "888")
  79. args = parse_args()
  80. assert args.extract_llm_timeout is None
  81. assert args.vlm_llm_timeout is None