Files
Agent-Native/runtime/llm/types.go
T
weichenandCursor fedf671a48
ci / vet-and-test (push) Successful in 5s
ci / docker-checkout-hostgateway (push) Successful in 3s
Import the current agent-native module as a fresh history.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-29 12:29:04 +00:00

98 lines
2.8 KiB
Go

package llm
import (
"context"
"encoding/json"
)
// Role is a transcript role carried into the provider request.
type Role string
const (
RoleSystem Role = "system"
RoleUser Role = "user"
RoleAssistant Role = "assistant"
RoleTool Role = "tool"
)
// StopReason is the terminal condition of one assistant turn.
type StopReason string
const (
StopEnd StopReason = "end"
StopToolCalls StopReason = "toolCalls"
StopError StopReason = "error"
StopAborted StopReason = "aborted"
)
// EventKind identifies one item on the assistant stream.
type EventKind string
const (
KindTextDelta EventKind = "text_delta"
KindReasoningDelta EventKind = "reasoning_delta"
KindToolCallDelta EventKind = "tool_call_delta"
KindMessageEnd EventKind = "message_end"
KindError EventKind = "error"
)
// ToolCall is one function call requested by the assistant.
type ToolCall struct {
ID string `json:"id"`
Name string `json:"name"`
Arguments string `json:"arguments"`
}
// Message is one transcript entry. System, user, assistant, and tool results share this shape.
type Message struct {
Role Role `json:"role"`
Content string `json:"content,omitempty"`
Name string `json:"name,omitempty"`
ToolCallID string `json:"tool_call_id,omitempty"`
ToolCalls []ToolCall `json:"tool_calls,omitempty"`
StopReason StopReason `json:"stop_reason,omitempty"`
IsError bool `json:"is_error,omitempty"`
}
// ToolDecl is the JSON-schema declaration sent to the provider.
type ToolDecl struct {
Name string `json:"name"`
Description string `json:"description"`
Parameters json.RawMessage `json:"parameters"`
}
// Usage counts tokens reported by the provider. Zero means the provider omitted usage.
type Usage struct {
PromptTokens int `json:"prompt_tokens"`
CompletionTokens int `json:"completion_tokens"`
TotalTokens int `json:"total_tokens"`
}
// Event is one streamed update. Failures are KindError plus a final assistant
// message whose StopReason is error or aborted. Stream implementations do not panic.
type Event struct {
Kind EventKind
Text string
ReasoningDelta string
ToolIndex int
ToolID string
ToolName string
ArgumentsDelta string
Message Message
Usage Usage
Err error
Retryable bool
ErrorMessage string
}
// StreamOptions tunes one provider request.
type StreamOptions struct {
MaxTokens int
APIBase string
APIKey string
}
// StreamFunc is the provider boundary. It must return a channel that is closed
// after a terminal message_end or error event. It must not panic.
type StreamFunc func(ctx context.Context, model string, messages []Message, tools []ToolDecl, opts StreamOptions) <-chan Event