112 lines
3.5 KiB
Python
112 lines
3.5 KiB
Python
"""Offline tests for VLM_PROCESS_ENABLE and renamed role timeout vars."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
|
|
import pytest
|
|
|
|
from lightrag.api.config import parse_args
|
|
|
|
|
|
pytestmark = pytest.mark.offline
|
|
|
|
|
|
def _reset_vlm_env(monkeypatch):
|
|
for key in (
|
|
"VLM_PROCESS_ENABLE",
|
|
"VLM_LLM_BINDING",
|
|
"VLM_LLM_MODEL",
|
|
"VLM_LLM_BINDING_HOST",
|
|
"VLM_LLM_BINDING_API_KEY",
|
|
"VLM_LLM_TIMEOUT",
|
|
"EXTRACT_LLM_TIMEOUT",
|
|
"KEYWORD_LLM_TIMEOUT",
|
|
"QUERY_LLM_TIMEOUT",
|
|
"LLM_TIMEOUT_VLM_LLM",
|
|
"LLM_TIMEOUT_EXTRACT_LLM",
|
|
"LLM_TIMEOUT_KEYWORD_LLM",
|
|
"LLM_TIMEOUT_QUERY_LLM",
|
|
):
|
|
monkeypatch.delenv(key, raising=False)
|
|
|
|
|
|
def test_vlm_process_enable_defaults_to_false(monkeypatch):
|
|
_reset_vlm_env(monkeypatch)
|
|
monkeypatch.setattr(sys, "argv", ["lightrag-server"])
|
|
monkeypatch.setenv("LLM_BINDING", "openai")
|
|
|
|
args = parse_args()
|
|
|
|
assert args.vlm_process_enable is False
|
|
|
|
|
|
def test_vlm_process_enable_true_with_openai_passes(monkeypatch):
|
|
_reset_vlm_env(monkeypatch)
|
|
monkeypatch.setattr(sys, "argv", ["lightrag-server"])
|
|
monkeypatch.setenv("LLM_BINDING", "openai")
|
|
monkeypatch.setenv("VLM_PROCESS_ENABLE", "true")
|
|
|
|
args = parse_args()
|
|
|
|
assert args.vlm_process_enable is True
|
|
|
|
|
|
def test_vlm_process_enable_rejects_lollms_base_binding(monkeypatch):
|
|
_reset_vlm_env(monkeypatch)
|
|
monkeypatch.setattr(sys, "argv", ["lightrag-server"])
|
|
monkeypatch.setenv("LLM_BINDING", "lollms")
|
|
monkeypatch.setenv("VLM_PROCESS_ENABLE", "true")
|
|
|
|
with pytest.raises(SystemExit) as exc:
|
|
parse_args()
|
|
assert "lollms" in str(exc.value).lower()
|
|
|
|
|
|
def test_vlm_process_enable_rejects_lollms_role_binding(monkeypatch):
|
|
_reset_vlm_env(monkeypatch)
|
|
monkeypatch.setattr(sys, "argv", ["lightrag-server"])
|
|
monkeypatch.setenv("LLM_BINDING", "openai")
|
|
monkeypatch.setenv("VLM_PROCESS_ENABLE", "true")
|
|
monkeypatch.setenv("VLM_LLM_BINDING", "lollms")
|
|
# Cross-provider validation needs model + key; fill them so the lollms
|
|
# branch is the only failure path.
|
|
monkeypatch.setenv("VLM_LLM_MODEL", "anything")
|
|
monkeypatch.setenv("VLM_LLM_BINDING_HOST", "http://localhost:9600")
|
|
monkeypatch.setenv("VLM_LLM_BINDING_API_KEY", "placeholder")
|
|
|
|
with pytest.raises(SystemExit) as exc:
|
|
parse_args()
|
|
assert "lollms" in str(exc.value).lower()
|
|
|
|
|
|
def test_role_timeout_uses_new_variable_names(monkeypatch):
|
|
_reset_vlm_env(monkeypatch)
|
|
monkeypatch.setattr(sys, "argv", ["lightrag-server"])
|
|
monkeypatch.setenv("LLM_BINDING", "openai")
|
|
monkeypatch.setenv("EXTRACT_LLM_TIMEOUT", "240")
|
|
monkeypatch.setenv("KEYWORD_LLM_TIMEOUT", "120")
|
|
monkeypatch.setenv("QUERY_LLM_TIMEOUT", "60")
|
|
monkeypatch.setenv("VLM_LLM_TIMEOUT", "300")
|
|
|
|
args = parse_args()
|
|
|
|
assert args.extract_llm_timeout == 240
|
|
assert args.keyword_llm_timeout == 120
|
|
assert args.query_llm_timeout == 60
|
|
assert args.vlm_llm_timeout == 300
|
|
|
|
|
|
def test_role_timeout_legacy_variables_no_longer_have_effect(monkeypatch):
|
|
"""The breaking-change migration: legacy LLM_TIMEOUT_{ROLE}_LLM is silently ignored."""
|
|
_reset_vlm_env(monkeypatch)
|
|
monkeypatch.setattr(sys, "argv", ["lightrag-server"])
|
|
monkeypatch.setenv("LLM_BINDING", "openai")
|
|
monkeypatch.setenv("LLM_TIMEOUT_EXTRACT_LLM", "999")
|
|
monkeypatch.setenv("LLM_TIMEOUT_VLM_LLM", "888")
|
|
|
|
args = parse_args()
|
|
|
|
assert args.extract_llm_timeout is None
|
|
assert args.vlm_llm_timeout is None
|