diff --git a/temp.logs b/temp.logs deleted file mode 100644 index d717fcd3..00000000 --- a/temp.logs +++ /dev/null @@ -1,124 +0,0 @@ -{"asctime": "2025-09-04 14:01:45", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Incoming request", "pathname": "/app/routstr/core/middleware.py", "lineno": 47, "version": "0.1.1b", "request_id": "bebebe5c-3db8-4117-ae39-85df53bcd058", "method": "GET", "path": "/v1/models", "query_params": {}, "client_host": "172.18.0.1", "headers": {"host": "ai.redsh1ft.com", "x-real-ip": "213.199.37.224", "x-forwarded-for": "213.199.37.224", "x-forwarded-proto": "https", "connection": "close", "accept": "*/*", "accept-encoding": "gzip, br, zstd, deflate"}, "body_size": 0} -{"asctime": "2025-09-04 14:01:45", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Request completed", "pathname": "/app/routstr/core/middleware.py", "lineno": 86, "version": "0.1.1b", "request_id": "bebebe5c-3db8-4117-ae39-85df53bcd058", "method": "GET", "path": "/v1/models", "status_code": 200, "duration_ms": 172.05, "client_host": "172.18.0.1"} -{"asctime": "2025-09-04 14:02:45", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Incoming request", "pathname": "/app/routstr/core/middleware.py", "lineno": 47, "version": "0.1.1b", "request_id": "a5c05bf1-f84a-4365-9998-ebc62102731d", "method": "GET", "path": "/v1/info", "query_params": {}, "client_host": "172.18.0.1", "headers": {"host": "ai.redsh1ft.com", "x-real-ip": "91.99.199.162", "x-forwarded-for": "91.99.199.162", "x-forwarded-proto": "https", "connection": "close", "accept": "*/*", "accept-encoding": "gzip, deflate, br", "user-agent": "python-httpx/0.25.2"}, "body_size": 0} -{"asctime": "2025-09-04 14:02:45", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Request completed", "pathname": "/app/routstr/core/middleware.py", "lineno": 86, "version": "0.1.1b", "request_id": "a5c05bf1-f84a-4365-9998-ebc62102731d", "method": "GET", "path": "/v1/info", "status_code": 200, "duration_ms": 123.72, "client_host": "172.18.0.1"} -{"asctime": "2025-09-04 14:06:39", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Incoming request", "pathname": "/app/routstr/core/middleware.py", "lineno": 47, "version": "0.1.1b", "request_id": "c56d637a-38ad-46b8-8296-3a8fd07fdfe6", "method": "GET", "path": "/v1/models", "query_params": {}, "client_host": "172.18.0.1", "headers": {"host": "ai.redsh1ft.com", "x-real-ip": "213.199.37.224", "x-forwarded-for": "213.199.37.224", "x-forwarded-proto": "https", "connection": "close", "accept": "*/*", "accept-encoding": "gzip, br, zstd, deflate"}, "body_size": 0} -{"asctime": "2025-09-04 14:06:39", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Request completed", "pathname": "/app/routstr/core/middleware.py", "lineno": 86, "version": "0.1.1b", "request_id": "c56d637a-38ad-46b8-8296-3a8fd07fdfe6", "method": "GET", "path": "/v1/models", "status_code": 200, "duration_ms": 138.31, "client_host": "172.18.0.1"} -{"asctime": "2025-09-04 14:07:46", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Incoming request", "pathname": "/app/routstr/core/middleware.py", "lineno": 47, "version": "0.1.1b", "request_id": "fc657871-d7b5-488d-86cf-179ebe33fdb0", "method": "GET", "path": "/v1/info", "query_params": {}, "client_host": "172.18.0.1", "headers": {"host": "ai.redsh1ft.com", "x-real-ip": "91.99.199.162", "x-forwarded-for": "91.99.199.162", "x-forwarded-proto": "https", "connection": "close", "accept": "*/*", "accept-encoding": "gzip, deflate, br", "user-agent": "python-httpx/0.25.2"}, "body_size": 0} -{"asctime": "2025-09-04 14:07:46", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Request completed", "pathname": "/app/routstr/core/middleware.py", "lineno": 86, "version": "0.1.1b", "request_id": "fc657871-d7b5-488d-86cf-179ebe33fdb0", "method": "GET", "path": "/v1/info", "status_code": 200, "duration_ms": 314.62, "client_host": "172.18.0.1"} -{"asctime": "2025-09-04 14:08:02", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Incoming request", "pathname": "/app/routstr/core/middleware.py", "lineno": 47, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "method": "POST", "path": "/v1/chat/completions", "query_params": {}, "client_host": "172.18.0.1", "headers": {"host": "ai.redsh1ft.com", "x-real-ip": "93.113.215.62", "x-forwarded-for": "93.113.215.62", "x-forwarded-proto": "https", "connection": "close", "content-length": "517", "content-type": "application/json", "accept": "*/*", "accept-encoding": "gzip, br, zstd, deflate"}, "body_size": 0} -{"asctime": "2025-09-04 14:08:02", "name": "routstr.proxy", "levelname": "INFO", "message": "Received proxy request", "pathname": "/app/routstr/proxy.py", "lineno": 463, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "method": "POST", "path": "v1/chat/completions", "client_host": "172.18.0.1", "user_agent": "unknown"} -{"asctime": "2025-09-04 14:08:02", "name": "routstr.payment.helpers", "levelname": "WARNING", "message": "Model not found in available models", "pathname": "/app/routstr/payment/helpers.py", "lineno": 111, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "requested_model": "gpt-4o-mini", "available_models": ["deepseek/deepseek-chat-v3.1", "deepseek/deepseek-v3.1-base", "openai/gpt-4o-audio-preview", "mistralai/mistral-medium-3.1", "baidu/ernie-4.5-21b-a3b", "baidu/ernie-4.5-vl-28b-a3b", "z-ai/glm-4.5v", "ai21/jamba-mini-1.7", "ai21/jamba-large-1.7", "openai/gpt-5-chat", "openai/gpt-5", "openai/gpt-5-mini", "openai/gpt-5-nano", "openai/gpt-oss-120b", "openai/gpt-oss-20b", "anthropic/claude-opus-4.1", "mistralai/codestral-2508", "qwen/qwen3-30b-a3b-instruct-2507", "z-ai/glm-4.5", "z-ai/glm-4.5-air", "qwen/qwen3-235b-a22b-thinking-2507", "z-ai/glm-4-32b", "qwen/qwen3-coder", "bytedance/ui-tars-1.5-7b", "google/gemini-2.5-flash-lite", "qwen/qwen3-235b-a22b-2507", "switchpoint/router", "moonshotai/kimi-k2", "thudm/glm-4.1v-9b-thinking", "mistralai/devstral-medium", "mistralai/devstral-small", "x-ai/grok-4", "tencent/hunyuan-a13b-instruct", "morph/morph-v3-large", "morph/morph-v3-fast", "baidu/ernie-4.5-vl-424b-a47b", "baidu/ernie-4.5-300b-a47b", "thedrummer/anubis-70b-v1.1", "inception/mercury", "mistralai/mistral-small-3.2-24b-instruct", "minimax/minimax-m1", "google/gemini-2.5-flash-lite-preview-06-17", "google/gemini-2.5-flash", "google/gemini-2.5-pro", "openai/o3-pro", "x-ai/grok-3-mini", "x-ai/grok-3", "mistralai/magistral-small-2506", "mistralai/magistral-medium-2506", "mistralai/magistral-medium-2506:thinking", "google/gemini-2.5-pro-preview", "deepseek/deepseek-r1-0528-qwen3-8b", "deepseek/deepseek-r1-0528", "anthropic/claude-opus-4", "anthropic/claude-sonnet-4", "mistralai/devstral-small-2505", "google/gemma-3n-e4b-it", "openai/codex-mini", "nousresearch/deephermes-3-mistral-24b-preview", "mistralai/mistral-medium-3", "google/gemini-2.5-pro-preview-05-06", "arcee-ai/spotlight", "arcee-ai/maestro-reasoning", "arcee-ai/virtuoso-large", "arcee-ai/coder-large", "microsoft/phi-4-reasoning-plus", "inception/mercury-coder", "opengvlab/internvl3-14b", "deepseek/deepseek-prover-v2", "meta-llama/llama-guard-4-12b", "qwen/qwen3-30b-a3b", "qwen/qwen3-8b", "qwen/qwen3-14b", "qwen/qwen3-32b", "qwen/qwen3-235b-a22b", "tngtech/deepseek-r1t-chimera", "microsoft/mai-ds-r1", "thudm/glm-z1-32b", "thudm/glm-4-32b", "openai/o4-mini-high", "openai/o3", "openai/o4-mini", "shisa-ai/shisa-v2-llama3.3-70b", "openai/gpt-4.1", "openai/gpt-4.1-mini", "openai/gpt-4.1-nano", "eleutherai/llemma_7b", "alfredpros/codellama-7b-instruct-solidity", "arliai/qwq-32b-arliai-rpr-v1", "agentica-org/deepcoder-14b-preview", "moonshotai/kimi-vl-a3b-thinking", "x-ai/grok-3-mini-beta", "x-ai/grok-3-beta", "nvidia/llama-3.3-nemotron-super-49b-v1", "nvidia/llama-3.1-nemotron-ultra-253b-v1", "meta-llama/llama-4-maverick", "meta-llama/llama-4-scout", "deepseek/deepseek-v3-base", "scb10x/llama3.1-typhoon2-70b-instruct", "qwen/qwen2.5-vl-32b-instruct", "deepseek/deepseek-chat-v3-0324", "openai/o1-pro", "mistralai/mistral-small-3.1-24b-instruct", "google/gemma-3-4b-it", "google/gemma-3-12b-it", "cohere/command-a", "openai/gpt-4o-mini-search-preview", "openai/gpt-4o-search-preview", "google/gemma-3-27b-it", "thedrummer/anubis-pro-105b-v1", "thedrummer/skyfall-36b-v2", "microsoft/phi-4-multimodal-instruct", "perplexity/sonar-reasoning-pro", "perplexity/sonar-pro", "perplexity/sonar-deep-research", "qwen/qwq-32b", "google/gemini-2.0-flash-lite-001", "anthropic/claude-3.7-sonnet", "anthropic/claude-3.7-sonnet:thinking", "perplexity/r1-1776", "mistralai/mistral-saba", "cognitivecomputations/dolphin3.0-r1-mistral-24b", "cognitivecomputations/dolphin3.0-mistral-24b", "meta-llama/llama-guard-3-8b", "openai/o3-mini-high", "deepseek/deepseek-r1-distill-llama-8b", "google/gemini-2.0-flash-001", "qwen/qwen-vl-plus", "aion-labs/aion-1.0", "aion-labs/aion-1.0-mini", "aion-labs/aion-rp-llama-3.1-8b", "qwen/qwen-vl-max", "qwen/qwen-turbo", "qwen/qwen2.5-vl-72b-instruct", "qwen/qwen-plus", "qwen/qwen-max", "openai/o3-mini", "deepseek/deepseek-r1-distill-qwen-1.5b", "mistralai/mistral-small-24b-instruct-2501", "deepseek/deepseek-r1-distill-qwen-32b", "deepseek/deepseek-r1-distill-qwen-14b", "perplexity/sonar-reasoning", "perplexity/sonar", "liquid/lfm-7b", "liquid/lfm-3b", "deepseek/deepseek-r1-distill-llama-70b", "deepseek/deepseek-r1", "minimax/minimax-01", "mistralai/codestral-2501", "microsoft/phi-4", "deepseek/deepseek-chat", "sao10k/l3.3-euryale-70b", "openai/o1", "x-ai/grok-2-vision-1212", "x-ai/grok-2-1212", "cohere/command-r7b-12-2024", "meta-llama/llama-3.3-70b-instruct", "amazon/nova-lite-v1", "amazon/nova-micro-v1", "amazon/nova-pro-v1", "qwen/qwq-32b-preview", "openai/gpt-4o-2024-11-20", "mistralai/mistral-large-2411", "mistralai/mistral-large-2407", "mistralai/pixtral-large-2411", "x-ai/grok-vision-beta", "infermatic/mn-inferor-12b", "qwen/qwen-2.5-coder-32b-instruct", "raifle/sorcererlm-8x22b", "thedrummer/unslopnemo-12b", "anthropic/claude-3.5-haiku-20241022", "anthropic/claude-3.5-haiku", "anthropic/claude-3.5-sonnet", "anthracite-org/magnum-v4-72b", "mistralai/ministral-8b", "mistralai/ministral-3b", "qwen/qwen-2.5-7b-instruct", "nvidia/llama-3.1-nemotron-70b-instruct", "inflection/inflection-3-pi", "inflection/inflection-3-productivity", "google/gemini-flash-1.5-8b", "anthracite-org/magnum-v2-72b", "thedrummer/rocinante-12b", "meta-llama/llama-3.2-90b-vision-instruct", "meta-llama/llama-3.2-11b-vision-instruct", "meta-llama/llama-3.2-3b-instruct", "meta-llama/llama-3.2-1b-instruct", "qwen/qwen-2.5-72b-instruct", "neversleep/llama-3.1-lumimaid-8b", "openai/o1-mini", "openai/o1-mini-2024-09-12", "mistralai/pixtral-12b", "cohere/command-r-plus-08-2024", "cohere/command-r-08-2024", "sao10k/l3.1-euryale-70b", "qwen/qwen-2.5-vl-7b-instruct", "microsoft/phi-3.5-mini-128k-instruct", "nousresearch/hermes-3-llama-3.1-70b", "nousresearch/hermes-3-llama-3.1-405b", "openai/chatgpt-4o-latest", "sao10k/l3-lunaris-8b", "openai/gpt-4o-2024-08-06", "meta-llama/llama-3.1-405b", "meta-llama/llama-3.1-70b-instruct", "meta-llama/llama-3.1-405b-instruct", "meta-llama/llama-3.1-8b-instruct", "mistralai/mistral-nemo", "openai/gpt-4o-mini-2024-07-18", "openai/gpt-4o-mini", "google/gemma-2-27b-it", "google/gemma-2-9b-it", "anthropic/claude-3.5-sonnet-20240620", "sao10k/l3-euryale-70b", "cognitivecomputations/dolphin-mixtral-8x22b", "qwen/qwen-2-72b-instruct", "nousresearch/hermes-2-pro-llama-3-8b", "mistralai/mistral-7b-instruct-v0.3", "mistralai/mistral-7b-instruct", "microsoft/phi-3-mini-128k-instruct", "microsoft/phi-3-medium-128k-instruct", "neversleep/llama-3-lumimaid-70b", "google/gemini-flash-1.5", "meta-llama/llama-guard-2-8b", "openai/gpt-4o-2024-05-13", "openai/gpt-4o", "openai/gpt-4o:extended", "meta-llama/llama-3-8b-instruct", "meta-llama/llama-3-70b-instruct", "mistralai/mixtral-8x22b-instruct", "microsoft/wizardlm-2-8x22b", "google/gemini-pro-1.5", "openai/gpt-4-turbo", "cohere/command-r-plus", "cohere/command-r-plus-04-2024", "sophosympatheia/midnight-rose-70b", "cohere/command-r", "cohere/command", "anthropic/claude-3-haiku", "anthropic/claude-3-opus", "cohere/command-r-03-2024", "mistralai/mistral-large", "openai/gpt-4-turbo-preview", "openai/gpt-3.5-turbo-0613", "nousresearch/nous-hermes-2-mixtral-8x7b-dpo", "mistralai/mistral-small", "mistralai/mistral-tiny", "mistralai/mixtral-8x7b-instruct", "neversleep/noromaid-20b", "alpindale/goliath-120b", "openai/gpt-4-1106-preview", "openai/gpt-3.5-turbo-instruct", "mistralai/mistral-7b-instruct-v0.1", "pygmalionai/mythalion-13b", "openai/gpt-3.5-turbo-16k", "mancer/weaver", "undi95/remm-slerp-l2-13b", "gryphe/mythomax-l2-13b", "openai/gpt-4", "openai/gpt-3.5-turbo", "openai/gpt-4-0314"], "using_default_cost": 0} -{"asctime": "2025-09-04 14:08:02", "name": "routstr.auth", "levelname": "INFO", "message": "Existing sk- API key: [REDACTED]", "pathname": "/app/routstr/auth.py", "lineno": 72, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "key_hash": "98d4c330...", "balance": 3883554, "total_requests": 335} -{"asctime": "2025-09-04 14:08:02", "name": "routstr.proxy", "levelname": "INFO", "message": "token: [REDACTED]: [REDACTED] successfully", "pathname": "/app/routstr/proxy.py", "lineno": 675, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance": 3883554} -{"asctime": "2025-09-04 14:08:02", "name": "routstr.proxy", "levelname": "INFO", "message": "Processing payment for request", "pathname": "/app/routstr/proxy.py", "lineno": 549, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance_before": 3883554, "model": "gpt-4o-mini"} -{"asctime": "2025-09-04 14:08:02", "name": "routstr.auth", "levelname": "INFO", "message": "Processing payment for request", "pathname": "/app/routstr/auth.py", "lineno": 279, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "key_hash": "98d4c330...", "current_balance": 3883554, "required_cost": 0, "sufficient_balance": true} -{"asctime": "2025-09-04 14:08:02", "name": "routstr.auth", "levelname": "INFO", "message": "Payment processed successfully", "pathname": "/app/routstr/auth.py", "lineno": 358, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "key_hash": "98d4c330...", "charged_amount": 0, "new_balance": 3883554, "total_spent": 2116446, "total_requests": 336} -{"asctime": "2025-09-04 14:08:02", "name": "routstr.proxy", "levelname": "INFO", "message": "Payment processed successfully", "pathname": "/app/routstr/proxy.py", "lineno": 561, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance_after": 3883554, "model": "gpt-4o-mini"} -{"asctime": "2025-09-04 14:08:02", "name": "routstr.proxy", "levelname": "INFO", "message": "Forwarding request to upstream", "pathname": "/app/routstr/proxy.py", "lineno": 261, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "url": "https://openrouter.ai/api/v1/chat/completions", "method": "POST", "path": "chat/completions", "key_hash": "98d4c330...", "key_balance": 3883554, "has_request_body": true} -{"asctime": "2025-09-04 14:08:03", "name": "routstr.proxy", "levelname": "INFO", "message": "Received upstream response", "pathname": "/app/routstr/proxy.py", "lineno": 303, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "status_code": 200, "path": "chat/completions", "key_hash": "98d4c330...", "content_type": "application/json"} -{"asctime": "2025-09-04 14:08:03", "name": "routstr.proxy", "levelname": "INFO", "message": "Processing non-streaming chat completion", "pathname": "/app/routstr/proxy.py", "lineno": 161, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "key_hash": "98d4c330...", "key_balance": 3883554, "response_status": 200} -{"asctime": "2025-09-04 14:08:03", "name": "routstr.payment.cost_caculation", "levelname": "INFO", "message": "Applied model-specific pricing", "pathname": "/app/routstr/payment/cost_caculation.py", "lineno": 127, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "model": "openai/gpt-4o-mini", "input_price_msats_per_1k": 143.92719309444078, "output_price_msats_per_1k": 575.7087723777631} -{"asctime": "2025-09-04 14:08:03", "name": "routstr.payment.cost_caculation", "levelname": "INFO", "message": "Calculated token-based cost", "pathname": "/app/routstr/payment/cost_caculation.py", "lineno": 153, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "input_tokens": 118, "output_tokens": 5, "input_cost_msats": 16.983, "output_cost_msats": 2.879, "total_cost_msats": 20, "model": "openai/gpt-4o-mini"} -{"asctime": "2025-09-04 14:08:03", "name": "routstr.auth", "levelname": "INFO", "message": "Calculated token-based cost", "pathname": "/app/routstr/auth.py", "lineno": 447, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "key_hash": "98d4c330...", "model": "openai/gpt-4o-mini", "token_cost": 20, "deducted_max_cost": 0, "cost_difference": 20, "input_msats": 16, "output_msats": 2} -{"asctime": "2025-09-04 14:08:03", "name": "routstr.auth", "levelname": "INFO", "message": "Additional charge required for token: [REDACTED]", "pathname": "/app/routstr/auth.py", "lineno": 471, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "key_hash": "98d4c330...", "additional_charge": 20, "current_balance": 3883554, "sufficient_balance": true, "model": "openai/gpt-4o-mini"} -{"asctime": "2025-09-04 14:08:03", "name": "routstr.auth", "levelname": "INFO", "message": "Additional charge applied successfully", "pathname": "/app/routstr/auth.py", "lineno": 513, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "key_hash": "98d4c330...", "charged_amount": 20, "new_balance": 3883534, "total_cost": 20, "model": "openai/gpt-4o-mini"} -{"asctime": "2025-09-04 14:08:03", "name": "routstr.proxy", "levelname": "INFO", "message": "token: [REDACTED] completed for non-streaming", "pathname": "/app/routstr/proxy.py", "lineno": 188, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "key_hash": "98d4c330...", "cost_data": {"base_msats": 0, "input_msats": 16, "output_msats": 2, "total_msats": 20}, "model": "openai/gpt-4o-mini", "balance_after_adjustment": 3883534} -{"asctime": "2025-09-04 14:08:03", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Request completed", "pathname": "/app/routstr/core/middleware.py", "lineno": 86, "version": "0.1.1b", "request_id": "9a5a8186-62b9-4f82-a78d-22c6a0ad99a5", "method": "POST", "path": "/v1/chat/completions", "status_code": 200, "duration_ms": 840.94, "client_host": "172.18.0.1"} -{"asctime": "2025-09-04 14:08:04", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Incoming request", "pathname": "/app/routstr/core/middleware.py", "lineno": 47, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "method": "POST", "path": "/v1/chat/completions", "query_params": {}, "client_host": "172.18.0.1", "headers": {"host": "ai.redsh1ft.com", "x-real-ip": "93.113.215.62", "x-forwarded-for": "93.113.215.62", "x-forwarded-proto": "https", "connection": "close", "content-length": "25651", "content-type": "application/json", "accept": "*/*", "accept-encoding": "gzip, br, zstd, deflate"}, "body_size": 0} -{"asctime": "2025-09-04 14:08:04", "name": "routstr.proxy", "levelname": "INFO", "message": "Received proxy request", "pathname": "/app/routstr/proxy.py", "lineno": 463, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "method": "POST", "path": "v1/chat/completions", "client_host": "172.18.0.1", "user_agent": "unknown"} -{"asctime": "2025-09-04 14:08:04", "name": "routstr.auth", "levelname": "INFO", "message": "Existing sk- API key: [REDACTED]", "pathname": "/app/routstr/auth.py", "lineno": 72, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "key_hash": "98d4c330...", "balance": 3883534, "total_requests": 336} -{"asctime": "2025-09-04 14:08:04", "name": "routstr.proxy", "levelname": "INFO", "message": "token: [REDACTED]: [REDACTED] successfully", "pathname": "/app/routstr/proxy.py", "lineno": 675, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance": 3883534} -{"asctime": "2025-09-04 14:08:04", "name": "routstr.proxy", "levelname": "INFO", "message": "Processing payment for request", "pathname": "/app/routstr/proxy.py", "lineno": 549, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance_before": 3883534, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:04", "name": "routstr.auth", "levelname": "INFO", "message": "Processing payment for request", "pathname": "/app/routstr/auth.py", "lineno": 279, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "key_hash": "98d4c330...", "current_balance": 3883534, "required_cost": 1299489, "sufficient_balance": true} -{"asctime": "2025-09-04 14:08:04", "name": "routstr.auth", "levelname": "INFO", "message": "Payment processed successfully", "pathname": "/app/routstr/auth.py", "lineno": 358, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "key_hash": "98d4c330...", "charged_amount": 1299489, "new_balance": 3883534, "total_spent": 2116466, "total_requests": 337} -{"asctime": "2025-09-04 14:08:04", "name": "routstr.proxy", "levelname": "INFO", "message": "Payment processed successfully", "pathname": "/app/routstr/proxy.py", "lineno": 561, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance_after": 3883534, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:04", "name": "routstr.proxy", "levelname": "INFO", "message": "Forwarding request to upstream", "pathname": "/app/routstr/proxy.py", "lineno": 261, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "url": "https://openrouter.ai/api/v1/chat/completions", "method": "POST", "path": "chat/completions", "key_hash": "98d4c330...", "key_balance": 3883534, "has_request_body": true} -{"asctime": "2025-09-04 14:08:06", "name": "routstr.proxy", "levelname": "INFO", "message": "Received upstream response", "pathname": "/app/routstr/proxy.py", "lineno": 303, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "status_code": 200, "path": "chat/completions", "key_hash": "98d4c330...", "content_type": "text/event-stream"} -{"asctime": "2025-09-04 14:08:06", "name": "routstr.proxy", "levelname": "INFO", "message": "Processing streaming chat completion", "pathname": "/app/routstr/proxy.py", "lineno": 36, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "key_hash": "98d4c330...", "key_balance": 3883534, "response_status": 200} -{"asctime": "2025-09-04 14:08:06", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Request completed", "pathname": "/app/routstr/core/middleware.py", "lineno": 86, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "method": "POST", "path": "/v1/chat/completions", "status_code": 200, "duration_ms": 2542.29, "client_host": "172.18.0.1"} -{"asctime": "2025-09-04 14:08:07", "name": "routstr.proxy", "levelname": "INFO", "message": "Found usage data in streaming response", "pathname": "/app/routstr/proxy.py", "lineno": 89, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "key_hash": "98d4c330...", "usage_data": {"prompt_tokens": 6864, "completion_tokens": 69, "total_tokens": 6933, "cost": 0.021627, "is_byok": false, "prompt_tokens_details": {"cached_tokens": 0, "audio_tokens": 0}, "cost_details": {"upstream_inference_cost": null, "upstream_inference_prompt_cost": 0.020592, "upstream_inference_completions_cost": 0.001035}, "completion_tokens_details": {"reasoning_tokens": 0, "image_tokens": 0}}, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:07", "name": "routstr.payment.cost_caculation", "levelname": "INFO", "message": "Applied model-specific pricing", "pathname": "/app/routstr/payment/cost_caculation.py", "lineno": 127, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "model": "anthropic/claude-sonnet-4", "input_price_msats_per_1k": 2878.543861888816, "output_price_msats_per_1k": 14392.71930944408} -{"asctime": "2025-09-04 14:08:07", "name": "routstr.payment.cost_caculation", "levelname": "INFO", "message": "Calculated token-based cost", "pathname": "/app/routstr/payment/cost_caculation.py", "lineno": 153, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "input_tokens": 6864, "output_tokens": 69, "input_cost_msats": 19758.325, "output_cost_msats": 993.098, "total_cost_msats": 20752, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:07", "name": "routstr.auth", "levelname": "INFO", "message": "Calculated token-based cost", "pathname": "/app/routstr/auth.py", "lineno": 447, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "key_hash": "98d4c330...", "model": "anthropic/claude-sonnet-4", "token_cost": 20752, "deducted_max_cost": 1299489, "cost_difference": -1278737, "input_msats": 19758, "output_msats": 993} -{"asctime": "2025-09-04 14:08:07", "name": "routstr.auth", "levelname": "INFO", "message": "Refunding excess payment", "pathname": "/app/routstr/auth.py", "lineno": 535, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "key_hash": "98d4c330...", "refund_amount": 1278737, "current_balance": 3883534, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:07", "name": "routstr.auth", "levelname": "INFO", "message": "Refund processed successfully", "pathname": "/app/routstr/auth.py", "lineno": 575, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "key_hash": "98d4c330...", "refunded_amount": 1278737, "new_balance": 3862782, "final_cost": 20752, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:07", "name": "routstr.proxy", "levelname": "INFO", "message": "token: [REDACTED] completed for streaming", "pathname": "/app/routstr/proxy.py", "lineno": 113, "version": "0.1.1b", "request_id": "142c8b9a-474f-4c99-957e-2b906a2bfc8e", "key_hash": "98d4c330...", "cost_data": {"base_msats": 0, "input_msats": 19758, "output_msats": 993, "total_msats": 20752}, "balance_after_adjustment": 3862782} -{"asctime": "2025-09-04 14:08:08", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Incoming request", "pathname": "/app/routstr/core/middleware.py", "lineno": 47, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "method": "POST", "path": "/v1/chat/completions", "query_params": {}, "client_host": "172.18.0.1", "headers": {"host": "ai.redsh1ft.com", "x-real-ip": "93.113.215.62", "x-forwarded-for": "93.113.215.62", "x-forwarded-proto": "https", "connection": "close", "content-length": "25882", "content-type": "application/json", "accept": "*/*", "accept-encoding": "gzip, br, zstd, deflate"}, "body_size": 0} -{"asctime": "2025-09-04 14:08:08", "name": "routstr.proxy", "levelname": "INFO", "message": "Received proxy request", "pathname": "/app/routstr/proxy.py", "lineno": 463, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "method": "POST", "path": "v1/chat/completions", "client_host": "172.18.0.1", "user_agent": "unknown"} -{"asctime": "2025-09-04 14:08:08", "name": "routstr.auth", "levelname": "INFO", "message": "Existing sk- API key: [REDACTED]", "pathname": "/app/routstr/auth.py", "lineno": 72, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "key_hash": "98d4c330...", "balance": 3862782, "total_requests": 337} -{"asctime": "2025-09-04 14:08:08", "name": "routstr.proxy", "levelname": "INFO", "message": "token: [REDACTED]: [REDACTED] successfully", "pathname": "/app/routstr/proxy.py", "lineno": 675, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance": 3862782} -{"asctime": "2025-09-04 14:08:08", "name": "routstr.proxy", "levelname": "INFO", "message": "Processing payment for request", "pathname": "/app/routstr/proxy.py", "lineno": 549, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance_before": 3862782, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:08", "name": "routstr.auth", "levelname": "INFO", "message": "Processing payment for request", "pathname": "/app/routstr/auth.py", "lineno": 279, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "key_hash": "98d4c330...", "current_balance": 3862782, "required_cost": 1299489, "sufficient_balance": true} -{"asctime": "2025-09-04 14:08:08", "name": "routstr.auth", "levelname": "INFO", "message": "Payment processed successfully", "pathname": "/app/routstr/auth.py", "lineno": 358, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "key_hash": "98d4c330...", "charged_amount": 1299489, "new_balance": 3862782, "total_spent": 2137218, "total_requests": 338} -{"asctime": "2025-09-04 14:08:08", "name": "routstr.proxy", "levelname": "INFO", "message": "Payment processed successfully", "pathname": "/app/routstr/proxy.py", "lineno": 561, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance_after": 3862782, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:08", "name": "routstr.proxy", "levelname": "INFO", "message": "Forwarding request to upstream", "pathname": "/app/routstr/proxy.py", "lineno": 261, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "url": "https://openrouter.ai/api/v1/chat/completions", "method": "POST", "path": "chat/completions", "key_hash": "98d4c330...", "key_balance": 3862782, "has_request_body": true} -{"asctime": "2025-09-04 14:08:10", "name": "routstr.proxy", "levelname": "INFO", "message": "Received upstream response", "pathname": "/app/routstr/proxy.py", "lineno": 303, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "status_code": 200, "path": "chat/completions", "key_hash": "98d4c330...", "content_type": "text/event-stream"} -{"asctime": "2025-09-04 14:08:10", "name": "routstr.proxy", "levelname": "INFO", "message": "Processing streaming chat completion", "pathname": "/app/routstr/proxy.py", "lineno": 36, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "key_hash": "98d4c330...", "key_balance": 3862782, "response_status": 200} -{"asctime": "2025-09-04 14:08:10", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Request completed", "pathname": "/app/routstr/core/middleware.py", "lineno": 86, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "method": "POST", "path": "/v1/chat/completions", "status_code": 200, "duration_ms": 2479.0, "client_host": "172.18.0.1"} -{"asctime": "2025-09-04 14:08:13", "name": "routstr.proxy", "levelname": "INFO", "message": "Found usage data in streaming response", "pathname": "/app/routstr/proxy.py", "lineno": 89, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "key_hash": "98d4c330...", "usage_data": {"prompt_tokens": 6913, "completion_tokens": 296, "total_tokens": 7209, "cost": 0.025179, "is_byok": false, "prompt_tokens_details": {"cached_tokens": 0, "audio_tokens": 0}, "cost_details": {"upstream_inference_cost": null, "upstream_inference_prompt_cost": 0.020739, "upstream_inference_completions_cost": 0.00444}, "completion_tokens_details": {"reasoning_tokens": 0, "image_tokens": 0}}, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:13", "name": "routstr.payment.cost_caculation", "levelname": "INFO", "message": "Applied model-specific pricing", "pathname": "/app/routstr/payment/cost_caculation.py", "lineno": 127, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "model": "anthropic/claude-sonnet-4", "input_price_msats_per_1k": 2878.2915672307818, "output_price_msats_per_1k": 14391.45783615391} -{"asctime": "2025-09-04 14:08:13", "name": "routstr.payment.cost_caculation", "levelname": "INFO", "message": "Calculated token-based cost", "pathname": "/app/routstr/payment/cost_caculation.py", "lineno": 153, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "input_tokens": 6913, "output_tokens": 296, "input_cost_msats": 19897.63, "output_cost_msats": 4259.872, "total_cost_msats": 24158, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:13", "name": "routstr.auth", "levelname": "INFO", "message": "Calculated token-based cost", "pathname": "/app/routstr/auth.py", "lineno": 447, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "key_hash": "98d4c330...", "model": "anthropic/claude-sonnet-4", "token_cost": 24158, "deducted_max_cost": 1299489, "cost_difference": -1275331, "input_msats": 19897, "output_msats": 4259} -{"asctime": "2025-09-04 14:08:13", "name": "routstr.auth", "levelname": "INFO", "message": "Refunding excess payment", "pathname": "/app/routstr/auth.py", "lineno": 535, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "key_hash": "98d4c330...", "refund_amount": 1275331, "current_balance": 3862782, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:13", "name": "routstr.auth", "levelname": "INFO", "message": "Refund processed successfully", "pathname": "/app/routstr/auth.py", "lineno": 575, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "key_hash": "98d4c330...", "refunded_amount": 1275331, "new_balance": 3838624, "final_cost": 24158, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:13", "name": "routstr.proxy", "levelname": "INFO", "message": "token: [REDACTED] completed for streaming", "pathname": "/app/routstr/proxy.py", "lineno": 113, "version": "0.1.1b", "request_id": "bd9b3c40-983d-49d2-9f60-3077f061fc10", "key_hash": "98d4c330...", "cost_data": {"base_msats": 0, "input_msats": 19897, "output_msats": 4259, "total_msats": 24158}, "balance_after_adjustment": 3838624} -{"asctime": "2025-09-04 14:08:14", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Incoming request", "pathname": "/app/routstr/core/middleware.py", "lineno": 47, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "method": "POST", "path": "/v1/chat/completions", "query_params": {}, "client_host": "172.18.0.1", "headers": {"host": "ai.redsh1ft.com", "x-real-ip": "93.113.215.62", "x-forwarded-for": "93.113.215.62", "x-forwarded-proto": "https", "connection": "close", "content-length": "26674", "content-type": "application/json", "accept": "*/*", "accept-encoding": "gzip, br, zstd, deflate"}, "body_size": 0} -{"asctime": "2025-09-04 14:08:14", "name": "routstr.proxy", "levelname": "INFO", "message": "Received proxy request", "pathname": "/app/routstr/proxy.py", "lineno": 463, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "method": "POST", "path": "v1/chat/completions", "client_host": "172.18.0.1", "user_agent": "unknown"} -{"asctime": "2025-09-04 14:08:14", "name": "routstr.auth", "levelname": "INFO", "message": "Existing sk- API key: [REDACTED]", "pathname": "/app/routstr/auth.py", "lineno": 72, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "key_hash": "98d4c330...", "balance": 3838624, "total_requests": 338} -{"asctime": "2025-09-04 14:08:14", "name": "routstr.proxy", "levelname": "INFO", "message": "token: [REDACTED]: [REDACTED] successfully", "pathname": "/app/routstr/proxy.py", "lineno": 675, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance": 3838624} -{"asctime": "2025-09-04 14:08:14", "name": "routstr.proxy", "levelname": "INFO", "message": "Processing payment for request", "pathname": "/app/routstr/proxy.py", "lineno": 549, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance_before": 3838624, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:14", "name": "routstr.auth", "levelname": "INFO", "message": "Processing payment for request", "pathname": "/app/routstr/auth.py", "lineno": 279, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "key_hash": "98d4c330...", "current_balance": 3838624, "required_cost": 1299375, "sufficient_balance": true} -{"asctime": "2025-09-04 14:08:14", "name": "routstr.auth", "levelname": "INFO", "message": "Payment processed successfully", "pathname": "/app/routstr/auth.py", "lineno": 358, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "key_hash": "98d4c330...", "charged_amount": 1299375, "new_balance": 3838624, "total_spent": 2161376, "total_requests": 339} -{"asctime": "2025-09-04 14:08:14", "name": "routstr.proxy", "levelname": "INFO", "message": "Payment processed successfully", "pathname": "/app/routstr/proxy.py", "lineno": 561, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance_after": 3838624, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:14", "name": "routstr.proxy", "levelname": "INFO", "message": "Forwarding request to upstream", "pathname": "/app/routstr/proxy.py", "lineno": 261, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "url": "https://openrouter.ai/api/v1/chat/completions", "method": "POST", "path": "chat/completions", "key_hash": "98d4c330...", "key_balance": 3838624, "has_request_body": true} -{"asctime": "2025-09-04 14:08:16", "name": "routstr.proxy", "levelname": "INFO", "message": "Received upstream response", "pathname": "/app/routstr/proxy.py", "lineno": 303, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "status_code": 200, "path": "chat/completions", "key_hash": "98d4c330...", "content_type": "text/event-stream"} -{"asctime": "2025-09-04 14:08:16", "name": "routstr.proxy", "levelname": "INFO", "message": "Processing streaming chat completion", "pathname": "/app/routstr/proxy.py", "lineno": 36, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "key_hash": "98d4c330...", "key_balance": 3838624, "response_status": 200} -{"asctime": "2025-09-04 14:08:16", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Request completed", "pathname": "/app/routstr/core/middleware.py", "lineno": 86, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "method": "POST", "path": "/v1/chat/completions", "status_code": 200, "duration_ms": 2096.41, "client_host": "172.18.0.1"} -{"asctime": "2025-09-04 14:08:17", "name": "routstr.proxy", "levelname": "INFO", "message": "Found usage data in streaming response", "pathname": "/app/routstr/proxy.py", "lineno": 89, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "key_hash": "98d4c330...", "usage_data": {"prompt_tokens": 7226, "completion_tokens": 142, "total_tokens": 7368, "cost": 0.023808, "is_byok": false, "prompt_tokens_details": {"cached_tokens": 0, "audio_tokens": 0}, "cost_details": {"upstream_inference_cost": null, "upstream_inference_prompt_cost": 0.021678, "upstream_inference_completions_cost": 0.00213}, "completion_tokens_details": {"reasoning_tokens": 0, "image_tokens": 0}}, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:17", "name": "routstr.payment.cost_caculation", "levelname": "INFO", "message": "Applied model-specific pricing", "pathname": "/app/routstr/payment/cost_caculation.py", "lineno": 127, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "model": "anthropic/claude-sonnet-4", "input_price_msats_per_1k": 2878.2915672307818, "output_price_msats_per_1k": 14391.45783615391} -{"asctime": "2025-09-04 14:08:17", "name": "routstr.payment.cost_caculation", "levelname": "INFO", "message": "Calculated token-based cost", "pathname": "/app/routstr/payment/cost_caculation.py", "lineno": 153, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "input_tokens": 7226, "output_tokens": 142, "input_cost_msats": 20798.535, "output_cost_msats": 2043.587, "total_cost_msats": 22843, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:17", "name": "routstr.auth", "levelname": "INFO", "message": "Calculated token-based cost", "pathname": "/app/routstr/auth.py", "lineno": 447, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "key_hash": "98d4c330...", "model": "anthropic/claude-sonnet-4", "token_cost": 22843, "deducted_max_cost": 1299375, "cost_difference": -1276532, "input_msats": 20798, "output_msats": 2043} -{"asctime": "2025-09-04 14:08:17", "name": "routstr.auth", "levelname": "INFO", "message": "Refunding excess payment", "pathname": "/app/routstr/auth.py", "lineno": 535, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "key_hash": "98d4c330...", "refund_amount": 1276532, "current_balance": 3838624, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:18", "name": "routstr.auth", "levelname": "INFO", "message": "Refund processed successfully", "pathname": "/app/routstr/auth.py", "lineno": 575, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "key_hash": "98d4c330...", "refunded_amount": 1276532, "new_balance": 3815781, "final_cost": 22843, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:18", "name": "routstr.proxy", "levelname": "INFO", "message": "token: [REDACTED] completed for streaming", "pathname": "/app/routstr/proxy.py", "lineno": 113, "version": "0.1.1b", "request_id": "a6f0fc6d-ae2a-48d7-b1aa-95cb98bb19d1", "key_hash": "98d4c330...", "cost_data": {"base_msats": 0, "input_msats": 20798, "output_msats": 2043, "total_msats": 22843}, "balance_after_adjustment": 3815781} -{"asctime": "2025-09-04 14:08:19", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Incoming request", "pathname": "/app/routstr/core/middleware.py", "lineno": 47, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "method": "POST", "path": "/v1/chat/completions", "query_params": {}, "client_host": "172.18.0.1", "headers": {"host": "ai.redsh1ft.com", "x-real-ip": "93.113.215.62", "x-forwarded-for": "93.113.215.62", "x-forwarded-proto": "https", "connection": "close", "content-length": "27130", "content-type": "application/json", "accept": "*/*", "accept-encoding": "gzip, br, zstd, deflate"}, "body_size": 0} -{"asctime": "2025-09-04 14:08:19", "name": "routstr.proxy", "levelname": "INFO", "message": "Received proxy request", "pathname": "/app/routstr/proxy.py", "lineno": 463, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "method": "POST", "path": "v1/chat/completions", "client_host": "172.18.0.1", "user_agent": "unknown"} -{"asctime": "2025-09-04 14:08:19", "name": "routstr.auth", "levelname": "INFO", "message": "Existing sk- API key: [REDACTED]", "pathname": "/app/routstr/auth.py", "lineno": 72, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "key_hash": "98d4c330...", "balance": 3815781, "total_requests": 339} -{"asctime": "2025-09-04 14:08:19", "name": "routstr.proxy", "levelname": "INFO", "message": "token: [REDACTED]: [REDACTED] successfully", "pathname": "/app/routstr/proxy.py", "lineno": 675, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance": 3815781} -{"asctime": "2025-09-04 14:08:19", "name": "routstr.proxy", "levelname": "INFO", "message": "Processing payment for request", "pathname": "/app/routstr/proxy.py", "lineno": 549, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance_before": 3815781, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:19", "name": "routstr.auth", "levelname": "INFO", "message": "Processing payment for request", "pathname": "/app/routstr/auth.py", "lineno": 279, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "key_hash": "98d4c330...", "current_balance": 3815781, "required_cost": 1299375, "sufficient_balance": true} -{"asctime": "2025-09-04 14:08:19", "name": "routstr.auth", "levelname": "INFO", "message": "Payment processed successfully", "pathname": "/app/routstr/auth.py", "lineno": 358, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "key_hash": "98d4c330...", "charged_amount": 1299375, "new_balance": 3815781, "total_spent": 2184219, "total_requests": 340} -{"asctime": "2025-09-04 14:08:19", "name": "routstr.proxy", "levelname": "INFO", "message": "Payment processed successfully", "pathname": "/app/routstr/proxy.py", "lineno": 561, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance_after": 3815781, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:19", "name": "routstr.proxy", "levelname": "INFO", "message": "Forwarding request to upstream", "pathname": "/app/routstr/proxy.py", "lineno": 261, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "url": "https://openrouter.ai/api/v1/chat/completions", "method": "POST", "path": "chat/completions", "key_hash": "98d4c330...", "key_balance": 3815781, "has_request_body": true} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.proxy", "levelname": "INFO", "message": "Received upstream response", "pathname": "/app/routstr/proxy.py", "lineno": 303, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "status_code": 200, "path": "chat/completions", "key_hash": "98d4c330...", "content_type": "text/event-stream"} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.proxy", "levelname": "INFO", "message": "Processing streaming chat completion", "pathname": "/app/routstr/proxy.py", "lineno": 36, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "key_hash": "98d4c330...", "key_balance": 3815781, "response_status": 200} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Request completed", "pathname": "/app/routstr/core/middleware.py", "lineno": 86, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "method": "POST", "path": "/v1/chat/completions", "status_code": 200, "duration_ms": 2804.49, "client_host": "172.18.0.1"} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.proxy", "levelname": "INFO", "message": "Found usage data in streaming response", "pathname": "/app/routstr/proxy.py", "lineno": 89, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "key_hash": "98d4c330...", "usage_data": {"prompt_tokens": 7406, "completion_tokens": 105, "total_tokens": 7511, "cost": 0.023793, "is_byok": false, "prompt_tokens_details": {"cached_tokens": 0, "audio_tokens": 0}, "cost_details": {"upstream_inference_cost": null, "upstream_inference_prompt_cost": 0.022218, "upstream_inference_completions_cost": 0.001575}, "completion_tokens_details": {"reasoning_tokens": 0, "image_tokens": 0}}, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.payment.cost_caculation", "levelname": "INFO", "message": "Applied model-specific pricing", "pathname": "/app/routstr/payment/cost_caculation.py", "lineno": 127, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "model": "anthropic/claude-sonnet-4", "input_price_msats_per_1k": 2878.9858767133815, "output_price_msats_per_1k": 14394.929383566907} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.payment.cost_caculation", "levelname": "INFO", "message": "Calculated token-based cost", "pathname": "/app/routstr/payment/cost_caculation.py", "lineno": 153, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "input_tokens": 7406, "output_tokens": 105, "input_cost_msats": 21321.769, "output_cost_msats": 1511.468, "total_cost_msats": 22834, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.auth", "levelname": "INFO", "message": "Calculated token-based cost", "pathname": "/app/routstr/auth.py", "lineno": 447, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "key_hash": "98d4c330...", "model": "anthropic/claude-sonnet-4", "token_cost": 22834, "deducted_max_cost": 1299375, "cost_difference": -1276541, "input_msats": 21321, "output_msats": 1511} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.auth", "levelname": "INFO", "message": "Refunding excess payment", "pathname": "/app/routstr/auth.py", "lineno": 535, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "key_hash": "98d4c330...", "refund_amount": 1276541, "current_balance": 3815781, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.auth", "levelname": "INFO", "message": "Refund processed successfully", "pathname": "/app/routstr/auth.py", "lineno": 575, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "key_hash": "98d4c330...", "refunded_amount": 1276541, "new_balance": 3792947, "final_cost": 22834, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.proxy", "levelname": "INFO", "message": "token: [REDACTED] completed for streaming", "pathname": "/app/routstr/proxy.py", "lineno": 113, "version": "0.1.1b", "request_id": "1d47de41-639e-45e0-9c72-9483677ac3f7", "key_hash": "98d4c330...", "cost_data": {"base_msats": 0, "input_msats": 21321, "output_msats": 1511, "total_msats": 22834}, "balance_after_adjustment": 3792947} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Incoming request", "pathname": "/app/routstr/core/middleware.py", "lineno": 47, "version": "0.1.1b", "request_id": "fe77405e-c0fe-498c-801a-ae6aa5a61fd0", "method": "POST", "path": "/v1/chat/completions", "query_params": {}, "client_host": "172.18.0.1", "headers": {"host": "ai.redsh1ft.com", "x-real-ip": "93.113.215.62", "x-forwarded-for": "93.113.215.62", "x-forwarded-proto": "https", "connection": "close", "content-length": "27484", "content-type": "application/json", "accept": "*/*", "accept-encoding": "gzip, br, zstd, deflate"}, "body_size": 0} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.proxy", "levelname": "INFO", "message": "Received proxy request", "pathname": "/app/routstr/proxy.py", "lineno": 463, "version": "0.1.1b", "request_id": "fe77405e-c0fe-498c-801a-ae6aa5a61fd0", "method": "POST", "path": "v1/chat/completions", "client_host": "172.18.0.1", "user_agent": "unknown"} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.auth", "levelname": "INFO", "message": "Existing sk- API key: [REDACTED]", "pathname": "/app/routstr/auth.py", "lineno": 72, "version": "0.1.1b", "request_id": "fe77405e-c0fe-498c-801a-ae6aa5a61fd0", "key_hash": "98d4c330...", "balance": 3792947, "total_requests": 340} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.proxy", "levelname": "INFO", "message": "token: [REDACTED]: [REDACTED] successfully", "pathname": "/app/routstr/proxy.py", "lineno": 675, "version": "0.1.1b", "request_id": "fe77405e-c0fe-498c-801a-ae6aa5a61fd0", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance": 3792947} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.proxy", "levelname": "INFO", "message": "Processing payment for request", "pathname": "/app/routstr/proxy.py", "lineno": 549, "version": "0.1.1b", "request_id": "fe77405e-c0fe-498c-801a-ae6aa5a61fd0", "path": "v1/chat/completions", "key_hash": "98d4c330...", "key_balance_before": 3792947, "model": "anthropic/claude-sonnet-4"} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.auth", "levelname": "INFO", "message": "Processing payment for request", "pathname": "/app/routstr/auth.py", "lineno": 279, "version": "0.1.1b", "request_id": "fe77405e-c0fe-498c-801a-ae6aa5a61fd0", "key_hash": "98d4c330...", "current_balance": 3792947, "required_cost": 1299689, "sufficient_balance": true} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.auth", "levelname": "WARNING", "message": "Insufficient balance for request", "pathname": "/app/routstr/auth.py", "lineno": 290, "version": "0.1.1b", "request_id": "fe77405e-c0fe-498c-801a-ae6aa5a61fd0", "key_hash": "98d4c330...", "balance": 3792947, "reserved_balance": 2508374, "required": 1299689, "shortfall": 15116} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.proxy", "levelname": "ERROR", "message": "Payment processing failed", "pathname": "/app/routstr/proxy.py", "lineno": 571, "version": "0.1.1b", "request_id": "fe77405e-c0fe-498c-801a-ae6aa5a61fd0", "error": "402: {'error': {'message': 'Insufficient balance: 1299689 mSats required. 1284573 available. (reserved: 2508374)', 'type': 'insufficient_quota', 'code': 'insufficient_balance'}}", "error_type": "HTTPException", "path": "v1/chat/completions", "key_hash": "98d4c330..."} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.core.exceptions", "levelname": "WARNING", "message": "HTTP exception", "pathname": "/app/routstr/core/exceptions.py", "lineno": 17, "version": "0.1.1b", "request_id": "fe77405e-c0fe-498c-801a-ae6aa5a61fd0", "status_code": 402, "detail": {"error": {"message": "Insufficient balance: 1299689 mSats required. 1284573 available. (reserved: 2508374)", "type": "insufficient_quota", "code": "insufficient_balance"}}, "path": "/v1/chat/completions"} -{"asctime": "2025-09-04 14:08:22", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Request completed", "pathname": "/app/routstr/core/middleware.py", "lineno": 86, "version": "0.1.1b", "request_id": "fe77405e-c0fe-498c-801a-ae6aa5a61fd0", "method": "POST", "path": "/v1/chat/completions", "status_code": 402, "duration_ms": 33.46, "client_host": "172.18.0.1"} -{"asctime": "2025-09-04 14:08:38", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Incoming request", "pathname": "/app/routstr/core/middleware.py", "lineno": 47, "version": "0.1.1b", "request_id": "aa0f8d89-f42d-4f38-b680-325bc1eca569", "method": "OPTIONS", "path": "/v1/wallet/info", "query_params": {}, "client_host": "172.18.0.1", "headers": {"host": "ai.redsh1ft.com", "x-real-ip": "185.209.196.248", "x-forwarded-for": "185.209.196.248", "x-forwarded-proto": "https", "connection": "close", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0", "accept": "*/*", "accept-language": "en-US,en;q=0.5", "accept-encoding": "gzip, deflate, br, zstd", "access-control-request-method": "GET", "access-control-request-headers": "authorization", "referer": "https://chat.routstr.com/", "origin": "https://chat.routstr.com", "dnt": "1", "sec-gpc": "1", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "cross-site", "priority": "u=4"}, "body_size": 0} -{"asctime": "2025-09-04 14:08:38", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Request completed", "pathname": "/app/routstr/core/middleware.py", "lineno": 86, "version": "0.1.1b", "request_id": "aa0f8d89-f42d-4f38-b680-325bc1eca569", "method": "OPTIONS", "path": "/v1/wallet/info", "status_code": 200, "duration_ms": 2.31, "client_host": "172.18.0.1"} -{"asctime": "2025-09-04 14:08:38", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Incoming request", "pathname": "/app/routstr/core/middleware.py", "lineno": 47, "version": "0.1.1b", "request_id": "4b1f47bd-a813-4024-a87e-f0e57b2bd247", "method": "GET", "path": "/v1/wallet/info", "query_params": {}, "client_host": "172.18.0.1", "headers": {"host": "ai.redsh1ft.com", "x-real-ip": "185.209.196.248", "x-forwarded-for": "185.209.196.248", "x-forwarded-proto": "https", "connection": "close", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0", "accept": "*/*", "accept-language": "en-US,en;q=0.5", "accept-encoding": "gzip, deflate, br, zstd", "referer": "https://chat.routstr.com/", "origin": "https://chat.routstr.com", "dnt": "1", "sec-gpc": "1", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "cross-site", "priority": "u=0"}, "body_size": 0} -{"asctime": "2025-09-04 14:08:38", "name": "routstr.auth", "levelname": "INFO", "message": "Existing sk- API key: [REDACTED]", "pathname": "/app/routstr/auth.py", "lineno": 72, "version": "0.1.1b", "request_id": "4b1f47bd-a813-4024-a87e-f0e57b2bd247", "key_hash": "e1129de6...", "balance": 131636.79653060454, "total_requests": 32} -{"asctime": "2025-09-04 14:08:38", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Request completed", "pathname": "/app/routstr/core/middleware.py", "lineno": 86, "version": "0.1.1b", "request_id": "4b1f47bd-a813-4024-a87e-f0e57b2bd247", "method": "GET", "path": "/v1/wallet/info", "status_code": 200, "duration_ms": 13.76, "client_host": "172.18.0.1"} -{"asctime": "2025-09-04 14:08:38", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Incoming request", "pathname": "/app/routstr/core/middleware.py", "lineno": 47, "version": "0.1.1b", "request_id": "0ffc1a37-4558-4a28-80b2-76476ad12f36", "method": "GET", "path": "/v1/wallet/info", "query_params": {}, "client_host": "172.18.0.1", "headers": {"host": "ai.redsh1ft.com", "x-real-ip": "185.209.196.248", "x-forwarded-for": "185.209.196.248", "x-forwarded-proto": "https", "connection": "close", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0", "accept": "*/*", "accept-language": "en-US,en;q=0.5", "accept-encoding": "gzip, deflate, br, zstd", "referer": "https://chat.routstr.com/", "origin": "https://chat.routstr.com", "dnt": "1", "sec-gpc": "1", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "cross-site", "priority": "u=4"}, "body_size": 0} -{"asctime": "2025-09-04 14:08:38", "name": "routstr.auth", "levelname": "INFO", "message": "Existing Cashu token: [REDACTED]", "pathname": "/app/routstr/auth.py", "lineno": 127, "version": "0.1.1b", "request_id": "0ffc1a37-4558-4a28-80b2-76476ad12f36", "key_hash": "0553ba5f...", "balance": 46262, "total_requests": 592} -{"asctime": "2025-09-04 14:08:38", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Request completed", "pathname": "/app/routstr/core/middleware.py", "lineno": 86, "version": "0.1.1b", "request_id": "0ffc1a37-4558-4a28-80b2-76476ad12f36", "method": "GET", "path": "/v1/wallet/info", "status_code": 200, "duration_ms": 13.51, "client_host": "172.18.0.1"} -{"asctime": "2025-09-04 14:08:42", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Incoming request", "pathname": "/app/routstr/core/middleware.py", "lineno": 47, "version": "0.1.1b", "request_id": "43cf8a96-dcf4-4c06-b29d-68f234fc61e4", "method": "GET", "path": "/v1/wallet/info", "query_params": {}, "client_host": "172.18.0.1", "headers": {"host": "ai.redsh1ft.com", "x-real-ip": "185.209.196.248", "x-forwarded-for": "185.209.196.248", "x-forwarded-proto": "https", "connection": "close", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0", "accept": "*/*", "accept-language": "en-US,en;q=0.5", "accept-encoding": "gzip, deflate, br, zstd", "referer": "https://chat.routstr.com/", "origin": "https://chat.routstr.com", "dnt": "1", "sec-gpc": "1", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "cross-site", "priority": "u=4"}, "body_size": 0} -{"asctime": "2025-09-04 14:08:42", "name": "routstr.auth", "levelname": "INFO", "message": "Existing sk- API key: [REDACTED]", "pathname": "/app/routstr/auth.py", "lineno": 72, "version": "0.1.1b", "request_id": "43cf8a96-dcf4-4c06-b29d-68f234fc61e4", "key_hash": "98d4c330...", "balance": 3792947, "total_requests": 340} -{"asctime": "2025-09-04 14:08:42", "name": "routstr.core.middleware", "levelname": "INFO", "message": "Request completed", "pathname": "/app/routstr/core/middleware.py", "lineno": 86, "version": "0.1.1b", "request_id": "43cf8a96-dcf4-4c06-b29d-68f234fc61e4", "method": "GET", "path": "/v1/wallet/info", "status_code": 200, "duration_ms": 11.4, "client_host": "172.18.0.1"}