first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 21:52:23 +03:00
commit 880f412e2c
2662 changed files with 866266 additions and 0 deletions

View File

@@ -0,0 +1,111 @@
// Package handlers provides HTTP request handlers for the Bifrost HTTP transport.
// This file contains integration management handlers for AI provider integrations.
package handlers
import (
"github.com/fasthttp/router"
bifrost "github.com/maximhq/bifrost/core"
"github.com/maximhq/bifrost/core/schemas"
"github.com/maximhq/bifrost/transports/bifrost-http/integrations"
"github.com/maximhq/bifrost/transports/bifrost-http/lib"
)
// IntegrationHandler manages HTTP requests for AI provider integrations
type IntegrationHandler struct {
extensions []integrations.ExtensionRouter
wsResponses *WSResponsesHandler
wsRealtime *WSRealtimeHandler
webrtcRealtime *WebRTCRealtimeHandler
realtimeClientSecrets *RealtimeClientSecretsHandler
}
// NewIntegrationHandler creates a new integration handler instance.
// WebSocket handlers may be nil if WebSocket support is not configured.
func NewIntegrationHandler(client *bifrost.Bifrost, handlerStore lib.HandlerStore, wsResponses *WSResponsesHandler, wsRealtime *WSRealtimeHandler, webrtcRealtime *WebRTCRealtimeHandler, realtimeClientSecrets *RealtimeClientSecretsHandler) *IntegrationHandler {
// Initialize all available integration routers
extensions := []integrations.ExtensionRouter{
integrations.NewOpenAIRouter(client, handlerStore, logger),
integrations.NewAnthropicRouter(client, handlerStore, logger),
integrations.NewGenAIRouter(client, handlerStore, logger),
integrations.NewLiteLLMRouter(client, handlerStore, logger),
integrations.NewCohereRouter(client, handlerStore, logger),
integrations.NewLangChainRouter(client, handlerStore, logger),
integrations.NewPydanticAIRouter(client, handlerStore, logger),
integrations.NewBedrockRouter(client, handlerStore, logger),
// passthrough routers
integrations.NewGenAIPassthroughRouter(client, handlerStore, logger),
integrations.NewOpenAIPassthroughRouter(client, handlerStore, logger),
integrations.NewAnthropicPassthroughRouter(client, handlerStore, logger),
integrations.NewAzurePassthroughRouter(client, handlerStore, logger),
integrations.NewCursorRouter(client, handlerStore, logger),
}
return &IntegrationHandler{
extensions: extensions,
wsResponses: wsResponses,
wsRealtime: wsRealtime,
webrtcRealtime: webrtcRealtime,
realtimeClientSecrets: realtimeClientSecrets,
}
}
// RegisterRoutes registers all integration routes for AI provider compatibility endpoints
func (h *IntegrationHandler) RegisterRoutes(r *router.Router, middlewares ...schemas.BifrostHTTPMiddleware) {
// Register routes for each integration extension
for _, extension := range h.extensions {
extension.RegisterRoutes(r, middlewares...)
}
// Register WebSocket routes (base path + integration paths)
if h.wsResponses != nil {
h.wsResponses.RegisterRoutes(r, middlewares...)
}
if h.wsRealtime != nil {
h.wsRealtime.RegisterRoutes(r, middlewares...)
}
if h.webrtcRealtime != nil {
h.webrtcRealtime.RegisterRoutes(r, middlewares...)
}
if h.realtimeClientSecrets != nil {
h.realtimeClientSecrets.RegisterRoutes(r, middlewares...)
}
}
func (h *IntegrationHandler) Close() {
if h == nil {
return
}
if h.wsResponses != nil {
h.wsResponses.Close()
}
if h.wsRealtime != nil {
h.wsRealtime.Close()
}
if h.webrtcRealtime != nil {
h.webrtcRealtime.Close()
}
}
// SetLargePayloadHook sets the large payload detection hook on all integration routers
// that support it. This is used by enterprise to inject large payload optimization.
func (h *IntegrationHandler) SetLargePayloadHook(hook integrations.LargePayloadHook) {
for _, extension := range h.extensions {
if setter, ok := extension.(interface {
SetLargePayloadHook(integrations.LargePayloadHook)
}); ok {
setter.SetLargePayloadHook(hook)
}
}
}
// SetLargeResponseHook sets the large response scanning hook on all integration routers
// that support it. Enterprise uses this to inject Phase B usage extraction into the
// response stream without embedding scanning logic in the OSS router.
func (h *IntegrationHandler) SetLargeResponseHook(hook integrations.LargeResponseHook) {
for _, extension := range h.extensions {
if setter, ok := extension.(interface {
SetLargeResponseHook(integrations.LargeResponseHook)
}); ok {
setter.SetLargeResponseHook(hook)
}
}
}