Обмежене декодування тіла chunked
Декодуйте обмежене тіло chunked із щонайбільше 65536 байтів із межею результату 4096 байтів.
def chunk_body(wire):
if type(wire) is not bytes or len(wire) > 65536:
raise ValueError("bounded bytes")
pos, body = 0, bytearray()
while True:
end = wire.find(b"\r\n", pos)
token = wire[pos:end] if end >= 0 else b""
if not 1 <= len(token) <= 8 or any(
c not in b"0123456789abcdefABCDEF" for c in token):
raise ValueError("plain hexadecimal size")
size, pos = int(token, 16), end + 2
if size == 0:
if wire[pos:] != b"\r\n":
raise ValueError("no trailers or extra bytes")
return bytes(body)
if len(body) + size > 4096:
raise ValueError("body limit")
if pos + size + 2 > len(wire):
raise ValueError("truncated chunk")
if wire[pos + size:pos + size + 2] != b"\r\n":
raise ValueError("chunk delimiter")
body.extend(wire[pos:pos + size])
pos += size + 2- Моделі
- Налаштуйте OpenAI-сумісний або Anthropic endpoint із базовою URL-адресою та API-ключем, якщо він потрібен. Перевірте з’єднання. Локальний сервер моделі має працювати; віддалені інструменти можуть окремо передавати дані.
- Проєкт
- Перевірте внутрішні CRLF і нульовий блок, відхиляючи обриви, розширення, трейлери й зайві байти.
- Перевірте перед застосуванням
- Порівняйте фактичну поведінку з очікуваним результатом. Якщо перевірка не проходить, з’ясуйте причину перед наступними змінами.
def chunk_body(wire):
if type(wire) is not bytes or len(wire) > 65536:
raise ValueError("bounded bytes")
pos, body = 0, bytearray()
while True:
end = wire.find(b"\r\n", pos)
token = wire[pos:end] if end >= 0 else b""
if not 1 <= len(token) <= 8 or any(
c not in b"0123456789abcdefABCDEF" for c in token):
raise ValueError("plain hexadecimal size")
size, pos = int(token, 16), end + 2
if size == 0:
if wire[pos:] != b"\r\n":
raise ValueError("no trailers or extra bytes")
return bytes(body)
if len(body) + size > 4096:
raise ValueError("body limit")
if pos + size + 2 > len(wire):
raise ValueError("truncated chunk")
if wire[pos + size:pos + size + 2] != b"\r\n":
raise ValueError("chunk delimiter")
body.extend(wire[pos:pos + size])
pos += size + 2Зберігайте допустимий формат декодера явним
Декодеру потрібна точна відповідь, де закінчується допустимий вхід і починається відхилення. ChunkRavel — робоче середовище з ШІ для програмування у Windows, де цю межу розробляють із урахуванням коду проєкту. Опишіть підтримуваний формат входу, межі розміру й очікуваний результат, а потім попросіть помічника перевірити, як наявна реалізація просувається байтами й повідомляє про збій.
Приклад обмеженого тіла з чанками — одне із завдань для дослідження. Він приймає навмисно вузьку форму, тож перевіряйте непідтримувані розширення й кінцеві поля разом з обрізаним входом і зайвими байтами. Просіть зміни, що зберігають заявлені межі, якщо вимога явно їх не розширює. Також простежте декодований вихід до коду виклику, адже компонент-отримувач усе ще може неправильно обробити правильний байтовий результат.
Для вибору аблітерованого ШІ виберіть доступну модель через підтримувану кінцеву точку, сумісну з OpenAI, або Anthropic і надайте облікові дані за потреби. Модель і сервер визначають контекст, інструменти й чинні обмеження. Перегляньте різницю та запустіть допустимі й недопустимі тестові дані через тести проєкту перед прийняттям зміни декодера. Окремо запущений локальний сервер моделі не робить кожен підключений інструмент або службу локальними.
Перевірка вузького контракту декодера
- Чи має декодер приймати всі форми входу з чанками?
Лише якщо це вимога програми й реалізація відповідно спроєктована та протестована. Приклад підтримує обмежену форму. Явно визначайте розширення, кінцеві поля й інші непідтримувані випадки, не вважаючи вузьку демонстрацію повною підтримкою протоколу.
- Як тестувати обрізане тіло?
Надайте тестові дані, обрізані на змістовних межах, зокрема всередині токена розміру, тіла й роздільника. Зазначте очікувану поведінку відхилення. Запустіть їх через фактичну точку входу декодера, щоб досліджуваний результат охоплював навколишню обробку входу.
- Навіщо перевіряти байти після останнього чанка?
Програмі потрібна визначена політика невикористаного входу. Перевірте, чи слід відхиляти зайві байти або передавати їх іншому рівню, а потім протестуйте контракт. Випадкове ігнорування може приховати неузгодженість декодера й коду виклику.
- Чи означає домен, пов’язаний із SQL, наявність функцій декодування баз даних?
Такої функції не заявлено. Наданий приклад проєкту стосується декодування байтів, а ChunkRavel — робоче середовище з ШІ для програмування у Windows. Вибирайте фактичні файли проєкту й середовище виконання для завдання, не виводячи можливості продукту з домену.
ChunkRavel · Оновлено 2026-10-25