From b859aff3c55612473bbd89b21f82d5a45291ca87 Mon Sep 17 00:00:00 2001 From: jenstandstad Date: Mon, 20 Apr 2026 17:25:56 +0200 Subject: [PATCH] Fixing festinger API --- plugins/festinger/festinger/main.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/plugins/festinger/festinger/main.py b/plugins/festinger/festinger/main.py index 965e8ff..bcf9f31 100644 --- a/plugins/festinger/festinger/main.py +++ b/plugins/festinger/festinger/main.py @@ -613,13 +613,18 @@ async def generate(request: Request) -> Response: async def anthropic_messages(request: Request) -> Response: cfg = request.app.state.yaml_config 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 original_stream: bool = bool(body.get("stream", False)) model = body.get("model", "unknown") upstream = cfg["upstream_anthropic"] 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: headers = _relay_headers(request, ANTHROPIC_RELAY_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) record_and_check(sess, text, min_len) if original_stream: - log.info("streaming_response provider=anthropic model=%s converting json→sse", model) - return Response(content=_anthropic_to_sse(raw), media_type="text/event-stream") - return Response(content=json.dumps(raw), media_type="application/json") + sse_bytes = _anthropic_to_sse(raw) + log.info( + "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: 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)