sunup / README.md
wren11ws's picture
Update Scansion-LM & Reference Model from GitHub Actions
b426a4c verified
|
Raw History Blame Contribute Delete
3.66 kB
---
language:
- en
license: apache-2.0
library_name: transformers
pipeline_tag: text-generation
base_model: distilgpt2
tags:
- gpt2
- lyrics
- suno
- music
- scansion
- text-generation
widget:
- text: "Title: Heat Line\nIdea: A man scraping survival out of desert heat, stubborn will over panic.\nVerse:\n"
example_title: Desert verse
- text: "Title: As It Stays\nIdea: Driving the empty freeway after a fight you cannot unsay.\nChorus:\n"
example_title: Night chorus
---
# 🏭 Scansion-LM Foundry
A high-performance causal language modeling harness that learns rhyme density, poetic scansion, and structured lyric progressions for Suno Custom Mode.
Fine-tuned from `distilgpt2` on clean, original lyric extracts. The model produces natural English rhythmic lines conforming to Suno Studio V6 scansion rules.
---
## ⚑ Quick Start
### 1. Launch Loopback HTTP Sidecar (Port 8099)
```powershell
.\run-engine.cmd
```
*Hosts the loopback server on `http://127.0.0.1:8099`, automatically connecting to Scansion Studio Web UI.*
### 2. Command Line Pipeline Operations
```powershell
# Extract meter, rhyme schemes, and sections
python -m scansion_lm extract 640
# Tokenize corpus using Hugging Face AutoTokenizer
python -m scansion_lm tokenize
# Fine-tune causal language model
python -m scansion_lm train 300 640
# Evaluate against gold standard metric sheet
python -m scansion_lm eval
# Verify weights and model card readiness
python -m scansion_lm check
# Export model bundle for Hugging Face Hub
python -m scansion_lm export
```
---
## πŸ“‘ Sidecar HTTP API Endpoints (Port 8099)
| Method | Endpoint | Description |
|---|---|---|
| `GET` | `/health` | Instant readiness and training state probe |
| `GET` | `/status` | Phase, step count, loss, and training process ID |
| `GET` | `/metrics` | Real-time training loss and validation progression |
| `GET` | `/trending` | Returns cached Suno trending metadata and tags |
| `POST` | `/ingest-batch` | Batch ingests new song lyrics into `user_extracts.jsonl` |
| `POST` | `/train` | Spawns background fine-tuning process |
| `POST` | `/infer` | Autoregressive lyric generation from idea/theme |
| `POST` | `/extract` | Scans input lyrics for feet, meter, and rhyme scheme |
---
## 🧠 Model Architecture
| Component | Specification |
|---|---|
| Base Architecture | `distilgpt2` (`GPT2LMHeadModel`) |
| Parameters | 81,912,576 (81.9M) |
| Vocabulary Size | 50,257 tokens (GPT-2 BPE) |
| Context Length | 1,024 tokens (256 training window) |
| Storage Format | `safetensors` (zero pickle vulnerability) |
| Checkpoint Size | ~327 MB |
---
## πŸ“„ License
Licensed under the **Apache 2.0 License**. See `LICENSE` for details.
## Checkpoint
- architecture: `['GPT2LMHeadModel']`
- vocab_size: `50260`
- n_positions: `1024`
- n_layer / n_embd / n_head: `6 / 768 / 12`
- parameters: `81914880`
- steps: `300/300`
- train loss (avg): `4.009729862213135`
- examples: `3500`
Load with vanilla Transformers β€” no custom `auto_map`:
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained("scansion-lm")
model = AutoModelForCausalLM.from_pretrained("scansion-lm")
prompt = """Title: Heat Line
Idea: A man scraping survival out of desert heat, stubborn will over panic.
Verse:
"""
ids = tok(prompt, return_tensors="pt")
out = model.generate(**ids, max_new_tokens=80, do_sample=True, temperature=0.85,
pad_token_id=tok.pad_token_id, eos_token_id=tok.eos_token_id)
print(tok.decode(out[0], skip_special_tokens=False))
```
Upload:
```bash
huggingface-cli upload ./export scansion-lm --repo-type model
```