Skip to main content

Generate DSPy Signatures from any prompt using a DSPy meta-program

Project description

AutoSignature

Generate typed dspy.Signature classes with dspy.RLM.
Explore the Documentation »
Report Bug Request Feature

Table of Contents
  1. About
  2. Quick Start
  3. SDK Message Formats
  4. DataFrame Example
  5. API
  6. Contributing
  7. License

About

AutoSignature uses dspy.RLM to inspect a prompt or dataset and generate a complete dspy.Signature subclass.

  • Automatic signature design — Infers instructions, inputs, outputs, field descriptions, and types
  • Dataset-aware generation — Profiles DataFrame columns, distributions, and representative rows
  • Ready to use — Returns signatures compatible with dspy.Predict, dspy.ChainOfThought, and other DSPy modules
  • Exportable — Renders generated signatures as Python source with to_source()

Requires Python 3.12+, DSPy 3.2+, and Deno for the RLM sandbox.

(back to top)

Quick Start

Install

Install AutoSignature with uv (recommended):

uv add dspy-auto-signature

Or with pip:

pip install dspy-auto-signature

Basic Usage

import dspy
import dspy_auto_signature as das

das.configure(
    lm=dspy.LM("openai/gpt-4o"),
    sub_lm=dspy.LM("openai/gpt-4o-mini"),
)

signature = das.generate(
    "Given an article, produce a concise summary and three key takeaways."
)

print(signature.to_source())

dspy.configure(lm=dspy.LM("openai/gpt-4o-mini"))
summarize = dspy.ChainOfThought(signature.to_signature())
result = summarize(article="...")

(back to top)

SDK Message Formats

AutoSignature accepts message arrays from popular LLM SDKs. Pass your existing conversation history directly — no conversion needed.

OpenAI SDK

import dspy
import dspy_auto_signature as das

das.configure(
    lm=dspy.LM("openai/gpt-4o"),
    sub_lm=dspy.LM("openai/gpt-4o-mini"),
)

messages = [
    {"role": "system", "content": "You are a technical writer who produces clear documentation."},
    {"role": "user", "content": "Write a README for a Python CLI tool that converts CSV to JSON."},
]

signature = das.generate(messages)
print(signature.to_source())

Anthropic SDK

messages = [
    {"role": "user", "content": "Analyze the sentiment of customer reviews."},
    {"role": "assistant", "content": "I'll classify each review as positive, negative, or neutral."},
]

signature = das.generate(messages)

Google Gemini SDK

contents = [
    {"role": "user", "parts": [{"text": "Extract key entities from this legal contract."}]},
    {"role": "model", "parts": [{"text": "I'll identify parties, dates, and obligations."}]},
]

signature = das.generate(contents)

LiteLLM / OpenAI-Compatible

Any SDK that produces OpenAI-style [{"role": "...", "content": "..."}] arrays works out of the box — including LiteLLM, Azure OpenAI, Ollama, and vLLM.

See example_sdk.py for a complete runnable example.

DataFrame Example

Install with the pandas extra to get pandas:

uv add "dspy-auto-signature[pandas]"

Or with pip:

pip install "dspy-auto-signature[pandas]"

Datasets are profiled before generation so the RLM can use column names, types, distributions, and representative rows when designing the signature.

import dspy
import pandas as pd
import dspy_auto_signature as das

das.configure(
    lm=dspy.LM("openai/gpt-4o"),
    sub_lm=dspy.LM("openai/gpt-4o-mini"),
)

tickets = pd.DataFrame(
    [
        {"message": "Server is down", "urgency": "high"},
        {"message": "Please update my profile", "urgency": "low"},
        {"message": "Payment failed", "urgency": "high"},
    ]
)

signature = das.generate(
    tickets,
    task_hint="Classify support ticket urgency from the message",
)

print(signature.to_source())

(back to top)

API

generate(source, task_hint=None, *, input_hints=None, output_hints=None)

Generates a dspy.Signature subclass from prompt material or tabular data.

Parameter Type Description
source Any Prompt string, SDK message array (OpenAI, Anthropic, Google, LiteLLM), DataFrame, list of dictionaries, or list of dspy.Example objects
task_hint str | None Optional task description, especially useful for identifying dataset targets
input_hints dict[str, str] | None Input field descriptions to supplement or override generated descriptions
output_hints dict[str, str] | None Output field descriptions to supplement or override generated descriptions

Supported input formats:

  • Raw strings (system prompts, task descriptions)
  • OpenAI SDK message arrays: [{"role": "system", "content": "..."}, {"role": "user", "content": "..."}]
  • Anthropic SDK message arrays: [{"role": "user", "content": "..."}]
  • Google Gemini SDK contents: [{"role": "user", "parts": [{"text": "..."}]}]
  • LiteLLM / Azure OpenAI / Ollama / vLLM message arrays
  • pandas DataFrames, polars DataFrames / LazyFrames
  • list[dict], list[dspy.Example], single dspy.Example

configure(lm=None, dataset_lm=None, sub_lm=None)

Configures the models used during signature generation.

Parameter Type Description
lm dspy.LM | None Default RLM model. Falls back to the model configured through dspy.configure
dataset_lm dspy.LM | None Optional RLM model override for dataset sources
sub_lm dspy.LM | None Optional model used for recursive sub-queries

(back to top)

Contributing

Quick workflow:

  1. Fork and branch: git checkout -b feature/name
  2. Make changes
  3. Commit and push
  4. Open a Pull Request

(back to top)

License

MIT (as declared in pyproject.toml).


Built by thememium

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

dspy_auto_signature-0.1.3.tar.gz (26.5 kB view details)

Uploaded Source

Built Distribution

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

dspy_auto_signature-0.1.3-py3-none-any.whl (35.5 kB view details)

Uploaded Python 3

File details

Details for the file dspy_auto_signature-0.1.3.tar.gz.

File metadata

  • Download URL: dspy_auto_signature-0.1.3.tar.gz
  • Upload date:
  • Size: 26.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for dspy_auto_signature-0.1.3.tar.gz
Algorithm Hash digest
SHA256 a2b6004f05036bdf30d31a15b76e167b3574d7449df020b67e34c2df532c0b49
MD5 480efeeba9eec43bc0a68285959c7379
BLAKE2b-256 53c91c6ee93e84e665e7a5d996e5b8806a66073f71d2aef408c46c6a949d78ac

See more details on using hashes here.

File details

Details for the file dspy_auto_signature-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: dspy_auto_signature-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 35.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for dspy_auto_signature-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2bce4776de884d34ae5adca955a1148a3dec6b4ae72b0704b18e26e387cb927a
MD5 b0bd23fa75e0e5fd458bee5d69c585c7
BLAKE2b-256 81cc8b8c1e45d2375b04ec39a45d65b7ed26fd423a5300c4b11766637ba80954

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