Spaces:
Paused
Paused
File size: 2,102 Bytes
7d4338a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | from helpers.api import ApiHandler, Request, Response
from helpers import dotenv
import models
API_KEY_PLACEHOLDER = "************"
class ApiKeys(ApiHandler):
async def process(self, input: dict, request: Request) -> dict | Response:
action = input.get("action", "get") # get | set | reveal
if action == "get":
return self._get_keys()
elif action == "set":
return self._set_keys(input)
elif action == "reveal":
return self._reveal_key(input)
return Response(status=400, response=f"Unknown action: {action}")
def _get_keys(self) -> dict:
from helpers.providers import get_providers
providers = get_providers("chat") + get_providers("embedding")
seen = set()
keys = {}
for p in providers:
pid = p.get("value", "")
if pid and pid not in seen:
seen.add(pid)
api_key = models.get_api_key(pid)
has_key = bool(api_key and api_key.strip() and api_key != "None")
keys[pid] = {
"label": p.get("label", pid),
"has_key": has_key,
"masked": API_KEY_PLACEHOLDER if has_key else "",
}
return {"keys": keys}
def _set_keys(self, input: dict) -> dict:
updates = input.get("keys", {})
if not isinstance(updates, dict):
return {"ok": False, "error": "Invalid keys format"}
for provider, value in updates.items():
if isinstance(value, str) and value != API_KEY_PLACEHOLDER:
dotenv.save_dotenv_value(f"API_KEY_{provider.upper()}", value)
return {"ok": True}
def _reveal_key(self, input: dict) -> dict:
provider = input.get("provider", "")
if not provider:
return {"ok": False, "error": "Missing provider"}
api_key = models.get_api_key(provider)
if api_key and api_key.strip() and api_key != "None":
return {"ok": True, "value": api_key}
return {"ok": True, "value": ""}
|