Forge
1.x
Docs/Forge/Text Generation
Open

Reading3 min
Updated5 Aug 2026
Sourcev1/ai-sdk/text-generation.mdx

TextGenerator provides a fluent builder for generating text from LLM providers. It supports prompt templates, model parameters, tool usage, caching, and lifecycle callbacks.

Basic Usage01

import sdk "github.com/xraph/ai-sdk"

result, err := sdk.NewTextGenerator(ctx, llmManager, logger, metrics).
    WithPrompt("Explain concurrency in Go.").
    Execute()
if err != nil {
    return err
}

fmt.Println(result.Text)

Prompt Templates02

Use {{.var}} syntax for template variables:

result, err := sdk.NewTextGenerator(ctx, llmManager, logger, metrics).
    WithPrompt("Translate the following to {{.language}}: {{.text}}").
    WithVar("language", "French").
    WithVar("text", "Hello, world!").
    Execute()

Model Configuration03

result, err := sdk.NewTextGenerator(ctx, llmManager, logger, metrics).
    WithProvider("openai").
    WithModel("gpt-4").
    WithPrompt("Write a haiku about Go.").
    Execute()

Generation Parameters04

result, err := sdk.NewTextGenerator(ctx, llmManager, logger, metrics).
    WithPrompt("Generate creative ideas for a startup.").
    WithTemperature(0.9).
    WithMaxTokens(500).
    WithTopP(0.95).
    WithStop([]string{"\n\n"}).
    Execute()
MethodDescription
WithTemperature(float64)Controls randomness (0.0 = deterministic, 1.0 = creative)
WithMaxTokens(int)Maximum tokens in the response
WithTopP(float64)Nucleus sampling threshold
WithTopK(int)Top-K sampling
WithStop([]string)Stop sequences

System Prompt05

result, err := sdk.NewTextGenerator(ctx, llmManager, logger, metrics).
    WithSystemPrompt("You are an expert Go developer. Answer concisely.").
    WithPrompt("What is a channel?").
    Execute()

Message History06

Pass existing conversation history:

result, err := sdk.NewTextGenerator(ctx, llmManager, logger, metrics).
    WithMessages([]llm.ChatMessage{
        {Role: "user", Content: "What is Go?"},
        {Role: "assistant", Content: "Go is a statically typed programming language..."},
    }).
    WithPrompt("How does it handle concurrency?").
    Execute()

Tools07

Attach tools for function calling:

result, err := sdk.NewTextGenerator(ctx, llmManager, logger, metrics).
    WithPrompt("What is the weather in Tokyo?").
    WithTools(weatherTool).
    WithToolChoice("auto").
    Execute()

Caching08

Enable response caching to reduce costs for repeated prompts:

result, err := sdk.NewTextGenerator(ctx, llmManager, logger, metrics).
    WithPrompt("What are Go's main features?").
    WithCache(true).
    WithCacheTTL(1 * time.Hour).
    Execute()

Timeouts09

result, err := sdk.NewTextGenerator(ctx, llmManager, logger, metrics).
    WithPrompt("Summarize this document...").
    WithTimeout(30 * time.Second).
    Execute()

Callbacks10

React to generation lifecycle events:

result, err := sdk.NewTextGenerator(ctx, llmManager, logger, metrics).
    WithPrompt("Write an essay about AI safety.").
    OnStart(func() {
        log.Println("Generation started")
    }).
    OnComplete(func(r sdk.Result) {
        log.Printf("Generated %d tokens", r.Usage.TotalTokens)
    }).
    OnError(func(err error) {
        log.Printf("Generation failed: %v", err)
    }).
    Execute()

GenerateResult11

The Execute() method returns a *GenerateResult:

FieldTypeDescription
TextstringThe generated text
UsageUsageToken usage statistics
ToolCalls[]ToolCallTool invocations requested by the model
FinishReasonstringWhy generation stopped (stop, length, tool_calls)
Durationtime.DurationTotal execution time