Skip to main content

PromptGuard

CI PyPI version Python versions License

Never parse LLM output again.

LLMs are probabilistic. Software is deterministic.

PromptGuard bridges the gap.

PromptGuard is a production-grade reliability layer that turns Large Language Models into safe, structured, testable software components.

If your application depends on LLM outputs — agents, workflows, background jobs, voice systems, document parsing — then PromptGuard prevents the failures that eventually break every LLM app in production.


Why PromptGuard Exists

Every LLM developer eventually runs into this:

json.loads(llm_output)  # crashes in prod

Because LLMs:

  • return invalid JSON
  • hallucinate fields
  • change output formats
  • break silently after model updates
  • fail one out of every N requests

These failures cause:

  • background job crashes
  • broken agents
  • corrupted pipelines
  • silent data loss
  • 2am production incidents

PromptGuard eliminates this entire class of problems.


What PromptGuard Guarantees

  • Schema-valid outputs — always
  • Automatic repair when models misbehave
  • Deterministic structured data
  • Prompt regression testing
  • Provider-agnostic execution

No regex. No fragile parsing. No silent failures.


Why PromptGuard Over Alternatives?

Feature PromptGuard Instructor Outlines
Auto repair loop Yes (N retries) 1 retry No
Multi-provider 4 built-in OpenAI-centric Multiple
Prompt versioning Built-in No No
Regression testing Built-in No No
Schema types 4 (Pydantic, TypedDict, dataclass, JSON) Pydantic Limited
CLI tooling Yes No No

PromptGuard is a reliability layer, not just a parser. Versioning + testing + repair in one package.


Installation

pip install llm-promptguard

# With provider-specific dependencies
pip install llm-promptguard[openai]
pip install llm-promptguard[anthropic]
pip install llm-promptguard[google]
pip install llm-promptguard[all]

Quick Start

from promptguard import llm_call
from pydantic import BaseModel

class Person(BaseModel):
    name: str
    age: int

result = llm_call(
    model="gpt-4o",
    prompt="John is 30 years old",
    schema=Person
)

print(result.data)
# Person(name='John', age=30)

If the model returns invalid output, PromptGuard automatically:

  1. detects the schema violation
  2. explains the error
  3. re-prompts the model
  4. repairs the output
  5. returns guaranteed valid data

Real-World Examples

Resume & Document Parsing

class Resume(BaseModel):
    name: str
    skills: list[str]
    years_experience: int

resume = llm_call(
    prompt=resume_text,
    model="gpt-4o",
    schema=Resume
)
  • No missing fields
  • No malformed JSON
  • No broken pipelines

Email Triage Automation

class EmailIntent(BaseModel):
    intent: str
    urgency: int
    requires_reply: bool

intent = llm_call(
    prompt=email_body,
    model="gpt-4o",
    schema=EmailIntent
)

Safe to run in background workers. Safe to store in databases. Safe to trigger workflows.


AI Agents (Tool Calling)

class ToolArgs(BaseModel):
    action: str
    resource_id: str

args = llm_call(
    prompt=agent_prompt,
    model="gpt-4o",
    schema=ToolArgs
)

run_tool(**args.data.model_dump())

PromptGuard prevents agents from:

  • hallucinating arguments
  • calling tools incorrectly
  • freezing execution chains

Voice Agents & Call Automation

Speech → LLM → Action

If structure breaks, the call fails.

PromptGuard ensures voice systems always receive valid commands.


Background Jobs & Queues

@worker.task
async def process_document(text):
    result = await allm_call(
        prompt=text,
        model="gpt-4o",
        schema=Extraction
    )
    save(result.data)

No retries. No poison messages. No corrupted jobs.


LangChain Integration

PromptGuard works seamlessly with LangChain.

from langchain.tools import Tool
from promptguard import llm_call
from pydantic import BaseModel

class SearchArgs(BaseModel):
    query: str

search_tool = Tool(
    name="search",
    func=lambda q: search_api(q),
    description="Search the web"
)

args = llm_call(
    prompt="Search for Tesla earnings",
    model="gpt-4o",
    schema=SearchArgs
)

search_tool.run(args.data.query)

PromptGuard becomes the type-safe boundary between agents and tools.


Prompt Regression Testing

promptguard test
  • detects prompt drift
  • catches model behavior changes
  • prevents silent regressions

LLM prompts finally become testable.


The Demo

class Order(BaseModel):
    product: str
    quantity: int
    price: float

order = llm_call(
    prompt="Buy two iPhones for $999 each",
    model="gpt-4o",
    schema=Order
)

print(order.data)
# Order(product='iPhone', quantity=2, price=999.0)

No parsing. No retries. No crashes.

Just software-safe AI.


Mental Model

Without PromptGuard:

LLM → text → hope → bugs

With PromptGuard:

LLM → contract → software

When You Should Use PromptGuard

If your application:

  • runs LLMs in production
  • executes workflows or agents
  • parses model output
  • stores results in databases
  • depends on structure

Then PromptGuard is not optional.


CLI Commands

promptguard init           # Initialize in a project
promptguard run prompt.yaml  # Run a prompt from YAML
promptguard test           # Run regression tests
promptguard history        # Show version history
promptguard diff <hash>    # Compare versions
promptguard stats          # Show statistics

Supported Providers

Provider Model Examples
OpenAI gpt-4o, gpt-4o-mini, gpt-4-turbo
Anthropic claude-3-opus, claude-3-sonnet, claude-3-haiku
Google gemini-1.5-pro, gemini-1.5-flash
Local Ollama, LM Studio, vLLM (OpenAI-compatible)

Testing with real LLM Calls

  • export OPENAI_API_KEY=sk-...
  • ./scripts/test_all.sh

Documentation

Full docs at metanoia-oss.github.io/promptguard.


License

Apache 2.0


PromptGuard — because production AI must be dependable.

Metadata

Release files for llm-promptguard 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for llm-promptguard 0.1.1
File Size Uploaded Provenance Actions
llm_promptguard-0.1.1.tar.gz 61.9 kB With provenance Details for llm_promptguard-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for llm-promptguard 0.1.1
File Interpreter ABI Platform Actions
llm_promptguard-0.1.1-py3-none-any.whl Python 3 none any Details for llm_promptguard-0.1.1-py3-none-any.whl

Total release size: 115.7 kB

Release files / llm_promptguard-0.1.1.tar.gz

Download URL llm_promptguard-0.1.1.tar.gz
Size 61.9 kB
Tags Source
SHA-256 checksum
How to use checksums
6e0052e87a75af9c6ddb9483af35527fc1d1b68d22c5fe6852c0f85f64affc81
BLAKE2b-256 checksum
How to use checksums
ecff939134aa4745ebdccc685bfbbce2ad8087e9da44a180dc9f4a09168fa178
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 28, 2026.

Transparency log

Release files / llm_promptguard-0.1.1-py3-none-any.whl

Download URL llm_promptguard-0.1.1-py3-none-any.whl
Size 53.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
67b6be1b0c06719cb33dc378cf133dca54ab56bd21cc09db5f8250feb6ddbb38
BLAKE2b-256 checksum
How to use checksums
0c0d6a49382e53f8261bd89a9e073a8ca87df471df7c51cc9499a70cb9c626ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 28, 2026.

Transparency log

Security for llm-promptguard 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for llm_promptguard-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 28, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page