fix: pin model revisions and quarantine MariaDB CI routing
MariaDB persistence qualification / mariadb (push) Has been cancelled
MariaDB persistence qualification / mariadb (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
"""Actual offline CPU inference; synthetic weights test compatibility, never quality."""
|
||||
from pathlib import Path
|
||||
import importlib.metadata
|
||||
import json
|
||||
import os
|
||||
import resource
|
||||
import sys
|
||||
import time
|
||||
from verify import verify_fixture
|
||||
|
||||
HERE = Path(__file__).resolve().parent
|
||||
manifests = json.loads((HERE / 'ARTIFACTS.json').read_text())
|
||||
kind = sys.argv[1]
|
||||
fixture = verify_fixture(Path(sys.argv[2]), manifests[kind])
|
||||
assert os.environ['HF_HUB_OFFLINE'] == os.environ['TRANSFORMERS_OFFLINE'] == '1'
|
||||
os.environ.pop('AI_SERVICE_SKIP_MODEL_LOAD', None)
|
||||
os.environ.pop('AI_SERVICE_EAGER_MODEL_LOAD', None)
|
||||
os.environ['AI_SERVICE_TOKEN'] = 'p9-local-qualification-only'
|
||||
sys.path.insert(0, '/app')
|
||||
import torch
|
||||
import app
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
torch.set_num_threads(1)
|
||||
started = time.monotonic()
|
||||
# Only this isolated qualification process selects synthetic weights; no inference is mocked.
|
||||
app.MODEL_NAME = str(fixture)
|
||||
assert app._ensure_runtime_loaded(), app.MODEL_LOAD_ERROR
|
||||
assert app.model.__class__.__name__ == 'BartForConditionalGeneration'
|
||||
assert str(app.device) == 'cpu' and not app.GPU_AVAILABLE
|
||||
text = 'Åse Østby builds accessible Python and C# applications for reliable Norwegian career workflows.'
|
||||
encoded = app.tokenizer(text, return_tensors='pt')
|
||||
assert app.tokenizer.decode(encoded.input_ids[0], skip_special_tokens=True) == text
|
||||
summary = app._model_summarize(text, 24, 8)
|
||||
assert isinstance(summary, str) and summary
|
||||
client = TestClient(app.app)
|
||||
assert client.get('/health').json()['model_loaded'] is True
|
||||
assert client.post('/summarize', json={'text': text}).status_code == 401
|
||||
headers = {'X-Ai-Service-Token': 'p9-local-qualification-only'}
|
||||
body = {'text': text, 'max_length': 24, 'min_length': 8}
|
||||
first = client.post('/summarize', json=body, headers=headers)
|
||||
second = client.post('/summarize', json=body, headers=headers)
|
||||
assert first.status_code == second.status_code == 200, first.text
|
||||
assert first.json()['cached'] is False and second.json()['cached'] is True
|
||||
assert first.json()['summary'] == second.json()['summary']
|
||||
verify_fixture(fixture, manifests[kind])
|
||||
elapsed = time.monotonic() - started
|
||||
assert elapsed < 60
|
||||
print(json.dumps({'status': 'PASS', 'kind': kind, 'scope': 'Real synthetic BART/tokenizer/native CPU generation plus sidecar summary/auth/cache contract; no full DistilBART or semantic-quality claim.', 'modelClass': app.model.__class__.__name__, 'device': str(app.device), 'cudaAvailable': torch.cuda.is_available(), 'seconds': elapsed, 'maxRssKiB': resource.getrusage(resource.RUSAGE_SELF).ru_maxrss, 'versions': {name: importlib.metadata.version(name) for name in ['torch','transformers','filelock','huggingface-hub','tokenizers','safetensors']}, 'summary': summary, 'cacheRepeatedRead': True, 'fixtureUnchanged': True}), flush=True)
|
||||
Reference in New Issue
Block a user