provider.go

 1package provider
 2
 3import (
 4	"context"
 5
 6	"github.com/kujtimiihoxha/termai/internal/llm/tools"
 7	"github.com/kujtimiihoxha/termai/internal/message"
 8)
 9
10// EventType represents the type of streaming event
11type EventType string
12
13const (
14	EventContentStart  EventType = "content_start"
15	EventContentDelta  EventType = "content_delta"
16	EventThinkingDelta EventType = "thinking_delta"
17	EventContentStop   EventType = "content_stop"
18	EventComplete      EventType = "complete"
19	EventError         EventType = "error"
20	EventWarning       EventType = "warning"
21	EventInfo          EventType = "info"
22)
23
24type TokenUsage struct {
25	InputTokens         int64
26	OutputTokens        int64
27	CacheCreationTokens int64
28	CacheReadTokens     int64
29}
30
31type ProviderResponse struct {
32	Content      string
33	ToolCalls    []message.ToolCall
34	Usage        TokenUsage
35	FinishReason string
36}
37
38type ProviderEvent struct {
39	Type     EventType
40	Content  string
41	Thinking string
42	ToolCall *message.ToolCall
43	Error    error
44	Response *ProviderResponse
45
46	// Used for giving users info on e.x retry
47	Info string
48}
49
50type Provider interface {
51	SendMessages(ctx context.Context, messages []message.Message, tools []tools.BaseTool) (*ProviderResponse, error)
52
53	StreamResponse(ctx context.Context, messages []message.Message, tools []tools.BaseTool) (<-chan ProviderEvent, error)
54}