Skip to content

llm

Uses LLM inference to generate or modify a file in the target directory.

Usage

yaml
- name: generate-deployment
  llm:
    provider: anthropic
    model: claude-sonnet-4-20250514
    systemPrompt: "Output only valid YAML. No explanation."
    prompt: |
      Generate a Kubernetes Deployment manifest for {{ .serviceName }}
      in namespace {{ .namespace }} using image {{ .image }}.
    target: "deploy/{{ .serviceName }}.yaml"
    mode: generate
    maxTokens: 2048
    retries: 2
    retryDelay: "3s"
    providerConfig:
      tokenEnv: ANTHROPIC_API_KEY
FieldRequiredDescription
provideryesLLM provider. See Providers.
modelyesModel identifier (provider-specific).
promptyesUser prompt. Templated. In modify mode, existing file content is prepended automatically.
systemPromptnoSystem prompt. Omitted if empty. Templated.
targetyesOutput file path relative to the target directory. Templated.
modeno"generate" (default) or "modify". See Modes.
maxTokensnoMaximum output tokens. Provider default used when omitted.
retriesnoMaximum retry attempts on failure. Default: 0 (no retry).
retryDelaynoInitial delay between retries (e.g. "2s", "500ms"). Doubles each attempt. Default: "2s".
providerConfig.tokenEnvnoEnv var name holding the API key. Overrides provider default.
providerConfig.projectnoGCP project ID. Required for vertex. Templated.
providerConfig.locationnoGCP region. Required for vertex. Default: "us-central1". Templated.

All string fields are templatable.

Providers

ProviderValueAuthDefault env var
OpenAIopenaiAPI keyOPENAI_API_KEY
AnthropicanthropicAPI keyANTHROPIC_API_KEY
Google GeminigeminiAPI keyGEMINI_API_KEY
Google Vertex AIvertexApplication Default Credentials
OpenRouteropenrouterAPI keyOPENROUTER_API_KEY
AWS BedrockbedrockAWS credential chain

Set providerConfig.tokenEnv to override the default env var for key-based providers. vertex and bedrock do not use API keys.

Modes

generate (default)

Sends the rendered prompt to the model and writes the response to target. Fails if the file already exists. Use this to create new files.

modify

Reads the existing file at target, prepends it to the prompt, then calls the model and overwrites target with the response. Fails if the file does not exist.

The prompt sent to the model is composed as:

text
Here is the existing file content:

```
<existing content>
```

<your prompt>

Retry

When retries > 0, failed attempts are retried with exponential backoff. The delay doubles on each attempt:

AttemptDelay
1st retryretryDelay
2nd retryretryDelay × 2
3rd retryretryDelay × 4

Retries trigger on inference errors and on empty responses. If the context is cancelled during a wait, the operation fails immediately.

Dry Run

In dry-run mode, the model is not called and no file is written. A log entry records the provider, model, target, and prompt length.

Examples

Generate a new file

yaml
- name: create-service-config
  llm:
    provider: openai
    model: gpt-4o
    prompt: "Generate a Kubernetes Service for {{ .serviceName }} on port 8080."
    target: "k8s/{{ .serviceName }}-svc.yaml"
    providerConfig:
      tokenEnv: OPENAI_API_KEY

Modify an existing file

yaml
- name: update-readme
  llm:
    provider: anthropic
    model: claude-sonnet-4-20250514
    prompt: "Add a ## {{ .serviceName }} section describing this service."
    target: README.md
    mode: modify
    providerConfig:
      tokenEnv: ANTHROPIC_API_KEY

Vertex AI (GCP)

yaml
- name: generate-policy
  llm:
    provider: vertex
    model: gemini-2.5-flash
    prompt: "Generate a network policy for {{ .serviceName }}."
    target: "policies/{{ .serviceName }}.yaml"
    providerConfig:
      project: "{{ .gcpProject }}"
      location: us-central1

Released under the GPL-3.0 License.