• Stefy Lanza (nextime / spora )'s avatar
    ocr: olmOCR has to trust a pod's certificate itself, and U+FFFD is one token... · dc86733f
    Stefy Lanza (nextime / spora ) authored
    ocr: olmOCR has to trust a pod's certificate itself, and U+FFFD is one token not two bytes (v0.3.22)
    
    olmOCR could not reach a rented pod at all: CERTIFICATE_VERIFY_FAILED. A pod on
    the direct-TCP path serves HTTPS with a certificate signed by THIS install's own
    CA (codai/api/pod_tls.py), at a public IP that was not known when the certificate
    was issued, so stock `requests` fails it twice over.
    
    Surya never hit this because surya attaches through the fan-out gateway, which
    learned to trust pod certificates in 0.3.16. olmOCR talks to the upstream the
    dispatcher chose DIRECTLY, so it needed the same trust of its own -- and the gap
    only surfaced when olmOCR was asked to cover for surya, which is exactly when a
    fallback engine must not be the thing that is broken. It now goes through
    codai/api/pod_http.py, which verifies https-to-a-bare-IP against our CA with the
    hostname check off and hands every other URL -- localhost, a named server,
    another coderai -- to requests untouched. Swept the rest of the tree: every other
    raw requests call targets a localhost worker or RunPod's own public API, where
    pod_http would be a pass-through anyway.
    
    test_ocr_olmocr's HTTP-status test patched sys.modules["requests"] wholesale,
    which now breaks pod_http's own import of it; it patches pod_http.post instead
    and asserts the same two statuses.
    
    Also records what the accent investigation actually established, because the
    natural reading of U+FFFD is wrong and expensive. It is NOT a charset bug:
    U+FFFD is a real entry in surya-ocr-2's vocabulary (id 65421 of 65425, the only
    id that decodes to it), the tokenizer is WordLevel and character-level for Latin
    so an accent cannot be split across tokens, and the decisive detail is the COUNT
    -- a byte-level mis-decode yields TWO markers per accented letter (a-grave is two
    UTF-8 bytes, each one undecodable), and what arrives is ONE. One marker is one
    token. Every other hop was checked: _html_to_text is regex plus html.unescape and
    survives literal and entity forms; the isolated-venv worker emits json.dumps with
    ensure_ascii=True, so the pipe carries pure-ASCII escapes and the locale cannot
    matter; the gateway forwards raw bytes.
    
    And it corrects the previous commit's claim. Raising DPI is right on its own
    merits -- 200 really was feeding surya 62% of the pixels it accepts -- but a
    production document came back with the same markers at 200 AND at 300, which is
    evidence against too-few-pixels being the whole story: a perception failure would
    be stochastic, not every accent every time. The docs now say what distinguishes
    the remaining candidates (the document's embedded scan resolution, which
    `pdfimages -list` reports and which no rasterisation DPI can improve, versus the
    serving stack) and how to tell them apart: OCR perfect synthetic Italian through
    the same path.
    Co-Authored-By: 's avatarClaude Opus 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01PxYHWbCAjjjD7A1rhFKtaW
    dc86733f
Name
Last commit
Last update
..
conftest.py Loading commit data...
test_admin_auth.py Loading commit data...
test_admin_forward_auth.py Loading commit data...
test_admin_remote_ui.py Loading commit data...
test_audio_ml_backends.py Loading commit data...
test_audio_ml_endpoints.py Loading commit data...
test_autoupgrade.py Loading commit data...
test_autoupgrade_recovers_a_down_server.py Loading commit data...
test_autoupgrade_sees_training.py Loading commit data...
test_broker_config.py Loading commit data...
test_broker_dispatch.py Loading commit data...
test_broker_protocol.py Loading commit data...
test_broker_shutdown.py Loading commit data...
test_broker_streaming.py Loading commit data...
test_burst_placement.py Loading commit data...
test_character_studio_fetch.py Loading commit data...
test_cluster.py Loading commit data...
test_compose.py Loading commit data...
test_forward_auth_peer_trust.py Loading commit data...
test_front_api_auth.py Loading commit data...
test_front_ocr_swap_gate.py Loading commit data...
test_image_has_c_compiler.py Loading commit data...
test_longcat_avatar_layout.py Loading commit data...
test_longcat_bsa.py Loading commit data...
test_longcat_cancellable.py Loading commit data...
test_longcat_checkpoint_resolve.py Loading commit data...
test_longcat_component_quant.py Loading commit data...
test_longcat_config_ui.py Loading commit data...
test_longcat_external_training.py Loading commit data...
test_longcat_int8_load.py Loading commit data...
test_longcat_lora.py Loading commit data...
test_longcat_orchestration.py Loading commit data...
test_longcat_packaging.py Loading commit data...
test_longcat_placement.py Loading commit data...
test_longcat_progress.py Loading commit data...
test_longcat_prompt_cache.py Loading commit data...
test_longcat_quantize.py Loading commit data...
test_longcat_scale.py Loading commit data...
test_longcat_tasks.py Loading commit data...
test_longcat_variants.py Loading commit data...
test_longcat_vendored_source.py Loading commit data...
test_longcat_venv_env.py Loading commit data...
test_longcat_vram_estimate.py Loading commit data...
test_longcat_worker.py Loading commit data...
test_manual_multimodal_test_client.py Loading commit data...
test_model_scan_cache.py Loading commit data...
test_ocr_fanout.py Loading commit data...
test_ocr_olmocr.py Loading commit data...
test_ocr_served_model.py Loading commit data...
test_ocr_unreadable_and_dpi.py Loading commit data...
test_ocr_vram_share_and_fallback.py Loading commit data...
test_olmocr_pod_tls.py Loading commit data...
test_oom_priority.py Loading commit data...
test_pod_log_drain.py Loading commit data...
test_proxy_logprobs.py Loading commit data...
test_remote_execution.py Loading commit data...
test_runpod_client_scale.py Loading commit data...
test_runpod_fleet_status.py Loading commit data...
test_runpod_global_volume.py Loading commit data...
test_runpod_ocr_remotization.py Loading commit data...
test_runpod_placement.py Loading commit data...
test_runpod_pod_extra_args.py Loading commit data...
test_runpod_reaper_grace.py Loading commit data...
test_runpod_scale_down.py Loading commit data...
test_runpod_schedule_region_spend.py Loading commit data...
test_runpod_warmup.py Loading commit data...
test_studio_composed_surfaces.py Loading commit data...
test_surya_runpod_fixes.py Loading commit data...
test_township_api_key.py Loading commit data...
test_township_clip_geometry.py Loading commit data...
test_township_longcat.py Loading commit data...
test_township_page_js.py Loading commit data...
test_township_templates.py Loading commit data...
test_township_video_dataset.py Loading commit data...
test_upgrade_launcher.py Loading commit data...
test_video_as_b64_scope.py Loading commit data...
test_video_geometry.py Loading commit data...
test_vllm_share_self_tuning.py Loading commit data...
test_vram_releasers.py Loading commit data...
test_weight_stores.py Loading commit data...
test_whisper_server_local_models.py Loading commit data...