82 lines
2.6 KiB
Python
82 lines
2.6 KiB
Python
# File: tests/integration/ocr-sidecar/test_parameter_governance.py
|
|
# Change Log:
|
|
# - 2026-06-20: Initial creation for US3 parameter governance integration tests.
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
from types import SimpleNamespace
|
|
from unittest.mock import patch
|
|
|
|
from fastapi.testclient import TestClient
|
|
|
|
UNIT_DIR = Path(__file__).resolve().parents[2] / "unit" / "ocr-sidecar"
|
|
if str(UNIT_DIR) not in sys.path:
|
|
sys.path.insert(0, str(UNIT_DIR))
|
|
|
|
from test_path_traversal import FakeDocument, load_app
|
|
|
|
|
|
class FakeAsyncResponse:
|
|
def raise_for_status(self) -> None:
|
|
return None
|
|
|
|
def json(self) -> dict:
|
|
return {"choices": [{"message": {"content": "{\"natural_text\": \"governed result\"}"}}]}
|
|
|
|
|
|
class FakeAsyncClient:
|
|
last_payload = None
|
|
|
|
def __init__(self, *args, **kwargs) -> None:
|
|
pass
|
|
|
|
async def post(self, url: str, json: dict, headers: dict) -> FakeAsyncResponse:
|
|
FakeAsyncClient.last_payload = json
|
|
return FakeAsyncResponse()
|
|
|
|
async def aclose(self) -> None:
|
|
pass
|
|
|
|
|
|
def test_ocr_uses_governed_runtime_parameters(tmp_path: Path) -> None:
|
|
upload_base = tmp_path / "uploads"
|
|
upload_base.mkdir()
|
|
pdf_path = upload_base / "document.pdf"
|
|
pdf_path.write_bytes(b"%PDF-1.4\n")
|
|
|
|
app_module = load_app(upload_base)
|
|
client = TestClient(app_module.app)
|
|
|
|
decision = SimpleNamespace(keep_alive_seconds=120, reason="headroom-sufficient", vram_headroom_mb=9000.0)
|
|
fake_client = FakeAsyncClient()
|
|
FakeAsyncClient.last_payload = None
|
|
|
|
with patch.object(app_module, "calculate_ocr_residency", return_value=decision), \
|
|
patch.object(app_module, "prepare_ocr_messages", return_value=[{"content": []}]), \
|
|
patch.object(app_module.fitz, "open", return_value=FakeDocument()), \
|
|
patch.object(app_module, "ollama_client", fake_client):
|
|
|
|
response = client.post(
|
|
"/ocr",
|
|
json={
|
|
"pdfPath": str(pdf_path),
|
|
"engine": "np-dms-ocr",
|
|
"runtime_params": {
|
|
"temperature": 0.7,
|
|
"top_p": 0.9,
|
|
"repeat_penalty": 1.1,
|
|
"max_tokens": 4096
|
|
}
|
|
},
|
|
headers={"X-API-Key": "test-key"}
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
assert response.json()["text"] == "governed result"
|
|
|
|
# Check that parameters were passed to Ollama payload
|
|
assert FakeAsyncClient.last_payload["temperature"] == 0.7
|
|
assert FakeAsyncClient.last_payload["top_p"] == 0.9
|
|
assert FakeAsyncClient.last_payload["repetition_penalty"] == 1.1
|
|
assert FakeAsyncClient.last_payload["max_tokens"] == 4096
|