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)
21
22type TokenUsage struct {
23	InputTokens         int64
24	OutputTokens        int64
25	CacheCreationTokens int64
26	CacheReadTokens     int64
27}
28
29type ProviderResponse struct {
30	Content      string
31	ToolCalls    []message.ToolCall
32	Usage        TokenUsage
33	FinishReason string
34}
35
36type ProviderEvent struct {
37	Type     EventType
38	Content  string
39	Thinking string
40	ToolCall *message.ToolCall
41	Error    error
42	Response *ProviderResponse
43}
44
45type Provider interface {
46	SendMessages(ctx context.Context, messages []message.Message, tools []tools.BaseTool) (*ProviderResponse, error)
47
48	StreamResponse(ctx context.Context, messages []message.Message, tools []tools.BaseTool) (<-chan ProviderEvent, error)
49}