Skip to main content

A toolkit for managing and testing LM Studio models with automatic context limit discovery

Project description

LMStrix

LMStrix is a professional Python toolkit designed to supercharge your interaction with LM Studio. It provides a powerful command-line interface (CLI) and Python API for managing, testing, and running local language models, with a standout feature: Adaptive Context Optimization.

Key Features

  • ๐Ÿ” Automatic Context Discovery: Binary search algorithm to find the true operational context limit of any model
  • ๐Ÿ“Š Beautiful Verbose Logging: Enhanced stats display with emojis showing inference metrics, timing, and token usage
  • ๐Ÿš€ Smart Model Management: Models persist between calls to reduce loading overhead
  • ๐ŸŽฏ Flexible Inference Engine: Run inference with powerful prompt templating and percentage-based output control
  • ๐Ÿ“‹ Comprehensive Model Registry: Track models, their context limits, and test results with JSON persistence
  • ๐Ÿ›ก๏ธ Safety Controls: Configurable thresholds and fail-safes to prevent system crashes
  • ๐Ÿ’ป Rich CLI Interface: Beautiful terminal output with progress indicators and formatted tables

Installation

# Using pip
pip install lmstrix

# Using uv (recommended)
uv pip install lmstrix

Quick Start

Command-Line Interface

# Scan for available models in LM Studio
lmstrix scan

# List all models with their context limits and test status
lmstrix list

# Test context limit for a specific model
lmstrix test llama-3.2-3b-instruct

# Test all untested models with safety threshold
lmstrix test --all --threshold 102400

# Run inference with enhanced verbose logging
lmstrix infer "What is the capital of Poland?" -m llama-3.2-3b-instruct --verbose

# Run inference with percentage-based output tokens
lmstrix infer "Explain quantum computing" -m llama-3.2-3b-instruct --out_ctx "25%"

# Use file-based prompts with templates
lmstrix infer summary -m llama-3.2-3b-instruct --file_prompt adam.toml --text_file document.txt

# Direct text input for prompts
lmstrix infer "Summarize: {{text}}" -m llama-3.2-3b-instruct --text "Your content here"

Enhanced Verbose Output

When using --verbose, LMStrix provides comprehensive statistics:

โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
๐Ÿค– MODEL: llama-3.2-3b-instruct
๐Ÿ”ง CONFIG: maxTokens=26214, temperature=0.7
๐Ÿ“ PROMPT (1 lines, 18 chars): Capital of Poland?
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
โ ธ Running inference...
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
๐Ÿ“Š INFERENCE STATS
โšก Time to first token: 0.82s
โฑ๏ธ  Total inference time: 11.66s
๐Ÿ”ข Predicted tokens: 338
๐Ÿ“ Prompt tokens: 5
๐ŸŽฏ Total tokens: 343
๐Ÿš€ Tokens/second: 32.04
๐Ÿ›‘ Stop reason: eosFound
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

Python API

from lmstrix.loaders.model_loader import load_model_registry
from lmstrix.core.inference_manager import InferenceManager

# Load model registry
registry = load_model_registry()

# List available models
models = registry.list_models()
print(f"Available models: {len(models)}")

# Run inference
manager = InferenceManager(verbose=True)
result = manager.infer(
    model_id="llama-3.2-3b-instruct",
    prompt="What is the meaning of life?",
    out_ctx=100,
    temperature=0.7
)

if result["succeeded"]:
    print(f"Response: {result['response']}")
    print(f"Tokens used: {result['tokens_used']}")
    print(f"Time: {result['inference_time']:.2f}s")

Context Testing & Optimization

LMStrix uses a sophisticated binary search algorithm to discover true model context limits:

Safety Features

  • Threshold Protection: Configurable maximum context size to prevent system crashes
  • Progressive Testing: Starts with small contexts and increases safely
  • Persistent Results: Saves test results to avoid re-testing

Testing Commands

# Test specific model
lmstrix test llama-3.2-3b-instruct

# Test all models with custom threshold
lmstrix test --all --threshold 65536

# Test at specific context size
lmstrix test --all --ctx 32768

# Reset and re-test a model
lmstrix test llama-3.2-3b-instruct --reset

Model Management

Registry Commands

# Scan for new models
lmstrix scan --verbose

# List models with different sorting
lmstrix list --sort size        # Sort by size
lmstrix list --sort ctx         # Sort by tested context
lmstrix list --show json        # Export as JSON

# Check system health
lmstrix health --verbose

Model Persistence

Models stay loaded between inference calls for improved performance:

  • When no explicit context is specified, models remain loaded
  • Last-used model is remembered for subsequent calls
  • Explicit context changes trigger model reloading

Prompt Templating

LMStrix supports flexible prompt templating with TOML files:

# adam.toml
[aps]
prompt = """
You are an AI assistant skilled in Abstractive Proposition Segmentation.
Convert the following text: {{text}}
"""

[summary] 
prompt = "Create a comprehensive summary: {{text}}"

Use with CLI:

lmstrix infer aps --file_prompt adam.toml --text "Your text here"
lmstrix infer summary --file_prompt adam.toml --text_file document.txt

Development

# Clone repository
git clone https://github.com/twardoch/lmstrix.git
cd lmstrix

# Install for development
pip install -e ".[dev]"

# Run tests
pytest

# Run linting
hatch run lint:all

Project Structure

src/lmstrix/
โ”œโ”€โ”€ cli/main.py              # CLI interface
โ”œโ”€โ”€ core/
โ”‚   โ”œโ”€โ”€ inference_manager.py # Unified inference engine
โ”‚   โ”œโ”€โ”€ models.py            # Model registry
โ”‚   โ””โ”€โ”€ context_tester.py    # Context limit testing
โ”œโ”€โ”€ api/client.py            # LM Studio API client
โ”œโ”€โ”€ loaders/                 # Data loading utilities
โ””โ”€โ”€ utils/                   # Helper utilities

Features in Detail

Adaptive Context Optimizer

  • Binary search algorithm for efficient context limit discovery
  • Safety thresholds to prevent system crashes
  • Automatic persistence of test results
  • Resume capability for interrupted tests

Enhanced Logging

  • Beautiful emoji-rich output in verbose mode
  • Comprehensive inference statistics
  • Progress indicators for long operations
  • Clear error messages with context

Smart Model Management

  • Automatic model discovery from LM Studio
  • Persistent registry with JSON storage
  • Model state tracking (loaded/unloaded)
  • Batch operations for multiple models

Requirements

  • Python 3.11+
  • LM Studio installed and configured
  • Models downloaded in LM Studio

License

MIT License - see LICENSE file for details.

Contributing

Contributions welcome! Please read our contributing guidelines and submit pull requests for any improvements.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lmstrix-1.0.58.tar.gz (61.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lmstrix-1.0.58-py3-none-any.whl (55.8 kB view details)

Uploaded Python 3

File details

Details for the file lmstrix-1.0.58.tar.gz.

File metadata

  • Download URL: lmstrix-1.0.58.tar.gz
  • Upload date:
  • Size: 61.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for lmstrix-1.0.58.tar.gz
Algorithm Hash digest
SHA256 f76cfd44a05e2a778c105b76e3355b553c0ced0d20f1a8d889d653f0a0c68f3f
MD5 31e2e8d18f8346358f8665993dc257a2
BLAKE2b-256 0f48f84ad56358797fece9dc40ce46443819f8be5f29cea0c8061df79e5c9166

See more details on using hashes here.

File details

Details for the file lmstrix-1.0.58-py3-none-any.whl.

File metadata

  • Download URL: lmstrix-1.0.58-py3-none-any.whl
  • Upload date:
  • Size: 55.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for lmstrix-1.0.58-py3-none-any.whl
Algorithm Hash digest
SHA256 094da077c65ef06c0b79b446e914a5958a8b6d41ecaa9d55005b62ae0d20e23e
MD5 a446de8eada07d90c027c123a2c4f68d
BLAKE2b-256 2ee5a9a043fef70550827f442850a8bc5136a3c9cf2187aac6d3a93b1a136f73

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page