chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
import CodexBarCore
|
||||
import Foundation
|
||||
|
||||
enum ProviderImplementationRegistry {
|
||||
private final class Store: @unchecked Sendable {
|
||||
var ordered: [any ProviderImplementation] = []
|
||||
var byID: [UsageProvider: any ProviderImplementation] = [:]
|
||||
}
|
||||
|
||||
private static let lock = NSLock()
|
||||
private static let store = Store()
|
||||
|
||||
// swiftlint:disable:next cyclomatic_complexity
|
||||
private static func makeImplementation(for provider: UsageProvider) -> (any ProviderImplementation) {
|
||||
switch provider {
|
||||
case .codex: CodexProviderImplementation()
|
||||
case .openai: OpenAIAPIProviderImplementation()
|
||||
case .azureopenai: AzureOpenAIProviderImplementation()
|
||||
case .claude: ClaudeProviderImplementation()
|
||||
case .cursor: CursorProviderImplementation()
|
||||
case .opencode: OpenCodeProviderImplementation()
|
||||
case .opencodego: OpenCodeGoProviderImplementation()
|
||||
case .alibaba: AlibabaCodingPlanProviderImplementation()
|
||||
case .alibabatokenplan: AlibabaTokenPlanProviderImplementation()
|
||||
case .factory: FactoryProviderImplementation()
|
||||
case .gemini: GeminiProviderImplementation()
|
||||
case .antigravity: AntigravityProviderImplementation()
|
||||
case .copilot: CopilotProviderImplementation()
|
||||
case .devin: DevinProviderImplementation()
|
||||
case .zai: ZaiProviderImplementation()
|
||||
case .minimax: MiniMaxProviderImplementation()
|
||||
case .manus: ManusProviderImplementation()
|
||||
case .kimi: KimiProviderImplementation()
|
||||
case .kilo: KiloProviderImplementation()
|
||||
case .kiro: KiroProviderImplementation()
|
||||
case .vertexai: VertexAIProviderImplementation()
|
||||
case .augment: AugmentProviderImplementation()
|
||||
case .jetbrains: JetBrainsProviderImplementation()
|
||||
case .kimik2: KimiK2ProviderImplementation()
|
||||
case .moonshot: MoonshotProviderImplementation()
|
||||
case .amp: AmpProviderImplementation()
|
||||
case .t3chat: T3ChatProviderImplementation()
|
||||
case .ollama: OllamaProviderImplementation()
|
||||
case .synthetic: SyntheticProviderImplementation()
|
||||
case .openrouter: OpenRouterProviderImplementation()
|
||||
case .elevenlabs: ElevenLabsProviderImplementation()
|
||||
case .warp: WarpProviderImplementation()
|
||||
case .windsurf: WindsurfProviderImplementation()
|
||||
case .zed: ZedProviderImplementation()
|
||||
case .perplexity: PerplexityProviderImplementation()
|
||||
case .mimo: MiMoProviderImplementation()
|
||||
case .doubao: DoubaoProviderImplementation()
|
||||
case .sakana: SakanaProviderImplementation()
|
||||
case .abacus: AbacusProviderImplementation()
|
||||
case .mistral: MistralProviderImplementation()
|
||||
case .deepseek: DeepSeekProviderImplementation()
|
||||
case .codebuff: CodebuffProviderImplementation()
|
||||
case .crof: CrofProviderImplementation()
|
||||
case .venice: VeniceProviderImplementation()
|
||||
case .commandcode: CommandCodeProviderImplementation()
|
||||
case .qoder: QoderProviderImplementation()
|
||||
case .stepfun: StepFunProviderImplementation()
|
||||
case .bedrock: BedrockProviderImplementation()
|
||||
case .grok: GrokProviderImplementation()
|
||||
case .groq: GroqProviderImplementation()
|
||||
case .llmproxy: LLMProxyProviderImplementation()
|
||||
case .litellm: LiteLLMProviderImplementation()
|
||||
case .deepgram: DeepgramProviderImplementation()
|
||||
case .poe: PoeProviderImplementation()
|
||||
case .chutes: ChutesProviderImplementation()
|
||||
case .crossmodel: CrossModelProviderImplementation()
|
||||
case .clawrouter: ClawRouterProviderImplementation()
|
||||
case .sub2api: Sub2APIProviderImplementation()
|
||||
case .wayfinder: WayfinderProviderImplementation()
|
||||
}
|
||||
}
|
||||
|
||||
private static let bootstrap: Void = {
|
||||
for provider in UsageProvider.allCases {
|
||||
_ = ProviderImplementationRegistry.register(makeImplementation(for: provider))
|
||||
}
|
||||
}()
|
||||
|
||||
private static func ensureBootstrapped() {
|
||||
_ = self.bootstrap
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
static func register(_ implementation: any ProviderImplementation) -> any ProviderImplementation {
|
||||
self.lock.lock()
|
||||
defer { self.lock.unlock() }
|
||||
if self.store.byID[implementation.id] == nil {
|
||||
self.store.ordered.append(implementation)
|
||||
}
|
||||
self.store.byID[implementation.id] = implementation
|
||||
return implementation
|
||||
}
|
||||
|
||||
static var all: [any ProviderImplementation] {
|
||||
self.ensureBootstrapped()
|
||||
self.lock.lock()
|
||||
defer { self.lock.unlock() }
|
||||
return self.store.ordered
|
||||
}
|
||||
|
||||
static func implementation(for id: UsageProvider) -> (any ProviderImplementation)? {
|
||||
self.ensureBootstrapped()
|
||||
if let found = self.store.byID[id] { return found }
|
||||
return self.all.first(where: { $0.id == id })
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user