llm

package
v1.11.0 Latest Latest
Warning

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

Go to latest
Published: Apr 19, 2026 License: MIT Imports: 21 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultContextWindow       = 128000
	DefaultOllamaContextWindow = 32768
)
View Source
const (
	DefaultMaxToolChatRounds = 64
)

Variables

This section is empty.

Functions

func DefaultBaseURL

func DefaultBaseURL(providerType ProviderType) string

func ErrorStatusCode

func ErrorStatusCode(err error) (int, bool)

func EstimateMessagesTokens

func EstimateMessagesTokens(messages []Message) int

func ExecuteShellTool

func ExecuteShellTool(ctx context.Context, runner shellcmd.Runner, args json.RawMessage) (any, error)

func ExecuteSkillTool

func ExecuteSkillTool(_ context.Context, reader skills.Reader, args json.RawMessage) (any, error)

func FormatContextUsage

func FormatContextUsage(used int, limit int) string

func ResolveContextWindow

func ResolveContextWindow(cfg Config) int

func ResolveContextWindowWithDiscovery

func ResolveContextWindowWithDiscovery(ctx context.Context, cfg Config) int

func RunToolChat

func RunToolChat(
	ctx context.Context,
	provider Provider,
	model string,
	messages []Message,
	tools ToolExecutor,
	options ToolChatOptions,
) (*ChatResponse, []ToolCall, []ToolResult, []Message, error)

func RunToolChatStream

func RunToolChatStream(
	ctx context.Context,
	provider Provider,
	model string,
	messages []Message,
	tools ToolExecutor,
	options ToolChatOptions,
	handler ToolChatEventHandler,
) (*ChatResponse, []ToolCall, []ToolResult, []Message, error)

func SupportsModelDiscovery

func SupportsModelDiscovery(providerType ProviderType) bool

Types

type APIError

type APIError struct {
	StatusCode int
	Body       string
}

func (*APIError) Error

func (e *APIError) Error() string

type ChatRequest

type ChatRequest struct {
	Model           string           `json:"model"`
	Messages        []Message        `json:"messages"`
	Tools           []ToolDefinition `json:"tools,omitempty"`
	Temperature     float64          `json:"temperature,omitempty"`
	MaxTokens       int              `json:"max_tokens,omitempty"`
	ReasoningEffort string           `json:"reasoning_effort,omitempty"`
}

type ChatResponse

type ChatResponse struct {
	Content   string     `json:"content"`
	Reasoning string     `json:"reasoning,omitempty"`
	ToolCalls []ToolCall `json:"tool_calls,omitempty"`
	Usage     Usage      `json:"usage"`
}

func ChatWithStream

func ChatWithStream(ctx context.Context, provider Provider, req ChatRequest, handler StreamHandler) (*ChatResponse, error)

type Config

type Config struct {
	Name         string         `json:"name"`
	ProviderType ProviderType   `json:"provider_type"`
	APIKey       string         `json:"api_key"`
	BaseURL      string         `json:"base_url"`
	Model        string         `json:"model"`
	ExtraConfig  map[string]any `json:"extra_config"`
}

func ConfigFromModel

func ConfigFromModel(provider *models.LLMProvider) (Config, error)

type CustomProvider

type CustomProvider struct {
	// contains filtered or unexported fields
}

func NewCustomProvider

func NewCustomProvider(cfg Config) (*CustomProvider, error)

func (*CustomProvider) Chat

func (*CustomProvider) ChatStream

func (p *CustomProvider) ChatStream(ctx context.Context, req ChatRequest, handler StreamHandler) (*ChatResponse, error)

func (*CustomProvider) Name

func (p *CustomProvider) Name() string

func (*CustomProvider) Type

func (p *CustomProvider) Type() ProviderType

type LMStudioProvider

type LMStudioProvider struct {
	*OpenAIProvider
}

func NewLMStudioProvider

func NewLMStudioProvider(cfg Config) (*LMStudioProvider, error)

func (*LMStudioProvider) Name

func (p *LMStudioProvider) Name() string

func (*LMStudioProvider) Type

func (p *LMStudioProvider) Type() ProviderType

type Message

type Message struct {
	Role       string     `json:"role"`
	Content    string     `json:"content,omitempty"`
	Reasoning  string     `json:"reasoning,omitempty"`
	ToolCalls  []ToolCall `json:"tool_calls,omitempty"`
	ToolCallID string     `json:"tool_call_id,omitempty"`
	Name       string     `json:"name,omitempty"`
}

type ModelInfo

type ModelInfo struct {
	ID            string `json:"id"`
	Name          string `json:"name,omitempty"`
	Description   string `json:"description,omitempty"`
	ContextLength int    `json:"context_length,omitempty"`
}

func ListModels

func ListModels(ctx context.Context, cfg Config) ([]ModelInfo, error)

type OllamaProvider

type OllamaProvider struct {
	// contains filtered or unexported fields
}

func NewOllamaProvider

func NewOllamaProvider(cfg Config) (*OllamaProvider, error)

func (*OllamaProvider) Chat

func (*OllamaProvider) ChatStream

func (p *OllamaProvider) ChatStream(ctx context.Context, req ChatRequest, handler StreamHandler) (*ChatResponse, error)

func (*OllamaProvider) Name

func (p *OllamaProvider) Name() string

func (*OllamaProvider) Type

func (p *OllamaProvider) Type() ProviderType

type OpenAIProvider

type OpenAIProvider struct {
	// contains filtered or unexported fields
}

func NewOpenAIProvider

func NewOpenAIProvider(cfg Config) (*OpenAIProvider, error)

func (*OpenAIProvider) Chat

func (*OpenAIProvider) ChatStream

func (p *OpenAIProvider) ChatStream(ctx context.Context, req ChatRequest, handler StreamHandler) (*ChatResponse, error)

func (*OpenAIProvider) Name

func (p *OpenAIProvider) Name() string

func (*OpenAIProvider) Type

func (p *OpenAIProvider) Type() ProviderType

type OpenRouterProvider

type OpenRouterProvider struct {
	*OpenAIProvider
}

func NewOpenRouterProvider

func NewOpenRouterProvider(cfg Config) (*OpenRouterProvider, error)

func (*OpenRouterProvider) Name

func (p *OpenRouterProvider) Name() string

func (*OpenRouterProvider) Type

func (p *OpenRouterProvider) Type() ProviderType

type Provider

type Provider interface {
	Chat(ctx context.Context, req ChatRequest) (*ChatResponse, error)
	Name() string
	Type() ProviderType
}

func NewProvider

func NewProvider(cfg Config) (Provider, error)

type ProviderType

type ProviderType string
const (
	ProviderOpenAI     ProviderType = "openai"
	ProviderOpenRouter ProviderType = "openrouter"
	ProviderAnthropic  ProviderType = "anthropic"
	ProviderOllama     ProviderType = "ollama"
	ProviderLMStudio   ProviderType = "lmstudio"
	ProviderGemini     ProviderType = "gemini"
	ProviderGroq       ProviderType = "groq"
	ProviderCustom     ProviderType = "custom"
)

type StreamEvent

type StreamEvent struct {
	Type  StreamEventType `json:"type"`
	Delta string          `json:"delta,omitempty"`
	Usage Usage           `json:"usage,omitempty"`
}

type StreamEventType

type StreamEventType string
const (
	StreamEventContentDelta   StreamEventType = "content_delta"
	StreamEventReasoningDelta StreamEventType = "reasoning_delta"
	StreamEventUsage          StreamEventType = "usage"
)

type StreamHandler

type StreamHandler func(StreamEvent) error

type StreamingProvider

type StreamingProvider interface {
	ChatStream(ctx context.Context, req ChatRequest, handler StreamHandler) (*ChatResponse, error)
}

type ToolCall

type ToolCall struct {
	ID       string       `json:"id"`
	Type     string       `json:"type"`
	Function ToolFunction `json:"function"`
}

type ToolChatEvent

type ToolChatEvent struct {
	Type       ToolChatEventType `json:"type"`
	Delta      string            `json:"delta,omitempty"`
	ToolCall   *ToolCall         `json:"tool_call,omitempty"`
	ToolResult *ToolResult       `json:"tool_result,omitempty"`
	Usage      *Usage            `json:"usage,omitempty"`
}

type ToolChatEventHandler

type ToolChatEventHandler func(ToolChatEvent) error

type ToolChatEventType

type ToolChatEventType string
const (
	ToolChatEventContentDelta   ToolChatEventType = "content_delta"
	ToolChatEventReasoningDelta ToolChatEventType = "reasoning_delta"
	ToolChatEventToolStarted    ToolChatEventType = "tool_started"
	ToolChatEventToolFinished   ToolChatEventType = "tool_finished"
	ToolChatEventUsage          ToolChatEventType = "usage"
)

type ToolChatOptions added in v1.11.0

type ToolChatOptions struct {
	ReasoningEffort string
	MaxRounds       int
	ContextWindow   int
}

type ToolClusterStore

type ToolClusterStore interface {
	List(ctx context.Context) ([]models.Cluster, error)
	GetByID(ctx context.Context, id string) (*models.Cluster, error)
}

type ToolDefinition

type ToolDefinition struct {
	Type     string   `json:"type"`
	Function ToolSpec `json:"function"`
}

func ShellToolDefinition

func ShellToolDefinition() ToolDefinition

func SkillToolDefinition

func SkillToolDefinition() ToolDefinition

type ToolExecutionResult added in v1.11.0

type ToolExecutionResult struct {
	Result  any                `json:"result,omitempty"`
	Display *ToolResultDisplay `json:"display,omitempty"`
}

ToolExecutionResult wraps a raw tool result with optional chat display metadata.

type ToolExecutor

type ToolExecutor interface {
	GetAllTools() []ToolDefinition
	Execute(ctx context.Context, name string, arguments json.RawMessage) (any, error)
}

type ToolFunction

type ToolFunction struct {
	Name      string `json:"name"`
	Arguments string `json:"arguments"`
}

type ToolHandler

type ToolHandler func(ctx context.Context, args json.RawMessage) (any, error)

type ToolKubernetesClusterStore

type ToolKubernetesClusterStore interface {
	List(ctx context.Context) ([]models.KubernetesCluster, error)
	GetByID(ctx context.Context, id string) (*models.KubernetesCluster, error)
}

type ToolPipelineReloader

type ToolPipelineReloader interface {
	Reload(ctx context.Context) error
}

type ToolPipelineRunResult

type ToolPipelineRunResult struct {
	ExecutionID  string `json:"execution_id"`
	PipelineID   string `json:"pipeline_id"`
	PipelineName string `json:"pipeline_name"`
	Status       string `json:"status"`
	NodesRun     int    `json:"nodes_run"`
	Returned     bool   `json:"returned"`
	ReturnValue  any    `json:"return_value,omitempty"`
}

type ToolPipelineRunner

type ToolPipelineRunner interface {
	Run(ctx context.Context, pipelineID string, input map[string]any) (*ToolPipelineRunResult, error)
}

type ToolPipelineStore

type ToolPipelineStore interface {
	List(ctx context.Context) ([]models.Pipeline, error)
	GetByID(ctx context.Context, id string) (*models.Pipeline, error)
	Create(ctx context.Context, pipeline *models.Pipeline) error
	Update(ctx context.Context, pipeline *models.Pipeline) error
	Delete(ctx context.Context, id string) error
}

type ToolRegistry

type ToolRegistry struct {
	// contains filtered or unexported fields
}

func NewToolRegistry

func NewToolRegistry(
	clusterStore ToolClusterStore,
	pipelineStore ToolPipelineStore,
	pipelineReloader ToolPipelineReloader,
	pipelineRunner ToolPipelineRunner,
	defaultClusterID string,
	skillStore skills.Reader,
	shellRunner shellcmd.Runner,
) *ToolRegistry

func NewToolRegistryWithOptions

func NewToolRegistryWithOptions(opts ToolRegistryOptions) *ToolRegistry

func (*ToolRegistry) Execute

func (r *ToolRegistry) Execute(ctx context.Context, toolName string, args json.RawMessage) (any, error)

func (*ToolRegistry) GetAllTools

func (r *ToolRegistry) GetAllTools() []ToolDefinition

func (*ToolRegistry) Register

func (r *ToolRegistry) Register(def ToolDefinition, handler ToolHandler)

type ToolRegistryOptions

type ToolRegistryOptions struct {
	ProxmoxStore               ToolClusterStore
	KubernetesStore            ToolKubernetesClusterStore
	PipelineStore              ToolPipelineStore
	PipelineReloader           ToolPipelineReloader
	PipelineRunner             ToolPipelineRunner
	DefaultProxmoxClusterID    string
	DefaultKubernetesClusterID string
	EnableProxmox              bool
	EnableKubernetes           bool
	SkillStore                 skills.Reader
	ShellRunner                shellcmd.Runner
	WorkspaceRoot              string
	WebToolsConfig             *webtools.RuntimeConfig
}

type ToolResult

type ToolResult struct {
	Tool      string             `json:"tool"`
	Arguments any                `json:"arguments,omitempty"`
	Result    any                `json:"result,omitempty"`
	Error     string             `json:"error,omitempty"`
	Display   *ToolResultDisplay `json:"display,omitempty"`
}

type ToolResultDisplay added in v1.11.0

type ToolResultDisplay struct {
	Kind      ToolResultDisplayKind `json:"kind"`
	Title     string                `json:"title,omitempty"`
	Path      string                `json:"path,omitempty"`
	Summary   string                `json:"summary,omitempty"`
	Preview   string                `json:"preview,omitempty"`
	Diff      string                `json:"diff,omitempty"`
	Truncated bool                  `json:"truncated,omitempty"`
	Stats     map[string]any        `json:"stats,omitempty"`
}

ToolResultDisplay carries optional rendering metadata for tool transcript rows.

type ToolResultDisplayKind added in v1.11.0

type ToolResultDisplayKind string

ToolResultDisplayKind describes how a tool result should be rendered in chat.

const (
	ToolResultDisplayGeneric       ToolResultDisplayKind = "generic"
	ToolResultDisplayListDirectory ToolResultDisplayKind = "list_directory"
	ToolResultDisplayGlob          ToolResultDisplayKind = "glob"
	ToolResultDisplayGrep          ToolResultDisplayKind = "grep"
	ToolResultDisplayRead          ToolResultDisplayKind = "read"
	ToolResultDisplayDiff          ToolResultDisplayKind = "diff"
)

type ToolSpec

type ToolSpec struct {
	Name        string                 `json:"name"`
	Description string                 `json:"description"`
	Parameters  map[string]interface{} `json:"parameters"`
}

type Usage

type Usage struct {
	PromptTokens     int `json:"prompt_tokens"`
	CompletionTokens int `json:"completion_tokens"`
	TotalTokens      int `json:"total_tokens"`
}

Jump to

Keyboard shortcuts

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