| I think the DSL is nice when you want to take part of the generation and use it later in the prompt, e.g. this (in the same notebook). --- prompt = guidance('''{{#system~}} You are a helpful assistant. {{~/system}} {{#user~}} From now on, whenever your response depends on any factual information, please search the web by using the function <search>query</search> before responding. I will then paste web results in, and you can respond. {{~/user}} {{#assistant~}} Ok, I will do that. Let's do a practice round {{~/assistant}} {{>practice_round}} {{#user~}} That was great, now let's do another one. {{~/user}} {{#assistant~}} Ok, I'm ready. {{~/assistant}} {{#user~}} {{user_query}} {{~/user}} {{#assistant~}} {{gen "query" stop="</search>"}}{{#if (is_search query)}}</search>{{/if}} {{~/assistant}} {{#if (is_search query)}} {{#user~}} Search results: {{#each (search query)}} <result> {{this.title}} {{this.snippet}} </result>{{/each}} {{~/user}} {{#assistant~}} {{gen "answer"}} {{~/assistant}} {{/if}}''') --- You could still write it without a DSL, but I think it would be harder to read. |