mirror of
https://github.com/Routstr/routstr-core.git
synced 2026-08-09 02:54:37 +00:00
clean up
This commit is contained in:
+20
-64
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user