Skip to content
Open
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
7219ffd
feat: Phase 1 — core schema + OpenAI/Azure provider support for image…
Radheshg04 Dec 1, 2025
b226723
docs: update image generation provider documentation
Radheshg04 Dec 1, 2025
0ef6a4c
fix: address typos and restore missing image generation metadata
Radheshg04 Dec 1, 2025
a05755f
feat: Phase 2 - HTTP transport and non-streaming endpoint + early str…
Radheshg04 Dec 2, 2025
84eb975
feat: Phase 3 - Streaming support and accumulator
Radheshg04 Dec 3, 2025
d69fbe1
fix: streaming routing + accumulator bug fixes
Radheshg04 Dec 4, 2025
e03e10e
feat: Phase 4 - Semantic cache integration + bug fixes
Radheshg04 Dec 4, 2025
7db0fac
feat: Phase 5 - UI components and documentation + Added Unit Tests
Radheshg04 Dec 4, 2025
8e3a14c
feat: Added integration tests and load tests
Radheshg04 Dec 4, 2025
d50deda
feat: Added support for image generations via chatcompletions api and…
Radheshg04 Dec 4, 2025
e86076c
fix: fixed request types in providers + minor bug fixes
Radheshg04 Dec 4, 2025
f50dccc
fix: Addressed reviews + image streaming bug fixes
Radheshg04 Dec 10, 2025
d41adc5
Merge branch 'main' into feature/image-generation-950
Radheshg04 Dec 12, 2025
3738f96
fix: Addressed reviews
Radheshg04 Dec 14, 2025
2d61123
fix: fixed azure and openai streaming inconsistencies + added support…
Radheshg04 Dec 14, 2025
e9d1aee
docs: update changelogs for image generation support
Radheshg04 Dec 14, 2025
3bfad4d
fix: added cases for image generation handlers in transport + fixed a…
Radheshg04 Dec 14, 2025
7e4f581
Merge branch 'main' into feature/image-generation-950
Radheshg04 Dec 14, 2025
96e06c0
docs: added image generation support to multimodal docs, provider mat…
Radheshg04 Dec 14, 2025
01deafd
docs: addressed reviews and updated docs
Radheshg04 Dec 14, 2025
8b69047
feat: added image gen request converter; updated image gen schema to …
Radheshg04 Dec 18, 2025
502f360
fix: added routing for image gen
Radheshg04 Dec 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 82 additions & 0 deletions core/bifrost.go
Original file line number Diff line number Diff line change
Expand Up @@ -867,6 +867,73 @@ func (bifrost *Bifrost) TranscriptionStreamRequest(ctx context.Context, req *sch
return bifrost.handleStreamRequest(ctx, bifrostReq)
}

// ImageGenerationRequest sends a image generation request to the specified provider.
func (bifrost *Bifrost) ImageGenerationRequest(ctx context.Context,
req *schemas.BifrostImageGenerationRequest) (*schemas.BifrostImageGenerationResponse, *schemas.BifrostError) {
if req == nil {
return nil, &schemas.BifrostError{
IsBifrostError: false,
Error: &schemas.ErrorField{
Message: "image generation request is nil",
},
}
}
if req.Input == nil || req.Input.Prompt == "" {
return nil, &schemas.BifrostError{
IsBifrostError: false,
Error: &schemas.ErrorField{
Message: "prompt not provided for image generation request",
},
}
}

bifrostReq := bifrost.getBifrostRequest()
bifrostReq.RequestType = schemas.ImageGenerationRequest
bifrostReq.ImageGenerationRequest = req

response, err := bifrost.handleRequest(ctx, bifrostReq)
if err != nil {
return nil, err
}
if response == nil || response.ImageGenerationResponse == nil {
return nil, &schemas.BifrostError{
IsBifrostError: false,
Error: &schemas.ErrorField{
Message: "received nil response from provider",
},
}
}

return response.ImageGenerationResponse, nil
}

// ImageGenerationStreamRequest sends a image generation stream request to the specified provider.
func (bifrost *Bifrost) ImageGenerationStreamRequest(ctx context.Context,
req *schemas.BifrostImageGenerationRequest) (chan *schemas.BifrostStream, *schemas.BifrostError) {
if req == nil {
return nil, &schemas.BifrostError{
IsBifrostError: false,
Error: &schemas.ErrorField{
Message: "image generation stream request is nil",
},
}
}
if req.Input == nil || req.Input.Prompt == "" {
return nil, &schemas.BifrostError{
IsBifrostError: false,
Error: &schemas.ErrorField{
Message: "prompt not provided for image generation stream request",
},
}
}

bifrostReq := bifrost.getBifrostRequest()
bifrostReq.RequestType = schemas.ImageGenerationStreamRequest
bifrostReq.ImageGenerationRequest = req

return bifrost.handleStreamRequest(ctx, bifrostReq)
}

// RemovePlugin removes a plugin from the server.
func (bifrost *Bifrost) RemovePlugin(name string) error {

Expand Down Expand Up @@ -1688,6 +1755,12 @@ func (bifrost *Bifrost) prepareFallbackRequest(req *schemas.BifrostRequest, fall
tmp.Model = fallback.Model
fallbackReq.TranscriptionRequest = &tmp
}
if req.ImageGenerationRequest != nil {
tmp := *req.ImageGenerationRequest
tmp.Provider = fallback.Provider
tmp.Model = fallback.Model
fallbackReq.ImageGenerationRequest = &tmp
}

return &fallbackReq
}
Expand Down Expand Up @@ -2424,6 +2497,12 @@ func (bifrost *Bifrost) handleProviderRequest(provider schemas.Provider, req *Ch
return nil, bifrostError
}
response.TranscriptionResponse = transcriptionResponse
case schemas.ImageGenerationRequest:
imageResponse, bifrostError := provider.ImageGeneration(req.Context, key, req.BifrostRequest.ImageGenerationRequest)
if bifrostError != nil {
return nil, bifrostError
}
response.ImageGenerationResponse = imageResponse
default:
_, model, _ := req.BifrostRequest.GetRequestFields()
return nil, &schemas.BifrostError{
Expand Down Expand Up @@ -2454,6 +2533,8 @@ func (bifrost *Bifrost) handleProviderStreamRequest(provider schemas.Provider, r
return provider.SpeechStream(req.Context, postHookRunner, key, req.BifrostRequest.SpeechRequest)
case schemas.TranscriptionStreamRequest:
return provider.TranscriptionStream(req.Context, postHookRunner, key, req.BifrostRequest.TranscriptionRequest)
case schemas.ImageGenerationStreamRequest:
return provider.ImageGenerationStream(req.Context, postHookRunner, key, req.BifrostRequest.ImageGenerationRequest)
default:
_, model, _ := req.BifrostRequest.GetRequestFields()
return nil, &schemas.BifrostError{
Expand Down Expand Up @@ -2630,6 +2711,7 @@ func resetBifrostRequest(req *schemas.BifrostRequest) {
req.EmbeddingRequest = nil
req.SpeechRequest = nil
req.TranscriptionRequest = nil
req.ImageGenerationRequest = nil
}

// getBifrostRequest gets a BifrostRequest from the pool
Expand Down
1 change: 1 addition & 0 deletions core/changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
feat: added image generation request and response support
Loading