import random
import httpx PROVIDERS = { "openai": {"url": "https://api.openai.com/v1/chat/completions", "weight": 0.6}, "anthropic": {"url": "https://api.anthropic.com/v1/messages", "weight": 0.4},
} def pick_provider(): names = list(PROVIDERS.keys()) weights = [PROVIDERS[n]["weight"] for n in names] return random.choices(names, weights=weights, k=1)[0]
import random
import httpx PROVIDERS = { "openai": {"url": "https://api.openai.com/v1/chat/completions", "weight": 0.6}, "anthropic": {"url": "https://api.anthropic.com/v1/messages", "weight": 0.4},
} def pick_provider(): names = list(PROVIDERS.keys()) weights = [PROVIDERS[n]["weight"] for n in names] return random.choices(names, weights=weights, k=1)[0]
import random
import httpx PROVIDERS = { "openai": {"url": "https://api.openai.com/v1/chat/completions", "weight": 0.6}, "anthropic": {"url": "https://api.anthropic.com/v1/messages", "weight": 0.4},
} def pick_provider(): names = list(PROVIDERS.keys()) weights = [PROVIDERS[n]["weight"] for n in names] return random.choices(names, weights=weights, k=1)[0]
accounts: - id: "production" providers: - id: "openai-primary" type: "openai" api_key: "${OPENAI_API_KEY}" model: "gpt-4o" weight: 60 - id: "anthropic-secondary" type: "anthropic" api_key: "${ANTHROPIC_API_KEY}" model: "claude-sonnet-4-20250514" weight: 30 - id: "gemini-tertiary" type: "gemini" api_key: "${GEMINI_API_KEY}" model: "gemini-2.5-pro" weight: 10
accounts: - id: "production" providers: - id: "openai-primary" type: "openai" api_key: "${OPENAI_API_KEY}" model: "gpt-4o" weight: 60 - id: "anthropic-secondary" type: "anthropic" api_key: "${ANTHROPIC_API_KEY}" model: "claude-sonnet-4-20250514" weight: 30 - id: "gemini-tertiary" type: "gemini" api_key: "${GEMINI_API_KEY}" model: "gemini-2.5-pro" weight: 10
accounts: - id: "production" providers: - id: "openai-primary" type: "openai" api_key: "${OPENAI_API_KEY}" model: "gpt-4o" weight: 60 - id: "anthropic-secondary" type: "anthropic" api_key: "${ANTHROPIC_API_KEY}" model: "claude-sonnet-4-20250514" weight: 30 - id: "gemini-tertiary" type: "gemini" api_key: "${GEMINI_API_KEY}" model: "gemini-2.5-pro" weight: 10
accounts: - id: "production" providers: - id: "openai-primary" type: "openai" api_key: "${OPENAI_API_KEY}" model: "gpt-4o" weight: 80 - id: "anthropic-fallback" type: "anthropic" api_key: "${ANTHROPIC_API_KEY}" model: "claude-sonnet-4-20250514" weight: 15 - id: "gemini-fallback" type: "gemini" api_key: "${GEMINI_API_KEY}" model: "gemini-2.5-pro" weight: 5
accounts: - id: "production" providers: - id: "openai-primary" type: "openai" api_key: "${OPENAI_API_KEY}" model: "gpt-4o" weight: 80 - id: "anthropic-fallback" type: "anthropic" api_key: "${ANTHROPIC_API_KEY}" model: "claude-sonnet-4-20250514" weight: 15 - id: "gemini-fallback" type: "gemini" api_key: "${GEMINI_API_KEY}" model: "gemini-2.5-pro" weight: 5
accounts: - id: "production" providers: - id: "openai-primary" type: "openai" api_key: "${OPENAI_API_KEY}" model: "gpt-4o" weight: 80 - id: "anthropic-fallback" type: "anthropic" api_key: "${ANTHROPIC_API_KEY}" model: "claude-sonnet-4-20250514" weight: 15 - id: "gemini-fallback" type: "gemini" api_key: "${GEMINI_API_KEY}" model: "gemini-2.5-pro" weight: 5
budgets: - level: "team" id: "backend-team" limit: 500 period: "monthly" - level: "virtual_key" id: "dev-key-pranay" limit: 100 period: "monthly"
budgets: - level: "team" id: "backend-team" limit: 500 period: "monthly" - level: "virtual_key" id: "dev-key-pranay" limit: 100 period: "monthly"
budgets: - level: "team" id: "backend-team" limit: 500 period: "monthly" - level: "virtual_key" id: "dev-key-pranay" limit: 100 period: "monthly"
npx -y @maximhq/bifrost
npx -y @maximhq/bifrost
npx -y @maximhq/bifrost
docker run -p 8080:8080 maximhq/bifrost
docker run -p 8080:8080 maximhq/bifrost
docker run -p 8080:8080 maximhq/bifrost