fix codegen timeout

This commit is contained in:
Denton Social
2026-09-24 03:39:48 -05:00
parent 300c20714b
commit bb97a09caa
5 changed files with 44 additions and 5 deletions
+2 -1
View File
@@ -162,7 +162,7 @@ def test_generate_skill_body_codegen(tmp_path):
client = CodegenClient(
base_url=codegen_cfg.get("base_url", "http://localhost:11434/v1"),
model=codegen_cfg.get("model", "qwen38-iq3s"),
timeout=float(codegen_cfg.get("timeout", 600.0)),
timeout=float(codegen_cfg.get("timeout", 1200.0)),
)
tree = build_tree(build_skills({"skills": {}}))
draft = SkillDraft(
@@ -196,6 +196,7 @@ def test_create_skill_empty_category_does_not_wedge(tmp_path):
config["log"] = str(tmp_path / "decisions.jsonl")
config["trace"] = str(tmp_path / "runs.jsonl")
scheduler, config = build_scheduler(config)
scheduler.codegen = None # wedge regression only; skip the ~7min codegen body write
scheduler.tree["travel_planning"] = []
for _ in range(2):
+32 -1
View File
@@ -8,12 +8,14 @@ the CodegenClient itself is real, not mocked.
import json
import threading
import time
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
import pytest
from semif_agent.codegen import (
CodegenClient,
CodegenError,
build_skill_body_prompt,
generate_skill_body,
parse_skill_body,
@@ -217,10 +219,39 @@ def test_codegen_client_unreachable_raises(tmp_path):
client = CodegenClient(base_url="http://127.0.0.1:1/v1", model="test", timeout=2)
tree = build_tree(build_skills({"skills": {}}))
draft = SkillDraft(name="probe", description="Probe the service.")
with pytest.raises(Exception):
with pytest.raises(CodegenError):
generate_skill_body(client, Request("is the service up?"), "tracking", draft, tree)
class _SilentOpenAI(BaseHTTPRequestHandler):
"""Accepts the request but never replies; the client must time out."""
def do_POST(self):
length = int(self.headers.get("Content-Length") or 0)
self.rfile.read(length)
time.sleep(5)
def log_message(self, format, *args):
pass
def test_chat_timeout_raises_codegen_error():
handler = type("Handler", (_SilentOpenAI,), {})
httpd = ThreadingHTTPServer(("127.0.0.1", 0), handler)
threading.Thread(target=httpd.serve_forever, daemon=True).start()
try:
client = CodegenClient(
base_url=f"http://127.0.0.1:{httpd.server_address[1]}/v1",
model="test",
timeout=0.5,
)
with pytest.raises(CodegenError, match="timed out"):
client.chat([{"role": "user", "content": "hi"}])
finally:
httpd.shutdown()
httpd.server_close()
def test_chat_omits_max_tokens_by_default():
httpd, base = _fake_server(GOOD_BODY)
try: