Suya OCR API — vLLM-backed, OpenAI-compatible OCR service

FastAPI service wrapping the Surya-OCR-2 model (datalab-to) served through vLLM:
legacy /v1/api/ai/* endpoints, an OpenAI-compatible /v1/chat/completions endpoint,
a coalescing request batcher, a local OCR CLI, Docker packaging, multilingual
example outputs, and quantization/concurrency benchmarks.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Fu Dai
2026-06-17 10:20:02 +04:00
co-authored by Claude Opus 4.8
commit 1a585693be
147 changed files with 13827 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
from scripts.parse_timing import parse_line, aggregate
SAMPLE = (
"2026-06-11 14:35:00 - vllm_batcher - _process_jobs - line:119 - INFO - "
"surya_timing_summary request_id=a,b batch_size=2 events=["
"{'name': 'openai_chat_completion', 'duration_ms': 100.0, 'metadata': {'token_count': 40}}, "
"{'name': 'openai_chat_completion', 'duration_ms': 300.0, 'metadata': {'token_count': 60}}, "
"{'name': 'recognition_manager_generate', 'duration_ms': 450.0}]"
)
def test_parse_line_extracts_events_and_batch_size():
rec = parse_line(SAMPLE)
assert rec["batch_size"] == 2
assert len(rec["events"]) == 3
assert rec["events"][0]["metadata"]["token_count"] == 40
def test_parse_line_returns_none_for_unrelated_line():
assert parse_line("2026-06-11 - foo - bar - line:1 - INFO - request_start id=x") is None
def test_aggregate_counts_and_sums_by_span_name():
rec = parse_line(SAMPLE)
agg = aggregate([rec])
chat = agg["openai_chat_completion"]
assert chat["count"] == 2
assert chat["total_ms"] == 400.0
assert chat["mean_ms"] == 200.0
assert chat["total_tokens"] == 100