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}