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}
34
35type ProviderEvent struct {
36 Type EventType
37 Content string
38 Thinking string
39 ToolCall *message.ToolCall
40 Error error
41 Response *ProviderResponse
42}
43
44type Provider interface {
45 SendMessages(ctx context.Context, messages []message.Message, tools []tools.BaseTool) (*ProviderResponse, error)
46
47 StreamResponse(ctx context.Context, messages []message.Message, tools []tools.BaseTool) (<-chan ProviderEvent, error)
48}