65 lines
2.3 KiB
Swift
65 lines
2.3 KiB
Swift
import Foundation
|
|
|
|
public enum ProviderEnvironmentResolver {
|
|
public static func resolve(
|
|
base: [String: String],
|
|
provider: UsageProvider,
|
|
config: ProviderConfig?,
|
|
selectedAccount: ProviderTokenAccount?) -> [String: String]
|
|
{
|
|
var environment = ProviderConfigEnvironment.applyProviderConfigOverrides(
|
|
base: base,
|
|
provider: provider,
|
|
config: config)
|
|
guard let selectedAccount else { return environment }
|
|
|
|
TokenAccountSupportCatalog.scrubEnvironmentForSelectedAccount(
|
|
&environment,
|
|
provider: provider,
|
|
token: selectedAccount.token)
|
|
if let override = TokenAccountSupportCatalog.envOverride(
|
|
for: provider,
|
|
token: selectedAccount.token)
|
|
{
|
|
environment.merge(override) { _, selectedAccountValue in selectedAccountValue }
|
|
}
|
|
Self.applyProviderSpecificAccountOverrides(
|
|
&environment,
|
|
provider: provider,
|
|
account: selectedAccount)
|
|
return environment
|
|
}
|
|
|
|
private static func applyProviderSpecificAccountOverrides(
|
|
_ environment: inout [String: String],
|
|
provider: UsageProvider,
|
|
account: ProviderTokenAccount)
|
|
{
|
|
guard provider == .zai else {
|
|
return
|
|
}
|
|
|
|
// Team usage scope is account-level only. Accounts without an explicit
|
|
// `.team` scope are treated as personal and must not inherit stray team
|
|
// context from the base environment or provider config.
|
|
let scope: ZaiUsageScope = if let raw = account.sanitizedUsageScope?.lowercased(),
|
|
let resolved = ZaiUsageScope(rawValue: raw)
|
|
{
|
|
resolved
|
|
} else {
|
|
.personal
|
|
}
|
|
|
|
environment.removeValue(forKey: ZaiSettingsReader.bigModelOrganizationKey)
|
|
environment.removeValue(forKey: ZaiSettingsReader.bigModelProjectKey)
|
|
|
|
guard scope == .team else { return }
|
|
if let organizationID = account.sanitizedOrganizationID {
|
|
environment[ZaiSettingsReader.bigModelOrganizationKey] = organizationID
|
|
}
|
|
if let projectID = account.sanitizedWorkspaceID {
|
|
environment[ZaiSettingsReader.bigModelProjectKey] = projectID
|
|
}
|
|
}
|
|
}
|