Skip to main content

Scope

AreaImplemented in
Request pipelinepipeline_request.go
Response pipelinepipeline_response.go
Pipeline typespipeline_types.go
Template renderingpkg/clients/integration/builders/chat_input_builder.go
Template parserpkg/parsers/pongo2.template.parser.go
Argument merge semanticspkg/utils/collection.go
Behavior testsmodel_test.go

Request Pipeline Stages

For each UserTextPacket, stages run in this order:
OrderStage nameOutput
1build_user_messagepipeline.UserMessage
2snapshot_historyhistory snapshot
3validate_historyvalidates tool-call sequencing
4prepare_prompt_argumentspipeline.PromptArgs
Stage order is validated by TestRequestPipeline_DefaultStages.

Prompt Argument Map

buildPromptContext() creates these top-level keys:
KeyContents
systemcurrent UTC date/time values
assistantassistant metadata
conversationconversation metadata
sessionsession mode (if available)
messagecurrent or reconstructed user message context
argsnamespaced conversation args
root argsflattened copy of conversation args at root level
Deep clone is applied before use (clonePromptArguments).

General Jinja-Style Guidelines

Template rendering is performed by Pongo2 (pkg/parsers/pongo2.template.parser.go), which follows Jinja-style syntax. Verified patterns from parser tests:
PatternExampleReference
Variable interpolation{{ name }}TestPongo2StringTemplateParser_Parse
Conditional block{% if age > 20 %}...{% endif %}TestPongo2MessageTemplateParser_Parse
Loop block{% for message in messages %}...{% endfor %}TestPongo2TemplateParser_Parse
Autoescape control{% autoescape off %}...{% endautoescape %}TestPongo2TemplateParser_Parse
Execution behavior:
CaseBehavior
Parse/execute errorparser returns original template string
Successful parserendered template string is used in chat request

Argument Namespaces

system.*

FieldFormat
current_dateYYYY-MM-DD
current_timeHH:MM:SS
current_datetimeRFC3339
day_of_weekweekday name
date_rfc1123RFC1123
date_unixseconds
date_unix_msmilliseconds
All are UTC.

assistant.*

Field
assistant.name
assistant.id (string)
assistant.language
assistant.description

conversation.*

Field
conversation.id
conversation.identifier
conversation.source
conversation.direction
conversation.created_date (if available)
conversation.updated_date (if available)
conversation.duration (best effort)

session.*

FieldCondition
session.modeonly when communication exposes GetMode()

message.*

Field
message.text
message.language

Args Behavior (Namespaced + Root)

Conversation args are merged twice:
Access formExample
namespaced{{ args.name }}
root-level{{ name }}
Implementation merge:
utils.MergeMaps(
  map[string]interface{}{"args": args},
  args,
)
Behavior is validated by TestBuildPromptContext_ArgumentsRemainRootLevel.

Template Rendering Contract

buildChatRequest() renders prompt templates and prepends rendered system/template messages before runtime history.

Argument merge precedence for rendering

utils.MergeMaps(
  e.inputBuilder.PromptArguments(template.Variables),
  promptArguments,
)
SourcePriority
template variable defaults (promptVariables)lower
runtime prompt argshigher
Parser behavior (pongo2):
CaseResult
parse or execute errorreturns original template string
successful parse/executereturns rendered text

Response + Tool Follow-up Argumentation

On response handling, prompt args are rebuilt via preparePromptArgumentsForResponse() before tool follow-up send. Language precedence for response flow:
PrioritySource
1latest user language in communication.GetHistories()
2communication.GetMetadata()["client.language"]
3empty string
Validated by:
  • TestPreparePromptArgumentsForResponse_UsesLatestUserAndClientLanguage
  • TestPreparePromptArgumentsForResponse_PrefersLatestHistoryLanguage
  • TestHandleResponse_ToolFollowUpRetainsUserMessageContext

History Validation Rules

Before sending chat requests, history must satisfy these rules:
RuleEnforced by
assistant tool call must be immediately followed by tool responsevalidateHistorySequence
tool response IDs must match tool call IDsvalidateToolIDMatch
orphan tool response not allowedvalidateHistorySequence
after tool response, next message (if any) must be assistantvalidateHistorySequence
Validation coverage:
  • TestValidateHistorySequence_*

Internal Reference

  • api/assistant-api/internal/agent/executor/llm/internal/model/PROMPT_ARGUMENTS.md