Skip to main content

Dotpromptz is a language-neutral executable prompt template file format for Generative AI.

Project description

LLM Adapters & CLI (Fork Extension)

This fork adds LLM API adapters and a command-line tool so you can run .prompt files directly against OpenAI, Anthropic, Google Gemini, or any third-party compatible service (all adapters support custom base_url).

Quick Start (CLI)

# Install (all adapters included by default)
uv add "dotpromptz-py"

# Set API key
export OPENAI_API_KEY="sk-..."

# Run a prompt (input configured in frontmatter)
runprompt my_prompt.prompt

# Batch mode (auto-detected from frontmatter input)
runprompt my_prompt.prompt

Adapter and model are configured in the .prompt file frontmatter:

---
adapter: openai          # optional — auto-inferred from config.model name
config:
  model: gpt-4o
runtime:
  max_workers: 10       # Concurrent workers for batch processing
output:
  output_dir: ./results # Optional directory for output files
  jsonl: true           # Output in JSONL format
input:
  topic: "AI"
---
Tell me about {{topic}}.

For third-party compatible services (e.g. DeepSeek, Ollama):

---
adapter:
  name: openai
  base_url: https://api.deepseek.com
config:
  model: deepseek-chat
---
Tell me about {{topic}}.

Input Formats

Input data is configured in the .prompt file frontmatter using the input field. The CLI no longer takes a separate input file argument.

1. Inline data (single record):

---
input:
  name: "Alice"
  age: 30
---
Hello {{name}}!

2. File reference (auto-detects single vs batch):

---
input: "data.json"  # Relative to .prompt file
---
Process {{field1}} and {{field2}}.

3. Batch mode (list of records):

---
input:
  - {name: "Alice", age: 30}
  - {name: "Bob", age: 25}
---
Hello {{name}}!

4. JSONL file (always batch):

---
input: "batch.jsonl"
---
Process {{item}}.

5. Defaults (shared values for batch records):

When running batch mode, you often have values that stay the same across all records (e.g. language, tone, model parameters). Use input.defaults to avoid repeating them:

---
input:
  defaults:
    language: "Chinese"
    tone: "formal"
  data:
    - {name: "Alice"}
    - {name: "Bob", tone: "casual"}  # overrides defaults
---
Translate a greeting for {{name}} in {{language}} with a {{tone}} tone.

This is equivalent to writing:

input:
  - {name: "Alice", language: "Chinese", tone: "formal"}
  - {name: "Bob", language: "Chinese", tone: "casual"}
  • defaults: dict of fixed values merged into every record
  • data: the variable data (supports all existing formats: dict, list, string file path)
  • Per-record values in data override defaults when keys conflict
  • defaults without data produces a single record containing just the defaults

File paths: All relative file paths are resolved relative to the .prompt file directory. Absolute paths are also supported.

Quick Start (Python)

import asyncio
from dotpromptz import Dotprompt
from dotpromptz.typing import DataArgument
from dotpromptz.adapters import get_adapter

async def main():
    dp = Dotprompt()
    # Option 1: Use frontmatter input (auto-loaded from .prompt file)
    rendered = dp.render(source)
    
    # Option 2: Override with caller data
    # rendered = dp.render(source, data=DataArgument(input={"topic": "AI"}))
    adapter = get_adapter("openai")
    response = await adapter.generate(rendered)
    print(response.text)

asyncio.run(main())

Supported Adapters

Adapter Env Var
OpenAI OPENAI_API_KEY
Anthropic ANTHROPIC_API_KEY
Google Gemini GOOGLE_API_KEY

All adapters and their SDK dependencies (openai, anthropic, google-genai) are included as core dependencies — no extras needed. All adapters support base_url for third-party compatible endpoints (e.g. DeepSeek, vLLM, Ollama). Configure via frontmatter adapter.base_url or env vars (OPENAI_BASE_URL / ANTHROPIC_BASE_URL / GOOGLE_BASE_URL).

Image Generation (Google Gemini)

Dotprompt supports native image generation via Gemini's generateContent API with response_modalities=["IMAGE"]. To use it, set output.format: image and output.save_path in the frontmatter.

Text-to-image example (draw_cat.prompt):

---
adapter: google
config:
  model: gemini-2.0-flash-exp
output:
  format: image
  save_path: output/cat.png
input:
  style: "watercolor"
---
Draw a {{style}} cat sitting on a windowsill.
runprompt draw_cat.prompt
# → Image saved to: output/cat.png

Image-to-image example (using {{media}} helper for input):

---
adapter: google
config:
  model: gemini-2.0-flash-exp
output:
  format: image
  save_path: output/edited.png
input:
  image_url: "https://example.com/photo.jpg"
  instruction: "Make it black and white"
---
{{media url=image_url}}
{{instruction}}
runprompt edit_image.prompt

Notes:

  • output.save_path is required when format is image. Omitting it raises a validation error at parse time.
  • save_path is validated against path traversal attacks (e.g. ../../etc/passwd) — only paths within the current working directory are allowed.
  • Currently only the Google adapter supports image generation. Only the first generated image is saved.
  • The parent directory of save_path is created automatically if it does not exist.

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

dotpromptz_py-1.5.0.tar.gz (175.7 kB view details)

Uploaded Source

Built Distribution

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

dotpromptz_py-1.5.0-py3-none-any.whl (60.5 kB view details)

Uploaded Python 3

File details

Details for the file dotpromptz_py-1.5.0.tar.gz.

File metadata

  • Download URL: dotpromptz_py-1.5.0.tar.gz
  • Upload date:
  • Size: 175.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for dotpromptz_py-1.5.0.tar.gz
Algorithm Hash digest
SHA256 c0eb8daf95382de3e08d6d58c075a4f4020c1e34982ed26a5f7b895261f3eb4a
MD5 b30b8715da53d97e570f02d000e033ba
BLAKE2b-256 98ee42632fbb6e308bb760114f06eabb40e1b2b4dd8f3bd4b6ab4a411570fa24

See more details on using hashes here.

Provenance

The following attestation bundles were made for dotpromptz_py-1.5.0.tar.gz:

Publisher: publish-pypi.yml on my-three-kingdoms/dotpromptz

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dotpromptz_py-1.5.0-py3-none-any.whl.

File metadata

  • Download URL: dotpromptz_py-1.5.0-py3-none-any.whl
  • Upload date:
  • Size: 60.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for dotpromptz_py-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 44e9900e22f0f26d84ca6ce4df863da02cb9eebdacee4970a9e5fe0afc6b4f4e
MD5 2f6a46d8208052ae8fccf193cab09a05
BLAKE2b-256 cd779b60d041132c4a26073a794ef9387de9384332e9017025e5d168f6d19922

See more details on using hashes here.

Provenance

The following attestation bundles were made for dotpromptz_py-1.5.0-py3-none-any.whl:

Publisher: publish-pypi.yml on my-three-kingdoms/dotpromptz

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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