Skip to content
Descoped Source Code Portalv2.2.13
PollingSign in

aipp

Up to date

Generativ AI Prompt extensions

descoped/aipp on GitHubLast push

last commit badgerelease badgelicense badgeissues badge

A flexible, composable library for constructing and transforming LLM prompts with a fluent interface.

Installation

pip install aipp

Development Setup

uv venv
source .venv/bin/activate
uv sync --group dev
pytest -s
code .

Overview

Generative AI Prompt Processor helps you build complex prompts with:

  • Chain-of-thought reasoning instructions
  • Variable substitution
  • Few-shot examples
  • Role/persona assignment
  • JSON data formatting
  • Structured output requirements
  • And more...

Quick Start

from aipp import PromptBuilder

# Simple example
prompt = (
    PromptBuilder()
    .configure_variables(model="GPT-4", task="summarization")
    .step_by_step(detailed=True)
    .prompt("Create a summary using {model} for {task} task.")
)

print(str(prompt))

Output:

Please provide a detailed, step-by-step explanation with thorough reasoning at each step.
Create a summary using GPT-4 for summarization task.

Features

Variable Substitution

prompt = (
    PromptBuilder()
    .configure_variables(model="GPT-4", task="summarization", length="short")
    .prompt("Create a {length} summary using {model} for {task} task.")
)

JSON Data

data = {
    "user": {"name": "Alice", "preferences": ["science", "history"]},
    "settings": {"language": "en", "format": "paragraph"}
}

prompt = (
    PromptBuilder()
    .prompt("Generate content based on user preferences")
    .with_json(data)
)

Few-Shot Examples

examples = [
    ("Summarize: The quick brown fox jumps over the lazy dog.",
     "A fox quickly jumps over a dog that is resting."),
    ("Summarize: The study showed significant results with p<0.05.",
     "The research findings were statistically significant.")
]

prompt = (
    PromptBuilder()
    .prompt("Summarize the following text")
    .with_few_shot(examples)
)

Structured Output

schema = {
    "type": "object",
    "properties": {
        "summary": {"type": "string"},
        "length": {"type": "integer"},
        "topics": {"type": "array", "items": {"type": "string"}}
    }
}

prompt = (
    PromptBuilder()
    .prompt("Analyze the following text")
    .structured_output(schema)
)

Chain of Thought

prompt = (
    PromptBuilder()
    .prompt("Solve this math problem")
    .chain_of_thought()
)

Role/Persona Assignment

prompt = (
    PromptBuilder()
    .prompt("Explain quantum computing")
    .as_role("quantum physicist", "with expertise in quantum information theory")
)

Lambda Processors

Use inline lambda functions for custom transformations:

prompt = (
    PromptBuilder()
    .prompt("Standard prompt text")
    .process(lambda content, _: f"IMPORTANT: {content}")
    .process(lambda content, _: f"{content}\n\nPlease be thorough.")
)

Combining Processors

Processors can be combined in any order:

prompt = (
    PromptBuilder()
    .prompt("Summarize the following article")
    .chain_of_thought()
    .with_few_shot(examples)
    .structured_output(schema)
    .as_role("professional writer")
    .process(lambda content, _: f"{content}\n\nLimit response to 3 paragraphs.")
)

Advanced Usage

Custom Processors

Create your own processors:

from aipp.processors.base import SimpleProcessor


def create_custom_processor(options):
    def transform(content, context=None):
        # Transform the content based on options
        return f"Custom prefix: {content}"

    return SimpleProcessor(transform, name="custom_processor")


prompt = (
    PromptBuilder()
    .prompt("Base content")
    .add_processor(create_custom_processor({"option": "value"}))
)

Processing Context

Processors can share context:

def create_metadata_processor():
    def transform(content, context=None):
        if context is not None:
            context['processed_at'] = "2023-01-01"
        return content
    
    return SimpleProcessor(transform, name="metadata")

prompt = PromptBuilder()
prompt.add_processor(create_metadata_processor())
prompt.prompt("Content")
print(prompt.metadata)  # Contains processed_at

Contributing

We welcome contributions to improve Generative AI Prompt Processor! See CONTRIBUTING.md for detailed information on:

  • Architecture overview
  • Core concepts
  • How to extend the library
  • Design patterns used
  • Best practices
  • Testing guidelines

Please submit issues and pull requests following our guidelines.

License

MIT

Dependencies

pyproject.toml aipp (1 dependency)
NameVersionScope
pytest>=8.3.0dev

Health

Health 70Watch

Technology

Up to date
Languages
Python
Build tools
uv
Toolchains
python >=3.11

Packages

  • aippPyPI0.1.3at pypi.org

Pull requests

Up to date

None open.

Issues

Up to date

None open.

Releases

Up to date
  1. v0.1.3Release v0.1.3 by oranheim
    Release notes

    Implemented PromptBuilder with composable TextProcessors.

    Created a modular system for AI prompt engineering with a fluent interface.

    Key components:

    • PromptBuilder with method chaining for prompt construction
    • TextProcessor protocol for composable transformations
    • Built-in processors for common patterns: variables, JSON, step-by-step, chain-of-thought, few-shot examples, structured output, etc.
    • Support for custom processors via lambda functions
All 1 held

Latest commits

Commit log

Documentation

No documents under docs/.