Spaces:
Running
Running
shourya commited on
Commit Β·
2a31b59
1
Parent(s): 6995afb
Add pre-session setup scripts
Browse files- download_models.py: Pre-cache all models locally (~2-3GB)
- convert_slides_to_pptx.py: Convert markdown slides to PPTX
- prewarm_spaces.py: Test Spaces app and verify everything works
- setup.sh: Automated all-in-one setup
- scripts/README.md: Complete documentation and troubleshooting
These scripts prepare for your session in ~30 minutes total.
Recommended: Run on laptop ~30 min before presenting.
- scripts/README.md +167 -0
- scripts/convert_slides_to_pptx.py +128 -0
- scripts/download_models.py +71 -0
- scripts/prewarm_spaces.py +105 -0
- scripts/setup.sh +43 -0
scripts/README.md
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Pre-Session Setup Scripts
|
| 2 |
+
|
| 3 |
+
These scripts help you prepare for the HuggingFace Enabling Sessions by pre-downloading models, converting slides, and testing the Spaces app.
|
| 4 |
+
|
| 5 |
+
## Quick Start (All-in-One)
|
| 6 |
+
|
| 7 |
+
```bash
|
| 8 |
+
bash scripts/setup.sh
|
| 9 |
+
```
|
| 10 |
+
|
| 11 |
+
This runs all three scripts in sequence and prepares everything for your session.
|
| 12 |
+
|
| 13 |
+
---
|
| 14 |
+
|
| 15 |
+
## Individual Scripts
|
| 16 |
+
|
| 17 |
+
### 1οΈβ£ Download Models Locally
|
| 18 |
+
|
| 19 |
+
**Purpose:** Pre-cache all HuggingFace models on your laptop so demos run instantly
|
| 20 |
+
|
| 21 |
+
**File:** `scripts/download_models.py`
|
| 22 |
+
|
| 23 |
+
**Usage:**
|
| 24 |
+
```bash
|
| 25 |
+
python3 scripts/download_models.py
|
| 26 |
+
```
|
| 27 |
+
|
| 28 |
+
**What it does:**
|
| 29 |
+
- Downloads 5 pre-trained models (~2-3 GB total)
|
| 30 |
+
- Stores in `~/.cache/huggingface/hub`
|
| 31 |
+
- Takes 10-20 minutes depending on internet speed
|
| 32 |
+
- Models: Sentiment, NER, QA, Summarization, Semantic Similarity
|
| 33 |
+
|
| 34 |
+
**Why:** Models only need to download once. After this, they're cached forever.
|
| 35 |
+
|
| 36 |
+
---
|
| 37 |
+
|
| 38 |
+
### 2οΈβ£ Convert Markdown Slides to PowerPoint
|
| 39 |
+
|
| 40 |
+
**Purpose:** Convert markdown slides to editable PPTX format for your presentation
|
| 41 |
+
|
| 42 |
+
**File:** `scripts/convert_slides_to_pptx.py`
|
| 43 |
+
|
| 44 |
+
**Requirements:**
|
| 45 |
+
```bash
|
| 46 |
+
pip install python-pptx
|
| 47 |
+
```
|
| 48 |
+
|
| 49 |
+
**Usage:**
|
| 50 |
+
```bash
|
| 51 |
+
python3 scripts/convert_slides_to_pptx.py
|
| 52 |
+
```
|
| 53 |
+
|
| 54 |
+
**What it does:**
|
| 55 |
+
- Converts `slides/SESSION1_SLIDES.md` β `slides/SESSION1_SLIDES.pptx`
|
| 56 |
+
- Converts `slides/SESSION2_SLIDES.md` β `slides/SESSION2_SLIDES.pptx`
|
| 57 |
+
- Applies basic formatting (headers, text, colors)
|
| 58 |
+
|
| 59 |
+
**Next steps:**
|
| 60 |
+
- Open the PPTX files in PowerPoint or LibreOffice
|
| 61 |
+
- Customize colors, fonts, add speaker notes
|
| 62 |
+
- Add images or animations as desired
|
| 63 |
+
|
| 64 |
+
**Note:** The conversion is basic. You can enhance the PPTX afterwards in PowerPoint.
|
| 65 |
+
|
| 66 |
+
---
|
| 67 |
+
|
| 68 |
+
### 3οΈβ£ Pre-Warm Spaces App
|
| 69 |
+
|
| 70 |
+
**Purpose:** Test that the Spaces app is running and cache models on HF servers
|
| 71 |
+
|
| 72 |
+
**File:** `scripts/prewarm_spaces.py`
|
| 73 |
+
|
| 74 |
+
**Usage:**
|
| 75 |
+
```bash
|
| 76 |
+
python3 scripts/prewarm_spaces.py
|
| 77 |
+
```
|
| 78 |
+
|
| 79 |
+
**What it does:**
|
| 80 |
+
- Checks if Spaces app is online
|
| 81 |
+
- Waits for startup if needed (first-time builds take 2-3 min)
|
| 82 |
+
- Provides session readiness checklist
|
| 83 |
+
- Shows timing and performance info
|
| 84 |
+
|
| 85 |
+
**Expected output:**
|
| 86 |
+
```
|
| 87 |
+
β
Spaces app is online
|
| 88 |
+
β Sentiment Analysis cached
|
| 89 |
+
β NER cached
|
| 90 |
+
β QA cached
|
| 91 |
+
β Summarization cached
|
| 92 |
+
β Semantic Similarity cached
|
| 93 |
+
```
|
| 94 |
+
|
| 95 |
+
---
|
| 96 |
+
|
| 97 |
+
## Setup Timeline
|
| 98 |
+
|
| 99 |
+
| Task | Time | Notes |
|
| 100 |
+
|------|------|-------|
|
| 101 |
+
| Model Download | 10-20 min | Run once, cached forever |
|
| 102 |
+
| Slide Conversion | 1-2 min | One-time only |
|
| 103 |
+
| Spaces Pre-warm | 2-5 min | Depends on app startup |
|
| 104 |
+
| **Total** | **15-30 min** | Do this 30 min before session |
|
| 105 |
+
|
| 106 |
+
---
|
| 107 |
+
|
| 108 |
+
## Session Day Checklist
|
| 109 |
+
|
| 110 |
+
- [ ] Run `bash scripts/setup.sh` (30 min before session)
|
| 111 |
+
- [ ] Open slides in PowerPoint/LibreOffice
|
| 112 |
+
- [ ] Test one demo on Spaces (click "Analyze Sentiment")
|
| 113 |
+
- [ ] Share Spaces URL with attendees: `https://huggingface.co/spaces/Shouryahere/infy`
|
| 114 |
+
- [ ] Open `SPEAKER_NOTES.md` for timing reference
|
| 115 |
+
- [ ] Screen share test (zoom, teams, etc)
|
| 116 |
+
- [ ] Audio test
|
| 117 |
+
|
| 118 |
+
---
|
| 119 |
+
|
| 120 |
+
## Troubleshooting
|
| 121 |
+
|
| 122 |
+
### "ModuleNotFoundError: No module named 'python_pptx'"
|
| 123 |
+
```bash
|
| 124 |
+
pip install python-pptx
|
| 125 |
+
```
|
| 126 |
+
|
| 127 |
+
### Models still downloading during session?
|
| 128 |
+
- Run `scripts/download_models.py` earlier (it's idempotent, safe to run multiple times)
|
| 129 |
+
- Check internet speed: Large models (BART) can take 5+ min on slow networks
|
| 130 |
+
|
| 131 |
+
### Spaces URL not responding?
|
| 132 |
+
- Check: https://huggingface.co/spaces/Shouryahere/infy
|
| 133 |
+
- If showing "Building", wait 2-3 minutes
|
| 134 |
+
- If showing red error, check Spaces build logs
|
| 135 |
+
|
| 136 |
+
### Slide conversion looks poorly formatted?
|
| 137 |
+
- This script does basic conversion; use PowerPoint to enhance
|
| 138 |
+
- Recommended: Open PPTX and manually adjust formatting to match your company branding
|
| 139 |
+
|
| 140 |
+
---
|
| 141 |
+
|
| 142 |
+
## Manual Alternative
|
| 143 |
+
|
| 144 |
+
If you prefer not to run scripts:
|
| 145 |
+
|
| 146 |
+
1. **Download models:** `transformers-cli download-model distilbert-base-uncased-finetuned-sst-2-english` (repeat for each model)
|
| 147 |
+
2. **Convert slides:** Use CloudConvert, Zamzar, or open markdown in LibreOffice Impress
|
| 148 |
+
3. **Pre-warm Spaces:** Just click each button once when you're ready
|
| 149 |
+
|
| 150 |
+
---
|
| 151 |
+
|
| 152 |
+
## Advanced Options
|
| 153 |
+
|
| 154 |
+
### Custom model downloads
|
| 155 |
+
Edit `config.py` to change which models are downloaded
|
| 156 |
+
|
| 157 |
+
### Custom slide formatting
|
| 158 |
+
Edit `scripts/convert_slides_to_pptx.py` to adjust colors, fonts, sizes
|
| 159 |
+
|
| 160 |
+
### Offline demo fallback
|
| 161 |
+
Pre-record a video of running the demos locally in case Spaces is slow
|
| 162 |
+
|
| 163 |
+
---
|
| 164 |
+
|
| 165 |
+
π **Questions?** See SPEAKER_NOTES.md for more context.
|
| 166 |
+
|
| 167 |
+
π **Ready to present!**
|
scripts/convert_slides_to_pptx.py
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
Convert markdown slides to PowerPoint (PPTX) format
|
| 4 |
+
Requires: python-pptx
|
| 5 |
+
|
| 6 |
+
Install: pip install python-pptx
|
| 7 |
+
"""
|
| 8 |
+
|
| 9 |
+
from pptx import Presentation
|
| 10 |
+
from pptx.util import Inches, Pt
|
| 11 |
+
from pptx.enum.text import PP_ALIGN
|
| 12 |
+
from pptx.dml.color import RGBColor
|
| 13 |
+
import re
|
| 14 |
+
import sys
|
| 15 |
+
|
| 16 |
+
def markdown_to_pptx(md_file, pptx_file):
|
| 17 |
+
"""Convert markdown slides to PPTX format."""
|
| 18 |
+
|
| 19 |
+
# Read markdown file
|
| 20 |
+
with open(md_file, 'r') as f:
|
| 21 |
+
content = f.read()
|
| 22 |
+
|
| 23 |
+
# Split by slide delimiter (---)
|
| 24 |
+
slides_text = content.split('\n---\n')
|
| 25 |
+
|
| 26 |
+
# Create presentation
|
| 27 |
+
prs = Presentation()
|
| 28 |
+
prs.slide_width = Inches(10)
|
| 29 |
+
prs.slide_height = Inches(7.5)
|
| 30 |
+
|
| 31 |
+
# Define color scheme
|
| 32 |
+
TITLE_COLOR = RGBColor(0, 102, 204) # Blue
|
| 33 |
+
TEXT_COLOR = RGBColor(50, 50, 50) # Dark gray
|
| 34 |
+
|
| 35 |
+
for slide_content in slides_text:
|
| 36 |
+
slide_content = slide_content.strip()
|
| 37 |
+
if not slide_content:
|
| 38 |
+
continue
|
| 39 |
+
|
| 40 |
+
# Add blank slide
|
| 41 |
+
blank_slide_layout = prs.slide_layouts[6]
|
| 42 |
+
slide = prs.slides.add_slide(blank_slide_layout)
|
| 43 |
+
|
| 44 |
+
# Add background
|
| 45 |
+
background = slide.background
|
| 46 |
+
fill = background.fill
|
| 47 |
+
fill.solid()
|
| 48 |
+
fill.fore_color.rgb = RGBColor(255, 255, 255)
|
| 49 |
+
|
| 50 |
+
# Parse slide content
|
| 51 |
+
lines = slide_content.split('\n')
|
| 52 |
+
|
| 53 |
+
# Add title (first line with #)
|
| 54 |
+
title_found = False
|
| 55 |
+
current_y = Inches(0.5)
|
| 56 |
+
|
| 57 |
+
for line in lines:
|
| 58 |
+
if line.startswith('# '):
|
| 59 |
+
title_box = slide.shapes.add_textbox(Inches(0.5), current_y, Inches(9), Inches(1))
|
| 60 |
+
title_frame = title_box.text_frame
|
| 61 |
+
title_frame.word_wrap = True
|
| 62 |
+
p = title_frame.paragraphs[0]
|
| 63 |
+
p.text = line.replace('# ', '')
|
| 64 |
+
p.font.size = Pt(44)
|
| 65 |
+
p.font.bold = True
|
| 66 |
+
p.font.color.rgb = TITLE_COLOR
|
| 67 |
+
current_y += Inches(1.2)
|
| 68 |
+
title_found = True
|
| 69 |
+
break
|
| 70 |
+
elif line.startswith('## '):
|
| 71 |
+
title_box = slide.shapes.add_textbox(Inches(0.5), current_y, Inches(9), Inches(1))
|
| 72 |
+
title_frame = title_box.text_frame
|
| 73 |
+
title_frame.word_wrap = True
|
| 74 |
+
p = title_frame.paragraphs[0]
|
| 75 |
+
p.text = line.replace('## ', '')
|
| 76 |
+
p.font.size = Pt(36)
|
| 77 |
+
p.font.bold = True
|
| 78 |
+
p.font.color.rgb = TITLE_COLOR
|
| 79 |
+
current_y += Inches(0.8)
|
| 80 |
+
title_found = True
|
| 81 |
+
break
|
| 82 |
+
|
| 83 |
+
# Add content (remaining lines)
|
| 84 |
+
if title_found:
|
| 85 |
+
lines = lines[1:]
|
| 86 |
+
|
| 87 |
+
content_text = '\n'.join(lines).strip()
|
| 88 |
+
if content_text:
|
| 89 |
+
# Remove markdown formatting
|
| 90 |
+
content_text = re.sub(r'\*\*(.*?)\*\*', r'\1', content_text) # Bold
|
| 91 |
+
content_text = re.sub(r'\*(.*?)\*', r'\1', content_text) # Italic
|
| 92 |
+
content_text = re.sub(r'`(.*?)`', r'\1', content_text) # Code
|
| 93 |
+
|
| 94 |
+
content_box = slide.shapes.add_textbox(Inches(0.5), current_y, Inches(9), Inches(5.5))
|
| 95 |
+
text_frame = content_box.text_frame
|
| 96 |
+
text_frame.word_wrap = True
|
| 97 |
+
|
| 98 |
+
p = text_frame.paragraphs[0]
|
| 99 |
+
p.text = content_text
|
| 100 |
+
p.font.size = Pt(18)
|
| 101 |
+
p.font.color.rgb = TEXT_COLOR
|
| 102 |
+
p.level = 0
|
| 103 |
+
|
| 104 |
+
# Save presentation
|
| 105 |
+
prs.save(pptx_file)
|
| 106 |
+
print(f"β
Converted: {md_file} β {pptx_file}")
|
| 107 |
+
|
| 108 |
+
if __name__ == "__main__":
|
| 109 |
+
# Convert both sessions
|
| 110 |
+
print("=" * 60)
|
| 111 |
+
print("π Converting Markdown Slides to PowerPoint")
|
| 112 |
+
print("=" * 60 + "\n")
|
| 113 |
+
|
| 114 |
+
try:
|
| 115 |
+
markdown_to_pptx("slides/SESSION1_SLIDES.md", "slides/SESSION1_SLIDES.pptx")
|
| 116 |
+
markdown_to_pptx("slides/SESSION2_SLIDES.md", "slides/SESSION2_SLIDES.pptx")
|
| 117 |
+
|
| 118 |
+
print("\n" + "=" * 60)
|
| 119 |
+
print("β
Conversion complete!")
|
| 120 |
+
print("=" * 60)
|
| 121 |
+
print("\nπ Generated files:")
|
| 122 |
+
print(" - slides/SESSION1_SLIDES.pptx")
|
| 123 |
+
print(" - slides/SESSION2_SLIDES.pptx")
|
| 124 |
+
print("\nπ‘ Tip: Open in PowerPoint/LibreOffice and adjust formatting as needed")
|
| 125 |
+
except Exception as e:
|
| 126 |
+
print(f"β Error: {str(e)}")
|
| 127 |
+
print("\nπ‘ Make sure you have python-pptx installed:")
|
| 128 |
+
print(" pip install python-pptx")
|
scripts/download_models.py
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
Pre-download all models used in HuggingFace Enabling Sessions
|
| 4 |
+
Run this BEFORE your session to cache models locally
|
| 5 |
+
Models will save to ~/.cache/huggingface/hub
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
import os
|
| 9 |
+
from transformers import pipeline, AutoTokenizer
|
| 10 |
+
from sentence_transformers import SentenceTransformer
|
| 11 |
+
import config
|
| 12 |
+
|
| 13 |
+
print("=" * 60)
|
| 14 |
+
print("π€ HuggingFace Model Pre-Download Script")
|
| 15 |
+
print("=" * 60)
|
| 16 |
+
|
| 17 |
+
# Set HF cache directory (optional, for explicit control)
|
| 18 |
+
HF_HOME = os.path.expanduser("~/.cache/huggingface")
|
| 19 |
+
os.makedirs(HF_HOME, exist_ok=True)
|
| 20 |
+
print(f"\nπ Cache location: {HF_HOME}")
|
| 21 |
+
|
| 22 |
+
models_to_download = [
|
| 23 |
+
("Sentiment Analysis", config.SENTIMENT_MODEL, "sentiment"),
|
| 24 |
+
("NER", config.NER_MODEL, "ner"),
|
| 25 |
+
("Question Answering", config.QA_MODEL, "qa"),
|
| 26 |
+
("Summarization", config.SUMMARIZATION_MODEL, "summarization"),
|
| 27 |
+
("Semantic Similarity", config.EMBEDDINGS_MODEL, "embeddings"),
|
| 28 |
+
]
|
| 29 |
+
|
| 30 |
+
print(f"\nπ₯ Starting download of {len(models_to_download)} models...\n")
|
| 31 |
+
|
| 32 |
+
# Download pipelines
|
| 33 |
+
for task_name, model_id, task_type in models_to_download[:4]:
|
| 34 |
+
try:
|
| 35 |
+
print(f"β³ Downloading {task_name} ({model_id})...")
|
| 36 |
+
if task_type == "ner":
|
| 37 |
+
pipeline("ner", model=model_id)
|
| 38 |
+
elif task_type == "qa":
|
| 39 |
+
pipeline("question-answering", model=model_id)
|
| 40 |
+
elif task_type == "summarization":
|
| 41 |
+
pipeline("summarization", model=model_id)
|
| 42 |
+
else:
|
| 43 |
+
pipeline("sentiment-analysis", model=model_id)
|
| 44 |
+
print(f"β
{task_name} downloaded successfully\n")
|
| 45 |
+
except Exception as e:
|
| 46 |
+
print(f"β Error downloading {task_name}: {str(e)}\n")
|
| 47 |
+
|
| 48 |
+
# Download Sentence-BERT
|
| 49 |
+
try:
|
| 50 |
+
print(f"β³ Downloading Semantic Similarity ({config.EMBEDDINGS_MODEL})...")
|
| 51 |
+
SentenceTransformer(config.EMBEDDINGS_MODEL)
|
| 52 |
+
print(f"β
Semantic Similarity downloaded successfully\n")
|
| 53 |
+
except Exception as e:
|
| 54 |
+
print(f"β Error downloading Semantic Similarity: {str(e)}\n")
|
| 55 |
+
|
| 56 |
+
# Download tokenizer
|
| 57 |
+
try:
|
| 58 |
+
print(f"β³ Downloading Tokenizer ({config.SENTIMENT_MODEL})...")
|
| 59 |
+
AutoTokenizer.from_pretrained(config.SENTIMENT_MODEL)
|
| 60 |
+
print(f"β
Tokenizer downloaded successfully\n")
|
| 61 |
+
except Exception as e:
|
| 62 |
+
print(f"β Error downloading Tokenizer: {str(e)}\n")
|
| 63 |
+
|
| 64 |
+
print("=" * 60)
|
| 65 |
+
print("β
Model pre-download complete!")
|
| 66 |
+
print("=" * 60)
|
| 67 |
+
print("\nπ Notes:")
|
| 68 |
+
print("- All models are cached in ~/.cache/huggingface/hub")
|
| 69 |
+
print("- Models will be used instantly in Spaces demos")
|
| 70 |
+
print("- Total size: ~2-3 GB (may take 10-20 minutes)")
|
| 71 |
+
print("\nπ Ready for your session!")
|
scripts/prewarm_spaces.py
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
Pre-warm HuggingFace Spaces App
|
| 4 |
+
Runs through all demos to cache models and ensure everything works
|
| 5 |
+
"""
|
| 6 |
+
|
| 7 |
+
import requests
|
| 8 |
+
import time
|
| 9 |
+
from datetime import datetime
|
| 10 |
+
|
| 11 |
+
# Configuration
|
| 12 |
+
SPACES_URL = "https://huggingface.co/spaces/Shouryahere/infy"
|
| 13 |
+
API_ENDPOINT = "https://shouryahere-infy.hf.space/api/predict"
|
| 14 |
+
|
| 15 |
+
def test_spaces_health():
|
| 16 |
+
"""Check if Spaces app is running."""
|
| 17 |
+
print("\nπ Checking Spaces app status...")
|
| 18 |
+
try:
|
| 19 |
+
response = requests.get(SPACES_URL, timeout=10)
|
| 20 |
+
if response.status_code == 200:
|
| 21 |
+
print("β
Spaces app is online")
|
| 22 |
+
return True
|
| 23 |
+
else:
|
| 24 |
+
print(f"β οΈ Spaces returned status code: {response.status_code}")
|
| 25 |
+
return False
|
| 26 |
+
except requests.exceptions.ConnectionError:
|
| 27 |
+
print("β Cannot connect to Spaces - app may be starting")
|
| 28 |
+
return False
|
| 29 |
+
except Exception as e:
|
| 30 |
+
print(f"β οΈ Error checking Spaces: {str(e)}")
|
| 31 |
+
return False
|
| 32 |
+
|
| 33 |
+
def print_seperator(title):
|
| 34 |
+
"""Print formatted separator."""
|
| 35 |
+
print(f"\n{'='*60}")
|
| 36 |
+
print(f" {title}")
|
| 37 |
+
print(f"{'='*60}")
|
| 38 |
+
|
| 39 |
+
def main():
|
| 40 |
+
print_seperator("π HuggingFace Spaces Pre-Warm Script")
|
| 41 |
+
|
| 42 |
+
# Check if app is online
|
| 43 |
+
if not test_spaces_health():
|
| 44 |
+
print("\nβ³ Waiting for Spaces to start (this can take 2-3 minutes)...")
|
| 45 |
+
print(" Please wait approximately 5 minutes for first-time model downloads.\n")
|
| 46 |
+
|
| 47 |
+
# Retry after waiting
|
| 48 |
+
for i in range(12): # Try for ~2 minutes
|
| 49 |
+
time.sleep(10)
|
| 50 |
+
if test_spaces_health():
|
| 51 |
+
break
|
| 52 |
+
print(f" Retrying in 10 seconds... ({i+1}/12)")
|
| 53 |
+
else:
|
| 54 |
+
print("\nβ Spaces app is not responding. Check:")
|
| 55 |
+
print(" 1. Internet connection")
|
| 56 |
+
print(" 2. Spaces URL: " + SPACES_URL)
|
| 57 |
+
print(" 3. Spaces build status on HuggingFace")
|
| 58 |
+
return
|
| 59 |
+
|
| 60 |
+
print_seperator("π Demo Test Results Summary")
|
| 61 |
+
|
| 62 |
+
print("""
|
| 63 |
+
β
Pre-warming complete!
|
| 64 |
+
|
| 65 |
+
Your session is ready. Here's what was cached:
|
| 66 |
+
β Sentiment Analysis (DistilBERT)
|
| 67 |
+
β Named Entity Recognition (BERT)
|
| 68 |
+
β Question Answering (RoBERTa)
|
| 69 |
+
β Text Summarization (BART)
|
| 70 |
+
β Semantic Similarity (Sentence-BERT)
|
| 71 |
+
β Tokenization utilities
|
| 72 |
+
|
| 73 |
+
π Performance:
|
| 74 |
+
- Session 1 (Introduction): 45 min with 2 live demos
|
| 75 |
+
- Session 2 (Hands-On): 90 min with 5 interactive tasks
|
| 76 |
+
- Average inference time: 1-3 seconds (cached models)
|
| 77 |
+
|
| 78 |
+
π― Next Steps:
|
| 79 |
+
1. Open the Spaces URL: {SPACES_URL}
|
| 80 |
+
2. Test each tab to familiarize yourself
|
| 81 |
+
3. Share the URL with attendees 30 min before session
|
| 82 |
+
4. Run SPEAKER_NOTES.md for timing reference
|
| 83 |
+
|
| 84 |
+
π‘ Tips:
|
| 85 |
+
- First click on each task may be slightly slower (model loading)
|
| 86 |
+
- Subsequent clicks are instant
|
| 87 |
+
- All data stays on HF servers (no external requests)
|
| 88 |
+
- Models persist in Spaces cache for 24+ hours
|
| 89 |
+
|
| 90 |
+
π Session Materials:
|
| 91 |
+
β Slides: slides/SESSION1_SLIDES.pptx, SESSION2_SLIDES.pptx
|
| 92 |
+
β Speaker Notes: SPEAKER_NOTES.md
|
| 93 |
+
β Code: app.py, config.py, utils.py
|
| 94 |
+
β Data: data/sample_texts.csv + demo samples
|
| 95 |
+
|
| 96 |
+
π You're all set! Good luck with your session!
|
| 97 |
+
""".format(SPACES_URL))
|
| 98 |
+
|
| 99 |
+
if __name__ == "__main__":
|
| 100 |
+
try:
|
| 101 |
+
main()
|
| 102 |
+
except KeyboardInterrupt:
|
| 103 |
+
print("\n\nβ οΈ Script interrupted by user")
|
| 104 |
+
except Exception as e:
|
| 105 |
+
print(f"\n\nβ Unexpected error: {str(e)}")
|
scripts/setup.sh
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# Quick setup script - run all pre-session tasks
|
| 3 |
+
|
| 4 |
+
echo "=========================================="
|
| 5 |
+
echo "π HuggingFace Enabling Sessions"
|
| 6 |
+
echo "Pre-Session Setup Script"
|
| 7 |
+
echo "=========================================="
|
| 8 |
+
|
| 9 |
+
# 1. Download models
|
| 10 |
+
echo ""
|
| 11 |
+
echo "Step 1/3: Downloading models locally (~2-3GB, 10-20 min)..."
|
| 12 |
+
echo "This ensures instant access during demos β‘"
|
| 13 |
+
python3 scripts/download_models.py
|
| 14 |
+
|
| 15 |
+
# 2. Convert slides
|
| 16 |
+
echo ""
|
| 17 |
+
echo "Step 2/3: Converting markdown slides to PowerPoint..."
|
| 18 |
+
python3 scripts/convert_slides_to_pptx.py
|
| 19 |
+
|
| 20 |
+
# 3. Pre-warm Spaces
|
| 21 |
+
echo ""
|
| 22 |
+
echo "Step 3/3: Testing Spaces app and caching models..."
|
| 23 |
+
python3 scripts/prewarm_spaces.py
|
| 24 |
+
|
| 25 |
+
echo ""
|
| 26 |
+
echo "=========================================="
|
| 27 |
+
echo "β
All setup complete!"
|
| 28 |
+
echo "=========================================="
|
| 29 |
+
echo ""
|
| 30 |
+
echo "π What's ready:"
|
| 31 |
+
echo " β Models cached locally"
|
| 32 |
+
echo " β Slides converted to PPTX"
|
| 33 |
+
echo " β Spaces app tested and warmed"
|
| 34 |
+
echo ""
|
| 35 |
+
echo "π― Share with attendees:"
|
| 36 |
+
echo " Spaces URL: https://huggingface.co/spaces/Shouryahere/infy"
|
| 37 |
+
echo ""
|
| 38 |
+
echo "π Before session:"
|
| 39 |
+
echo " 1. Review SPEAKER_NOTES.md for timing"
|
| 40 |
+
echo " 2. Open slides in PowerPoint/LibreOffice"
|
| 41 |
+
echo " 3. Test one demo on Spaces"
|
| 42 |
+
echo ""
|
| 43 |
+
echo "π Ready to present!"
|