diff options
Diffstat (limited to 'internal/provider/provider.go')
| -rw-r--r-- | internal/provider/provider.go | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/internal/provider/provider.go b/internal/provider/provider.go new file mode 100644 index 0000000..fd1022d --- /dev/null +++ b/internal/provider/provider.go @@ -0,0 +1,72 @@ +// Package provider defines a provider-neutral chat/tool-use interface. It is +// independent of any one wire format (OpenAI-compatible, Anthropic Messages, +// Gemini, etc.) so that internal/agentloop's tool-use control flow can drive +// any backend that implements Provider. +// +// Phase 1 ships exactly one implementation, internal/provider/openaicompat, +// which adapts the existing internal/llm.Client. Later phases add native +// Anthropic/OpenAI/Google/Groq/OpenRouter adapters without touching agentloop. +package provider + +import "context" + +// Message is one turn in a chat conversation, in provider-neutral shape. +type Message struct { + Role string // "system" | "user" | "assistant" | "tool" + Text string + ToolCalls []ToolCall // set on assistant turns that invoke tools + ToolResults []ToolResult // set on tool-result turns +} + +// ToolCall is a single tool invocation requested by the model. +type ToolCall struct { + ID string + Name string + ArgsJSON string +} + +// ToolResult is the outcome of executing a ToolCall, fed back to the model. +type ToolResult struct { + ToolCallID string + Name string + Content string + IsError bool +} + +// ToolSpec declares a tool the model may call. +type ToolSpec struct { + Name string + Description string + ParametersJSONSchema map[string]any +} + +// ChatRequest captures the parameters of a single chat completion call. +type ChatRequest struct { + Model string + System string + Messages []Message + Tools []ToolSpec + Temperature *float64 + MaxTokens int +} + +// Usage reports token accounting and (when known) cost for a single call. +type Usage struct { + InputTokens int + OutputTokens int + CostUSD float64 +} + +// ChatResponse is the aggregated result of a chat completion. +type ChatResponse struct { + Text string + ToolCalls []ToolCall + StopReason string + Usage Usage +} + +// Provider is a chat/tool-use backend: one per LLM vendor/wire-format. +type Provider interface { + Name() string + Chat(ctx context.Context, req ChatRequest) (*ChatResponse, error) +} |
