| # Deploying LearningStudio Wrapper to Hugging Face | |
| This guide explains how to deploy the LearningStudio callout detection wrapper to a HuggingFace Inference Endpoint. | |
| ## Prerequisites | |
| 1. **HuggingFace Account**: Create an account at [huggingface.co](https://huggingface.co) | |
| 2. **HuggingFace CLI**: Install the CLI tool | |
| 3. **AWS Infrastructure**: The callout detection Lambda stack must be deployed | |
| ### Install HuggingFace CLI | |
| ```bash | |
| pip install huggingface_hub | |
| ``` | |
| ### Login to HuggingFace | |
| ```bash | |
| huggingface-cli login | |
| ``` | |
| Follow the prompts to enter your HuggingFace token. | |
| ## Step 1: Get AWS API Gateway Info | |
| After deploying the callout detection Lambda stack, get the API Gateway URL and key: | |
| ```bash | |
| cd callout-detection-lambda | |
| # Get the API Gateway endpoint URL | |
| aws cloudformation describe-stacks \ | |
| --stack-name callout-detection-dev \ | |
| --query "Stacks[0].Outputs[?OutputKey=='ServiceEndpoint'].OutputValue" \ | |
| --output text | |
| # Get the API key | |
| aws apigateway get-api-keys \ | |
| --name-query "learningstudio-key-dev" \ | |
| --include-values \ | |
| --query "items[0].value" \ | |
| --output text | |
| ``` | |
| Save these values - you'll need them when configuring the HF endpoint. | |
| ## Step 2: Create HuggingFace Model Repository | |
| First time only - create the model repository: | |
| ```bash | |
| huggingface-cli repo create YOUR_USERNAME/learningstudio-callout-wrapper --type model | |
| ``` | |
| Or create via the HuggingFace web interface at https://huggingface.co/new | |
| ## Step 3: Upload Wrapper Files | |
| Navigate to the wrapper directory and upload files: | |
| ```bash | |
| cd callout-detection-lambda/hf_inference/learningstudio_wrapper | |
| # Upload all files to the repository | |
| huggingface-cli upload YOUR_USERNAME/learningstudio-callout-wrapper \ | |
| handler.py inference.py requirements.txt README.md \ | |
| --repo-type model | |
| ``` | |
| ## Step 4: Create Inference Endpoint | |
| 1. Go to https://ui.endpoints.huggingface.co/ | |
| 2. Click "New endpoint" | |
| 3. Select your model repository (`YOUR_USERNAME/learningstudio-callout-wrapper`) | |
| 4. Configure the endpoint: | |
| - **Instance type**: CPU (this wrapper doesn't need GPU) | |
| - **Region**: Choose a region close to your API Gateway | |
| - **Scaling**: Start with 1 replica | |
| ## Step 5: Configure Secrets | |
| In the HuggingFace Inference Endpoint settings, add environment variables: | |
| 1. Go to your endpoint settings | |
| 2. Click "Settings" or "Environment Variables" | |
| 3. Add the following secrets: | |
| | Name | Value | | |
| |------|-------| | |
| | `API_GATEWAY_URL` | `https://xxx.execute-api.us-east-1.amazonaws.com/dev` | | |
| | `API_KEY` | Your API key from Step 1 | | |
| ## Step 6: Test the Endpoint | |
| Once the endpoint is running, test it: | |
| ```bash | |
| # Set your HuggingFace token | |
| export HF_TOKEN="your-hf-token" | |
| # Test with a URL | |
| curl -X POST https://YOUR_ENDPOINT.endpoints.huggingface.cloud \ | |
| -H "Authorization: Bearer $HF_TOKEN" \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"inputs": "https://example.com/test-drawing.png"}' | |
| ``` | |
| Expected response: | |
| ```json | |
| { | |
| "predictions": [ | |
| { | |
| "id": 1, | |
| "label": "callout", | |
| "class_id": 0, | |
| "confidence": 0.95, | |
| "bbox": {"x1": 100, "y1": 200, "x2": 300, "y2": 400} | |
| } | |
| ], | |
| "total_detections": 1, | |
| "image": "...", | |
| "image_width": 1920, | |
| "image_height": 1080 | |
| } | |
| ``` | |
| ## Updating the Wrapper | |
| To update the wrapper code: | |
| ```bash | |
| cd callout-detection-lambda/hf_inference/learningstudio_wrapper | |
| # Upload updated files | |
| huggingface-cli upload YOUR_USERNAME/learningstudio-callout-wrapper \ | |
| handler.py inference.py requirements.txt README.md \ | |
| --repo-type model | |
| ``` | |
| The endpoint will automatically pick up the changes on the next request (after a brief cold start). | |
| ## Rotating API Keys | |
| To rotate the API key without touching the HF endpoint: | |
| 1. Create a new API key in AWS API Gateway | |
| 2. Update the `API_KEY` secret in HF endpoint settings | |
| 3. Delete the old API key in AWS | |
| ## Troubleshooting | |
| ### "API_GATEWAY_URL and API_KEY must be set" | |
| The environment variables are not configured. Go to your endpoint settings and add the secrets. | |
| ### Timeout errors | |
| The callout detection pipeline takes 30-120 seconds typically. If you're getting timeouts: | |
| - Check that the Lambda stack is deployed and working | |
| - Verify the API Gateway URL is correct | |
| - Check CloudWatch logs for the Lambda functions | |
| ### Authentication errors | |
| - Verify the API key is correct | |
| - Check that the key hasn't been deleted or rotated | |
| - Ensure the key is associated with the usage plan | |
| ### Connection refused | |
| - Verify the API Gateway URL is correct | |
| - Check that the endpoint is in the right region | |
| - Ensure the Lambda stack is deployed | |
| ## Monitoring | |
| - **HuggingFace**: Check endpoint logs in the HF dashboard | |
| - **AWS CloudWatch**: Monitor Lambda function logs and metrics | |
| - **API Gateway**: View API Gateway metrics for request counts and errors | |