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
- func HandleAIChat(w http.ResponseWriter, r *http.Request)
- func IsCloudAIRequest(opts *wshrpc.WaveAIOptsType) bool
- func MakeWaveAIPacket() *wshrpc.WaveAIPacketType
- func RunAICommand(ctx context.Context, request wshrpc.WaveAIStreamRequest) chan wshrpc.RespOrErrorUnion[wshrpc.WaveAIPacketType]
- func StreamOpenAIChatCompletions(sseHandler *SSEHandlerCh, ctx context.Context, opts *wshrpc.WaveAIOptsType, ...)
- func StreamOpenAIResponsesAPI(sseHandler *SSEHandlerCh, ctx context.Context, opts *wshrpc.WaveAIOptsType, ...)
- type AIBackend
- type AnthropicBackend
- type GoogleBackend
- type OpenAIBackend
- type OpenAIStreamChoice
- type OpenAIStreamResponse
- type OpenAIUsageResponse
- type PerplexityBackend
- type SSEHandlerCh
- func (h *SSEHandlerCh) AiMsgError(errText string) error
- func (h *SSEHandlerCh) AiMsgFinish(finishReason string, usage interface{}) error
- func (h *SSEHandlerCh) AiMsgFinishStep() error
- func (h *SSEHandlerCh) AiMsgReasoningDelta(reasoningId string, reasoning string) error
- func (h *SSEHandlerCh) AiMsgReasoningEnd(reasoningId string) error
- func (h *SSEHandlerCh) AiMsgReasoningStart(reasoningId string) error
- func (h *SSEHandlerCh) AiMsgStart(messageId string) error
- func (h *SSEHandlerCh) AiMsgTextDelta(textId string, text string) error
- func (h *SSEHandlerCh) AiMsgTextEnd(textId string) error
- func (h *SSEHandlerCh) AiMsgTextStart(textId string) error
- func (h *SSEHandlerCh) AiMsgToolInputAvailable(toolCallId, toolName string, input json.RawMessage) error
- func (h *SSEHandlerCh) AiMsgToolInputDelta(toolCallId, inputTextDelta string) error
- func (h *SSEHandlerCh) AiMsgToolInputStart(toolCallId, toolName string) error
- func (h *SSEHandlerCh) Close()
- func (h *SSEHandlerCh) Err() error
- func (h *SSEHandlerCh) SetupSSE() error
- func (h *SSEHandlerCh) WriteComment(comment string) error
- func (h *SSEHandlerCh) WriteData(data string) error
- func (h *SSEHandlerCh) WriteError(errorMsg string) error
- func (h *SSEHandlerCh) WriteEvent(eventType, data string) error
- func (h *SSEHandlerCh) WriteJsonData(data interface{}) error
- type SSEMessage
- type SSEMessageType
- type StopReason
- type StopReasonKind
- type ToolCall
- type ToolDefinition
- type UseChatMessage
- type UseChatMessagePart
- type UseChatRequest
- type WaveAICloudBackend
- type WaveAICloudReqPacketType
- type WaveAICmdInfoChatMessage
- type WaveAICmdInfoPacketOutputType
Constants ¶
const ( SSEContentType = "text/event-stream" SSECacheControl = "no-cache" SSEConnection = "keep-alive" SSEKeepaliveMsg = ": keepalive\n\n" SSEStreamStartMsg = ": stream-start\n\n" SSEKeepaliveInterval = 1 * time.Second )
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
const ( AnthropicDefaultBaseURL = "https://api.anthropic.com" AnthropicDefaultAPIVersion = "2023-06-01" AnthropicDefaultMaxTokens = 1024 )
const APIType_Anthropic = "anthropic"
const APIType_Google = "google"
const APIType_OpenAI = "openai"
const APIType_Perplexity = "perplexity"
const CloudWebsocketConnectTimeout = 1 * time.Minute
const DefaultAzureAPIVersion = "2023-05-15"
const OpenAICloudReqStr = "openai-cloudreq"
const PacketEOFStr = "EOF"
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 RunAICommand(ctx context.Context, request wshrpc.WaveAIStreamRequest) chan wshrpc.RespOrErrorUnion[wshrpc.WaveAIPacketType]
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
func (AnthropicBackend) StreamCompletion(ctx context.Context, request wshrpc.WaveAIStreamRequest) chan wshrpc.RespOrErrorUnion[wshrpc.WaveAIPacketType]
type GoogleBackend ¶ added in v0.11.0
type GoogleBackend struct{}
func (GoogleBackend) StreamCompletion ¶ added in v0.11.0
func (GoogleBackend) StreamCompletion(ctx context.Context, request wshrpc.WaveAIStreamRequest) chan wshrpc.RespOrErrorUnion[wshrpc.WaveAIPacketType]
type OpenAIBackend ¶ added in v0.9.2
type OpenAIBackend struct{}
func (OpenAIBackend) StreamCompletion ¶ added in v0.9.2
func (OpenAIBackend) StreamCompletion(ctx context.Context, request wshrpc.WaveAIStreamRequest) chan wshrpc.RespOrErrorUnion[wshrpc.WaveAIPacketType]
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 PerplexityBackend ¶ added in v0.10.0
type PerplexityBackend struct{}
func (PerplexityBackend) StreamCompletion ¶ added in v0.10.0
func (PerplexityBackend) StreamCompletion(ctx context.Context, request wshrpc.WaveAIStreamRequest) chan wshrpc.RespOrErrorUnion[wshrpc.WaveAIPacketType]
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 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 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
func (WaveAICloudBackend) StreamCompletion(ctx context.Context, request wshrpc.WaveAIStreamRequest) chan wshrpc.RespOrErrorUnion[wshrpc.WaveAIPacketType]
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"`
}