Spaces:
Runtime error
Runtime error
| 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) |