Skip to content
GitHubDiscord

AI Prompt (lexigram-ai-prompt)

AI prompt management for the Lexigram Framework — templates, composition, optimization


Type-safe prompt template management for the Lexigram AI framework. Build, version, compose, and auto-optimize prompts via DI — with injection protection, multi-format rendering, and a DSPy-inspired optimizer built in. Zero-config usage starts with sensible defaults.

Terminal window
uv add lexigram-ai-prompt
# Optional extras
uv add "lexigram-ai-prompt[jinja2]"
from lexigram import Application
from lexigram.di.module import Module, module
from lexigram.ai.prompt import PromptModule
from lexigram.ai.prompt.config import PromptConfig
@module(imports=[
PromptModule.configure(
PromptConfig(default_format="f_string", sanitize_inputs=True)
)
])
class AppModule(Module):
pass
app = Application(modules=[AppModule])
if __name__ == "__main__":
app.run()

Zero-config usage: Call PromptModule.configure() with no arguments to use defaults.

application.yaml
ai_prompt:
enabled: true
default_format: "f_string"
sanitize_inputs: true
strict_sanitizer: true
max_variable_length: 0
Section titled “Option 2 — Profiles + Environment Variables (recommended)”
Terminal window
export LEX_AI_PROMPT__DEFAULT_FORMAT=jinja2
# Environment variables for each field
from lexigram.ai.prompt.config import PromptConfig
from lexigram.ai.prompt import PromptModule
config = PromptConfig(
default_format="jinja2",
sanitize_inputs=True,
strict_sanitizer=True,
max_variable_length=4096,
)
PromptModule.configure(config)
FieldDefaultEnv varDescription
enabledTrueLEX_AI_PROMPT__ENABLEDEnable the AI prompt subsystem
default_format"f_string"LEX_AI_PROMPT__DEFAULT_FORMATRendering format when templates don’t specify one
sanitize_inputsTrueLEX_AI_PROMPT__SANITIZE_INPUTSScan variable values for injection patterns
strict_sanitizerTrueLEX_AI_PROMPT__STRICT_SANITIZERRaise on detected injection
max_variable_length0LEX_AI_PROMPT__MAX_VARIABLE_LENGTHMax variable value length in chars
MethodDescription
PromptModule.configure(config)Configure with explicit config
PromptModule.stub()Minimal config for testing
  • Template types: StringPromptTemplate, ChatPromptTemplate, FewShotPromptTemplate, PartialPromptTemplate
  • Rendering formats: f_string, jinja2, dollar, and simple templates
  • Registry: Named prompt lookup via PromptRegistry
  • Versioning: VersionedPromptStore with history and rollback
  • Composition: PromptPipeline (sequential) and ConditionalPrompt (branching)
  • Optimizer: DSPy-inspired automatic prompt improvement with BOOTSTRAP_FEW_SHOT, TEMPLATE_REFINEMENT, and ENSEMBLE strategies
async with Application.boot(modules=[PromptModule.stub()]) as app:
# your test code
...
FileWhat it contains
src/lexigram/ai/prompt/module.pyPromptModule.configure(), .stub()
src/lexigram/ai/prompt/config.pyPromptConfig
src/lexigram/ai/prompt/template/string.pyStringPromptTemplate
src/lexigram/ai/prompt/template/chat.pyChatPromptTemplate
src/lexigram/ai/prompt/template/few_shot.pyFewShotPromptTemplate
src/lexigram/ai/prompt/rendering/engine.pyPromptRenderer, RenderFormat
src/lexigram/ai/prompt/registry/registry.pyPromptRegistry
src/lexigram/ai/prompt/registry/versioned.pyVersionedPromptStore
src/lexigram/ai/prompt/composition/pipeline.pyPromptPipeline
src/lexigram/ai/prompt/optimization/optimizer.pyPromptOptimizer
src/lexigram/ai/prompt/di/provider.pyPromptProvider