waveai

package
v0.11.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 22, 2025 License: Apache-2.0 Imports: 35 Imported by: 0

Documentation

Overview

Package anthropicadapter streams Anthropic Messages API events and adapts them to our AI‑SDK style SSE parts. Mapping is based on the AI‑SDK data stream protocol (start/text-start/text-delta/text-end, reasoning-*, tool-input-*, finish, finish-step) :contentReference[oaicite:0]{index=0} and Anthropic's Messages + Streaming event schemas (message_start, content_block_start/delta/stop, message_delta, message_stop, error). :contentReference[oaicite:1]{index=1} :contentReference[oaicite:2]{index=2}

NOTE: The public signature in api.txt references wshrpc.WaveAIOptsType; for this self-contained package we define WaveAIOptsType locally with the same shape. Adapt the import/alias as needed in your codebase. :contentReference[oaicite:3]{index=3}

Index

Constants

View Source
const (
	SSEContentType       = "text/event-stream"
	SSECacheControl      = "no-cache"
	SSEConnection        = "keep-alive"
	SSEKeepaliveMsg      = ": keepalive\n\n"
	SSEStreamStartMsg    = ": stream-start\n\n"
	SSEKeepaliveInterval = 1 * time.Second
)
View Source
const (
	AiMsgStart               = "start"
	AiMsgTextStart           = "text-start"
	AiMsgTextDelta           = "text-delta"
	AiMsgTextEnd             = "text-end"
	AiMsgReasoningStart      = "reasoning-start"
	AiMsgReasoningDelta      = "reasoning-delta"
	AiMsgReasoningEnd        = "reasoning-end"
	AiMsgToolInputStart      = "tool-input-start"
	AiMsgToolInputDelta      = "tool-input-delta"
	AiMsgToolInputAvailable  = "tool-input-available"
	AiMsgToolOutputAvailable = "tool-output-available" // not used here, but reserved
	AiMsgStartStep           = "start-step"
	AiMsgFinishStep          = "finish-step"
	AiMsgFinish              = "finish"
	AiMsgError               = "error"
)

AI message type constants

View Source
const (
	AnthropicDefaultBaseURL    = "https://api.anthropic.com"
	AnthropicDefaultAPIVersion = "2023-06-01"
	AnthropicDefaultMaxTokens  = 1024
)
View Source
const APIType_Anthropic = "anthropic"
View Source
const APIType_Google = "google"
View Source
const APIType_OpenAI = "openai"
View Source
const APIType_Perplexity = "perplexity"
View Source
const CloudWebsocketConnectTimeout = 1 * time.Minute
View Source
const DefaultAzureAPIVersion = "2023-05-15"
View Source
const OpenAICloudReqStr = "openai-cloudreq"
View Source
const PacketEOFStr = "EOF"
View Source
const WaveAIPacketstr = "waveai"

Variables

This section is empty.

Functions

func HandleAIChat added in v0.11.6

func HandleAIChat(w http.ResponseWriter, r *http.Request)

func IsCloudAIRequest added in v0.8.10

func IsCloudAIRequest(opts *wshrpc.WaveAIOptsType) bool

func MakeWaveAIPacket added in v0.11.0

func MakeWaveAIPacket() *wshrpc.WaveAIPacketType

func RunAICommand added in v0.8.10

func StreamOpenAIChatCompletions added in v0.11.6

func StreamOpenAIChatCompletions(sseHandler *SSEHandlerCh, ctx context.Context, opts *wshrpc.WaveAIOptsType, messages []UseChatMessage)

func StreamOpenAIResponsesAPI added in v0.11.6

func StreamOpenAIResponsesAPI(sseHandler *SSEHandlerCh, ctx context.Context, opts *wshrpc.WaveAIOptsType, messages []UseChatMessage, tools []ToolDefinition)

Types

type AIBackend added in v0.9.2

type AIBackend interface {
	StreamCompletion(
		ctx context.Context,
		request wshrpc.WaveAIStreamRequest,
	) chan wshrpc.RespOrErrorUnion[wshrpc.WaveAIPacketType]
}

type AnthropicBackend added in v0.9.2

type AnthropicBackend struct{}

func (AnthropicBackend) StreamCompletion added in v0.9.2

type GoogleBackend added in v0.11.0

type GoogleBackend struct{}

func (GoogleBackend) StreamCompletion added in v0.11.0

type OpenAIBackend added in v0.9.2

type OpenAIBackend struct{}

func (OpenAIBackend) StreamCompletion added in v0.9.2

type OpenAIStreamChoice added in v0.11.6

type OpenAIStreamChoice struct {
	Index int `json:"index"`
	Delta struct {
		Content   string `json:"content,omitempty"`
		Reasoning string `json:"reasoning,omitempty"`
	} `json:"delta"`
	FinishReason *string `json:"finish_reason"`
}

OpenAI Chat Completion streaming response format

type OpenAIStreamResponse added in v0.11.6

type OpenAIStreamResponse struct {
	ID      string               `json:"id"`
	Object  string               `json:"object"`
	Created int64                `json:"created"`
	Model   string               `json:"model"`
	Choices []OpenAIStreamChoice `json:"choices"`
	Usage   *OpenAIUsageResponse `json:"usage,omitempty"`
}

type OpenAIUsageResponse added in v0.11.6

type OpenAIUsageResponse struct {
	PromptTokens     int `json:"prompt_tokens"`
	CompletionTokens int `json:"completion_tokens"`
	TotalTokens      int `json:"total_tokens"`
}

type PerplexityBackend added in v0.10.0

type PerplexityBackend struct{}

func (PerplexityBackend) StreamCompletion added in v0.10.0

type SSEHandlerCh added in v0.11.6

type SSEHandlerCh struct {
	// contains filtered or unexported fields
}

SSEHandlerCh provides channel-based Server-Sent Events functionality

func MakeSSEHandlerCh added in v0.11.6

func MakeSSEHandlerCh(w http.ResponseWriter, ctx context.Context) *SSEHandlerCh

MakeSSEHandlerCh creates a new channel-based SSE handler

func (*SSEHandlerCh) AiMsgError added in v0.11.6

func (h *SSEHandlerCh) AiMsgError(errText string) error

func (*SSEHandlerCh) AiMsgFinish added in v0.11.6

func (h *SSEHandlerCh) AiMsgFinish(finishReason string, usage interface{}) error

func (*SSEHandlerCh) AiMsgFinishStep added in v0.11.6

func (h *SSEHandlerCh) AiMsgFinishStep() error

func (*SSEHandlerCh) AiMsgReasoningDelta added in v0.11.6

func (h *SSEHandlerCh) AiMsgReasoningDelta(reasoningId string, reasoning string) error

func (*SSEHandlerCh) AiMsgReasoningEnd added in v0.11.6

func (h *SSEHandlerCh) AiMsgReasoningEnd(reasoningId string) error

func (*SSEHandlerCh) AiMsgReasoningStart added in v0.11.6

func (h *SSEHandlerCh) AiMsgReasoningStart(reasoningId string) error

func (*SSEHandlerCh) AiMsgStart added in v0.11.6

func (h *SSEHandlerCh) AiMsgStart(messageId string) error

func (*SSEHandlerCh) AiMsgTextDelta added in v0.11.6

func (h *SSEHandlerCh) AiMsgTextDelta(textId string, text string) error

func (*SSEHandlerCh) AiMsgTextEnd added in v0.11.6

func (h *SSEHandlerCh) AiMsgTextEnd(textId string) error

func (*SSEHandlerCh) AiMsgTextStart added in v0.11.6

func (h *SSEHandlerCh) AiMsgTextStart(textId string) error

func (*SSEHandlerCh) AiMsgToolInputAvailable added in v0.11.6

func (h *SSEHandlerCh) AiMsgToolInputAvailable(toolCallId, toolName string, input json.RawMessage) error

func (*SSEHandlerCh) AiMsgToolInputDelta added in v0.11.6

func (h *SSEHandlerCh) AiMsgToolInputDelta(toolCallId, inputTextDelta string) error

func (*SSEHandlerCh) AiMsgToolInputStart added in v0.11.6

func (h *SSEHandlerCh) AiMsgToolInputStart(toolCallId, toolName string) error

func (*SSEHandlerCh) Close added in v0.11.6

func (h *SSEHandlerCh) Close()

Close closes the write channel, sends [DONE], and cleans up resources

func (*SSEHandlerCh) Err added in v0.11.6

func (h *SSEHandlerCh) Err() error

Err returns any error that occurred during writing

func (*SSEHandlerCh) SetupSSE added in v0.11.6

func (h *SSEHandlerCh) SetupSSE() error

SetupSSE configures the response headers and starts the writer goroutine

func (*SSEHandlerCh) WriteComment added in v0.11.6

func (h *SSEHandlerCh) WriteComment(comment string) error

WriteComment queues an SSE comment

func (*SSEHandlerCh) WriteData added in v0.11.6

func (h *SSEHandlerCh) WriteData(data string) error

WriteData queues data to be written in SSE format

func (*SSEHandlerCh) WriteError added in v0.11.6

func (h *SSEHandlerCh) WriteError(errorMsg string) error

WriteError queues an error message and closes the handler

func (*SSEHandlerCh) WriteEvent added in v0.11.6

func (h *SSEHandlerCh) WriteEvent(eventType, data string) error

WriteEvent queues an SSE event with optional event type

func (*SSEHandlerCh) WriteJsonData added in v0.11.6

func (h *SSEHandlerCh) WriteJsonData(data interface{}) error

WriteJsonData marshals data to JSON and queues it for writing

type SSEMessage added in v0.11.6

type SSEMessage struct {
	Type      SSEMessageType
	Data      string
	EventType string // Only used for SSEMsgEvent
}

SSEMessage represents a message to be written to the SSE stream

type SSEMessageType added in v0.11.6

type SSEMessageType string

SSEMessageType represents the type of message to write

const (
	SSEMsgData    SSEMessageType = "data"
	SSEMsgEvent   SSEMessageType = "event"
	SSEMsgComment SSEMessageType = "comment"
	SSEMsgError   SSEMessageType = "error"
)

type StopReason added in v0.11.6

type StopReason struct {
	Kind      StopReasonKind `json:"kind"`
	RawReason string         `json:"raw_reason,omitempty"`
	MessageID string         `json:"message_id,omitempty"`
	Model     string         `json:"model,omitempty"`

	ToolCalls []ToolCall `json:"tool_calls,omitempty"`

	ErrorType string `json:"error_type,omitempty"`
	ErrorText string `json:"error_text,omitempty"`

	FinishStep bool `json:"finish_step,omitempty"`
}

func StreamAnthropicResponses added in v0.11.6

func StreamAnthropicResponses(
	ctx context.Context,
	sse *SSEHandlerCh,
	opts *wshrpc.WaveAIOptsType,
	messages []UseChatMessage,
	tools []ToolDefinition,
) (*StopReason, error)

func StreamOpenAIToUseChat added in v0.11.6

func StreamOpenAIToUseChat(ctx context.Context, sseHandler *SSEHandlerCh, opts *wshrpc.WaveAIOptsType, messages []UseChatMessage, tools []ToolDefinition) (*StopReason, error)

type StopReasonKind added in v0.11.6

type StopReasonKind string
const (
	StopKindDone      StopReasonKind = "done"
	StopKindToolUse   StopReasonKind = "tool_use"
	StopKindMaxTokens StopReasonKind = "max_tokens"
	StopKindContent   StopReasonKind = "content_filter"
	StopKindCanceled  StopReasonKind = "canceled"
	StopKindError     StopReasonKind = "error"
)

type ToolCall added in v0.11.6

type ToolCall struct {
	ID    string `json:"id"`              // Anthropic tool_use.id
	Name  string `json:"name,omitempty"`  // tool name (if provided)
	Input any    `json:"input,omitempty"` // accumulated input JSON
}

type ToolDefinition added in v0.11.6

type ToolDefinition struct {
	Name        string         `json:"name"`
	Description string         `json:"description"`
	InputSchema map[string]any `json:"input_schema"`
}

ToolDefinition represents a tool that can be used by the AI model

type UseChatMessage added in v0.11.6

type UseChatMessage struct {
	Role    string               `json:"role"`
	Content string               `json:"content,omitempty"`
	Parts   []UseChatMessagePart `json:"parts,omitempty"`
}

func (*UseChatMessage) GetContent added in v0.11.6

func (m *UseChatMessage) GetContent() string

GetContent extracts the text content from either content field or parts array

type UseChatMessagePart added in v0.11.6

type UseChatMessagePart struct {
	Type string `json:"type"`
	Text string `json:"text"`
}

type UseChatRequest added in v0.11.6

type UseChatRequest struct {
	Messages []UseChatMessage        `json:"messages"`
	Options  *wconfig.AiSettingsType `json:"options,omitempty"`
}

type WaveAICloudBackend added in v0.9.2

type WaveAICloudBackend struct{}

func (WaveAICloudBackend) StreamCompletion added in v0.9.2

type WaveAICloudReqPacketType added in v0.11.0

type WaveAICloudReqPacketType struct {
	Type       string                           `json:"type"`
	ClientId   string                           `json:"clientid"`
	Prompt     []wshrpc.WaveAIPromptMessageType `json:"prompt"`
	MaxTokens  int                              `json:"maxtokens,omitempty"`
	MaxChoices int                              `json:"maxchoices,omitempty"`
}

func MakeWaveAICloudReqPacket added in v0.11.0

func MakeWaveAICloudReqPacket() *WaveAICloudReqPacketType

type WaveAICmdInfoChatMessage added in v0.11.0

type WaveAICmdInfoChatMessage struct {
	MessageID           int                            `json:"messageid"`
	IsAssistantResponse bool                           `json:"isassistantresponse,omitempty"`
	AssistantResponse   *WaveAICmdInfoPacketOutputType `json:"assistantresponse,omitempty"`
	UserQuery           string                         `json:"userquery,omitempty"`
	UserEngineeredQuery string                         `json:"userengineeredquery,omitempty"`
}

type WaveAICmdInfoPacketOutputType added in v0.11.0

type WaveAICmdInfoPacketOutputType struct {
	Model        string `json:"model,omitempty"`
	Created      int64  `json:"created,omitempty"`
	FinishReason string `json:"finish_reason,omitempty"`
	Message      string `json:"message,omitempty"`
	Error        string `json:"error,omitempty"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL