opensymphony 1.8.0

A Rust implementation of the OpenAI Symphony orchestration design
Documentation
use serde::Serialize;

use super::{PromptContext, error::PromptTemplateError};

pub(crate) fn render_prompt<T: Serialize>(
    template_source: &str,
    issue: &T,
    attempt: Option<u32>,
) -> Result<String, PromptTemplateError> {
    let parser = liquid::ParserBuilder::with_stdlib()
        .build()
        .map_err(|source| PromptTemplateError::Parse { source })?;

    let template = parser
        .parse(template_source)
        .map_err(|source| PromptTemplateError::Parse { source })?;
    let globals = liquid::to_object(&PromptContext { issue, attempt })
        .map_err(|source| PromptTemplateError::Context { source })?;

    template
        .render(&globals)
        .map_err(|source| PromptTemplateError::Render { source })
}