Text Generation
Transformers
Safetensors
code
fela
fourier-neural-operator
fno
gated-deltanet
cpu
on-device
autocomplete
fill-in-the-middle
constant-memory
custom_code
Eval Results (legacy)
Instructions to use lowdown-labs/fela-autocomplete with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use lowdown-labs/fela-autocomplete with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="lowdown-labs/fela-autocomplete", trust_remote_code=True)# Load model directly from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained("lowdown-labs/fela-autocomplete", trust_remote_code=True, dtype="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use lowdown-labs/fela-autocomplete with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "lowdown-labs/fela-autocomplete" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "lowdown-labs/fela-autocomplete", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/lowdown-labs/fela-autocomplete
- SGLang
How to use lowdown-labs/fela-autocomplete with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "lowdown-labs/fela-autocomplete" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "lowdown-labs/fela-autocomplete", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "lowdown-labs/fela-autocomplete" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "lowdown-labs/fela-autocomplete", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use lowdown-labs/fela-autocomplete with Docker Model Runner:
docker model run hf.co/lowdown-labs/fela-autocomplete
| from __future__ import annotations | |
| import torch | |
| import torch.nn.functional as F | |
| def banded_softmax_attention( | |
| q: torch.Tensor, k: torch.Tensor, v: torch.Tensor, w: int | |
| ) -> torch.Tensor: | |
| T = q.shape[-2] | |
| i = torch.arange(T, device=q.device)[:, None] | |
| j = torch.arange(T, device=q.device)[None, :] | |
| mask = (j <= i) & (j > i - w) | |
| return F.scaled_dot_product_attention(q, k, v, attn_mask=mask) | |
| def swa_fused_forward(mixer, x: torch.Tensor) -> torch.Tensor: | |
| B, T, C = x.shape | |
| H, w = (mixer.n_head, mixer.swa_fused_window) | |
| D = C // H | |
| q = mixer.swa_fused_q(x).reshape(B, T, H, D).transpose(1, 2) | |
| k = mixer.swa_fused_k(x).reshape(B, T, H, D).transpose(1, 2) | |
| v = mixer.swa_fused_v(x).reshape(B, T, H, D).transpose(1, 2) | |
| o = banded_softmax_attention(q, k, v, w) | |
| o = o.transpose(1, 2).reshape(B, T, C) | |
| return x + mixer.swa_fused_o(o) | |
| class CPUSlidingWindow: | |
| def __init__(self, mixer): | |
| self.mixer = mixer | |
| self.H = mixer.n_head | |
| self.C = mixer.swa_fused_q.out_features | |
| self.D = self.C // self.H | |
| self.w = mixer.swa_fused_window | |
| self.scale = self.D ** (-0.5) | |
| def init_state(self, batch_size: int = 1, device=None): | |
| if device is None: | |
| device = self.mixer.swa_fused_q.weight.device | |
| W1 = self.w - 1 | |
| return { | |
| "k": torch.zeros(batch_size, W1, self.H, self.D, device=device), | |
| "v": torch.zeros(batch_size, W1, self.H, self.D, device=device), | |
| "n": 0, | |
| } | |
| def _project(self, x): | |
| B, L, _ = x.shape | |
| q = self.mixer.swa_fused_q(x).reshape(B, L, self.H, self.D) | |
| k = self.mixer.swa_fused_k(x).reshape(B, L, self.H, self.D) | |
| v = self.mixer.swa_fused_v(x).reshape(B, L, self.H, self.D) | |
| return (q, k, v) | |
| def forward_chunk(self, x: torch.Tensor, state): | |
| B, L, C = x.shape | |
| w = self.w | |
| if state is None: | |
| state = self.init_state(B, device=x.device) | |
| n = state["n"] | |
| W1 = w - 1 | |
| ck = state["k"][:, W1 - n :, :, :] if n > 0 else state["k"][:, :0] | |
| cv = state["v"][:, W1 - n :, :, :] if n > 0 else state["v"][:, :0] | |
| q, k, v = self._project(x) | |
| k_all = torch.cat([ck, k], dim=1) | |
| v_all = torch.cat([cv, v], dim=1) | |
| Tk = n + L | |
| iq = torch.arange(L, device=x.device)[:, None] + n | |
| jk = torch.arange(Tk, device=x.device)[None, :] | |
| mask = (jk <= iq) & (jk > iq - w) | |
| qh = q.transpose(1, 2) | |
| kh = k_all.transpose(1, 2) | |
| vh = v_all.transpose(1, 2) | |
| o = F.scaled_dot_product_attention(qh, kh, vh, attn_mask=mask) | |
| o = o.transpose(1, 2).reshape(B, L, C) | |
| out = x + self.mixer.swa_fused_o(o) | |
| keep = min(W1, Tk) | |
| new_k = state["k"].clone() | |
| new_v = state["v"].clone() | |
| if keep > 0: | |
| new_k[:, W1 - keep :, :, :] = k_all[:, Tk - keep :, :, :] | |
| new_v[:, W1 - keep :, :, :] = v_all[:, Tk - keep :, :, :] | |
| new_state = {"k": new_k, "v": new_v, "n": keep} | |
| return (out, new_state) | |
| def step(self, x: torch.Tensor, state): | |
| if x.dim() == 2: | |
| x = x.unsqueeze(1) | |
| o, state = self.forward_chunk(x, state) | |
| return (o.squeeze(1), state) | |