From 31a9730cd8b25f693e7e01f02a2cd76fdeabd97e Mon Sep 17 00:00:00 2001 From: 9qeklajc Date: Sun, 5 Apr 2026 00:21:08 +0200 Subject: [PATCH] clean up --- routstr/upstream/base.py | 84 ++++++++++------------------------------ 1 file changed, 20 insertions(+), 64 deletions(-) diff --git a/routstr/upstream/base.py b/routstr/upstream/base.py index d0a5e8ea..a244b1fa 100644 --- a/routstr/upstream/base.py +++ b/routstr/upstream/base.py @@ -301,8 +301,6 @@ class BaseUpstreamProvider: original_model = model_obj.id transformed_model = self.transform_model_name(original_model) data["model"] = transformed_model - print("[routstr DEBUG] REQUEST BODY:", json.dumps(data, indent=2), flush=True) - print("[routstr DEBUG] MODEL OBJECT:", model_obj.model_dump() if hasattr(model_obj, 'model_dump') else vars(model_obj), flush=True) logger.debug( "Transformed model name in request", extra={ @@ -563,14 +561,6 @@ class BaseUpstreamProvider: usage_chunk_data["usage"]["remaining_balance_msats"] = ( remaining_balance_msats ) - # Normalize to OpenAI format so AI SDK maps prompt_tokens->inputTokens - u = usage_chunk_data["usage"] - if "prompt_tokens" not in u: - u["prompt_tokens"] = u.get("input_tokens", cost_data.get("input_tokens", 0)) - if "completion_tokens" not in u: - u["completion_tokens"] = u.get("output_tokens", cost_data.get("output_tokens", 0)) - if "total_tokens" not in u: - u["total_tokens"] = u.get("prompt_tokens", 0) + u.get("completion_tokens", 0) # Keep detailed cost in metadata usage_chunk_data["metadata"] = usage_chunk_data.get( "metadata", {} @@ -584,7 +574,6 @@ class BaseUpstreamProvider: usage_chunk_data["metadata"]["routstr"]["cost"][ "remaining_balance_msats" ] = remaining_balance_msats - print("[routstr DEBUG] STREAMING USAGE CHUNK:", json.dumps(usage_chunk_data, indent=2), flush=True) yield f"data: {json.dumps(usage_chunk_data)}\n\n".encode() usage_finalized = True except Exception as e: @@ -679,22 +668,13 @@ class BaseUpstreamProvider: await session.refresh(key) remaining_balance_msats = key.balance - # Ensure usage exists with token counts and cost data for OpenCode - if "usage" not in response_json: - response_json["usage"] = {} - usage = response_json["usage"] - # Normalize to OpenAI format so AI SDK maps prompt_tokens->inputTokens - if "prompt_tokens" not in usage: - usage["prompt_tokens"] = usage.get("input_tokens", cost_data.get("input_tokens", 0)) - if "completion_tokens" not in usage: - usage["completion_tokens"] = usage.get("output_tokens", cost_data.get("output_tokens", 0)) - if "total_tokens" not in usage: - usage["total_tokens"] = usage["prompt_tokens"] + usage["completion_tokens"] - response_json["usage"]["cost"] = cost_data.get("total_usd", 0.0) - response_json["usage"]["cost_sats"] = ( - cost_data.get("total_msats", 0) // 1000 - ) - response_json["usage"]["remaining_balance_msats"] = remaining_balance_msats + # Merge cost into usage for OpenCode + if "usage" in response_json: + response_json["usage"]["cost"] = cost_data.get("total_usd", 0.0) + response_json["usage"]["cost_sats"] = ( + cost_data.get("total_msats", 0) // 1000 + ) + response_json["usage"]["remaining_balance_msats"] = remaining_balance_msats # Keep detailed cost response_json["metadata"] = response_json.get("metadata", {}) @@ -740,7 +720,6 @@ class BaseUpstreamProvider: if requested_model: response_json["model"] = requested_model - print("[routstr DEBUG] NON-STREAMING RESPONSE:", json.dumps(response_json, indent=2), flush=True) return Response( content=json.dumps(response_json).encode(), status_code=response.status_code, @@ -841,6 +820,8 @@ class BaseUpstreamProvider: if isinstance(obj, dict): if obj.get("model"): last_model_seen = str(obj.get("model")) + if requested_model: + obj["model"] = requested_model # Track reasoning tokens for Responses API if usage := obj.get("usage", {}): @@ -895,18 +876,7 @@ class BaseUpstreamProvider: usage_chunk_data["response"]["usage"][ "remaining_balance_msats" ] = remaining_balance_msats - else: - # Ensure usage exists with token counts and cost data - if "usage" not in usage_chunk_data: - usage_chunk_data["usage"] = {} - u2 = usage_chunk_data["usage"] - # Normalize to OpenAI format so AI SDK maps prompt_tokens->inputTokens - if "prompt_tokens" not in u2: - u2["prompt_tokens"] = u2.get("input_tokens", cost_data.get("input_tokens", 0)) - if "completion_tokens" not in u2: - u2["completion_tokens"] = u2.get("output_tokens", cost_data.get("output_tokens", 0)) - if "total_tokens" not in u2: - u2["total_tokens"] = u2.get("prompt_tokens", 0) + u2.get("completion_tokens", 0) + elif "usage" in usage_chunk_data: usage_chunk_data["usage"]["cost"] = cost_data.get( "total_usd", 0.0 ) @@ -930,7 +900,6 @@ class BaseUpstreamProvider: usage_chunk_data["metadata"]["routstr"]["cost"][ "remaining_balance_msats" ] = remaining_balance_msats - print("[routstr DEBUG] STREAMING USAGE CHUNK (responses API):", json.dumps(usage_chunk_data, indent=2), flush=True) yield f"data: {json.dumps(usage_chunk_data)}\n\n".encode() usage_finalized = True except Exception: @@ -1019,22 +988,13 @@ class BaseUpstreamProvider: await session.refresh(key) remaining_balance_msats = key.balance - # Ensure usage exists with token counts and cost data for OpenCode - if "usage" not in response_json: - response_json["usage"] = {} - usage = response_json["usage"] - # Normalize to OpenAI format so AI SDK maps prompt_tokens->inputTokens - if "prompt_tokens" not in usage: - usage["prompt_tokens"] = usage.get("input_tokens", cost_data.get("input_tokens", 0)) - if "completion_tokens" not in usage: - usage["completion_tokens"] = usage.get("output_tokens", cost_data.get("output_tokens", 0)) - if "total_tokens" not in usage: - usage["total_tokens"] = usage["prompt_tokens"] + usage["completion_tokens"] - response_json["usage"]["cost"] = cost_data.get("total_usd", 0.0) - response_json["usage"]["cost_sats"] = ( - cost_data.get("total_msats", 0) // 1000 - ) - response_json["usage"]["remaining_balance_msats"] = remaining_balance_msats + # Merge cost into usage for OpenCode + if "usage" in response_json: + response_json["usage"]["cost"] = cost_data.get("total_usd", 0.0) + response_json["usage"]["cost_sats"] = ( + cost_data.get("total_msats", 0) // 1000 + ) + response_json["usage"]["remaining_balance_msats"] = remaining_balance_msats # Keep detailed cost response_json["metadata"] = response_json.get("metadata", {}) @@ -1080,7 +1040,6 @@ class BaseUpstreamProvider: if requested_model: response_json["model"] = requested_model - print("[routstr DEBUG] NON-STREAMING RESPONSE (responses API):", json.dumps(response_json, indent=2), flush=True) return Response( content=json.dumps(response_json).encode(), status_code=response.status_code, @@ -1344,12 +1303,7 @@ class BaseUpstreamProvider: path = self.normalize_request_path(path, model_obj) url = self.build_request_url(path, model_obj) - original_model_id: str | None = None - if request_body: - try: - original_model_id = json.loads(request_body).get("model") - except Exception: - pass + original_model_id = model_obj.id if model_obj else None transformed_body = self.prepare_request_body(request_body, model_obj) @@ -1635,6 +1589,8 @@ class BaseUpstreamProvider: path = self.normalize_request_path(path, model_obj) url = self.build_request_url(path, model_obj) + original_model_id = model_obj.id if model_obj else None + transformed_body = self.prepare_responses_request_body(request_body, model_obj) logger.info(