first commit
This commit is contained in:
82
examples/plugins/hello-world/main.go
Normal file
82
examples/plugins/hello-world/main.go
Normal file
@@ -0,0 +1,82 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/maximhq/bifrost/core/schemas"
|
||||
)
|
||||
|
||||
const (
|
||||
transportPreHookKey schemas.BifrostContextKey = "hello-world-plugin-transport-pre-hook"
|
||||
transportPostHookKey schemas.BifrostContextKey = "hello-world-plugin-transport-post-hook"
|
||||
preHookKey schemas.BifrostContextKey = "hello-world-plugin-pre-hook"
|
||||
)
|
||||
|
||||
func Init(config any) error {
|
||||
fmt.Println("Init called")
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetName returns the name of the plugin (required)
|
||||
// This is the system identifier - not editable by users
|
||||
// Users can set a custom display_name in the config for the UI
|
||||
func GetName() string {
|
||||
return "hello-world"
|
||||
}
|
||||
|
||||
func HTTPTransportPreHook(ctx *schemas.BifrostContext, req *schemas.HTTPRequest) (*schemas.HTTPResponse, error) {
|
||||
fmt.Println("HTTPTransportPreHook called")
|
||||
// Modify request in-place
|
||||
req.Headers["x-hello-world-plugin"] = "transport-pre-hook-value"
|
||||
// Store value in context for PreLLMHook/PostLLMHook
|
||||
ctx.SetValue(transportPreHookKey, "transport-pre-hook-value")
|
||||
// Return nil to continue processing, or return &schemas.HTTPResponse{} to short-circuit
|
||||
ctx.Log(schemas.LogLevelInfo, "HTTPTransportPreHook called")
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func HTTPTransportPostHook(ctx *schemas.BifrostContext, req *schemas.HTTPRequest, resp *schemas.HTTPResponse) error {
|
||||
fmt.Println("HTTPTransportPostHook called")
|
||||
// Modify response in-place
|
||||
resp.Headers["x-hello-world-plugin"] = "transport-post-hook-value"
|
||||
// Store value in context
|
||||
ctx.Log(schemas.LogLevelInfo, "HTTPTransportPostHook called")
|
||||
ctx.SetValue(transportPostHookKey, "transport-post-hook-value")
|
||||
// Return nil to continue processing
|
||||
return nil
|
||||
}
|
||||
|
||||
func HTTPTransportStreamChunkHook(ctx *schemas.BifrostContext, req *schemas.HTTPRequest, chunk *schemas.BifrostStreamChunk) (*schemas.BifrostStreamChunk, error) {
|
||||
fmt.Println("HTTPTransportStreamChunkHook called")
|
||||
// Modify chunk in-place
|
||||
ctx.Log(schemas.LogLevelInfo, "HTTPTransportStreamChunkHook called")
|
||||
if chunk.BifrostChatResponse != nil && chunk.BifrostChatResponse.Choices != nil && len(chunk.BifrostChatResponse.Choices) > 0 && chunk.BifrostChatResponse.Choices[0].ChatStreamResponseChoice != nil && chunk.BifrostChatResponse.Choices[0].ChatStreamResponseChoice.Delta != nil && chunk.BifrostChatResponse.Choices[0].ChatStreamResponseChoice.Delta.Content != nil {
|
||||
*chunk.BifrostChatResponse.Choices[0].ChatStreamResponseChoice.Delta.Content += " - modified by hello-world-plugin"
|
||||
}
|
||||
// Return the modified chunk
|
||||
return chunk, nil
|
||||
}
|
||||
|
||||
func PreLLMHook(ctx *schemas.BifrostContext, req *schemas.BifrostRequest) (*schemas.BifrostRequest, *schemas.LLMPluginShortCircuit, error) {
|
||||
value1 := ctx.Value(transportPreHookKey)
|
||||
fmt.Println("value1:", value1)
|
||||
ctx.SetValue(preHookKey, "pre-hook-value")
|
||||
ctx.Log(schemas.LogLevelInfo, "PreLLMHook called")
|
||||
fmt.Println("PreLLMHook called")
|
||||
return req, nil, nil
|
||||
}
|
||||
|
||||
func PostLLMHook(ctx *schemas.BifrostContext, resp *schemas.BifrostResponse, bifrostErr *schemas.BifrostError) (*schemas.BifrostResponse, *schemas.BifrostError, error) {
|
||||
fmt.Println("PostLLMHook called")
|
||||
value1 := ctx.Value(transportPreHookKey)
|
||||
fmt.Println("value1:", value1)
|
||||
value2 := ctx.Value(preHookKey)
|
||||
fmt.Println("value2:", value2)
|
||||
ctx.Log(schemas.LogLevelInfo, "PostLLMHook called")
|
||||
return resp, bifrostErr, nil
|
||||
}
|
||||
|
||||
func Cleanup() error {
|
||||
fmt.Println("Cleanup called")
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user