import gradio as gr import json import requests def avaliable_providers(): providers = [] headers = { "Content-Type": "application/json", } endpoint_url = "https://api.endpoints.huggingface.cloud/provider" response = requests.get(endpoint_url, headers=headers) for provider in response.json()['items']: if provider['status'] == 'available': providers.append(provider['vendor']) return providers def update_regions(provider): avalialbe_regions = [] headers = { "Content-Type": "application/json", } endpoint_url = f"https://api.endpoints.huggingface.cloud/provider/{provider}/region" response = requests.get(endpoint_url, headers=headers) for region in response.json()['items']: if region['status'] == 'available': avalialbe_regions.append(f"{region['region']}/{region['label']}") return gr.Dropdown.update( choices=avalialbe_regions, value=avalialbe_regions[0] if len(avalialbe_regions) > 0 else None ) def update_compute_options(provider, region): region = region.split("/")[0] avalialbe_compute_options = [] headers = { "Content-Type": "application/json", } endpoint_url = f"https://api.endpoints.huggingface.cloud/provider/{provider}/region/{region}/compute" print(endpoint_url) response = requests.get(endpoint_url, headers=headers) for compute in response.json()['items']: if compute['status'] == 'available': accelerator = compute['accelerator'] numAccelerators = compute['numAccelerators'] memoryGb = compute['memoryGb'].replace("Gi", "GB") architecture = compute['architecture'] instanceType = compute['instanceType'] type = f"{numAccelerators}vCPU {memoryGb} · {architecture}" if accelerator == "cpu" else f"{numAccelerators}x {architecture}" avalialbe_compute_options.append( f"{compute['accelerator'].upper()} [{compute['instanceSize']}] · {type} · {instanceType}" ) return gr.Dropdown.update( choices=avalialbe_compute_options, value=avalialbe_compute_options[0] if len(avalialbe_compute_options) > 0 else None ) def submit( hf_token_input, endpoint_name_input, provider_selector, region_selector, repository_selector, revision_selector, task_selector, framework_selector, compute_selector, min_node_selector, max_node_selector, security_selector ): compute_resources = compute_selector.split("·") accelerator = compute_resources[0][:3].strip() size_l_index = compute_resources[0].index("[") - 1 size_r_index = compute_resources[0].index("]") size = compute_resources[0][size_l_index : size_r_index].strip() type = compute_resources[-1].strip() payload = { "accountId": repository_selector.split("/")[0], "compute": { "accelerator": accelerator.lower(), "instanceSize": size[1:], "instanceType": type, "scaling": { "maxReplica": int(max_node_selector), "minReplica": int(min_node_selector) } }, "model": { "framework": "custom", "image": { "huggingface": {} }, "repository": repository_selector.lower(), "revision": revision_selector, "task": task_selector.lower() }, "name": endpoint_name_input.strip(), "provider": { "region": region_selector.split("/")[0].lower(), "vendor": provider_selector.lower() }, "type": security_selector.lower() } payload = json.dumps(payload) print(f"Payload: {payload}") headers = { "Authorization": f"Bearer {hf_token_input.strip()}", "Content-Type": "application/json", } endpoint_url = f"https://api.endpoints.huggingface.cloud/endpoint" print(f"Endpoint: {endpoint_url}") response = requests.post(endpoint_url, headers=headers, data=payload) if response.status_code == 400: return f"{response.text}. Malformed data in {payload}" elif response.status_code == 401: return "Invalid token" elif response.status_code == 409: return f"Error: {response.text}" elif response.status_code == 202: return f"Endpoint {endpoint_name_input} created successfully on {provider_selector.lower()} using {repository_selector.lower()}@{revision_selector}. \n Please check out the progress at https://ui.endpoints.huggingface.co/endpoints." else: return f"something went wrong {response.status_code} = {response.text}" def delete_endpoint( hf_token_input, endpoint_name_input ): response = requests.delete( f"https://api.endpoints.huggingface.cloud/endpoint/{endpoint_name_input}", headers = { "Authorization": f"Bearer {hf_token_input.strip()}", "Content-Type": "application/json", } ) if response.status_code == 401: return "Invalid token" elif response.status_code == 404: return f"Error: {response.text}" elif response.status_code == 202: return f"Endpoint {endpoint_name_input} deleted successfully." else: return f"something went wrong {response.status_code} = {response.text}" with gr.Blocks() as demo2: gr.Markdown( """ ##