OpenAI endpoint stage 10.3 — exact logits-backed logprobs
Minor patch release on top of stage 10.2.\n\nHighlights:\n- Extends GenerationResult and the DRIFT backend bridge to carry per-token logprob payloads.\n- Adds opt-in logits-backed logprob collection inside orchestrator.generate(), without changing the default greedy path unless the HTTP adapter requests logprobs.\n- Chat Completions and legacy Completions now prefer exact selected-token/top-k logprobs when the backend exposes logits.\n- Backends that cannot expose logits still return OpenAI-shaped placeholder logprobs for parser compatibility.\n- Stop-token truncation now truncates attached logprobs alongside token_ids.\n- SDK smoke and API tests now assert exact logprob values are parsed.\n\nVerification:\n- python3 -m pytest tests/test_openai_api.py tests/test_openai_compat_payloads.py tests/test_openai_sdk_smoke.py tests/test_sampling_controls.py -q -> 39 passed, 2 skipped, 1 warning.\n- PYTHONPATH=/Users/taewoopark/personal/DRIFT /tmp/drift-openai-sdk-venv/bin/python -m pytest tests/test_openai_api.py tests/test_openai_compat_payloads.py tests/test_openai_sdk_smoke.py tests/test_sampling_controls.py -q -> 40 passed, 1 skipped, 1 warning.\n- python3 -m compileall drift tests scripts/openai_compat_smoke.py -> passed.\n- git diff --check -> passed.\n- python3 -m drift.cli serve --help -> passed.\n\nKnown scope notes:\n- Thin-head mode cannot expose logits at the HTTP adapter and will keep the compatibility fallback.\n- Tool execution, full constrained decoding, audio, and multimodal content remain outside this text-generation PR scope.