feat: add Mascarade as LLM provider — multi-agent orchestration engine
- Add 'mascarade' to SupportedProvider enum (types.ts) - Add Mascarade case in createProviderInstance using OpenAI-compatible SDK (factory.ts) - Add 'mascarade' to BuiltinProvider type (provider-account.ts) - Add mascarade- prefix to MODEL_PROVIDER_MAP (config/types.ts) - Add 5 mascarade models: router, writer, coder, analyst, planner (models.ts) - Add mascarade provider presets for all agent profiles (models.ts) - Add mascarade to PROVIDER_INFOS with UI metadata (providers.ts) Mascarade is a self-hosted LLM orchestration engine (50K LOC Python) that routes requests across Claude, OpenAI, Mistral, Google and Ollama with intelligent routing strategies (best/cheapest/fastest/domain). Default endpoint: http://localhost:8100/v1 (OpenAI-compatible) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -147,6 +147,7 @@ export const MODEL_PROVIDER_MAP: Record<string, SupportedProvider> = {
|
||||
'llama-': 'groq',
|
||||
'grok-': 'xai',
|
||||
'glm-': 'zai',
|
||||
'mascarade-': 'mascarade',
|
||||
} as const;
|
||||
|
||||
// ============================================
|
||||
|
||||
@@ -156,6 +156,24 @@ function createProviderInstance(config: ProviderConfig) {
|
||||
});
|
||||
}
|
||||
|
||||
case SupportedProvider.Mascarade: {
|
||||
// Mascarade LLM orchestration engine — OpenAI-compatible API
|
||||
// Default: http://localhost:8100/v1 (Tower) or configurable
|
||||
let mascaradeBaseURL = baseURL ?? 'http://localhost:8100/v1';
|
||||
if (!mascaradeBaseURL.endsWith('/v1')) {
|
||||
mascaradeBaseURL = mascaradeBaseURL.replace(/\/+$/, '') + '/v1';
|
||||
}
|
||||
return createOpenAICompatible({
|
||||
name: 'mascarade',
|
||||
apiKey: apiKey ?? 'mascarade-local',
|
||||
baseURL: mascaradeBaseURL,
|
||||
headers: {
|
||||
...headers,
|
||||
'Authorization': `Bearer ${apiKey ?? 'mascarade-local'}`,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
default: {
|
||||
const _exhaustive: never = provider;
|
||||
throw new Error(`Unsupported provider: ${_exhaustive}`);
|
||||
|
||||
@@ -21,6 +21,7 @@ export const SupportedProvider = {
|
||||
OpenRouter: 'openrouter',
|
||||
ZAI: 'zai',
|
||||
Ollama: 'ollama',
|
||||
Mascarade: 'mascarade',
|
||||
} as const;
|
||||
|
||||
export type SupportedProvider = (typeof SupportedProvider)[keyof typeof SupportedProvider];
|
||||
|
||||
@@ -71,6 +71,12 @@ export const ALL_AVAILABLE_MODELS: ModelOption[] = [
|
||||
{ value: 'glm-4.7', label: 'GLM-4.7', provider: 'zai', description: 'Previous flagship', capabilities: { thinking: false, tools: true, vision: false, contextWindow: 128000 } },
|
||||
{ value: 'glm-4.6v', label: 'GLM-4.6V', provider: 'zai', description: 'Multimodal', capabilities: { thinking: false, tools: true, vision: true, contextWindow: 128000 } },
|
||||
{ value: 'glm-4.5-flash', label: 'GLM-4.5 Flash', provider: 'zai', description: 'Fast', capabilities: { thinking: false, tools: true, vision: false, contextWindow: 128000 } },
|
||||
// Mascarade (LLM Orchestration Engine)
|
||||
{ value: 'mascarade-router', label: 'Mascarade Router', provider: 'mascarade', description: 'Multi-LLM routing (best/cheapest/fastest)', capabilities: { thinking: false, tools: true, vision: false, contextWindow: 128000 } },
|
||||
{ value: 'mascarade-writer', label: 'Mascarade Writer', provider: 'mascarade', description: 'Content generation agent', capabilities: { thinking: false, tools: true, vision: false, contextWindow: 128000 } },
|
||||
{ value: 'mascarade-coder', label: 'Mascarade Coder', provider: 'mascarade', description: 'Code review & generation', capabilities: { thinking: false, tools: true, vision: false, contextWindow: 128000 } },
|
||||
{ value: 'mascarade-analyst', label: 'Mascarade Analyst', provider: 'mascarade', description: 'Data analysis agent', capabilities: { thinking: false, tools: true, vision: false, contextWindow: 128000 } },
|
||||
{ value: 'mascarade-planner', label: 'Mascarade Planner', provider: 'mascarade', description: 'Project decomposition', capabilities: { thinking: false, tools: true, vision: false, contextWindow: 128000 } },
|
||||
];
|
||||
|
||||
// Maps model shorthand to actual Claude model IDs
|
||||
@@ -322,6 +328,12 @@ export const PROVIDER_PRESET_DEFINITIONS: Partial<Record<BuiltinProvider, Record
|
||||
balanced: { primaryModel: '', primaryThinking: 'low', phaseModels: { spec: '', planning: '', coding: '', qa: '' }, phaseThinking: { spec: 'low', planning: 'low', coding: 'low', qa: 'low' } },
|
||||
quick: { primaryModel: '', primaryThinking: 'low', phaseModels: { spec: '', planning: '', coding: '', qa: '' }, phaseThinking: { spec: 'low', planning: 'low', coding: 'low', qa: 'low' } },
|
||||
},
|
||||
mascarade: {
|
||||
auto: { primaryModel: 'mascarade-router', primaryThinking: 'low', phaseModels: { spec: 'mascarade-router', planning: 'mascarade-router', coding: 'mascarade-router', qa: 'mascarade-router' }, phaseThinking: { spec: 'low', planning: 'low', coding: 'low', qa: 'low' } },
|
||||
complex: { primaryModel: 'mascarade-router', primaryThinking: 'low', phaseModels: { spec: 'mascarade-router', planning: 'mascarade-router', coding: 'mascarade-router', qa: 'mascarade-router' }, phaseThinking: { spec: 'low', planning: 'low', coding: 'low', qa: 'low' } },
|
||||
balanced: { primaryModel: 'mascarade-router', primaryThinking: 'low', phaseModels: { spec: 'mascarade-router', planning: 'mascarade-router', coding: 'mascarade-router', qa: 'mascarade-router' }, phaseThinking: { spec: 'low', planning: 'low', coding: 'low', qa: 'low' } },
|
||||
quick: { primaryModel: 'mascarade-router', primaryThinking: 'low', phaseModels: { spec: 'mascarade-router', planning: 'mascarade-router', coding: 'mascarade-router', qa: 'mascarade-router' }, phaseThinking: { spec: 'low', planning: 'low', coding: 'low', qa: 'low' } },
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -73,4 +73,11 @@ export const PROVIDER_REGISTRY: ProviderInfo[] = [
|
||||
authMethods: ['api-key'], envVars: [],
|
||||
configFields: ['baseUrl'],
|
||||
},
|
||||
{
|
||||
id: 'mascarade', name: 'Mascarade', description: 'LLM Orchestration Engine — multi-provider routing with 19+ agents',
|
||||
category: 'local',
|
||||
authMethods: ['api-key'], envVars: ['MASCARADE_API_KEY'],
|
||||
configFields: ['baseUrl'],
|
||||
website: 'https://mascarade.saillant.cc',
|
||||
},
|
||||
];
|
||||
|
||||
@@ -7,7 +7,7 @@ export type CredentialSource = 'oauth' | 'api-key' | 'env' | 'keychain';
|
||||
export type BuiltinProvider =
|
||||
| 'anthropic' | 'openai' | 'google' | 'amazon-bedrock' | 'azure'
|
||||
| 'mistral' | 'groq' | 'xai' | 'openrouter' | 'zai'
|
||||
| 'ollama' | 'openai-compatible';
|
||||
| 'ollama' | 'openai-compatible' | 'mascarade';
|
||||
|
||||
export type BillingModel = 'subscription' | 'pay-per-use';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user