[s08] Reactive compaction does not recognize Anthropic's "prompt is too long" error
Los mantenedores suelen responder en 1 día
@zmylol ya está trabajando en esto.
Desde el 6/9/2026.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
Línea de trabajo
Comienza en s08_context_compact/code.py:538–539 e inspecciona la lógica existente de reintento de compactación reactiva y sus marcadores de error. Ejecuta la reproducción offline proporcionada y los casos de regresión; se considera completado cuando el error documentado prompt is too long activa un reintento de compactación, mientras que el agotamiento de los reintentos y los errores no relacionados conservan su comportamiento existente, con los tres READMEs de los capítulos sincronizados.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
S08 does not enter reactive compaction when Anthropic rejects an oversized prompt with its documented error message, prompt is too long. Instead, agent_loop() propagates the error immediately.
The matcher at s08_context_compact/code.py:538–539 only recognizes prompt_too_long and too many tokens. Anthropic documents the input-overflow response as a 400 invalid_request_error with the message prompt is too long: official documentation.
Reproduction
Reproduced on upstream main commit 0dcafa2ae053a1ddd6a72f265431104b08a5aa13, Python 3.13.11, macOS. The script below uses the real SDK exception class and mocked API responses, so it makes no model requests.
After installing the project's Python dependencies, save this as repro.py and run python repro.py /absolute/path/to/checkout:
"""Offline reproduction; usage: python3.13 SCRIPT /path/to/repository"""
import importlib.util
import os
from pathlib import Path
import sys
import tempfile
from types import SimpleNamespace
import anthropic
import httpx
sys.dont_write_bytecode = True
repo = Path(sys.argv[1]).resolve()
os.environ["MODEL_ID"] = "offline-model"
os.environ["ANTHROPIC_API_KEY"] = "offline-test-key"
with tempfile.TemporaryDirectory() as temp:
os.chdir(temp)
spec = importlib.util.spec_from_file_location("s08_repro", repo / "s08_context_compact/code.py")
lesson = importlib.util.module_from_spec(spec)
spec.loader.exec_module(lesson)
events = []
error_message = "prompt is too long: 210445 tokens > 200000 maximum"
error = anthropic.BadRequestError(
error_message,
response=httpx.Response(400, request=httpx.Request("POST", "https://api.anthropic.com/v1/messages")),
body={"error": {"type": "invalid_request_error", "message": error_message}},
)
def fake_create(**kwargs):
events.append("API")
if events.count("API") == 1:
raise error
return SimpleNamespace(content=[SimpleNamespace(type="text", text="Recovered")], stop_reason="end_turn")
def fake_reactive_compact(messages, active_request):
events.append("reactive_compact")
return messages
lesson.client.messages.create = fake_create
lesson.COMPACTOR.reactive_compact = fake_reactive_compact
try:
lesson.agent_loop([{"role": "user", "content": "continue"}], "continue")
except anthropic.BadRequestError as exc:
print("Unhandled:", type(exc).__name__, str(exc))
print("Actual events:", events)
print("Expected events:", ["API", "reactive_compact", "API"])
Actual output:
Unhandled: BadRequestError prompt is too long: 210445 tokens > 200000 maximum
Actual events: ['API']
Expected events: ['API', 'reactive_compact', 'API']
Expected behavior
When the API returns this input-overflow error, run reactive compaction and retry once, as described in the lesson. Preserve the existing retry limit and propagation of unrelated errors.
Suggested minimal fix
Recognize prompt is too long alongside the two existing markers, and synchronize the three chapter READMEs. I have verified this small fix locally with regression cases for recovery, existing marker compatibility, retry exhaustion, and unrelated errors.
Prepared with AI assistance. The reproduction was executed locally without live model calls.
- Lenguaje dominante
- Python
- Estrellas
- 78.6k
- Forks
- 12.6k
- Merge medio
- 3 h 27 min
- PR fusionados (30 d)
- 2
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de shareAI-lab/learn-claude-code
-
[web] Buttons show the default arrow cursor on hover (Tailwind v4 dropped the preflight `cursor: pointer`)Posiblemente ocupada @xbsheng la tomó hace 4 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
shareAI-lab/learn-claude-code#594 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
shareAI-lab/learn-claude-code#591 ·
Los mantenedores suelen responder en 1 día
-
s04/s05/s06 的 README.zh.md 里有几处代码注释仍是英文Posiblemente ocupada @zl1nq la tomó hace 17 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
shareAI-lab/learn-claude-code#589 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
shareAI-lab/learn-claude-code#583 ·
Los mantenedores suelen responder en 1 día
-
docs(s02): explain why specialized tools are needed when Bash can do the same workPosiblemente ocupada @kunshanyep-beep la tomó hace 38 días. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 76/100
shareAI-lab/learn-claude-code#549 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de shareAI-lab/learn-claude-code
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
noontide-co/mainbranch#1211 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[1.x Bug] run-operation --sql reports success but rolls back writes on transaction-capable adaptersAbiertotriage
Dificultad 2/5 1-3 horas Aptitud para principiantes 64/100
dbt-labs/dbt#16784 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
bug settings ui
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
DewaldOosthuizen/py-tray-command-launcher#162 ·
Los mantenedores suelen responder en 1 día
-
run_all sleeps after the final job despite documenting delays between jobsPosiblemente ocupada @Gambit-Checkmate la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100