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}
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}