Spaces:
Running
Running
# coding:utf-8 | |
import requests | |
import json | |
from datetime import datetime, timedelta, timezone | |
class CerebrasUnofficial: | |
def __init__(self, authjs_session_token: str): | |
self.api_url = 'https://api.cerebras.ai' | |
self.authjs_session_token = authjs_session_token | |
self.key = None | |
self.expiry = None | |
self.session = requests.Session() | |
self.session.headers.update({ | |
'Content-Type': 'application/json', | |
'Cookie': f'authjs.session-token={self.authjs_session_token}', | |
}) | |
def _get_key_from_graphql(self): | |
json_data = { | |
'operationName': 'GetMyDemoApiKey', | |
'variables': {}, | |
'query': 'query GetMyDemoApiKey {\n GetMyDemoApiKey\n}', | |
} | |
response = self.session.post( | |
'https://inference.cerebras.ai/api/graphql', json=json_data | |
) | |
response.raise_for_status() | |
data = response.json() | |
try: | |
if 'data' in data and 'GetMyDemoApiKey' in data['data']: | |
self.key = data['data']['GetMyDemoApiKey'] | |
except Exception: | |
raise Exception('Maybe your authjs.session-token is invalid.') | |
def _get_expiry_from_session(self): | |
response = self.session.get('https://cloud.cerebras.ai/api/auth/session') | |
response.raise_for_status() | |
data = response.json() | |
if 'user' in data and 'demoApiKeyExpiry' in data['user']: | |
self.expiry = datetime.fromisoformat( | |
data['user']['demoApiKeyExpiry'].replace('Z', '+00:00') | |
) | |
def get_api_key(self) -> str: | |
if self.key is None: | |
self._get_key_from_graphql() | |
else: | |
if self.expiry is None: | |
self._get_expiry_from_session() | |
if datetime.now(timezone.utc) >= self.expiry: | |
self._get_key_from_graphql() | |
self.expiry = datetime.now(timezone.utc) + timedelta(minutes=10) | |
return self.key | |