• Stefy Lanza (nextime / spora )'s avatar
    placement: where a model runs is configured, not discovered · 8120e267
    Stefy Lanza (nextime / spora ) authored
    Three corrections to the fan-out, all the same mistake in different places:
    the code was deciding things the configuration had already decided.
    
    Nodes are no longer discovered. Asking every cluster node what it holds and
    using whoever answered is configuration by probe: it puts work on a machine
    nobody chose and moves it the moment a different node replies first. A node
    serves a model because the model is PINNED to it — `engine` on the entry, the
    same hard constraint the front router already honours, comma-separated when
    several nodes should share the work. A pinned node that does not hold the
    model is reported, not silently replaced.
    
    The decision is not an OCR decision, so it does not live in codai/ocr: any
    model, any caller that needs an endpoint rather than a proxy hop, gets the
    same answer from codai/models/placement.py. For requests that pass THROUGH
    coderai this was already true — the router honours the pin, treats a node as
    an engine by name, reaches RunPod through the backend. This is that decision
    for a caller that must hold an address itself, which is why OCR needed it.
    
    And "how busy is too busy" is the model's own scale_up_inflight_per_pod, on
    the model page, instead of the parallel ocr.serve_spill_inflight knob I had
    added — one number per model, already there, already meaning exactly this. A
    model with no RunPod block has nothing to rent, so load alone never moves its
    pages.
    
    Finally, the caller: resolve_engine accepted the four pipeline names only, so
    a client naming the model it can see in /v1/models got "unknown OCR engine".
    Both now work — engine=surya and engine=datalab-to/surya-ocr-2 reach the same
    place — because which pipeline reads a page, and where its model runs, are
    ours to know and not the client's.
    Co-Authored-By: 's avatarClaude Opus 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01PxYHWbCAjjjD7A1rhFKtaW
    8120e267
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_vram_share_and_fallback.py Loading commit data...
test_oom_priority.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_schedule_region_spend.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...