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,108 @@
package anthropic
import (
"strings"
"time"
providerUtils "github.com/maximhq/bifrost/core/providers/utils"
"github.com/maximhq/bifrost/core/schemas"
)
func (response *AnthropicListModelsResponse) ToBifrostListModelsResponse(providerKey schemas.ModelProvider, allowedModels schemas.WhiteList, blacklistedModels schemas.BlackList, aliases map[string]string, unfiltered bool) *schemas.BifrostListModelsResponse {
if response == nil {
return nil
}
bifrostResponse := &schemas.BifrostListModelsResponse{
Data: make([]schemas.Model, 0, len(response.Data)),
FirstID: response.FirstID,
LastID: response.LastID,
HasMore: schemas.Ptr(response.HasMore),
}
// Map Anthropic's cursor-based pagination to Bifrost's token-based pagination.
// If there are more results, set next_page_token to last_id for the next request.
if response.HasMore && response.LastID != nil {
bifrostResponse.NextPageToken = *response.LastID
}
pipeline := &providerUtils.ListModelsPipeline{
AllowedModels: allowedModels,
BlacklistedModels: blacklistedModels,
Aliases: aliases,
Unfiltered: unfiltered,
ProviderKey: providerKey,
MatchFns: providerUtils.DefaultMatchFns(),
}
if pipeline.ShouldEarlyExit() {
return bifrostResponse
}
included := make(map[string]bool)
for _, model := range response.Data {
for _, result := range pipeline.FilterModel(model.ID) {
resolvedKey := strings.ToLower(result.ResolvedID)
if included[resolvedKey] {
continue
}
entry := schemas.Model{
ID: string(providerKey) + "/" + result.ResolvedID,
Name: schemas.Ptr(model.DisplayName),
Created: schemas.Ptr(model.CreatedAt.Unix()),
MaxInputTokens: model.MaxInputTokens,
MaxOutputTokens: model.MaxTokens,
ProviderExtra: model.Capabilities,
}
if result.AliasValue != "" {
entry.Alias = schemas.Ptr(result.AliasValue)
}
bifrostResponse.Data = append(bifrostResponse.Data, entry)
included[resolvedKey] = true
}
}
bifrostResponse.Data = append(bifrostResponse.Data,
pipeline.BackfillModels(included)...)
return bifrostResponse
}
func ToAnthropicListModelsResponse(response *schemas.BifrostListModelsResponse) *AnthropicListModelsResponse {
if response == nil {
return nil
}
anthropicResponse := &AnthropicListModelsResponse{
Data: make([]AnthropicModel, 0, len(response.Data)),
}
if response.FirstID != nil {
anthropicResponse.FirstID = response.FirstID
}
if response.LastID != nil {
anthropicResponse.LastID = response.LastID
}
if response.HasMore != nil {
anthropicResponse.HasMore = *response.HasMore
}
for _, model := range response.Data {
_, modelID := schemas.ParseModelString(model.ID, schemas.Anthropic)
anthropicModel := AnthropicModel{
ID: modelID,
Type: "model",
MaxInputTokens: model.MaxInputTokens,
MaxTokens: model.MaxOutputTokens,
Capabilities: model.ProviderExtra,
}
if model.Name != nil {
anthropicModel.DisplayName = *model.Name
}
if model.Created != nil {
anthropicModel.CreatedAt = time.Unix(*model.Created, 0)
}
anthropicResponse.Data = append(anthropicResponse.Data, anthropicModel)
}
return anthropicResponse
}