add debug-raw

This commit is contained in:
2026-08-12 15:24:15 +07:00
parent 1aaf5028ff
commit ffe36aa28f
+82
View File
@@ -482,6 +482,83 @@ def debug_collect():
client.close()
def debug_raw(count=10, filter_str=""):
"""Print raw payloads from the queue without writing to DB — useful for debugging providers like Grok/xAI."""
import select as _select
cfg = load_config()
channel = cfg.get("queue_channel", "usage")
print(f"[debug-raw] Config: {cfg}", flush=True)
print(f"[debug-raw] Connecting to {cfg['cliproxy_host']}:{cfg['cliproxy_port']} ...", flush=True)
print(f"[debug-raw] Will collect up to {count} events" + (f" matching '{filter_str}'" if filter_str else ""), flush=True)
try:
client = RespClient(cfg["cliproxy_host"], cfg["cliproxy_port"], cfg["management_key"])
except Exception as e:
print(f"[debug-raw] Connection FAILED: {e}", file=sys.stderr, flush=True)
return
print("[debug-raw] AUTH OK", flush=True)
try:
reply = client.subscribe(channel)
print(f"[debug-raw] SUBSCRIBE {channel!r}{reply}", flush=True)
print(f"[debug-raw] Waiting for events from CLIProxy (timeout 30s)...", flush=True)
client.sock.settimeout(None)
received = 0
shown = 0
deadline = time.time() + 30
while shown < count:
remaining = deadline - time.time()
if remaining <= 0:
print(f"[debug-raw] Timeout — received {received} events, shown {shown} matching events.", flush=True)
if shown == 0:
print("[debug-raw] No matching events received. Make a request through CLIProxy and try again.", flush=True)
break
readable, _, _ = _select.select([client.sock], [], [], remaining)
if not readable:
print(f"[debug-raw] Timeout — received {received} events, shown {shown} matching events.", flush=True)
if shown == 0:
print("[debug-raw] No matching events received. Make a request through CLIProxy and try again.", flush=True)
break
data = client.read_message()
if data is None:
continue
# Skip heartbeat
try:
obj = json.loads(data)
if isinstance(obj, dict) and set(obj.keys()) == {"support_refresh"}:
continue
except Exception:
pass
received += 1
# Apply filter
if filter_str:
try:
payload = json.loads(data)
provider = payload.get("provider", "")
model = payload.get("model", "")
if filter_str.lower() not in provider.lower() and filter_str.lower() not in model.lower():
continue
except Exception:
pass
shown += 1
print(f"\n[debug-raw] ===== Event {shown}/{count} (total received: {received}) =====", flush=True)
print(data, flush=True)
try:
payload = json.loads(data)
print(f"[debug-raw] Parsed keys: {list(payload.keys())}", flush=True)
print(f"[debug-raw] provider={payload.get('provider')} model={payload.get('model')} source={payload.get('source')}", flush=True)
tokens = payload.get("tokens")
if tokens:
print(f"[debug-raw] tokens={tokens}", flush=True)
except Exception as e:
print(f"[debug-raw] JSON parse error: {e}", file=sys.stderr, flush=True)
if shown == 0:
print("[debug-raw] No matching events received.", flush=True)
else:
print(f"\n[debug-raw] Finished — showed {shown} matching event(s) out of {received} total ✅", flush=True)
finally:
client.close()
def collect_forever():
init_db()
cfg = load_config()
@@ -833,6 +910,9 @@ def main():
sub.add_parser("init", help="Initialise database and config")
sub.add_parser("collect", help="Run collector loop (foreground)")
sub.add_parser("debug", help="Test one poll cycle, print raw queue items (no DB write)")
debug_raw_p = sub.add_parser("debug-raw", help="Print raw payloads from queue (no DB write) — useful for Grok/xAI debugging")
debug_raw_p.add_argument("--count", type=int, default=10, help="Number of events to show")
debug_raw_p.add_argument("--filter", default="", help="Filter by provider/model substring")
sub.add_parser("serve", help="Run HTTP server only (no collector)")
start_p = sub.add_parser("start", help="Init + collect + serve in one command (recommended)")
start_p.add_argument("--no-browser", action="store_true", help="Do not open browser automatically")
@@ -849,6 +929,8 @@ def main():
collect_forever()
elif args.cmd == "debug":
debug_collect()
elif args.cmd == "debug-raw":
debug_raw(args.count, args.filter)
elif args.cmd == "serve":
serve()
elif args.cmd == "start":