agentprompt/lib.rs
1//! Jinja2-syntax LLM prompt templates.
2//!
3//! Build chat-style prompts from Jinja2 templates per role. `Prompt` is a
4//! single template; `Messages` is an ordered list of `(role, template)`
5//! entries that renders into a typed `Vec<Message>` ready to feed an
6//! Anthropic or OpenAI SDK.
7//!
8//! # Quick start
9//!
10//! ```
11//! use agentprompt::{Messages, Role};
12//! use serde_json::json;
13//!
14//! let messages = Messages::new()
15//! .system("You are a {{adjective}} assistant.")
16//! .user("Question: {{q}}")
17//! .render(&json!({"adjective": "concise", "q": "what is 2+2?"}))
18//! .unwrap();
19//!
20//! assert_eq!(messages.len(), 2);
21//! assert_eq!(messages[0].role, Role::System);
22//! assert_eq!(messages[0].content, "You are a concise assistant.");
23//! assert_eq!(messages[1].content, "Question: what is 2+2?");
24//! ```
25#![forbid(unsafe_code)]
26#![warn(missing_docs)]
27#![warn(rust_2018_idioms)]
28
29mod message;
30mod prompt;
31
32pub use crate::message::{Message, Messages, Role};
33pub use crate::prompt::{Prompt, PromptError};