SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
4e23b01 verified
Raw
History Blame Contribute Delete
2.27 kB
import {
BUDGET_THINKING_EFFORTS,
matchKnownAnthropicModelProfile,
matchUnknownClaudeProfile,
} from '@moonshot-ai/kosong/providers/anthropic-profile';
import type { ModelAlias, ProviderType } from './schema';
export function effectiveModelAlias(
alias: ModelAlias,
providerType?: ProviderType,
): ModelAlias {
const { overrides, ...base } = alias;
const effective: ModelAlias = overrides === undefined ? alias : { ...base, ...overrides };
if (
overrides?.supportEfforts !== undefined &&
overrides.defaultEffort === undefined &&
effective.defaultEffort !== undefined &&
!overrides.supportEfforts.includes(effective.defaultEffort)
) {
delete effective.defaultEffort;
}
const clamped =
effective.maxInputSize !== undefined && effective.maxInputSize > effective.maxContextSize
? { ...effective, maxInputSize: effective.maxContextSize }
: effective;
return withAnthropicProfile(clamped, providerType);
}
function withAnthropicProfile(model: ModelAlias, providerType?: ProviderType): ModelAlias {
const protocol = model.protocol ?? providerType;
const profile =
providerType !== undefined && providerType !== 'kimi' && protocol === 'anthropic'
? (matchKnownAnthropicModelProfile(model.model) ?? matchUnknownClaudeProfile(model.model))
: matchKnownAnthropicModelProfile(model.model);
if (profile === undefined) return model;
const capability = profile.canDisableThinking ? 'thinking' : 'always_thinking';
const capabilities = model.capabilities ?? [];
const hasCapability = capabilities.some(
(candidate) => candidate.trim().toLowerCase() === capability,
);
const supportEfforts =
model.supportEfforts ??
(model.adaptiveThinking === false ? [...BUDGET_THINKING_EFFORTS] : [...profile.efforts]);
return {
...model,
capabilities: hasCapability ? capabilities : [...capabilities, capability],
supportEfforts,
defaultEffort:
model.defaultEffort ?? (supportEfforts.includes('high') ? 'high' : undefined),
};
}
export function effectiveModelAliases(
models: Record<string, ModelAlias>,
): Record<string, ModelAlias> {
return Object.fromEntries(
Object.entries(models).map(([alias, model]) => [alias, effectiveModelAlias(model)]),
);
}