e904b667c6
Build/Publish Develop Docs / deploy (push) Failing after 1s
PaddleOCR Code Style Check / check-code-style (push) Failing after 1s
PaddleOCR PR Tests GPU / detect-changes (push) Failing after 1s
PaddleOCR PR Tests / detect-changes (push) Failing after 1s
PaddleOCR PR Tests GPU / test-pr-gpu (push) Has been cancelled
PaddleOCR PR Tests / test-pr (push) Has been cancelled
PaddleOCR PR Tests GPU / test-pr-gpu-impl (push) Has been cancelled
PaddleOCR PR Tests / test-pr-python (3.13) (push) Has been cancelled
PaddleOCR PR Tests / test-pr-python (3.8) (push) Has been cancelled
PaddleOCR PR Tests / test-pr-python (3.9) (push) Has been cancelled
89 lines
2.5 KiB
Python
89 lines
2.5 KiB
Python
# Copyright (c) 2026 PaddlePaddle Authors. All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from enum import Enum
|
|
|
|
|
|
class InferenceProvider(str, Enum):
|
|
LOCAL = "local"
|
|
AISTUDIO = "aistudio"
|
|
QIANFAN = "qianfan"
|
|
SELF_HOSTED = "self_hosted"
|
|
|
|
|
|
class ProviderTransport(str, Enum):
|
|
LOCAL = "local"
|
|
AISTUDIO_API = "aistudio_api"
|
|
HTTP = "http"
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ProviderSpec:
|
|
provider: InferenceProvider
|
|
transport: ProviderTransport
|
|
display_name: str
|
|
|
|
|
|
_PROVIDER_SPECS: dict[InferenceProvider, ProviderSpec] = {
|
|
InferenceProvider.LOCAL: ProviderSpec(
|
|
provider=InferenceProvider.LOCAL,
|
|
transport=ProviderTransport.LOCAL,
|
|
display_name="local",
|
|
),
|
|
InferenceProvider.AISTUDIO: ProviderSpec(
|
|
provider=InferenceProvider.AISTUDIO,
|
|
transport=ProviderTransport.AISTUDIO_API,
|
|
display_name="AI Studio",
|
|
),
|
|
InferenceProvider.QIANFAN: ProviderSpec(
|
|
provider=InferenceProvider.QIANFAN,
|
|
transport=ProviderTransport.HTTP,
|
|
display_name="Qianfan",
|
|
),
|
|
InferenceProvider.SELF_HOSTED: ProviderSpec(
|
|
provider=InferenceProvider.SELF_HOSTED,
|
|
transport=ProviderTransport.HTTP,
|
|
display_name="self-hosted",
|
|
),
|
|
}
|
|
|
|
|
|
def normalize_provider(provider: InferenceProvider | str) -> InferenceProvider:
|
|
if isinstance(provider, InferenceProvider):
|
|
return provider
|
|
return InferenceProvider(provider)
|
|
|
|
|
|
def get_provider_spec(provider: InferenceProvider | str) -> ProviderSpec:
|
|
return _PROVIDER_SPECS[normalize_provider(provider)]
|
|
|
|
|
|
def provider_choices() -> list[str]:
|
|
return [provider.value for provider in InferenceProvider]
|
|
|
|
|
|
def http_providers() -> set[InferenceProvider]:
|
|
return {
|
|
spec.provider
|
|
for spec in _PROVIDER_SPECS.values()
|
|
if spec.transport is ProviderTransport.HTTP
|
|
}
|
|
|
|
|
|
def is_http_provider(provider: InferenceProvider | str) -> bool:
|
|
return get_provider_spec(provider).transport is ProviderTransport.HTTP
|