- Implement 'Show Problems Only' toggle combining degraded status, high CPU/memory alerts, and needs backup filters - Add 'Investigate with AI' button to filter bar for problematic guests - Fix dashboard column sizing inconsistencies between bars and sparklines view modes - Fix PBS backups display and polling - Refine AI prompt for general-purpose usage - Fix frontend flickering and reload loops during initial load - Integrate persistent SQLite metrics store with Monitor - Fortify AI command routing with improved validation and logging - Fix CSRF token handling for note deletion - Debug and fix AI command execution issues - Various AI reliability improvements and command safety enhancements
71 lines
2.8 KiB
Go
71 lines
2.8 KiB
Go
// Package providers contains AI provider client implementations
|
|
package providers
|
|
|
|
import (
|
|
"context"
|
|
)
|
|
|
|
// Message represents a chat message
|
|
type Message struct {
|
|
Role string `json:"role"` // "user", "assistant", "system"
|
|
Content string `json:"content"` // Text content (simple case)
|
|
ReasoningContent string `json:"reasoning_content,omitempty"` // DeepSeek thinking mode
|
|
ToolCalls []ToolCall `json:"tool_calls,omitempty"` // For assistant messages with tool calls
|
|
ToolResult *ToolResult `json:"tool_result,omitempty"` // For user messages with tool results
|
|
}
|
|
|
|
// ToolCall represents a tool invocation from the AI
|
|
type ToolCall struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Input map[string]interface{} `json:"input"`
|
|
}
|
|
|
|
// ToolResult represents the result of a tool execution
|
|
type ToolResult struct {
|
|
ToolUseID string `json:"tool_use_id"`
|
|
Content string `json:"content"`
|
|
IsError bool `json:"is_error,omitempty"`
|
|
}
|
|
|
|
// Tool represents an AI tool definition
|
|
type Tool struct {
|
|
Type string `json:"type,omitempty"` // "web_search_20250305" for web search, empty for regular tools
|
|
Name string `json:"name"`
|
|
Description string `json:"description,omitempty"`
|
|
InputSchema map[string]interface{} `json:"input_schema,omitempty"`
|
|
MaxUses int `json:"max_uses,omitempty"` // For web search: limit searches per request
|
|
}
|
|
|
|
// ChatRequest represents a request to the AI provider
|
|
type ChatRequest struct {
|
|
Messages []Message `json:"messages"`
|
|
Model string `json:"model"`
|
|
MaxTokens int `json:"max_tokens,omitempty"`
|
|
Temperature float64 `json:"temperature,omitempty"`
|
|
System string `json:"system,omitempty"` // System prompt (Anthropic style)
|
|
Tools []Tool `json:"tools,omitempty"` // Available tools
|
|
}
|
|
|
|
// ChatResponse represents a response from the AI provider
|
|
type ChatResponse struct {
|
|
Content string `json:"content"`
|
|
ReasoningContent string `json:"reasoning_content,omitempty"` // DeepSeek thinking mode
|
|
Model string `json:"model"`
|
|
StopReason string `json:"stop_reason,omitempty"` // "end_turn", "tool_use"
|
|
ToolCalls []ToolCall `json:"tool_calls,omitempty"` // Tool invocations
|
|
InputTokens int `json:"input_tokens,omitempty"`
|
|
OutputTokens int `json:"output_tokens,omitempty"`
|
|
}
|
|
|
|
// Provider defines the interface for AI providers
|
|
type Provider interface {
|
|
// Chat sends a chat request and returns the response
|
|
Chat(ctx context.Context, req ChatRequest) (*ChatResponse, error)
|
|
|
|
// TestConnection validates the API key and connectivity
|
|
TestConnection(ctx context.Context) error
|
|
|
|
// Name returns the provider name
|
|
Name() string
|
|
}
|