Spaces:
Runtime error
Runtime error
Update main.py
Browse files
main.py
CHANGED
|
@@ -21,7 +21,6 @@ app.add_middleware(
|
|
| 21 |
# ่ฏปๅๅ้กน็ฎๅบๅฎๅฝๅ็ Secrets
|
| 22 |
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 23 |
|
| 24 |
-
# ๅ้กน็ฎ็ Provider Key ๆ ๅฐ่กจ
|
| 25 |
PROVIDER_MAP = {
|
| 26 |
"GOOGLE_API_KEY": "google",
|
| 27 |
"GROQ_API_KEY": "groq",
|
|
@@ -38,7 +37,6 @@ PROVIDER_MAP = {
|
|
| 38 |
"ZHIPU_API_KEY": "zhipu",
|
| 39 |
}
|
| 40 |
|
| 41 |
-
# Provider ๅฏนๅบ็ base_url ๅๆฏๆ็ๆจกๅ
|
| 42 |
PROVIDER_CONFIG = {
|
| 43 |
"google": {
|
| 44 |
"base_url": "https://generativelanguage.googleapis.com/v1beta/openai",
|
|
@@ -133,19 +131,14 @@ PROVIDER_CONFIG = {
|
|
| 133 |
|
| 134 |
|
| 135 |
def load_config():
|
| 136 |
-
"""ไป็ฏๅขๅ้่ฏปๅๆๆ้
็ฝฎ"""
|
| 137 |
-
|
| 138 |
-
# โโ ่ฏปๅ็จๆท API Keys๏ผ็จไบ้ดๆ๏ผ โโ
|
| 139 |
raw_keys = os.getenv("API_KEYS", "")
|
| 140 |
api_keys = set(k.strip() for k in raw_keys.split(",") if k.strip())
|
| 141 |
|
| 142 |
-
# โโ ่ฏปๅ Provider Keys โโ
|
| 143 |
providers = {}
|
| 144 |
for env_name, provider_name in PROVIDER_MAP.items():
|
| 145 |
key_value = os.getenv(env_name, "").strip()
|
| 146 |
if not key_value:
|
| 147 |
-
continue
|
| 148 |
-
|
| 149 |
cfg = PROVIDER_CONFIG.get(provider_name, {})
|
| 150 |
providers[provider_name] = {
|
| 151 |
"api_key": key_value,
|
|
@@ -156,7 +149,6 @@ def load_config():
|
|
| 156 |
|
| 157 |
logger.info(f"โ
ๅ ่ฝฝไบ {len(api_keys)} ไธช API Key")
|
| 158 |
logger.info(f"โ
ๅ ่ฝฝไบ {len(providers)} ไธช Provider: {list(providers.keys())}")
|
| 159 |
-
|
| 160 |
return api_keys, providers
|
| 161 |
|
| 162 |
|
|
@@ -173,19 +165,15 @@ def verify_api_key(authorization: str = Header(...)):
|
|
| 173 |
return token
|
| 174 |
|
| 175 |
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 176 |
-
#
|
| 177 |
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 178 |
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
|
| 182 |
-
"status": "ok",
|
| 183 |
-
"keys": len(API_KEYS),
|
| 184 |
-
"providers": list(PROVIDERS.keys()),
|
| 185 |
-
}
|
| 186 |
|
| 187 |
|
| 188 |
-
@
|
| 189 |
async def list_models(_: str = Depends(verify_api_key)):
|
| 190 |
data = []
|
| 191 |
for p_cfg in PROVIDERS.values():
|
|
@@ -194,7 +182,7 @@ async def list_models(_: str = Depends(verify_api_key)):
|
|
| 194 |
return {"object": "list", "data": data}
|
| 195 |
|
| 196 |
|
| 197 |
-
@
|
| 198 |
async def chat_completions(
|
| 199 |
body: dict,
|
| 200 |
_: str = Depends(verify_api_key)
|
|
@@ -222,9 +210,18 @@ async def chat_completions(
|
|
| 222 |
return resp.json()
|
| 223 |
|
| 224 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 225 |
@app.get("/health")
|
| 226 |
async def health():
|
| 227 |
-
return {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 228 |
|
| 229 |
|
| 230 |
if __name__ == "__main__":
|
|
|
|
| 21 |
# ่ฏปๅๅ้กน็ฎๅบๅฎๅฝๅ็ Secrets
|
| 22 |
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 23 |
|
|
|
|
| 24 |
PROVIDER_MAP = {
|
| 25 |
"GOOGLE_API_KEY": "google",
|
| 26 |
"GROQ_API_KEY": "groq",
|
|
|
|
| 37 |
"ZHIPU_API_KEY": "zhipu",
|
| 38 |
}
|
| 39 |
|
|
|
|
| 40 |
PROVIDER_CONFIG = {
|
| 41 |
"google": {
|
| 42 |
"base_url": "https://generativelanguage.googleapis.com/v1beta/openai",
|
|
|
|
| 131 |
|
| 132 |
|
| 133 |
def load_config():
|
|
|
|
|
|
|
|
|
|
| 134 |
raw_keys = os.getenv("API_KEYS", "")
|
| 135 |
api_keys = set(k.strip() for k in raw_keys.split(",") if k.strip())
|
| 136 |
|
|
|
|
| 137 |
providers = {}
|
| 138 |
for env_name, provider_name in PROVIDER_MAP.items():
|
| 139 |
key_value = os.getenv(env_name, "").strip()
|
| 140 |
if not key_value:
|
| 141 |
+
continue
|
|
|
|
| 142 |
cfg = PROVIDER_CONFIG.get(provider_name, {})
|
| 143 |
providers[provider_name] = {
|
| 144 |
"api_key": key_value,
|
|
|
|
| 149 |
|
| 150 |
logger.info(f"โ
ๅ ่ฝฝไบ {len(api_keys)} ไธช API Key")
|
| 151 |
logger.info(f"โ
ๅ ่ฝฝไบ {len(providers)} ไธช Provider: {list(providers.keys())}")
|
|
|
|
| 152 |
return api_keys, providers
|
| 153 |
|
| 154 |
|
|
|
|
| 165 |
return token
|
| 166 |
|
| 167 |
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 168 |
+
# โ
็จ APIRouter ็ปไธๅ /v1 ๅ็ผ
|
| 169 |
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 170 |
|
| 171 |
+
from fastapi import APIRouter
|
| 172 |
+
|
| 173 |
+
router = APIRouter(prefix="/v1") # โ ๅ
ณ้ฎ๏ผๆๆ่ทฏ็ฑ่ชๅจๅธฆ /v1
|
|
|
|
|
|
|
|
|
|
|
|
|
| 174 |
|
| 175 |
|
| 176 |
+
@router.get("/models")
|
| 177 |
async def list_models(_: str = Depends(verify_api_key)):
|
| 178 |
data = []
|
| 179 |
for p_cfg in PROVIDERS.values():
|
|
|
|
| 182 |
return {"object": "list", "data": data}
|
| 183 |
|
| 184 |
|
| 185 |
+
@router.post("/chat/completions")
|
| 186 |
async def chat_completions(
|
| 187 |
body: dict,
|
| 188 |
_: str = Depends(verify_api_key)
|
|
|
|
| 210 |
return resp.json()
|
| 211 |
|
| 212 |
|
| 213 |
+
# โ
ๆ router ๆณจๅๅฐ app
|
| 214 |
+
app.include_router(router)
|
| 215 |
+
|
| 216 |
+
|
| 217 |
+
# ๅฅๅบทๆฃๆฅไธ้่ฆ /v1 ๅ็ผ๏ผไฟๆๆ น่ทฏๅพ
|
| 218 |
@app.get("/health")
|
| 219 |
async def health():
|
| 220 |
+
return {
|
| 221 |
+
"status": "ok",
|
| 222 |
+
"keys": len(API_KEYS),
|
| 223 |
+
"providers": list(PROVIDERS.keys()),
|
| 224 |
+
}
|
| 225 |
|
| 226 |
|
| 227 |
if __name__ == "__main__":
|