้นˆ้น•-1 (Pelican-1)

A tiny specialized chat model that turns a short prompt into a full HTML page (usually with inline SVG) of a pelican riding a bicycle โ€” including optional CSS @keyframes animation.

ๅŸบไบŽ Qwen3.5-0.8B ็š„ๅฐๆจกๅž‹๏ผšๆŠŠ็ฎ€็Ÿญๆ็คบ่ฏๅ˜ๆˆไธ€ๆ•ด้กต HTML๏ผˆๅคšไธบๅ†…่” SVG๏ผ‰๏ผŒ็”ปไธ€ๅช้ช‘่‡ช่กŒ่ฝฆ็š„้นˆ้น•๏ผ›ไนŸๅฏ่พ“ๅ‡บๅธฆ CSS @keyframes ็š„ๅŠจ็”ป้กตใ€‚

Model details / ๆจกๅž‹ไฟกๆฏ

Display name ้นˆ้น•-1
Repo / file id Pelican-1 / pelican-1
Base model Qwen/Qwen3.5-0.8B
Method LoRA SFT (rank 64, alpha 128, dropout 0.05), then merged
Continue-from runs/v1/epoch2 adapter, then v2 train
Released adapter epoch v2 epoch1 (optimizer step 297)
Train / eval rows 2737 / 138 (data_v2)
Tokens / epoch (approx) ~10.55M reply tokens
License Apache-2.0 (same as base model)

Why epoch1 (not epoch3)

Eval CE from logs/train_v2.log (lower is better):

step overall animation modifier standard saved
0 (start) 0.4597 0.498 0.472 0.349 โ€”
297 0.4869 0.558 0.495 0.303 epoch1
595 0.5438 0.656 0.540 0.273 epoch2
891 0.5862 0.706 0.591 0.287 epoch3

Overall / animation / modifier losses rose after epoch1 (overfitting). Standard split was best at epoch2. Release picks epoch1 for best overall CE among saved checkpoints.

Intended use / ็”จ้€”

  • Fun demos, โ€œpelican riding a bicycleโ€ HTML/SVG generation (Simon Willisonโ€“style pelican test, plus Chinese prompts).
  • Animation prompts that ask for spinning wheels / HTML+SVG motion via CSS.
  • Not a general assistant. Off-topic prompts often still emit HTML (wrong subject or empty bike).

Prompt & chat format / ๆ็คบไธŽๅฏน่ฏๆ ผๅผ

Use the base Qwen3.5 chat template with thinking disabled (enable_thinking=False). Training used userโ†’assistant pairs only (no system prompt).

Example (Python / Transformers):

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

m = "PATH/TO/Pelican-1"  # HF folder: release/v2/hf
tok = AutoTokenizer.from_pretrained(m)
model = AutoModelForCausalLM.from_pretrained(m, torch_dtype=torch.bfloat16, device_map="auto")

messages = [{"role": "user", "content": "Generate an SVG of a pelican riding a bicycle"}]
prompt = tok.apply_chat_template(
    messages, tokenize=False, add_generation_prompt=True, enable_thinking=False
)
enc = tok(prompt, return_tensors="pt").to(model.device)
out = model.generate(**enc, max_new_tokens=4000, temperature=0.7, top_p=0.95)
print(tok.decode(out[0][enc["input_ids"].shape[1]:], skip_special_tokens=True))

Rendered shape (thinking off):

<|im_start|>user
Generate an SVG of a pelican riding a bicycle<|im_end|>
<|im_start|>assistant
<think>

</think>

Chinese example: ้นˆ้น•้ช‘่‡ช่กŒ่ฝฆ or ็”จ HTML ๅ’Œ SVG ๅšไธ€ไธช้นˆ้น•้ช‘่‡ช่กŒ่ฝฆ็š„ๅŠจ็”ป.

Ollama

cd gguf
ollama create pelican-1 -f Modelfile
ollama run pelican-1 "Generate an SVG of a pelican riding a bicycle"

Files in this release / ๆœฌๅŒ…ๆ–‡ไปถ

  • hf/ โ€” merged full weights (safetensors) + tokenizer + chat_template.jinja + Apache-2.0 LICENSE
  • lora/ โ€” raw PEFT adapter (adapter_model.safetensors, rank 64) for runs/v2/epoch1
  • gguf/ โ€” pelican-1-F16.gguf, pelican-1-Q8_0.gguf (+ Modelfile)
  • images/ โ€” sample renders
  • CHECKPOINT.txt โ€” checkpoint choice notes

Sample outputs / ๆ ทๅผ 

classic

short zh

anim en frame

anim zh frame

(Sample PNGs are from the v2 generation set rendered for review; the packaged weights are the merged epoch1 adapter.)

Known limitations / ๅทฒ็Ÿฅๅฑ€้™

  • Modifier prompts (night, rain, scarf, hat, sunglasses, snow) are still weak โ€” attributes often ignored or washed out.
  • Off-topic prompts (capital of France, poem, cat on a bike) frequently still produce pelican/HTML-ish or wrong pages instead of a normal answer.
  • Some drawings fail structurally (broken SVG, empty bicycle, poster-like layouts).
  • Animation quality varies; CSS @keyframes may be present while motion looks wrong.
  • Base is multimodal-capable Qwen3.5; this release is textโ†’HTML fine-tune only โ€” do not expect vision input support in the pelican packaging.
  • GGUF: F16 and Q8_0 files were produced with turboquant convert_hf_to_gguf.py (arch qwen35). Packaging had to patch qwen35.block_count 25โ†’24 (HF has 24 layers). Even after that, the local turboquant llama-cli still failed to load with missing blk.23.nextn.eh_proj.weight (MTP/nextn tensors this runtime expects). Treat GGUF as experimental / may need a matching Ollama or llama.cpp; prefer the HF folder for now. Q4_K_M was not produced (llama-quantize binary not in that build).

Training sketch / ่ฎญ็ปƒๆ‘˜่ฆ

  • Hardware: GPU-Server-01 (Docker), project /workspace/pelican
  • Script: scripts/train_lora.py โ€” LoRA on attn/MLP projections, chunked CE, enable_thinking=False chat template
  • v2 data: SFT rebuild with animation-focused HTML (CSS spin/bob), paraphrases; 2737 train / 138 eval
  • Hyperparams (v2 run.json): lr 1e-4, 3 epochs, rank 64 / alpha 128, step_tokens 32768, max_len 24576, seed 20261105

License

Apache License 2.0, matching Qwen3.5-0.8B. See hf/LICENSE.

Citation / ่‡ด่ฐข

  • Base: Qwen team โ€” Qwen3.5
  • Pelican HTML test meme: Simon Willison and the broader โ€œdraw a pelican on a bicycleโ€ eval culture
Downloads last month
36
Safetensors
Model size
0.8B params
Tensor type
BF16
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for qwqqq6/Pelican-1

Adapter
(758)
this model