Files
9router/open-sse/providers/registry/muse.js
T

68 lines
2.9 KiB
JavaScript

// Muse (Meta Model API) — dual auth (same pattern as kimi):
// oauth = Muse Code subscription (Meta account device code, mints an LLM|… key)
// apikey = pay-as-you-go Model API key from dev.meta.ai
// Transport is shared; oauth accounts get x-api-version via the museHeaders hook.
// Meta issues no refresh token for the subscription flow → re-login on 401.
export default {
id: "muse",
priority: 120,
alias: "muse",
aliases: [
"muse-ai",
"meta-model-api",
"muse-code",
"muse-subscription",
],
uiAlias: "muse",
display: {
name: "Muse (Meta Model API)",
icon: "auto_awesome",
color: "#0866FF",
textIcon: "MU",
website: "https://muse.ai",
notice: {
text: "Sign in with your Meta account (Muse Code subscription) or paste a Model API key from dev.meta.ai. Subscription keys are minted per account; Meta may train on contributor-tier data.",
apiKeyUrl: "https://dev.meta.ai",
signupUrl: "https://muse.ai",
},
},
category: "oauth",
authModes: ["oauth", "apikey"],
hasOAuth: true,
transport: {
baseUrl: "https://api.meta.ai/v1/chat/completions",
validateUrl: "https://api.meta.ai/v1/models",
modelsUrl: "https://api.meta.ai/v1/models",
auth: { combined: true, header: "Authorization", scheme: "bearer", hooks: ["museHeaders"] },
},
// Multi-endpoint: Meta accepts Chat Completions and Responses wire formats on
// the same key (https://dev.meta.ai/docs/protocols). Muse Spark reasoning
// (incl. encrypted_content replay) only round-trips on Responses, so models
// pin targetFormat there.
transports: [
{
format: "openai",
baseUrl: "https://api.meta.ai/v1/chat/completions",
auth: { combined: true, header: "Authorization", scheme: "bearer", hooks: ["museHeaders"] },
},
{
format: "openai-responses",
baseUrl: "https://api.meta.ai/v1/responses",
auth: { combined: true, header: "Authorization", scheme: "bearer", hooks: ["museHeaders"] },
},
],
models: [
{ id: "muse-spark-1.3", name: "Muse Spark 1.3", targetFormat: "openai-responses", supportedFormats: ["openai-responses"] },
{ id: "muse-spark-1.2", name: "Muse Spark 1.2", targetFormat: "openai-responses", supportedFormats: ["openai-responses"] },
{ id: "muse-spark-1.1", name: "Muse Spark 1.1", targetFormat: "openai-responses", supportedFormats: ["openai-responses"] },
{ id: "muse-spark-1.3-contributor", name: "Muse Spark 1.3 Contributor", targetFormat: "openai-responses", supportedFormats: ["openai-responses"] },
{ id: "muse-spark-1.2-contributor", name: "Muse Spark 1.2 Contributor", targetFormat: "openai-responses", supportedFormats: ["openai-responses"] },
],
passthroughModels: true,
oauth: {
clientId: "1031625952748946",
deviceCodeUrl: "https://auth.meta.com/oidc/device/authorization/",
tokenUrl: "https://auth.meta.com/oidc/device/token/",
},
};