ccproxy-api 0.1.4__py3-none-any.whl → 0.1.6__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.
- ccproxy/_version.py +2 -2
- ccproxy/adapters/codex/__init__.py +11 -0
- ccproxy/adapters/openai/adapter.py +1 -1
- ccproxy/adapters/openai/models.py +1 -1
- ccproxy/adapters/openai/response_adapter.py +355 -0
- ccproxy/adapters/openai/response_models.py +178 -0
- ccproxy/adapters/openai/streaming.py +1 -0
- ccproxy/api/app.py +150 -224
- ccproxy/api/dependencies.py +22 -2
- ccproxy/api/middleware/errors.py +27 -3
- ccproxy/api/middleware/logging.py +4 -0
- ccproxy/api/responses.py +6 -1
- ccproxy/api/routes/claude.py +222 -17
- ccproxy/api/routes/codex.py +1231 -0
- ccproxy/api/routes/health.py +228 -3
- ccproxy/api/routes/proxy.py +25 -6
- ccproxy/api/services/permission_service.py +2 -2
- ccproxy/auth/openai/__init__.py +13 -0
- ccproxy/auth/openai/credentials.py +166 -0
- ccproxy/auth/openai/oauth_client.py +334 -0
- ccproxy/auth/openai/storage.py +184 -0
- ccproxy/claude_sdk/__init__.py +4 -8
- ccproxy/claude_sdk/client.py +661 -131
- ccproxy/claude_sdk/exceptions.py +16 -0
- ccproxy/claude_sdk/manager.py +219 -0
- ccproxy/claude_sdk/message_queue.py +342 -0
- ccproxy/claude_sdk/options.py +6 -1
- ccproxy/claude_sdk/session_client.py +546 -0
- ccproxy/claude_sdk/session_pool.py +550 -0
- ccproxy/claude_sdk/stream_handle.py +538 -0
- ccproxy/claude_sdk/stream_worker.py +392 -0
- ccproxy/claude_sdk/streaming.py +53 -11
- ccproxy/cli/commands/auth.py +398 -1
- ccproxy/cli/commands/serve.py +99 -1
- ccproxy/cli/options/claude_options.py +47 -0
- ccproxy/config/__init__.py +0 -3
- ccproxy/config/claude.py +171 -23
- ccproxy/config/codex.py +100 -0
- ccproxy/config/discovery.py +10 -1
- ccproxy/config/scheduler.py +2 -2
- ccproxy/config/settings.py +38 -1
- ccproxy/core/codex_transformers.py +389 -0
- ccproxy/core/http_transformers.py +458 -75
- ccproxy/core/logging.py +108 -12
- ccproxy/core/transformers.py +5 -0
- ccproxy/models/claude_sdk.py +57 -0
- ccproxy/models/detection.py +208 -0
- ccproxy/models/requests.py +22 -0
- ccproxy/models/responses.py +16 -0
- ccproxy/observability/access_logger.py +72 -14
- ccproxy/observability/metrics.py +151 -0
- ccproxy/observability/storage/duckdb_simple.py +12 -0
- ccproxy/observability/storage/models.py +16 -0
- ccproxy/observability/streaming_response.py +107 -0
- ccproxy/scheduler/manager.py +31 -6
- ccproxy/scheduler/tasks.py +122 -0
- ccproxy/services/claude_detection_service.py +269 -0
- ccproxy/services/claude_sdk_service.py +333 -130
- ccproxy/services/codex_detection_service.py +263 -0
- ccproxy/services/proxy_service.py +618 -197
- ccproxy/utils/__init__.py +9 -1
- ccproxy/utils/disconnection_monitor.py +83 -0
- ccproxy/utils/id_generator.py +12 -0
- ccproxy/utils/model_mapping.py +7 -5
- ccproxy/utils/startup_helpers.py +470 -0
- ccproxy_api-0.1.6.dist-info/METADATA +615 -0
- {ccproxy_api-0.1.4.dist-info → ccproxy_api-0.1.6.dist-info}/RECORD +70 -47
- ccproxy/config/loader.py +0 -105
- ccproxy_api-0.1.4.dist-info/METADATA +0 -369
- {ccproxy_api-0.1.4.dist-info → ccproxy_api-0.1.6.dist-info}/WHEEL +0 -0
- {ccproxy_api-0.1.4.dist-info → ccproxy_api-0.1.6.dist-info}/entry_points.txt +0 -0
- {ccproxy_api-0.1.4.dist-info → ccproxy_api-0.1.6.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,34 +1,38 @@
|
|
|
1
1
|
ccproxy/__init__.py,sha256=VrtzUTUA8MwpYqFJAiwKLPxRdMRc7UOzFi2VB_1W9qw,62
|
|
2
2
|
ccproxy/__main__.py,sha256=kcejcfzAaMnFiSxEiVtNl-_TwynpntkupRxqG5XR15s,116
|
|
3
|
-
ccproxy/_version.py,sha256=
|
|
3
|
+
ccproxy/_version.py,sha256=ESbJO0YD7TYfOUv_WDIJJgWELGepEWsoyhqVifEcXPA,511
|
|
4
4
|
ccproxy/adapters/__init__.py,sha256=CMr5MPIFigfazoXfhyD2eLqBrutzaSzBaEi8u2i9xJQ,206
|
|
5
5
|
ccproxy/adapters/base.py,sha256=aufx8ho9LhF0kmTsCvw1a9K3lk5YyYymJV8h_wt5TpU,2191
|
|
6
|
+
ccproxy/adapters/codex/__init__.py,sha256=gwpdJeOfwthwnQWuoHmrOGEY-ntTOF5T6sRY97Si2ks,235
|
|
6
7
|
ccproxy/adapters/openai/__init__.py,sha256=CEOtyALpgaq6XT6upZKt0u_ilvnXIyH9K2hFXZJ-hOY,1063
|
|
7
|
-
ccproxy/adapters/openai/adapter.py,sha256=
|
|
8
|
-
ccproxy/adapters/openai/models.py,sha256=
|
|
9
|
-
ccproxy/adapters/openai/
|
|
8
|
+
ccproxy/adapters/openai/adapter.py,sha256=8g9jBtEET_NEZKt27prw_Go9WMS_BJUoxyvhoMk74-g,37960
|
|
9
|
+
ccproxy/adapters/openai/models.py,sha256=He63JFWe_DZAYbGVy69b4EE9ihQ8j2DxNjr4dmz30N4,11659
|
|
10
|
+
ccproxy/adapters/openai/response_adapter.py,sha256=2X_sMpc03gQkz-ckGcPUKkldv3U9g9v5KFY7owncf1Y,14367
|
|
11
|
+
ccproxy/adapters/openai/response_models.py,sha256=NunShPmyHPhGrfU0az3k4dUQbYGMt1SfjwU0mRQAWpQ,4715
|
|
12
|
+
ccproxy/adapters/openai/streaming.py,sha256=-nhKVPqCfAlV8PDi5-q3dVyslCpAu5DHh0BCrBfb9GU,23219
|
|
10
13
|
ccproxy/api/__init__.py,sha256=_u4wpzvN4Y0qS4CTaGp8nD8ZopB0HeFxnIIw9GYjvvk,527
|
|
11
|
-
ccproxy/api/app.py,sha256=
|
|
12
|
-
ccproxy/api/dependencies.py,sha256
|
|
13
|
-
ccproxy/api/responses.py,sha256=
|
|
14
|
+
ccproxy/api/app.py,sha256=aoQyl359AgyUvpx4BqcykLCCtnwDZ5MWNyCYWg6aWzI,12377
|
|
15
|
+
ccproxy/api/dependencies.py,sha256=-oGT8XSXpyyxenUMXTs5Ap3wJRbda4mfDagDW01pkoE,6989
|
|
16
|
+
ccproxy/api/responses.py,sha256=97TUQ8KF_eKLBRWgAnziGZBjBfJtY13cjgM_o0k_lDc,3062
|
|
14
17
|
ccproxy/api/middleware/__init__.py,sha256=S887PXY40Tnb0IFGei4Sgs7sygkcoT0IEOciOO7IDBc,284
|
|
15
18
|
ccproxy/api/middleware/auth.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
19
|
ccproxy/api/middleware/cors.py,sha256=u8bnWmBXRG9J2etbQdNsQOTIQY6PFWawk2Oa0Ei1x3s,1666
|
|
17
|
-
ccproxy/api/middleware/errors.py,sha256=
|
|
20
|
+
ccproxy/api/middleware/errors.py,sha256=YMfg5ovad7BMAiGK-66BCVacLveRX5ylJIRr1BFf3lE,22939
|
|
18
21
|
ccproxy/api/middleware/headers.py,sha256=zGhF3F11TKeb3zY5qzblU3Sdwx1MSlqm2QSOqtVfpoY,1775
|
|
19
|
-
ccproxy/api/middleware/logging.py,sha256=
|
|
22
|
+
ccproxy/api/middleware/logging.py,sha256=fGHacI_vRtQs9LpKpCebVUpo7bSC6qy4hbqftmLe_Uk,7353
|
|
20
23
|
ccproxy/api/middleware/request_content_logging.py,sha256=aIH1G9kjNr4-O5IFoisI9fO93rPePVWBQJM4wX1NCnY,10333
|
|
21
24
|
ccproxy/api/middleware/request_id.py,sha256=OOZh63FYP_JY3olZNzgzVdPFZUJFT_KerZxYMxsPmyQ,2538
|
|
22
25
|
ccproxy/api/middleware/server_header.py,sha256=9A3c7L12CFkQftMOZwB5JzqocGWymuV8AT_u_Y2s9RA,2329
|
|
23
26
|
ccproxy/api/routes/__init__.py,sha256=xXoslArg915ZTmN2ITQ-i3iO7fu8ZkQAMrSgC41U5oA,664
|
|
24
|
-
ccproxy/api/routes/claude.py,sha256=
|
|
25
|
-
ccproxy/api/routes/
|
|
27
|
+
ccproxy/api/routes/claude.py,sha256=lERvCRFiHfhfQC6uYaUSRwplSRvUbn3of0tACYib4x0,15079
|
|
28
|
+
ccproxy/api/routes/codex.py,sha256=j4_ykiRgEOm5YBUrTEg-vhL6rHeaXS8SKxMj0fXM3HQ,66743
|
|
29
|
+
ccproxy/api/routes/health.py,sha256=TWs7ipKDynwfG3Cj5X8BMoglyTP9zEPz5cDq1-vDiHQ,26518
|
|
26
30
|
ccproxy/api/routes/mcp.py,sha256=-EVGid0uNOWeXP4w8F_hKUp1odkNnFXPHPmaOGC0UzQ,5389
|
|
27
31
|
ccproxy/api/routes/metrics.py,sha256=MHG2nEGu3amrU6zJCuH2RktM8kg2EFxu4xNOFCzXMn4,40813
|
|
28
32
|
ccproxy/api/routes/permissions.py,sha256=dvbWORmmAce7VZWlZPvchTCO9F6fauavmSbs8hUltKE,6231
|
|
29
|
-
ccproxy/api/routes/proxy.py,sha256=
|
|
33
|
+
ccproxy/api/routes/proxy.py,sha256=flx4fyhYFsZvImLbwXy2qSEVVnlOA8xc0uR0T3-hUBI,8364
|
|
30
34
|
ccproxy/api/services/__init__.py,sha256=_n4k1Ciao8BEbiMBSldq82nbs7N8qXu_1TcBwWLV8bE,167
|
|
31
|
-
ccproxy/api/services/permission_service.py,sha256=
|
|
35
|
+
ccproxy/api/services/permission_service.py,sha256=mG6HGRQ5sly9rfA8ii601Rx5R-MunVAjOy3ky8Jqsoc,12024
|
|
32
36
|
ccproxy/api/ui/__init__.py,sha256=oEgfWr8pgSO7uHYQBchJ2QspFrFsqTCO8mLPlfhHTfU,147
|
|
33
37
|
ccproxy/api/ui/permission_handler_protocol.py,sha256=_jZAQ1KN5dK1Z28jqaW90Ggt8usVTR1P7pEKPWGN9SY,972
|
|
34
38
|
ccproxy/api/ui/terminal_permission_handler.py,sha256=GuD_RyQCiuxJtFJI-SKsWPvw1brz1_IGz31YjLVQ9js,20195
|
|
@@ -44,23 +48,34 @@ ccproxy/auth/oauth/__init__.py,sha256=PEymCot9_oIj2mKFIyfmIlznoKwoBuSKqfRvH9k_QR
|
|
|
44
48
|
ccproxy/auth/oauth/models.py,sha256=CIgzXpyf5PY8vnO8jkv3cfr1W9rkT5qtkz_u2xGabV4,2007
|
|
45
49
|
ccproxy/auth/oauth/routes.py,sha256=9sWaib49v5MFv_FFsnlgTXqgwvGprWWwpJzrSihKaks,13598
|
|
46
50
|
ccproxy/auth/oauth/storage.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
|
+
ccproxy/auth/openai/__init__.py,sha256=Af7h3n3xGmCKO7FsSA1sdNBWfjajd5l5ccMArn4U8E8,328
|
|
52
|
+
ccproxy/auth/openai/credentials.py,sha256=Jz8PA9OFfBZXh-DSARI-vM6buNtci5ObmFUNb5MqIko,6088
|
|
53
|
+
ccproxy/auth/openai/oauth_client.py,sha256=Wen_FTN0Lo2BMydQ23LipJZHDVl4RToXED5G4Vzcixc,12146
|
|
54
|
+
ccproxy/auth/openai/storage.py,sha256=8GwCnw29_zTVL7LMqfX2KsszcEFVo9nT9TCbGsBEexQ,6433
|
|
47
55
|
ccproxy/auth/storage/__init__.py,sha256=5thfvXhc8HGJblQWMiG6ZPl594RpbTGdAgyAlpAe1TI,324
|
|
48
56
|
ccproxy/auth/storage/base.py,sha256=Gw20tabOKTwey6YrOm09Bxu-MYJuMIrQULLJT6RQ07E,1357
|
|
49
57
|
ccproxy/auth/storage/json_file.py,sha256=iZBFCJ5EsZeFtlT7ORTXcEdAvMADIaDTXUPEBSjMcr0,5027
|
|
50
58
|
ccproxy/auth/storage/keyring.py,sha256=qg4q-O-Y6D7y4HQfgg5g9bhUpuD9DAec9npWne0VLwg,5950
|
|
51
|
-
ccproxy/claude_sdk/__init__.py,sha256=
|
|
52
|
-
ccproxy/claude_sdk/client.py,sha256=
|
|
59
|
+
ccproxy/claude_sdk/__init__.py,sha256=b794sieTPU1HEH_CmtqFK1be_p-bMUopi4v8gxRET9M,482
|
|
60
|
+
ccproxy/claude_sdk/client.py,sha256=YPgi4Uql8YW_fKFA6TAAmy5aDA-T0F5T_HJf7o9bbLY,29799
|
|
53
61
|
ccproxy/claude_sdk/converter.py,sha256=GeU7AzbzK1ltaiUEr60mG4VYaSup95Z6OxVSG9Pu0PY,19035
|
|
54
|
-
ccproxy/claude_sdk/
|
|
62
|
+
ccproxy/claude_sdk/exceptions.py,sha256=LYUmy4K4TnrOixINScswc-Xg31gZJbbFimZgw9hIfy4,428
|
|
63
|
+
ccproxy/claude_sdk/manager.py,sha256=UuUhFNSF6UTaonmllHzwORwrXjcv1k_DwkHmsYJUhqY,7319
|
|
64
|
+
ccproxy/claude_sdk/message_queue.py,sha256=V2BU2Wdsdfb-TyfvOzYMszeEcdcBmVkiqB52IjS_oM8,11136
|
|
65
|
+
ccproxy/claude_sdk/options.py,sha256=NVyQc7_CxhC2UsavNtrLZ6pFIVwHaHv6euyc44TFYj8,7097
|
|
55
66
|
ccproxy/claude_sdk/parser.py,sha256=1LcZOTkaKLSxZO_iVIvpZq44vUjApvMIA8Wlv61V6Jo,7193
|
|
56
|
-
ccproxy/claude_sdk/
|
|
67
|
+
ccproxy/claude_sdk/session_client.py,sha256=ipKvWyFx7nCI4n1VHbCsqbSjo5HdMC1P2lrX8fkTy8g,20052
|
|
68
|
+
ccproxy/claude_sdk/session_pool.py,sha256=BX0I4TdtgfVDEJozjmoSQTls24s-3KfFNTSSAgmA9LM,23993
|
|
69
|
+
ccproxy/claude_sdk/stream_handle.py,sha256=bu2WjWZmhRFyzhjH4UeYe9NmFeAonR9zBfyDirJJ1XE,20576
|
|
70
|
+
ccproxy/claude_sdk/stream_worker.py,sha256=CjyzNDVIFvoPLMXfmF6juJlxRYpiRRBM-IS3oQuEPpc,13429
|
|
71
|
+
ccproxy/claude_sdk/streaming.py,sha256=FjyLKS1fbBLf3hXtBhwyZzmSvWvOMxOZqrIxQDul_ik,14765
|
|
57
72
|
ccproxy/cli/__init__.py,sha256=_vISKEqzAsAYrTZ-j9ScxTUtFZp3RVRbIvGpCcu--SU,262
|
|
58
73
|
ccproxy/cli/helpers.py,sha256=LHGh5ZSywPUY61XVaSD5mx2eaIF4bi8hzbdMCJ0YRrQ,3814
|
|
59
74
|
ccproxy/cli/main.py,sha256=QLdSbSm3PjvwluL6WO7kpe8S7qrgsw2VjMR84aZ2fsg,2452
|
|
60
75
|
ccproxy/cli/commands/__init__.py,sha256=eWugiC37ualVtsTazu7GBCV7kZ12xkAnTUztjV7kVao,200
|
|
61
|
-
ccproxy/cli/commands/auth.py,sha256=
|
|
76
|
+
ccproxy/cli/commands/auth.py,sha256=oAA37cGo6SgGtunDaqf5n8QgRtmvvEajF8bHtD8c-nI,34987
|
|
62
77
|
ccproxy/cli/commands/permission_handler.py,sha256=rdPxXCZ3pK6a93eKED2XFNIwtnNcTW5XjM-X7edBcb0,18463
|
|
63
|
-
ccproxy/cli/commands/serve.py,sha256=
|
|
78
|
+
ccproxy/cli/commands/serve.py,sha256=ZNYrODXcJaHbrT8Vv7vi8bNKXKe7f81RSYveroD-Hh0,32951
|
|
64
79
|
ccproxy/cli/commands/config/__init__.py,sha256=uX8VewtrMu5X8VAx5ym1slwNtlICDBEs3S1HfoFe5Qo,376
|
|
65
80
|
ccproxy/cli/commands/config/commands.py,sha256=ukAr55NLFTg67f5czpjbuz_Ap_mwFIMIfMGHeXv_E5c,28917
|
|
66
81
|
ccproxy/cli/commands/config/schema_commands.py,sha256=ZSuK_Q1bWp8WUOSbkuwKz_4TwrxkRsA6MOt_-y1eiVs,4218
|
|
@@ -68,37 +83,38 @@ ccproxy/cli/docker/__init__.py,sha256=4x9QO8SF9aloJFs4xrUEhGcSmoosIYmjcMTk4-GnHB
|
|
|
68
83
|
ccproxy/cli/docker/adapter_factory.py,sha256=dbO_MGrrAsyF0DDZMKbrk4oMx2xAMZPihOAviF7D5zY,5022
|
|
69
84
|
ccproxy/cli/docker/params.py,sha256=cAkszIkS6lztpXxRuHRGBseA0n6n-huwyydDRKUHjSM,7378
|
|
70
85
|
ccproxy/cli/options/__init__.py,sha256=OiToWXDNOXnO-fuPz2H5qXYwp9ht7uB12-4wxqner1Q,340
|
|
71
|
-
ccproxy/cli/options/claude_options.py,sha256=
|
|
86
|
+
ccproxy/cli/options/claude_options.py,sha256=zkH0YHf_KLmkgkpIQsO-0C9IKFri8wxqrgKk0c2UEB0,5885
|
|
72
87
|
ccproxy/cli/options/core_options.py,sha256=80qVieUiUMYwjDKVeFfBDGjF1a8P1qB8Ppf-zSZ1eek,552
|
|
73
88
|
ccproxy/cli/options/security_options.py,sha256=95TfENdeAsDMes7SH39mQJERgrqoL4jZEKvZL7NlzJQ,873
|
|
74
89
|
ccproxy/cli/options/server_options.py,sha256=y37dtZGWuuYcDOn92zSzKwblnTgq65ZJJk2fWBA__s4,1935
|
|
75
|
-
ccproxy/config/__init__.py,sha256=
|
|
90
|
+
ccproxy/config/__init__.py,sha256=OGN54wL_XB-vP-g603NhqsSxYvKEXvBXVuEIxLV_tb4,891
|
|
76
91
|
ccproxy/config/auth.py,sha256=CDc5qiexq4jH3Ve39tnL1Vn5c5bOUBWUdi7j4VLwewU,4653
|
|
77
|
-
ccproxy/config/claude.py,sha256=
|
|
92
|
+
ccproxy/config/claude.py,sha256=p_J9khK_aD6nQVQDeKUpU7JFaAqEduP_wemKgZqjpt4,12486
|
|
93
|
+
ccproxy/config/codex.py,sha256=zzYwZZeIZgcYSxyqv97oOUEGBf0Pqv_ZNQoMWoJ8lF8,3145
|
|
78
94
|
ccproxy/config/cors.py,sha256=eNxrNuPN7Ujh9_2fIWu6kmOIeYNuqn0NTuCsBYvctFM,2505
|
|
79
|
-
ccproxy/config/discovery.py,sha256=
|
|
95
|
+
ccproxy/config/discovery.py,sha256=lz5L0YcyVruZnXOxEXOD_4zg0k4W-woOGML9zwpmexQ,2487
|
|
80
96
|
ccproxy/config/docker_settings.py,sha256=5D8eBSyWActgBGE7cIb4HObqlvE-7jxylmUBn5UxLM4,8390
|
|
81
|
-
ccproxy/config/loader.py,sha256=kgeShuaeNjTHI7lX2VWSFlE4ugOJW9HAT-FJesKLegE,3100
|
|
82
97
|
ccproxy/config/observability.py,sha256=5AwQFEFxJLUStGP5gjL_5i8Hk8KdrXKY7ocITYg8jZQ,5466
|
|
83
98
|
ccproxy/config/pricing.py,sha256=RzsNQHYmv5P-BcRDV4GSkSIDImFIFEEC7roFu5jeocE,2613
|
|
84
99
|
ccproxy/config/reverse_proxy.py,sha256=hep4ubV7-4ZgdO1_WqY56b5yrYyHCdQgYayUHKH3tfo,866
|
|
85
|
-
ccproxy/config/scheduler.py,sha256=
|
|
100
|
+
ccproxy/config/scheduler.py,sha256=Lee8g9tSimACRFk3rGBiutEYJcxvnu7KrSwTx2WsRZ8,3194
|
|
86
101
|
ccproxy/config/security.py,sha256=luNy1J6xXSKPRjAVTmF1mqSpN4h0I_1CllBJfaYbq0Q,493
|
|
87
102
|
ccproxy/config/server.py,sha256=71Ih6huVn52demV6jNrixM8jqXVqfFrBpIvWIlmhlww,2527
|
|
88
|
-
ccproxy/config/settings.py,sha256=
|
|
103
|
+
ccproxy/config/settings.py,sha256=0yht-uCZdEfzG2I1YYJ_YiXCTO9yv0sh1iTe8N4GLBw,19052
|
|
89
104
|
ccproxy/config/validators.py,sha256=EciRiEF7qGBcDp2Ms10VXyfAWXY_2uPPglvGh7EVLDs,5754
|
|
90
105
|
ccproxy/core/__init__.py,sha256=ZreOdlUlCn7R5GlS3EdpvIj5fO9sySbQKnuR8o6vwXI,6400
|
|
91
106
|
ccproxy/core/async_utils.py,sha256=slRQkIGctjZb6ZxridoJscFKVbyW2SYREieQjkpP_e8,19855
|
|
107
|
+
ccproxy/core/codex_transformers.py,sha256=4awSlBkefsF4ouMWIj3ZR8mbO6ccCddaGTyxOKXzEaQ,15182
|
|
92
108
|
ccproxy/core/constants.py,sha256=mmkcOfKNnvu3h5paZ6GL72ecAK4XdBI4tXlmgImGyzI,2735
|
|
93
109
|
ccproxy/core/errors.py,sha256=gP1rh-k-KpE5OcVbFcdMdZSmDshvcoXdbVynIx864gc,8459
|
|
94
110
|
ccproxy/core/http.py,sha256=pj3UM9TDL13_sU0ULGuA2wvVg58uxOCy-ib3zugjelo,9317
|
|
95
|
-
ccproxy/core/http_transformers.py,sha256=
|
|
111
|
+
ccproxy/core/http_transformers.py,sha256=LF8LZRwklJoGMtx9_JhxZkFAfNf-V6n0hL9bNcmmFmc,31216
|
|
96
112
|
ccproxy/core/interfaces.py,sha256=zzucgNTvui7fGQ8vjLzCba-itJZh0Fs6GrDAZNJfGXo,6366
|
|
97
|
-
ccproxy/core/logging.py,sha256=
|
|
113
|
+
ccproxy/core/logging.py,sha256=xwWsFTqGLrGrjQzgV2MphrwHg4i8YDW591xlhUGl7l4,10171
|
|
98
114
|
ccproxy/core/middleware.py,sha256=libv7wo-y9nni9hp7GCkYUKlIKihAwG0iHvjcv_RTs8,3355
|
|
99
115
|
ccproxy/core/proxy.py,sha256=6lFqNiGFQFlh61q32imbUD-RJAK2RJHJNyYLwAmUYr0,4615
|
|
100
116
|
ccproxy/core/system.py,sha256=91rMtlRtY4yxSsnPV5qZJaXHNFzvcrRZ1nQwS4CwG68,1019
|
|
101
|
-
ccproxy/core/transformers.py,sha256=
|
|
117
|
+
ccproxy/core/transformers.py,sha256=BpOweWwpuUKEsLe32zqqTN0iNPRVXjyAoW1jBPSO0C8,7884
|
|
102
118
|
ccproxy/core/types.py,sha256=kGRMzb6VI5KWa3aFKWgQ3gChqdHPrPoOyZ0QPT1m18E,3554
|
|
103
119
|
ccproxy/core/validators.py,sha256=k2z71lz-zKhRdtx3tYgJllqFnEcQ-eivj1kf3aVej0s,7367
|
|
104
120
|
ccproxy/docker/__init__.py,sha256=gO9FJepIWneXPANgsAJKx_VL9rt7pcX3hbRcwnSyzJk,1833
|
|
@@ -110,23 +126,25 @@ ccproxy/docker/protocol.py,sha256=uFJvKfTYhO8ROUo_tcMIuXYqhjK-eFIJV-U5Bora-jA,65
|
|
|
110
126
|
ccproxy/docker/stream_process.py,sha256=XahXegGG6B-7RsZAb9J8OA7sz7xi8CmRzEI4vBJLwTI,9071
|
|
111
127
|
ccproxy/docker/validators.py,sha256=OY-dkU88CLIeMBfv4P5QoVB7miQ8BD7kIgaMHxF7TsU,5764
|
|
112
128
|
ccproxy/models/__init__.py,sha256=yaz9lC0roh0u7C33rHrGW46lrwbyyAa_evpAlA5BzYw,3548
|
|
113
|
-
ccproxy/models/claude_sdk.py,sha256=
|
|
129
|
+
ccproxy/models/claude_sdk.py,sha256=T-6HpAPe2a17sd27HE7ttFENh2JxwrFrnGBwMwDwovs,15522
|
|
130
|
+
ccproxy/models/detection.py,sha256=LRlimMQwPjrxczER7liospxkcskhLS5QiJS7EStEaHU,7082
|
|
114
131
|
ccproxy/models/errors.py,sha256=B2rbL-17ZI9emDOca2A2fLOcH1-_77t_xqDmiPf6fgY,1329
|
|
115
132
|
ccproxy/models/messages.py,sha256=halc96Yxx3R5Xa9F5Q53iFZs0MJMDRfAA0fSxaij51U,8013
|
|
116
133
|
ccproxy/models/permissions.py,sha256=uhlzHc56rDzekjQMN8ITPCrh-0lamcgzTwx1OA2y67w,3612
|
|
117
|
-
ccproxy/models/requests.py,sha256=
|
|
118
|
-
ccproxy/models/responses.py,sha256=
|
|
134
|
+
ccproxy/models/requests.py,sha256=iUVHNMs5tCnEBENFmM0nxA9_-b-k8pSDwpLgJU0ce_8,3532
|
|
135
|
+
ccproxy/models/responses.py,sha256=Z0JABm5BaoW0AEM-wriGqWIikY8cJ9ZW9lZPRHX_Zx4,8410
|
|
119
136
|
ccproxy/models/types.py,sha256=27MUg7pVGrK5oWzcrtG_IAoScEcrF20thO94bxZXQww,2729
|
|
120
137
|
ccproxy/observability/__init__.py,sha256=5n9yQBbMLAQVAEJZD-2t4CKfI0Wx2aoDH7d2ynPM4bg,1503
|
|
121
|
-
ccproxy/observability/access_logger.py,sha256=
|
|
138
|
+
ccproxy/observability/access_logger.py,sha256=h23GbxRYhPz26-z3rQfFSg12lqwssiXEkJRNmyBJspQ,15755
|
|
122
139
|
ccproxy/observability/context.py,sha256=sfOdhgLY6LxLzOkJuzjqBsZV2e8ozAiYp79bhE2oqG4,14581
|
|
123
|
-
ccproxy/observability/metrics.py,sha256=
|
|
140
|
+
ccproxy/observability/metrics.py,sha256=460SDpwQEpIpHPgg7vA6BhZPcYVhyQEpP20k_qZhUvI,21017
|
|
124
141
|
ccproxy/observability/pushgateway.py,sha256=t7jGCP7dQirBjQyX-nz4S6MKKIHErU9yQMqgfCiP0BQ,12708
|
|
125
142
|
ccproxy/observability/sse_events.py,sha256=CVumUxVlXV5tpqVozymaLW4pBTEM90KBYWS9jAJ6Dzk,10697
|
|
126
143
|
ccproxy/observability/stats_printer.py,sha256=-QSiAMiurQlMzdMQcS0bNcswm5dDaIzTeS1bUqMeVQY,30110
|
|
144
|
+
ccproxy/observability/streaming_response.py,sha256=I9YsCdOMFR6gEkAoDkaGJO0kF1mdZHMrHYvbn45mzyo,4157
|
|
127
145
|
ccproxy/observability/storage/__init__.py,sha256=iAnhODA2PD3PxheoRgJv5KFCTUK_QwxxFa2Ne230RTg,47
|
|
128
|
-
ccproxy/observability/storage/duckdb_simple.py,sha256=
|
|
129
|
-
ccproxy/observability/storage/models.py,sha256=
|
|
146
|
+
ccproxy/observability/storage/duckdb_simple.py,sha256=pHcz8D7fJ0Qrhj4W0iN1TGTOIHxF_HKpyTHruTCTlUQ,25441
|
|
147
|
+
ccproxy/observability/storage/models.py,sha256=Xca4z6rCRB3HjCm50Wwge96MFAUoUKF9f6S_lGdBzHE,2307
|
|
130
148
|
ccproxy/pricing/__init__.py,sha256=8EKUTusWT_URBO8_jzHQ2JWIv11JYZxiyk1WoA_slHE,450
|
|
131
149
|
ccproxy/pricing/cache.py,sha256=j0X0VWICAV2WPWSY8TQTsRZ04fX0_tuegJRp9Lw7Dgk,6506
|
|
132
150
|
ccproxy/pricing/loader.py,sha256=F7Ciu39xBdY6QqUbDNNM2FmX0zqFhrMCed_-YLkLdvI,8633
|
|
@@ -135,12 +153,14 @@ ccproxy/pricing/updater.py,sha256=OKbozb2SIe4yrwWVsQd5ryopZrJ06mIDP6y166-l_tg,10
|
|
|
135
153
|
ccproxy/scheduler/__init__.py,sha256=qVe6NeKPn6NgMqEaG4_K4cYZBCpbFM7g6ptNPEzhi8c,1160
|
|
136
154
|
ccproxy/scheduler/core.py,sha256=Lvhc3i2bfbEnX-2n8lgDBM7YG7TKEnZC3tf8KC5u67M,10344
|
|
137
155
|
ccproxy/scheduler/errors.py,sha256=k7dcid0_te7IwwQaad-Jkj7MWFBgIOdgD_y_n5joio0,817
|
|
138
|
-
ccproxy/scheduler/manager.py,sha256
|
|
156
|
+
ccproxy/scheduler/manager.py,sha256=C6nS7PB9_YHfWiqhXnsHeYsTZKeJ1ZZKSD53JOQfuBY,7811
|
|
139
157
|
ccproxy/scheduler/registry.py,sha256=MaCuOEiJiYjlKS2Yqp3PxeWXpf8AqNPCQ_qeWbWtBCw,4058
|
|
140
|
-
ccproxy/scheduler/tasks.py,sha256=
|
|
158
|
+
ccproxy/scheduler/tasks.py,sha256=ROIRQcrB3zntZDJ53pabK53a18bPaHYJI1TvS9wwRAI,24944
|
|
141
159
|
ccproxy/services/__init__.py,sha256=ZvnelD15eFLlWHsucYXBFGNrdT7ncdP1KLnqzJNGOCs,251
|
|
142
|
-
ccproxy/services/
|
|
143
|
-
ccproxy/services/
|
|
160
|
+
ccproxy/services/claude_detection_service.py,sha256=aRg_aSucpi07DLzIKfDbLGYzjCLUXSpVScYcjLgSKbM,9941
|
|
161
|
+
ccproxy/services/claude_sdk_service.py,sha256=IuT4XP116fXzk20SUiYhKiKRoOxeeo7jlGzKVLH2NEo,25954
|
|
162
|
+
ccproxy/services/codex_detection_service.py,sha256=eQQF9defiGfPtSpaOwXHojtFzKeQdc3DafR0oG9bNrE,10265
|
|
163
|
+
ccproxy/services/proxy_service.py,sha256=qhVccFnnT2uz3VrVN2ZDBtkRFeL5qR3pgZSsIvLI3co,72656
|
|
144
164
|
ccproxy/services/credentials/__init__.py,sha256=fkCWqxlUyGVA1mxGicn4cvdbYJQo09SG9NoGKzUun3s,1394
|
|
145
165
|
ccproxy/services/credentials/config.py,sha256=97W3GqtxZlBv45oDHJ-plsHiSeFvNI-FTMZEw4CsPes,3221
|
|
146
166
|
ccproxy/services/credentials/manager.py,sha256=AnRvl1_v-eSbAEcmHMcUMmo7UpvTnAHe9QO5caL1JMY,19905
|
|
@@ -152,15 +172,18 @@ ccproxy/testing/content_generation.py,sha256=in2F_W1RSnQYKXYCavMrYXPLBrqVn_Bogx8
|
|
|
152
172
|
ccproxy/testing/mock_responses.py,sha256=GaegneKCVJSxoptLCUseriZ_wV_TfRnpD-vB0t60N3M,9200
|
|
153
173
|
ccproxy/testing/response_handlers.py,sha256=TSfBHzHLw8d3Y95zJ8wYewU9f5Wh89bl7DRfa-49ze0,6311
|
|
154
174
|
ccproxy/testing/scenarios.py,sha256=lVTkf1TbqPnWAfY2VbXez6dSFHsohuXerDmh37iC5VU,9200
|
|
155
|
-
ccproxy/utils/__init__.py,sha256=
|
|
175
|
+
ccproxy/utils/__init__.py,sha256=klTwpS5lbhi0Bg6QXIbX01-7oXaLoGjhHf1MKq_4aQQ,431
|
|
156
176
|
ccproxy/utils/cost_calculator.py,sha256=mHquyA_1vnPVZ2smjdPwThCJtGu-rF9n8ZvIrAwTF78,7276
|
|
157
|
-
ccproxy/utils/
|
|
177
|
+
ccproxy/utils/disconnection_monitor.py,sha256=EOKJoTD_wDZ-l-yoOqx6Z488NZm2fFKW3KOwKlTELkE,3128
|
|
178
|
+
ccproxy/utils/id_generator.py,sha256=k6R_W40lJSPi_it4M99EVg9eRD138oC4bv_8Ua3X8ms,301
|
|
179
|
+
ccproxy/utils/model_mapping.py,sha256=RYhUXViV8ElqdURKVsOXzggPFORVmQ6Mb3b3_FpN4Cs,6621
|
|
158
180
|
ccproxy/utils/models_provider.py,sha256=F0_nwNsx-gGhobdTnPQh9zfrhOfw7cBrW2RR09SYY3Q,4434
|
|
159
181
|
ccproxy/utils/simple_request_logger.py,sha256=d54aXW_0P7zewGRzjwDu7QfJ-DGn4zJXu2R5hGXh-rU,8223
|
|
182
|
+
ccproxy/utils/startup_helpers.py,sha256=U_2cXrGjqsJeFKFvbWv1PLyAsqsIBFRvdZtqQx8NuBs,17529
|
|
160
183
|
ccproxy/utils/streaming_metrics.py,sha256=JkvmWJ9s1fuKi7x1NoSoderUuT-mU6MQfbnN5GmziYE,7761
|
|
161
184
|
ccproxy/utils/version_checker.py,sha256=D-6a5qV9sPTqkTZHucHZ-xCd8Wdy29lxnVgcvdBs10w,4839
|
|
162
|
-
ccproxy_api-0.1.
|
|
163
|
-
ccproxy_api-0.1.
|
|
164
|
-
ccproxy_api-0.1.
|
|
165
|
-
ccproxy_api-0.1.
|
|
166
|
-
ccproxy_api-0.1.
|
|
185
|
+
ccproxy_api-0.1.6.dist-info/METADATA,sha256=uR2plX41kRBhteFipv5lAn9V9jG_iLxAUxEKFmvEfgg,21136
|
|
186
|
+
ccproxy_api-0.1.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
187
|
+
ccproxy_api-0.1.6.dist-info/entry_points.txt,sha256=XLke7uRmx6c1G3Ejnvm74x_eTKKtCgRRSk1dXIBFyg4,128
|
|
188
|
+
ccproxy_api-0.1.6.dist-info/licenses/LICENSE,sha256=httxSCpTrEOkipisMeGXSrZhTB-4MRIorQU0hS1B6eQ,1066
|
|
189
|
+
ccproxy_api-0.1.6.dist-info/RECORD,,
|
ccproxy/config/loader.py
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
"""Configuration file loader for ccproxy."""
|
|
2
|
-
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
from typing import Any
|
|
5
|
-
|
|
6
|
-
from ccproxy.config.discovery import find_toml_config_file
|
|
7
|
-
from ccproxy.config.settings import Settings
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class ConfigurationError(Exception):
|
|
11
|
-
"""Configuration loading error."""
|
|
12
|
-
|
|
13
|
-
pass
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class ConfigLoader:
|
|
17
|
-
"""Load configuration from multiple sources."""
|
|
18
|
-
|
|
19
|
-
def __init__(self) -> None:
|
|
20
|
-
self._cached_config: dict[str, Any] | None = None
|
|
21
|
-
|
|
22
|
-
def load(self, config_file: Path | None = None) -> Settings:
|
|
23
|
-
"""Load configuration from multiple sources.
|
|
24
|
-
|
|
25
|
-
Priority: ENV > config file > defaults
|
|
26
|
-
|
|
27
|
-
Args:
|
|
28
|
-
config_file: Optional path to config file
|
|
29
|
-
|
|
30
|
-
Returns:
|
|
31
|
-
Settings instance with loaded configuration
|
|
32
|
-
|
|
33
|
-
Raises:
|
|
34
|
-
ConfigurationError: If config file is invalid or cannot be loaded
|
|
35
|
-
"""
|
|
36
|
-
config_data = self._load_config_file(config_file)
|
|
37
|
-
|
|
38
|
-
# Environment variables take precedence over config file
|
|
39
|
-
return Settings(**config_data) if config_data else Settings()
|
|
40
|
-
|
|
41
|
-
def _load_config_file(self, config_file: Path | None = None) -> dict[str, Any]:
|
|
42
|
-
"""Load configuration from file.
|
|
43
|
-
|
|
44
|
-
Args:
|
|
45
|
-
config_file: Optional path to config file
|
|
46
|
-
|
|
47
|
-
Returns:
|
|
48
|
-
Configuration dictionary
|
|
49
|
-
|
|
50
|
-
Raises:
|
|
51
|
-
ConfigurationError: If config file is invalid
|
|
52
|
-
"""
|
|
53
|
-
if config_file is None:
|
|
54
|
-
config_file = find_toml_config_file()
|
|
55
|
-
|
|
56
|
-
if config_file is None or not config_file.exists():
|
|
57
|
-
return {}
|
|
58
|
-
|
|
59
|
-
try:
|
|
60
|
-
if config_file.suffix.lower() in [".toml", ".tml"]:
|
|
61
|
-
return self._load_toml_config(config_file)
|
|
62
|
-
else:
|
|
63
|
-
raise ConfigurationError(
|
|
64
|
-
f"Unsupported config file format: {config_file.suffix}. Only TOML (.toml) files are supported."
|
|
65
|
-
)
|
|
66
|
-
except Exception as e:
|
|
67
|
-
raise ConfigurationError(
|
|
68
|
-
f"Failed to load config file {config_file}: {e}"
|
|
69
|
-
) from e
|
|
70
|
-
|
|
71
|
-
def _load_toml_config(self, config_file: Path) -> dict[str, Any]:
|
|
72
|
-
"""Load TOML configuration file."""
|
|
73
|
-
try:
|
|
74
|
-
import tomllib
|
|
75
|
-
except ImportError:
|
|
76
|
-
try:
|
|
77
|
-
import tomli as tomllib # type: ignore
|
|
78
|
-
except ImportError:
|
|
79
|
-
raise ConfigurationError(
|
|
80
|
-
"TOML support not available. Install 'tomli' for Python < 3.11"
|
|
81
|
-
) from None
|
|
82
|
-
|
|
83
|
-
with config_file.open("rb") as f:
|
|
84
|
-
data = tomllib.load(f)
|
|
85
|
-
return data if isinstance(data, dict) else {}
|
|
86
|
-
|
|
87
|
-
def clear_cache(self) -> None:
|
|
88
|
-
"""Clear cached configuration."""
|
|
89
|
-
self._cached_config = None
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
# Global config loader instance
|
|
93
|
-
config_loader = ConfigLoader()
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
def load_config(config_file: Path | None = None) -> Settings:
|
|
97
|
-
"""Load configuration using the global loader.
|
|
98
|
-
|
|
99
|
-
Args:
|
|
100
|
-
config_file: Optional path to config file
|
|
101
|
-
|
|
102
|
-
Returns:
|
|
103
|
-
Settings instance with loaded configuration
|
|
104
|
-
"""
|
|
105
|
-
return config_loader.load(config_file)
|