diff --git a/core/changelog.md b/core/changelog.md index d52f2f980..0a2d19512 100644 --- a/core/changelog.md +++ b/core/changelog.md @@ -1,8 +1,6 @@ -- Feat: Stream token latency sent back in extra fields. -- Feat: Plugin interface extended with TransportInterceptor method. -- Feat: Add Anthropic thinking parameter -- Feat: Add Custom key selector logic and send back request latency in extra fields. -- Bug: Fallbacks not working occasionally. \ No newline at end of file +- Feat: Responses streaming added across all providers. +- Fix: Bedrock chat streaming decoding fixes. +- Feat: Added raw response support for all streaming requests. \ No newline at end of file diff --git a/core/version b/core/version index c813fe116..3c43790f5 100644 --- a/core/version +++ b/core/version @@ -1 +1 @@ -1.2.5 +1.2.6 diff --git a/docs/changelogs/v1.3.0-prerelease6.mdx b/docs/changelogs/v1.3.0-prerelease6.mdx index 7336ad75d..84508b47c 100644 --- a/docs/changelogs/v1.3.0-prerelease6.mdx +++ b/docs/changelogs/v1.3.0-prerelease6.mdx @@ -4,7 +4,7 @@ description: "v1.3.0-prerelease6 changelog" --- -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 - Feat: Added Anthropic thinking parameter in responses API. - Feat: Added Anthropic text completion integration support. - Fix: Extra fields sent back in streaming responses. @@ -37,37 +37,37 @@ description: "v1.3.0-prerelease6 changelog" -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 - Feat: Added First Token and Inter Token latency metrics for streaming requests. diff --git a/framework/changelog.md b/framework/changelog.md index 203305d82..6cb761787 100644 --- a/framework/changelog.md +++ b/framework/changelog.md @@ -1,5 +1,5 @@ -- Upgrade dependency: core to 1.2.5 -- Feat: User table added to config store. \ No newline at end of file +- Upgrade dependency: core to 1.2.6 +- Feat: Moved the migrator package to a more general location and added database migrations for the logstore to standardize object type values. \ No newline at end of file diff --git a/framework/configstore/migrations.go b/framework/configstore/migrations.go index a8ed12514..6fdf7aa2f 100644 --- a/framework/configstore/migrations.go +++ b/framework/configstore/migrations.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/maximhq/bifrost/framework/configstore/migrator" + "github.com/maximhq/bifrost/framework/migrator" "gorm.io/gorm" ) diff --git a/framework/configstore/rdb.go b/framework/configstore/rdb.go index 4f83d7a4b..d28bff63c 100644 --- a/framework/configstore/rdb.go +++ b/framework/configstore/rdb.go @@ -7,7 +7,7 @@ import ( "fmt" "github.com/maximhq/bifrost/core/schemas" - "github.com/maximhq/bifrost/framework/configstore/migrator" + "github.com/maximhq/bifrost/framework/migrator" "github.com/maximhq/bifrost/framework/logstore" "github.com/maximhq/bifrost/framework/vectorstore" "gorm.io/gorm" diff --git a/framework/configstore/store.go b/framework/configstore/store.go index 3f539f502..569eaa52b 100644 --- a/framework/configstore/store.go +++ b/framework/configstore/store.go @@ -6,7 +6,7 @@ import ( "fmt" "github.com/maximhq/bifrost/core/schemas" - "github.com/maximhq/bifrost/framework/configstore/migrator" + "github.com/maximhq/bifrost/framework/migrator" "github.com/maximhq/bifrost/framework/logstore" "github.com/maximhq/bifrost/framework/vectorstore" "gorm.io/gorm" diff --git a/framework/logstore/migrations.go b/framework/logstore/migrations.go new file mode 100644 index 000000000..260cb7da2 --- /dev/null +++ b/framework/logstore/migrations.go @@ -0,0 +1,132 @@ +package logstore + +import ( + "context" + "fmt" + + "github.com/maximhq/bifrost/framework/migrator" + "gorm.io/gorm" +) + +// Migrate performs the necessary database migrations. +func triggerMigrations(ctx context.Context, db *gorm.DB) error { + if err := migrationInit(ctx, db); err != nil { + return err + } + if err := migrationUpdateObjectColumnValues(ctx, db); err != nil { + return err + } + + return nil +} + +// migrationInit is the first migration +func migrationInit(ctx context.Context, db *gorm.DB) error { + m := migrator.New(db, migrator.DefaultOptions, []*migrator.Migration{{ + ID: "logs_init", + Migrate: func(tx *gorm.DB) error { + tx = tx.WithContext(ctx) + migrator := tx.Migrator() + if !migrator.HasTable(&Log{}) { + if err := migrator.CreateTable(&Log{}); err != nil { + return err + } + } + + return nil + }, + Rollback: func(tx *gorm.DB) error { + tx = tx.WithContext(ctx) + migrator := tx.Migrator() + // Drop children first, then parents (adjust if your actual FKs differ) + if err := migrator.DropTable(&Log{}); err != nil { + return err + } + return nil + }, + }}) + err := m.Migrate() + if err != nil { + return fmt.Errorf("error while running db migration: %s", err.Error()) + } + return nil +} + +// migrationUpdateObjectColumnValues updates the object column values from old format to new format +func migrationUpdateObjectColumnValues(ctx context.Context, db *gorm.DB) error { + opts := *migrator.DefaultOptions + opts.UseTransaction = true + m := migrator.New(db, &opts, []*migrator.Migration{{ + ID: "logs_init_update_object_column_values", + Migrate: func(tx *gorm.DB) error { + tx = tx.WithContext(ctx) + + updateSQL := ` + UPDATE logs + SET object_type = CASE object_type + WHEN 'chat.completion' THEN 'chat_completion' + WHEN 'text.completion' THEN 'text_completion' + WHEN 'list' THEN 'embedding' + WHEN 'audio.speech' THEN 'speech' + WHEN 'audio.transcription' THEN 'transcription' + WHEN 'chat.completion.chunk' THEN 'chat_completion_stream' + WHEN 'audio.speech.chunk' THEN 'speech_stream' + WHEN 'audio.transcription.chunk' THEN 'transcription_stream' + WHEN 'response' THEN 'responses' + WHEN 'response.completion.chunk' THEN 'responses_stream' + ELSE object_type + END + WHERE object_type IN ( + 'chat.completion', 'text.completion', 'list', + 'audio.speech', 'audio.transcription', 'chat.completion.chunk', + 'audio.speech.chunk', 'audio.transcription.chunk', + 'response', 'response.completion.chunk' + )` + + result := tx.Exec(updateSQL) + if result.Error != nil { + return fmt.Errorf("failed to update object_type values: %w", result.Error) + } + + return nil + }, + Rollback: func(tx *gorm.DB) error { + tx = tx.WithContext(ctx) + + // Use a single CASE statement for efficient bulk rollback + rollbackSQL := ` + UPDATE logs + SET object_type = CASE object_type + WHEN 'chat_completion' THEN 'chat.completion' + WHEN 'text_completion' THEN 'text.completion' + WHEN 'embedding' THEN 'list' + WHEN 'speech' THEN 'audio.speech' + WHEN 'transcription' THEN 'audio.transcription' + WHEN 'chat_completion_stream' THEN 'chat.completion.chunk' + WHEN 'speech_stream' THEN 'audio.speech.chunk' + WHEN 'transcription_stream' THEN 'audio.transcription.chunk' + WHEN 'responses' THEN 'response' + WHEN 'responses_stream' THEN 'response.completion.chunk' + ELSE object_type + END + WHERE object_type IN ( + 'chat_completion', 'text_completion', 'embedding', 'speech', + 'transcription', 'chat_completion_stream', 'speech_stream', + 'transcription_stream', 'responses', 'responses_stream' + )` + + result := tx.Exec(rollbackSQL) + if result.Error != nil { + return fmt.Errorf("failed to rollback object_type values: %w", result.Error) + } + + return nil + }, + }}) + + err := m.Migrate() + if err != nil { + return fmt.Errorf("error while running object column migration: %s", err.Error()) + } + return nil +} diff --git a/framework/logstore/sqlite.go b/framework/logstore/sqlite.go index b0081ab76..0645fbc8a 100644 --- a/framework/logstore/sqlite.go +++ b/framework/logstore/sqlite.go @@ -22,7 +22,8 @@ func newSqliteLogStore(ctx context.Context, config *SQLiteConfig, logger schemas if err != nil { return nil, err } - if err := db.WithContext(ctx).AutoMigrate(&Log{}); err != nil { + // Run migrations + if err := triggerMigrations(ctx, db); err != nil { return nil, err } return &RDBLogStore{db: db, logger: logger}, nil diff --git a/framework/configstore/migrator/migrator.go b/framework/migrator/migrator.go similarity index 100% rename from framework/configstore/migrator/migrator.go rename to framework/migrator/migrator.go diff --git a/framework/version b/framework/version index e25d8d9f3..0664a8fd2 100644 --- a/framework/version +++ b/framework/version @@ -1 +1 @@ -1.1.5 +1.1.6 diff --git a/plugins/governance/changelog.md b/plugins/governance/changelog.md index ef9f2b482..38b1f9e84 100644 --- a/plugins/governance/changelog.md +++ b/plugins/governance/changelog.md @@ -1,5 +1,4 @@ -- Chore: using core 1.2.5 and framework 1.1.5 -- Feat: Added provider routing TransportInterceptor. +- Chore: using core 1.2.6 and framework 1.1.6 diff --git a/plugins/governance/version b/plugins/governance/version index 80e78df68..95b25aee2 100644 --- a/plugins/governance/version +++ b/plugins/governance/version @@ -1 +1 @@ -1.3.5 +1.3.6 diff --git a/plugins/jsonparser/changelog.md b/plugins/jsonparser/changelog.md index fca13c260..5de31a62e 100644 --- a/plugins/jsonparser/changelog.md +++ b/plugins/jsonparser/changelog.md @@ -1,4 +1,4 @@ -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 diff --git a/plugins/jsonparser/version b/plugins/jsonparser/version index aaf8be715..6f96ed081 100644 --- a/plugins/jsonparser/version +++ b/plugins/jsonparser/version @@ -1 +1 @@ -1.3.5 \ No newline at end of file +1.3.6 \ No newline at end of file diff --git a/plugins/logging/changelog.md b/plugins/logging/changelog.md index fca13c260..5de31a62e 100644 --- a/plugins/logging/changelog.md +++ b/plugins/logging/changelog.md @@ -1,4 +1,4 @@ -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 diff --git a/plugins/logging/version b/plugins/logging/version index 80e78df68..95b25aee2 100644 --- a/plugins/logging/version +++ b/plugins/logging/version @@ -1 +1 @@ -1.3.5 +1.3.6 diff --git a/plugins/maxim/changelog.md b/plugins/maxim/changelog.md index fca13c260..5de31a62e 100644 --- a/plugins/maxim/changelog.md +++ b/plugins/maxim/changelog.md @@ -1,4 +1,4 @@ -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 diff --git a/plugins/maxim/version b/plugins/maxim/version index e516bb9d9..c514bd85c 100644 --- a/plugins/maxim/version +++ b/plugins/maxim/version @@ -1 +1 @@ -1.4.5 +1.4.6 diff --git a/plugins/mocker/changelog.md b/plugins/mocker/changelog.md index fca13c260..5de31a62e 100644 --- a/plugins/mocker/changelog.md +++ b/plugins/mocker/changelog.md @@ -1,4 +1,4 @@ -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 diff --git a/plugins/mocker/version b/plugins/mocker/version index aaf8be715..6f96ed081 100644 --- a/plugins/mocker/version +++ b/plugins/mocker/version @@ -1 +1 @@ -1.3.5 \ No newline at end of file +1.3.6 \ No newline at end of file diff --git a/plugins/otel/changelog.md b/plugins/otel/changelog.md index fca13c260..5de31a62e 100644 --- a/plugins/otel/changelog.md +++ b/plugins/otel/changelog.md @@ -1,4 +1,4 @@ -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 diff --git a/plugins/otel/version b/plugins/otel/version index 1464c521f..ece61c601 100644 --- a/plugins/otel/version +++ b/plugins/otel/version @@ -1 +1 @@ -1.0.5 \ No newline at end of file +1.0.6 \ No newline at end of file diff --git a/plugins/semanticcache/changelog.md b/plugins/semanticcache/changelog.md index fca13c260..5de31a62e 100644 --- a/plugins/semanticcache/changelog.md +++ b/plugins/semanticcache/changelog.md @@ -1,4 +1,4 @@ -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 diff --git a/plugins/semanticcache/version b/plugins/semanticcache/version index 80e78df68..95b25aee2 100644 --- a/plugins/semanticcache/version +++ b/plugins/semanticcache/version @@ -1 +1 @@ -1.3.5 +1.3.6 diff --git a/plugins/telemetry/changelog.md b/plugins/telemetry/changelog.md index b7aeaf90c..8cdee6c08 100644 --- a/plugins/telemetry/changelog.md +++ b/plugins/telemetry/changelog.md @@ -1,5 +1,5 @@ -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 -- Feat: Added First Token and Inter Token latency metrics for streaming requests. +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 +- Fix: Removed last token's accumulated latency from inter token latency metric. diff --git a/plugins/telemetry/version b/plugins/telemetry/version index aaf8be715..6f96ed081 100644 --- a/plugins/telemetry/version +++ b/plugins/telemetry/version @@ -1 +1 @@ -1.3.5 \ No newline at end of file +1.3.6 \ No newline at end of file diff --git a/transports/changelog.md b/transports/changelog.md index 403008814..5007de001 100644 --- a/transports/changelog.md +++ b/transports/changelog.md @@ -1,11 +1,8 @@ -- Upgrade dependency: core to 1.2.5 and framework to 1.1.5 -- Feat: Added Anthropic thinking parameter in responses API. -- Feat: Added Anthropic text completion integration support. -- Fix: Extra fields sent back in streaming responses. -- Feat: Latency for all request types (with inter token latency for streaming requests) sent back in Extra fields. -- Feat: UI websocket implementation generalized. -- Feat: TokenInterceptor interface added to plugins. -- Fix: Middlewares added to integrations route. +- Upgrade dependency: core to 1.2.6 and framework to 1.1.6 +- Added Responses streaming across all providers. +- Fixed bedrock chat streaming decoding issues. +- Added raw response support for all streaming requests. +- Removed last token's accumulated latency from inter token latency metric. diff --git a/transports/version b/transports/version index 1a3c553c5..ff0cd1044 100644 --- a/transports/version +++ b/transports/version @@ -1 +1 @@ -1.3.0-prerelease6 +1.3.0-prerelease7