Skip to content

Version History

Important: As of 2025.8.16, SteadyText has transitioned from semantic versioning to date-based versioning (yyyy.mm.dd format). This change reflects the rapid pace of AI model improvements and feature additions.

This document outlines the major versions of SteadyText and the key features introduced in each.

Latest Version: 2025.8.16 - Date-Based Versioning Transition

Version Key Features Default Generation Model Default Embedding Model Default Reranking Model Python Versions
2.6.x - Unsafe Mode Structured Generation: Added support for structured generation (JSON, regex, choices) with remote models.
- Remote Model Support: Full structured output capabilities for OpenAI and Cerebras models.
- Maintenance Release: Version bumps and dependency updates.
ggml-org/gemma-3n-E2B-it-GGUF (gemma-3n-E2B-it-Q8_0.gguf) Qwen/Qwen3-Embedding-0.6B-GGUF (Qwen3-Embedding-0.6B-Q8_0.gguf) Qwen/Qwen3-Reranker-4B-GGUF (Qwen3-Reranker-4B-Q8_0.gguf) >=3.10, <3.14
2.4.x - Native Grammar Support: Replaced Outlines with llama.cpp's native GBNF grammars for structured generation.
- PostgreSQL Structured Generation: Added steadytext_generate_json(), steadytext_generate_regex(), steadytext_generate_choice() SQL functions.
- Better Compatibility: Fixes issues with Gemma-3n and other models.
ggml-org/gemma-3n-E2B-it-GGUF (gemma-3n-E2B-it-Q8_0.gguf) Qwen/Qwen3-Embedding-0.6B-GGUF (Qwen3-Embedding-0.6B-Q8_0.gguf) Qwen/Qwen3-Reranker-4B-GGUF (Qwen3-Reranker-4B-Q8_0.gguf) >=3.10, <3.14
2.3.x - Document Reranking: Added reranking functionality with Qwen3-Reranker-4B model.
- Structured Generation: Added support for JSON, Regex, and Choice-constrained generation via outlines.
- New API parameters: schema, regex, choices added to generate().
- New convenience functions: generate_json(), generate_regex(), generate_choice().
ggml-org/gemma-3n-E2B-it-GGUF (gemma-3n-E2B-it-Q8_0.gguf) Qwen/Qwen3-Embedding-0.6B-GGUF (Qwen3-Embedding-0.6B-Q8_0.gguf) Qwen/Qwen3-Reranker-4B-GGUF (Qwen3-Reranker-4B-Q8_0.gguf) >=3.10, <3.14
2.1.x - Custom Seeds: Added seed parameter to all generation and embedding functions.
- PostgreSQL Extension: Released pg_steadytext extension.
- Enhanced Reproducibility: Full control over deterministic generation.
ggml-org/gemma-3n-E2B-it-GGUF (gemma-3n-E2B-it-Q8_0.gguf) Qwen/Qwen3-Embedding-0.6B-GGUF (Qwen3-Embedding-0.6B-Q8_0.gguf) - >=3.10, <3.14
2.0.x - Daemon Mode: Persistent model serving with ZeroMQ.
- Gemma-3n Models: Switched to gemma-3n for generation.
- Thinking Mode Deprecated: Removed thinking mode.
ggml-org/gemma-3n-E2B-it-GGUF (gemma-3n-E2B-it-Q8_0.gguf) Qwen/Qwen3-Embedding-0.6B-GGUF (Qwen3-Embedding-0.6B-Q8_0.gguf) - >=3.10, <3.14
1.x - Model Switching: Added support for switching models via environment variables.
- Centralized Cache: Unified cache system with SQLite backend.
- CLI Improvements: Streaming by default, quiet output, new pipe syntax.
Qwen/Qwen3-1.7B-GGUF (Qwen3-1.7B-Q8_0.gguf) Qwen/Qwen3-Embedding-0.6B-GGUF (Qwen3-Embedding-0.6B-Q8_0.gguf) - >=3.10, <3.14
0.x - Initial Release: Deterministic text generation and embedding. Qwen/Qwen1.5-0.5B-Chat-GGUF (qwen1_5-0_5b-chat-q4_k_m.gguf) Qwen/Qwen1.5-0.5B-Chat-GGUF (qwen1_5-0_5b-chat-q8_0.gguf) - >=3.10

Detailed Release Notes

Version 2.6.1 - Unsafe Mode Support for Structured Generation

Release Date: August 2025

🚀 Remote Model Structured Generation

Major Feature: Extended unsafe mode to support full structured generation capabilities with remote models.

Key Improvements: - Full Structured Output: Remote models now support JSON schemas, regex patterns, and choice constraints - Seamless Integration: Same API as local models - just add model and unsafe_mode parameters - Provider Support: Works with OpenAI (gpt-4o, gpt-4o-mini) and Cerebras (llama3.1) models - Best-Effort Determinism: Uses seed parameters for reproducibility when available

Example Usage:

import steadytext
from pydantic import BaseModel

class Product(BaseModel):
    name: str
    price: float

# JSON generation with remote models
result = steadytext.generate_json(
    "Create a laptop product",
    schema=Product,
    model="openai:gpt-4o-mini",
    unsafe_mode=True
)

# Regex patterns with remote models
phone = steadytext.generate_regex(
    "Contact: ",
    pattern=r"\d{3}-\d{3}-\d{4}",
    model="cerebras:llama3.1-8b",
    unsafe_mode=True
)

# Choice constraints with remote models
sentiment = steadytext.generate_choice(
    "Great product!",
    choices=["positive", "negative", "neutral"],
    model="openai:gpt-4o-mini",
    unsafe_mode=True
)

🔧 PostgreSQL Extension Updates

Version 1.4.5: Maintenance release with updated dependencies - Updated SteadyText dependency to >= 2.6.1 - Improved compatibility with latest Python and PostgreSQL versions - Enhanced async function support for structured generation

📋 Requirements

  • Python: 3.10+ (unchanged)
  • Optional: OpenAI client for remote model support (pip install openai)
  • Environment: Set STEADYTEXT_UNSAFE_MODE=true for remote models

Version 2.4.1 - Native Grammar Support

Release Date: July 2025

🔧 Grammar-Based Structured Generation

Major Improvement: Replaced Outlines with llama.cpp's native GBNF (Grammatical Backus-Naur Form) grammar support.

Benefits: - Better Compatibility: Fixes vocabulary processing errors with Gemma-3n, Qwen1.5, Phi-2, and Llama 3.x models - Improved Performance: Native integration with llama.cpp eliminates external library overhead - No API Changes: Existing structured generation code continues to work unchanged - Deterministic Output: Grammar-based generation maintains SteadyText's determinism guarantees

Technical Details: - New core/grammar.py module converts JSON schemas, regex patterns, and choice lists to GBNF - StructuredGenerator now uses llama-cpp-python's grammar parameter directly - Removed outlines dependency, simplifying the dependency tree

🐘 PostgreSQL Structured Generation

New Feature: Added structured generation support to the PostgreSQL extension.

New SQL Functions: - steadytext_generate_json(prompt, schema) - Generate JSON conforming to a schema - steadytext_generate_regex(prompt, pattern) - Generate text matching a regex - steadytext_generate_choice(prompt, choices) - Generate one of the provided choices

Example Usage:

-- Generate structured JSON
SELECT steadytext_generate_json(
    'Create a person named Alice',
    '{"type": "object", "properties": {"name": {"type": "string"}, "age": {"type": "integer"}}}'::jsonb
);

-- Generate text matching a pattern
SELECT steadytext_generate_regex(
    'My phone number is',
    '\d{3}-\d{3}-\d{4}'
);

-- Generate from choices
SELECT steadytext_generate_choice(
    'Is Python good?',
    ARRAY['yes', 'no', 'maybe']
);

Version 2.3.0 - Document Reranking & Structured Generation

Release Date: July 2025

🔍 Document Reranking

Major Feature: Added document reranking functionality powered by the Qwen3-Reranker-4B model.

  • Python API: New steadytext.rerank() function with customizable task descriptions
  • steadytext.rerank(query, documents, task="custom search task")
  • Support for both single document and list of documents
  • Optional score returning with return_scores parameter
  • CLI Command: st rerank for command-line reranking operations
  • st rerank "query" doc1.txt doc2.txt --top-k 5
  • Fallback Support: Simple word overlap scoring when model unavailable
  • Dedicated Cache: Separate frecency cache for reranking results

✨ Structured Generation

Major Feature: Introduced structured generation capabilities powered by the Outlines library.

  • JSON Generation: Generate JSON that conforms to a JSON schema or a Pydantic model.
  • steadytext.generate(prompt, schema=MyPydanticModel)
  • steadytext.generate_json(prompt, schema={"type": "object", ...})
  • Regex-Constrained Generation: Force output to match a regular expression.
  • steadytext.generate(prompt, regex=r"\d{3}-\d{3}-\d{4}")
  • Multiple Choice: Force model to choose from a list of options.
  • steadytext.generate(prompt, choices=["A", "B", "C"])

Use Cases: - Reliable data extraction - Building robust function-calling systems - Creating predictable application logic - Generating structured data for databases

Version 2.1.0+ - Custom Seeds & PostgreSQL Extension

Release Date: June 2025

🎯 Custom Seed Support

Major Enhancement: Added comprehensive custom seed support across all SteadyText APIs.

  • Python API: All functions now accept optional seed: int = DEFAULT_SEED parameter
  • steadytext.generate(prompt, seed=123)
  • steadytext.generate_iter(prompt, seed=456)
  • steadytext.embed(text, seed=789)

  • CLI Support: Added --seed flag to all commands

  • st generate "prompt" --seed 123
  • st embed "text" --seed 456
  • st vector similarity "text1" "text2" --seed 789

  • Daemon Integration: Seeds are properly passed through daemon protocol

  • Fallback Behavior: Deterministic fallbacks now respect custom seeds
  • Cache Keys: Seeds are included in cache keys to prevent collisions

Use Cases: - Reproducible Research: Document and reproduce exact results - A/B Testing: Generate controlled variations of content - Experimental Design: Systematic exploration of model behavior - Content Variations: Create different versions while maintaining quality

🐘 PostgreSQL Extension (pg_steadytext)

New Release: Complete PostgreSQL extension for SteadyText integration.

Core Features: - SQL Functions: Native PostgreSQL functions for text generation and embeddings - steadytext_generate(prompt, max_tokens, use_cache, seed) - steadytext_embed(text, use_cache, seed) - steadytext_daemon_start(), steadytext_daemon_status(), steadytext_daemon_stop()

  • Vector Integration: Full compatibility with pgvector extension
  • Built-in Caching: PostgreSQL-based frecency cache with eviction
  • Daemon Support: Integrates with SteadyText's ZeroMQ daemon for performance
  • Configuration Management: SQL-based configuration with steadytext_config table

Installation:

# Install Python dependencies
pip3 install steadytext>=2.1.0

# Build and install extension
git clone https://github.com/julep-ai/steadytext.git
cd steadytext/pg_steadytext
make && sudo make install

# Enable in PostgreSQL
psql -c "CREATE EXTENSION pg_steadytext CASCADE;"

Docker Support:

# Standard build
docker build -t pg_steadytext .

# With fallback model for compatibility
docker build --build-arg STEADYTEXT_USE_FALLBACK_MODEL=true -t pg_steadytext .

🔧 Technical Improvements

  • Validation: Added validate_seed() function for input validation
  • Environment Setup: Enhanced set_deterministic_environment() with custom seeds
  • Error Handling: Improved error messages and fallback behavior
  • Documentation: Comprehensive documentation and examples

📖 Documentation Updates

  • API Documentation: Updated all function signatures with seed parameters
  • CLI Reference: Added --seed flag documentation for all commands
  • Examples: New comprehensive examples for custom seed usage
  • PostgreSQL Guide: Complete integration guide for pg_steadytext
  • Migration Guide: Instructions for upgrading from previous versions

🔄 Breaking Changes

None - Version 2.1.0+ is fully backward compatible with 2.0.x. All existing code continues to work unchanged, with new seed parameters being optional.

🐛 Bug Fixes

  • Fixed cache key generation to include seed for proper isolation
  • Improved daemon protocol to handle seed parameters correctly
  • Enhanced fallback behavior to be deterministic with custom seeds
  • Resolved edge cases in streaming generation with custom seeds

📋 Requirements

  • Python: 3.10+ (unchanged)
  • PostgreSQL: 14+ (for pg_steadytext extension)
  • Dependencies: All existing dependencies remain compatible