import json import requests BASE_URL = 'https://caffeinecrew-techdocs.hf.space' def get_access_token(data, return_refresh_token=False): """Authenticates and returns the access token. Args: data: dict. User login credentials. Returns: str. The access token. """ try: url = BASE_URL + '/auth/login' headers = {'accept': 'application/json'} data = json.dumps(data) response = requests.post(url, data=data, headers=headers) access_token = response.json()['access_token'] if return_refresh_token: refresh_token = response.json()['refresh_token'] return (access_token, refresh_token) return access_token except Exception as e: print('Invlaid Credentials') return None def request_inference(config, code_block, max_retries=1): """Request for inference from an external model. Args: config: Config. Configuration dictionary with model credentials, api key, and access token. code_block: str. Code block for which inference is requested. max_retries: int, optional. Number of retries to be made in case of failure. Defaults to 1. Returns: str: Docstring generated from the model. """ if max_retries == 0: return None url = BASE_URL + '/api/inference' headers = {'accept': 'application/json', 'Authorization': f"Bearer {config['access_token']}"} code_input = code_block response = requests.post(url=url, headers=headers, data=json.dumps({'code_block': code_input, 'api_key': config['api_key']})) if response.status_code == 200: return response.json()['docstr'] else: data = {'username': config['username'], 'password': config['password']} print('Encountered error retrying...') config.update({'access_token': get_access_token(data)}) return request_inference(config, code_block, max_retries=max_retries - 1) def update_file(file_path, docstr_code): """insert a single record or iterable of records to the database. Args: db_name (str): name of the database coll_name (str): name of the collection data (dict): data to be inserted Returns: An instance of class: pymongo.results.InsertOneResult or pymongo.results.InsertManyResult """ with open(file_path, 'w', errors='ignore') as file: file.write(docstr_code) def issue_api_key(config): """Issues an API key for a valid user Args: config (dict): Config dictionary containing `username` and `access_token` of the user. Raises: Exception: If API key generation fails. """ try: headers = {'accept': 'application/json', 'Authorization': f"Bearer {config['access_token']}"} response = requests.put(url=BASE_URL + '/auth/regenerate_api_key', headers=headers, data=json.dumps({'username': config['username']})) if response.status_code != 200: raise Exception('API Key Generation Failed') print(f"$ API_KEY:{response.json()['api_key']}") except Exception as e: print(f'$ {e}') def signup(config): """Sends a request to the server to create a new user account. Args: config (dict): A dictionary containing the following keys: - 'username': The username of the new user. - 'email': The email address of the new user. - 'password': The password of the new user. Raises: Exception: If the request fails or the status code is not 200. """ try: headers = {'accept': 'application/json'} response = requests.post(url=BASE_URL + '/auth/signup', headers=headers, data=json.dumps(config)) if response.status_code == 226: raise Exception('username or email already exists') elif response.status_code != 200: raise Exception('Something went wrong, please try again later') print('Signed up successfully, please issue a new `API_KEY` to continue') except Exception as e: print(e)