Suggest Agent System Prompt
Generate a starter customInstructions block for the wizard.
Same two credential shapes as /agents/validate-llm:
- Inline - raw
apiKey(+ optionalbaseUrl) supplied directly. - Saved connection -
savedConnectionIdreferences a storedllmConnection; BE loads decryptedapiKey/baseUrl/providerserver-side so the browser never holds the plaintext.
Composes a meta-system-prompt + a structured user message describing
the agent (type, name, description, topics, fields, tools, output
schema, optional existing draft) and calls the user’s own LLM. The
runtime build_system_prompt already emits the per-agentType base
template + schema field listing + tool signatures at deploy time, so
the LLM is constrained to produce only the user-facing instructions
slot - the meta-prompt enforces that explicitly. Nothing is persisted.
Per-tenant rate limit: dedicated BUCKET_PROMPT_SUGGEST bucket
(30/min/tenant) separate from validate-llm, so heavy “Generate”
usage (humans iterating on prompt drafts) doesn’t eat into the
credential-check budget. Provider failures (timeouts, 4xx, schema
errors) surface as 400 with the provider’s error message so the FE’s
existing error-extraction works unchanged.
/agents/system-prompt-suggestionAuthorizationBearer token · headerrequiredapplication/jsonproviderAgentLlmProviderEnumrequiredUnified LLM provider enum.
A single AgentLlmConnection row carries one provider and a set of
capabilities (chat / embedding). PROVIDER_CAPABILITIES below pins
which capabilities each provider can serve — picked by the FE Connections
drawer and re-validated server-side on every write.
anthropicopenaiopenai-responsesollamaazureazure-openaibedrockqwenopenai-compatiblemodelstringapiKeystringRaw key - never stored
baseUrlstring | nullShow propertiesHide properties
stringnullsavedConnectionIdstring | nullIf set, BE resolves provider/apiKey/baseUrl from the tenant's saved llmConnection by id and ignores the inline apiKey / baseUrl.
Show propertiesHide properties
stringnullagentTypestringrequiredAgent type (e.g. react, workflow)
agentNamestring | nullShow propertiesHide properties
stringnulldescriptionstring | nullShow propertiesHide properties
stringnullinputTopicsstring[]selectedFieldsstring[]toolsToolContext[]Tool name + description list. Replaces the older toolNames-only shape.
Show propertiesHide properties
ToolContextnamestringrequiredTool name as referenced in the agent
descriptionstringWhat the tool does, free-form
outputSchemaOutputSchemaField[]Show propertiesHide properties
OutputSchemaFieldnamestringrequiredOutput field name
typestringrequiredOutput field type as the wizard renders it
filterSQLstring | nullActive record-filter (matches AgentInputConfig.filterSQL). Anchors the LLM's prompt to the actual shape of records reaching the agent.
Show propertiesHide properties
stringnullexistingCustomInstructionsstring | nullExisting draft to refine. Matches the FE textarea cap.
Show propertiesHide properties
stringnullgenerationHintstring | nullOptional one-line steer the user types into the wizard's 'Hint for AI' input. The meta-prompt already gets the agent's metadata, so this should carry use-case intent (tone, edge-case priority, what to emphasize) rather than restate the data shape.
Show propertiesHide properties
stringnullSuccessful Response
generatedPromptstringrequiredtokensInintegerrequiredtokensOutintegerrequiredmodelstringrequiredproviderstringrequiredValidation Error
detailValidationError[]Show propertiesHide properties
ValidationErrorlocstring | integer[]requiredShow propertiesHide properties
string | integerstringintegermsgstringrequiredtypestringrequiredinputanyctxobject