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}