Fixing festinger API

This commit is contained in:
2026-04-20 17:25:56 +02:00
parent ce67d3ab1a
commit b859aff3c5
+19 -5
View File
@@ -613,13 +613,18 @@ async def generate(request: Request) -> Response:
async def anthropic_messages(request: Request) -> Response: async def anthropic_messages(request: Request) -> Response:
cfg = request.app.state.yaml_config cfg = request.app.state.yaml_config
pool = request.app.state.pool pool = request.app.state.pool
body = await request.json() raw_body = await request.body()
body = json.loads(raw_body)
# Capture streaming intent BEFORE call_anthropic forces stream=False # Capture streaming intent BEFORE call_anthropic forces stream=False
original_stream: bool = bool(body.get("stream", False)) original_stream: bool = bool(body.get("stream", False))
model = body.get("model", "unknown") model = body.get("model", "unknown")
upstream = cfg["upstream_anthropic"] upstream = cfg["upstream_anthropic"]
min_len = cfg["detection"]["min_length"] min_len = cfg["detection"]["min_length"]
log.info("chat route=/v1/messages model=%s upstream=%s stream=%s", model, upstream, original_stream) log.info(
"chat route=/v1/messages model=%s upstream=%s stream=%s req_preview=%.200s",
model, upstream, original_stream,
raw_body[:200].decode(errors="replace").replace("\n", " "),
)
try: try:
headers = _relay_headers(request, ANTHROPIC_RELAY_HEADERS) headers = _relay_headers(request, ANTHROPIC_RELAY_HEADERS)
if "anthropic-version" not in {k.lower() for k in headers}: if "anthropic-version" not in {k.lower() for k in headers}:
@@ -641,9 +646,18 @@ async def anthropic_messages(request: Request) -> Response:
text, raw = await call_anthropic(body, upstream, headers) text, raw = await call_anthropic(body, upstream, headers)
record_and_check(sess, text, min_len) record_and_check(sess, text, min_len)
if original_stream: if original_stream:
log.info("streaming_response provider=anthropic model=%s converting json→sse", model) sse_bytes = _anthropic_to_sse(raw)
return Response(content=_anthropic_to_sse(raw), media_type="text/event-stream") log.info(
return Response(content=json.dumps(raw), media_type="application/json") "streaming_response provider=anthropic model=%s converting json→sse bytes=%d preview=%.300s",
model, len(sse_bytes), sse_bytes[:300].decode(errors="replace"),
)
return Response(content=sse_bytes, media_type="text/event-stream")
resp_body = json.dumps(raw)
log.info(
"json_response provider=anthropic model=%s bytes=%d preview=%.300s",
model, len(resp_body), resp_body[:300],
)
return Response(content=resp_body, media_type="application/json")
except UpstreamError as exc: except UpstreamError as exc:
log.error("chat_upstream_error route=/v1/messages model=%s %s", model, exc) log.error("chat_upstream_error route=/v1/messages model=%s %s", model, exc)
return Response(content=exc.content, status_code=exc.status_code, media_type=exc.content_type) return Response(content=exc.content, status_code=exc.status_code, media_type=exc.content_type)