ccproxy-api 0.1.5__py3-none-any.whl → 0.1.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. ccproxy/_version.py +2 -2
  2. ccproxy/adapters/codex/__init__.py +11 -0
  3. ccproxy/adapters/openai/models.py +1 -1
  4. ccproxy/adapters/openai/response_adapter.py +355 -0
  5. ccproxy/adapters/openai/response_models.py +178 -0
  6. ccproxy/api/app.py +31 -3
  7. ccproxy/api/dependencies.py +1 -8
  8. ccproxy/api/middleware/errors.py +15 -7
  9. ccproxy/api/routes/codex.py +1251 -0
  10. ccproxy/api/routes/health.py +228 -3
  11. ccproxy/auth/openai/__init__.py +13 -0
  12. ccproxy/auth/openai/credentials.py +166 -0
  13. ccproxy/auth/openai/oauth_client.py +334 -0
  14. ccproxy/auth/openai/storage.py +184 -0
  15. ccproxy/claude_sdk/options.py +1 -1
  16. ccproxy/cli/commands/auth.py +398 -1
  17. ccproxy/cli/commands/serve.py +3 -1
  18. ccproxy/config/claude.py +1 -1
  19. ccproxy/config/codex.py +100 -0
  20. ccproxy/config/scheduler.py +8 -8
  21. ccproxy/config/settings.py +19 -0
  22. ccproxy/core/codex_transformers.py +389 -0
  23. ccproxy/core/http_transformers.py +153 -2
  24. ccproxy/data/claude_headers_fallback.json +37 -0
  25. ccproxy/data/codex_headers_fallback.json +14 -0
  26. ccproxy/models/detection.py +82 -0
  27. ccproxy/models/requests.py +22 -0
  28. ccproxy/models/responses.py +16 -0
  29. ccproxy/scheduler/manager.py +2 -2
  30. ccproxy/scheduler/tasks.py +105 -65
  31. ccproxy/services/claude_detection_service.py +7 -33
  32. ccproxy/services/codex_detection_service.py +252 -0
  33. ccproxy/services/proxy_service.py +530 -0
  34. ccproxy/utils/model_mapping.py +7 -5
  35. ccproxy/utils/startup_helpers.py +205 -12
  36. ccproxy/utils/version_checker.py +6 -0
  37. ccproxy_api-0.1.7.dist-info/METADATA +615 -0
  38. {ccproxy_api-0.1.5.dist-info → ccproxy_api-0.1.7.dist-info}/RECORD +41 -28
  39. ccproxy_api-0.1.5.dist-info/METADATA +0 -396
  40. {ccproxy_api-0.1.5.dist-info → ccproxy_api-0.1.7.dist-info}/WHEEL +0 -0
  41. {ccproxy_api-0.1.5.dist-info → ccproxy_api-0.1.7.dist-info}/entry_points.txt +0 -0
  42. {ccproxy_api-0.1.5.dist-info → ccproxy_api-0.1.7.dist-info}/licenses/LICENSE +0 -0
@@ -583,13 +583,16 @@ def setup_error_handlers(app: FastAPI) -> None:
583
583
  ):
584
584
  request.state.context.metadata["status_code"] = exc.status_code
585
585
 
586
- # Don't log stack trace for 404 errors as they're expected
587
- if exc.status_code == 404:
588
- logger.debug(
589
- "HTTP 404 error",
590
- error_type="http_404",
586
+ # Don't log stack trace for expected errors (404, 401)
587
+ if exc.status_code in (404, 401):
588
+ log_level = "debug" if exc.status_code == 404 else "warning"
589
+ log_func = logger.debug if exc.status_code == 404 else logger.warning
590
+
591
+ log_func(
592
+ f"HTTP {exc.status_code} error",
593
+ error_type=f"http_{exc.status_code}",
591
594
  error_message=exc.detail,
592
- status_code=404,
595
+ status_code=exc.status_code,
593
596
  request_method=request.method,
594
597
  request_url=str(request.url.path),
595
598
  )
@@ -613,7 +616,12 @@ def setup_error_handlers(app: FastAPI) -> None:
613
616
 
614
617
  # Record error in metrics
615
618
  if metrics:
616
- error_type = "http_404" if exc.status_code == 404 else "http_error"
619
+ if exc.status_code == 404:
620
+ error_type = "http_404"
621
+ elif exc.status_code == 401:
622
+ error_type = "http_401"
623
+ else:
624
+ error_type = "http_error"
617
625
  metrics.record_error(
618
626
  error_type=error_type,
619
627
  endpoint=str(request.url.path),