config

package
v0.0.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 23, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Overview

Package config loads and validates gantry configuration from the environment. Boot is fail-fast: missing required values return a clear error.

Index

Constants

View Source
const (
	ChannelTelegram = "telegram"
	ChannelDiscord  = "discord"
	ChannelSlack    = "slack"
	ChannelStdio    = "stdio"
)

Channel names accepted by CHANNEL.

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	LLMBaseURL string `env:"LLM_BASE_URL,required"`
	LLMAPIKey  string `env:"LLM_API_KEY,required"`
	LLMModel   string `env:"LLM_MODEL,required"`
	// LLMMaxTokens caps completion output (incl. tool-call args). 0 = provider default.
	LLMMaxTokens int `env:"LLM_MAX_TOKENS" envDefault:"4096"`

	TelegramBotToken     string  `env:"TELEGRAM_BOT_TOKEN"`
	TelegramAllowedUsers []int64 `env:"TELEGRAM_ALLOWED_USERS" envSeparator:","`

	DiscordBotToken     string   `env:"DISCORD_BOT_TOKEN"`
	DiscordAllowedUsers []string `env:"DISCORD_ALLOWED_USERS" envSeparator:","`

	SlackBotToken     string   `env:"SLACK_BOT_TOKEN"` // xoxb-
	SlackAppToken     string   `env:"SLACK_APP_TOKEN"` // xapp- (Socket Mode)
	SlackAllowedUsers []string `env:"SLACK_ALLOWED_USERS" envSeparator:","`

	Channel     string `env:"CHANNEL" envDefault:"telegram"`
	PersonaDir  string `env:"PERSONA_DIR" envDefault:"/persona"`
	DataDir     string `env:"DATA_DIR" envDefault:"/data"`
	MCPManifest string `env:"MCP_MANIFEST" envDefault:"/etc/gantry/mcp.toml"`

	HistoryMaxMessages int `env:"HISTORY_MAX_MESSAGES" envDefault:"200"`
	HistoryMaxTokens   int `env:"HISTORY_MAX_TOKENS" envDefault:"128000"` // estimated (chars/4)
	ToolResultMaxChars int `env:"TOOL_RESULT_MAX_CHARS" envDefault:"16000"`
	ToolMaxIterations  int `env:"TOOL_MAX_ITERATIONS" envDefault:"20"`
	// ToolSchemaMaxTokens is an optional hard cap on estimated tool-schema tokens
	// (chars/4 of name+description+parameters). 0 = log estimate only.
	ToolSchemaMaxTokens int `env:"TOOL_SCHEMA_MAX_TOKENS" envDefault:"0"`

	MemoryEnabled            bool   `env:"MEMORY_ENABLED" envDefault:"true"`
	MemoryBackend            string `env:"MEMORY_BACKEND" envDefault:"builtin"`
	MemoryConsolidateMinutes int    `env:"MEMORY_CONSOLIDATE_MINUTES" envDefault:"30"` // 0 = off

	CronEnabled     bool   `env:"CRON_ENABLED" envDefault:"true"`
	CronTZ          string `env:"CRON_TZ" envDefault:"UTC"`
	CronMaxJobs     int    `env:"CRON_MAX_JOBS" envDefault:"50"`
	CronTickSeconds int    `env:"CRON_TICK_SECONDS" envDefault:"15"`

	StreamReplies bool `env:"STREAM_REPLIES" envDefault:"false"`

	LogLevel string `env:"LOG_LEVEL" envDefault:"info"`
}

Config is the complete env-driven configuration surface. Secrets and scalars live here; structure (persona, MCP manifest) is mounts.

func Load

func Load() (*Config, error)

Load parses environment variables into Config and validates channel-specific requirements. Returns a descriptive error on any failure.

func (*Config) Validate

func (c *Config) Validate() error

Validate checks cross-field and channel-specific rules after env parsing.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL