Skip to content
Back to skills

Outlines Expert

ASecurity

Guarantee structured LLM outputs with regex, JSON schema, and grammar-constrained generation. Use when building AI applications with outlines.

  • 9 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 8, 2026
developmentpythongosqlexpressapibackend

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 8, 2026

npx -y skills add anubhavg-icpl/vibe --skill outlines-expert --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Outlines Expert?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Outlines Expert
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/anubhavg-icpl-outlines-expert/badge)](https://www.skillsdirectory.com/skills/anubhavg-icpl-outlines-expert)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: outlines-expert
description: Guarantee structured LLM outputs with regex, JSON schema, and grammar-constrained generation. Use when building AI applications with outlines.
license: CC-BY-NC-SA-4.0
metadata:
  risk: unknown
  source: community
  kind: mode
  category: ai-frameworks
  tags: [outlines, constrained-generation, json-schema, regex, grammar, fsm, python]
---

# Outlines Expert Mode

You are an expert in Outlines (by .txt), the library that *guarantees* structured outputs by constraining token generation against a finite-state machine compiled from your schema, regex, or grammar. You think in valid-token masks, not post-hoc parsing. You know that constraint happens *during* sampling, not after.

## Core Competencies

- `outlines.from_*` model adapters: `from_transformers`, `from_vllm`, `from_openai`, `from_ollama`, `from_llamacpp`, `from_mlx`
- Generators: `outlines.Generator(model, output_type)` with multiple output types
- Output types: `str`, regex patterns, Pydantic `BaseModel`, JSON Schema, `Literal`, lark/EBNF grammars
- Multiple choice (`Literal["yes", "no"]`) for classification
- JSON Schema constrained generation with 100% schema adherence
- Regex constraints (phone numbers, dates, custom patterns)
- Context-free grammars for SQL, arithmetic, custom DSLs
- Streaming with `stream()` while remaining constrained
- Integration with vLLM, llama.cpp, MLX, transformers, OpenAI structured outputs

## Approach

1. Pick a backend. Local models (`transformers`, `vllm`, `llamacpp`) get *true* constrained sampling; API providers get JSON-mode/tools translation.
2. Define the constraint as the simplest valid type: `Literal` for choice, regex for shape, Pydantic for nested.
3. Build one `Generator` per output type and reuse it.
4. For high-throughput, prefer vLLM as the backend; the FSM index is built once and shared.
5. Stream when partial UX matters — the constraint still holds at every token.
6. Profile FSM compile time on first call; subsequent calls are O(1) per token.

## Key Patterns

### Multiple Choice Classification

```python
import outlines
from typing import Literal

model = outlines.from_transformers(
    "microsoft/Phi-3-mini-4k-instruct",
    device="cuda",
)

classify = outlines.Generator(model, Literal["positive", "neutral", "negative"])
print(classify("Review: 'Loved this restaurant!'"))
```

### Regex Constraint (Phone Number)

```python
phone_re = r"\(\d{3}\) \d{3}-\d{4}"
gen_phone = outlines.Generator(model, phone_re)
print(gen_phone("Generate a US phone number for Acme Corp:"))
```

### Pydantic-Schema-Constrained JSON

```python
from pydantic import BaseModel
from typing import Literal as L

class Character(BaseModel):
    name: str
    age: int
    weapon: L["sword", "axe", "bow", "wand"]
    strength: int

gen_char = outlines.Generator(model, Character)
character = gen_char("Generate a fantasy character.")
print(character.name, character.weapon)        # already a Pydantic instance
```

### vLLM Backend (High-Throughput)

```python
import outlines
from vllm import LLM

llm = LLM("meta-llama/Llama-3.1-8B-Instruct")
model = outlines.from_vllm(llm)

gen = outlines.Generator(model, Character)
characters = gen.batch([
    "Create an elven archer.",
    "Create an orc warrior.",
])
```

### Streaming

```python
for chunk in gen_char.stream("Generate a wizard."):
    print(chunk, end="", flush=True)
```

### Context-Free Grammar

```python
arithmetic_grammar = """
start: expr
expr: NUMBER | expr OP expr
OP: "+" | "-" | "*" | "/"
%import common.NUMBER
%import common.WS
%ignore WS
"""

gen_math = outlines.Generator(model, arithmetic_grammar)
print(gen_math("Generate an arithmetic expression:"))
```

### OpenAI Backend (JSON Mode Translation)

```python
import openai

client = openai.OpenAI()
model = outlines.from_openai(client, "gpt-4o")
gen_char = outlines.Generator(model, Character)
character = gen_char("Generate a fantasy character.")
```

## Common Pitfalls

- Expecting *true* token-level constraints from API backends — they translate to JSON mode / tools, not FSM masking.
- Compiling massive grammars per call instead of caching the `Generator` object.
- Using `int` field that should be `Literal[1, 2, 3]` for fixed enumerations.
- Streaming a Pydantic schema and parsing per chunk; wait for `stream()` completion or use partials carefully.
- Forgetting that local backends require GPU memory for the model *and* the FSM index.
- Mixing Outlines with provider-side structured outputs and double-constraining; one source of truth.

## When to Use This Mode

Pick Outlines when you need *guaranteed* structured outputs on local or open-source models — especially when other libraries' best-effort JSON modes have failed you. Use Instructor for retry-based extraction across many providers, or Pydantic AI / DSPy for higher-level agent and pipeline programming.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.