first commit
This commit is contained in:
103
core/schemas/websocket.go
Normal file
103
core/schemas/websocket.go
Normal file
@@ -0,0 +1,103 @@
|
||||
package schemas
|
||||
|
||||
import "encoding/json"
|
||||
|
||||
// WebSocketEventType represents event types in the Responses API WebSocket protocol.
|
||||
type WebSocketEventType string
|
||||
|
||||
const (
|
||||
WSEventResponseCreate WebSocketEventType = "response.create"
|
||||
WSEventError WebSocketEventType = "error"
|
||||
)
|
||||
|
||||
// WebSocketResponsesEvent represents a client-sent event over the Responses WebSocket connection.
|
||||
// The payload mirrors the Responses API create body, with transport-specific fields
|
||||
// (stream, background) omitted since they're implicit in the WebSocket context.
|
||||
type WebSocketResponsesEvent struct {
|
||||
Type WebSocketEventType `json:"type"`
|
||||
Model string `json:"model,omitempty"`
|
||||
Store *bool `json:"store,omitempty"`
|
||||
Input json.RawMessage `json:"input,omitempty"`
|
||||
Instructions string `json:"instructions,omitempty"`
|
||||
PreviousResponseID string `json:"previous_response_id,omitempty"`
|
||||
Generate *bool `json:"generate,omitempty"`
|
||||
Tools json.RawMessage `json:"tools,omitempty"`
|
||||
ToolChoice json.RawMessage `json:"tool_choice,omitempty"`
|
||||
Temperature *float64 `json:"temperature,omitempty"`
|
||||
TopP *float64 `json:"top_p,omitempty"`
|
||||
MaxOutputTokens *int `json:"max_output_tokens,omitempty"`
|
||||
Reasoning json.RawMessage `json:"reasoning,omitempty"`
|
||||
Metadata json.RawMessage `json:"metadata,omitempty"`
|
||||
Text json.RawMessage `json:"text,omitempty"`
|
||||
Truncation string `json:"truncation,omitempty"`
|
||||
}
|
||||
|
||||
// WebSocketErrorEvent represents a server-sent error event over WebSocket.
|
||||
type WebSocketErrorEvent struct {
|
||||
Type WebSocketEventType `json:"type"`
|
||||
Status int `json:"status,omitempty"`
|
||||
Error *WebSocketErrorBody `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
// WebSocketErrorBody is the error detail within a WebSocketErrorEvent.
|
||||
type WebSocketErrorBody struct {
|
||||
Code string `json:"code,omitempty"`
|
||||
Message string `json:"message,omitempty"`
|
||||
Param string `json:"param,omitempty"`
|
||||
}
|
||||
|
||||
// WebSocketConfig provides optional tuning for WebSocket gateway features.
|
||||
// WebSocket is always enabled. These fields allow overriding the high defaults.
|
||||
type WebSocketConfig struct {
|
||||
MaxConnections int `json:"max_connections_per_user"`
|
||||
TranscriptBufferSize int `json:"transcript_buffer_size"`
|
||||
Pool *WSPoolConfig `json:"pool,omitempty"`
|
||||
}
|
||||
|
||||
// WSPoolConfig configures the upstream WebSocket connection pool.
|
||||
type WSPoolConfig struct {
|
||||
MaxIdlePerKey int `json:"max_idle_per_key"`
|
||||
MaxTotalConnections int `json:"max_total_connections"`
|
||||
IdleTimeoutSeconds int `json:"idle_timeout_seconds"`
|
||||
MaxConnectionLifetimeSeconds int `json:"max_connection_lifetime_seconds"`
|
||||
}
|
||||
|
||||
// Default pool configuration values (set high for production workloads)
|
||||
const (
|
||||
DefaultWSMaxIdlePerKey = 50
|
||||
DefaultWSMaxTotalConnections = 1000
|
||||
DefaultWSIdleTimeoutSeconds = 600
|
||||
DefaultWSMaxConnectionLifetimeSeconds = 7200
|
||||
DefaultWSMaxConnections = 100
|
||||
DefaultWSTranscriptBufferSize = 100
|
||||
)
|
||||
|
||||
// CheckAndSetDefaults fills in default values for WebSocketConfig.
|
||||
func (c *WebSocketConfig) CheckAndSetDefaults() {
|
||||
if c.MaxConnections <= 0 {
|
||||
c.MaxConnections = DefaultWSMaxConnections
|
||||
}
|
||||
if c.TranscriptBufferSize <= 0 {
|
||||
c.TranscriptBufferSize = DefaultWSTranscriptBufferSize
|
||||
}
|
||||
if c.Pool == nil {
|
||||
c.Pool = &WSPoolConfig{}
|
||||
}
|
||||
c.Pool.CheckAndSetDefaults()
|
||||
}
|
||||
|
||||
// CheckAndSetDefaults fills in default values for WSPoolConfig.
|
||||
func (c *WSPoolConfig) CheckAndSetDefaults() {
|
||||
if c.MaxIdlePerKey <= 0 {
|
||||
c.MaxIdlePerKey = DefaultWSMaxIdlePerKey
|
||||
}
|
||||
if c.MaxTotalConnections <= 0 {
|
||||
c.MaxTotalConnections = DefaultWSMaxTotalConnections
|
||||
}
|
||||
if c.IdleTimeoutSeconds <= 0 {
|
||||
c.IdleTimeoutSeconds = DefaultWSIdleTimeoutSeconds
|
||||
}
|
||||
if c.MaxConnectionLifetimeSeconds <= 0 {
|
||||
c.MaxConnectionLifetimeSeconds = DefaultWSMaxConnectionLifetimeSeconds
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user