fix: validate and size governed patch outputs

This commit is contained in:
thanhnv
2026-07-18 11:29:37 +07:00
parent 36b6454b8d
commit f23fb98953
3 changed files with 61 additions and 13 deletions
@@ -56,6 +56,17 @@ PROVIDER_LOG = os.path.join(REPO_ROOT, ".specify/logs/level5/provider-usage.json
REQUEST_TIMEOUT = max(1, int(os.environ.get("CASAN_MODEL_TIMEOUT_SEC", "60")))
def generation_max_tokens(role):
"""Return a bounded generation budget shared by every model provider."""
if role in ("classify", "judge"):
return 16
try:
configured = int(os.environ.get("CASAN_MODEL_GENERATE_MAX_TOKENS", "1400"))
except ValueError:
configured = 1400
return min(max(configured, 64), 8192)
def enforce_call_budget():
"""Fail closed when a run exceeds CASAN_MODEL_MAX_CALLS. The count is tracked in
CASAN_MODEL_CALL_COUNTER_FILE so it spans the many per-step model-call processes
@@ -205,7 +216,7 @@ def call_openai(model_name, prompt, role):
"model": model_name,
"messages": [{"role": "user", "content": prompt}],
"temperature": 0 if role in ("classify", "judge") else 0.2,
"max_tokens": 16 if role in ("classify", "judge") else 512,
"max_tokens": generation_max_tokens(role),
}
data = json.dumps(body).encode()
req = urllib.request.Request(
@@ -272,7 +283,7 @@ def call_openai_compatible(model_name, prompt, role):
"model": model_name,
"messages": [{"role": "user", "content": prompt}],
"temperature": 0 if role in ("classify", "judge") else 0.2,
"max_tokens": 16 if role in ("classify", "judge") else 512,
"max_tokens": generation_max_tokens(role),
}
data = json.dumps(body).encode()
req = urllib.request.Request(
@@ -335,7 +346,7 @@ def call_anthropic(model_name, prompt, role):
url = f"https://{host}/v1/messages"
body = {
"model": model_name,
"max_tokens": 16 if role in ("classify", "judge") else 512,
"max_tokens": generation_max_tokens(role),
"messages": [{"role": "user", "content": prompt}],
}
data = json.dumps(body).encode()