• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

scope3data / scope3ai-py / 14097016956

27 Mar 2025 01:41AM UTC coverage: 96.23% (+15.7%) from 80.557%
14097016956

Pull #92

github

5758a3
dearlordylord
feat(api): client-to-provider dry
Pull Request #92: feat: Managed Service Kebabs

53 of 55 new or added lines in 11 files covered. (96.36%)

44 existing lines in 10 files now uncovered.

2578 of 2679 relevant lines covered (96.23%)

3.85 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.14
/scope3ai/constants.py
1
from enum import Enum
4✔
2
from typing import Optional
4✔
3

4

5
# client is an API provided by managed service providers or third parties to interact with managed service providers
6
class CLIENTS(Enum):
4✔
7
    # some clients hide more than 1 provider, like monsieur Google. We want to distinguish between attaching to a client and sending a provider
8
    GOOGLE_GENAI = "google-genai"
4✔
9

10
    OPENAI = "openai"
4✔
11
    ANTHROPIC = "anthropic"
4✔
12
    COHERE = "cohere"
4✔
13
    HUGGINGFACE_HUB = "huggingface"
4✔
14
    LITELLM = "litellm"  # WARN - special
4✔
15
    MISTRALAI = "mistral"
4✔
16
    RESPONSE = "response"
4✔
17
    # TODO - this is full list
18
    # AWS_BEDROCK = "aws-bedrock"
19
    # AZURE_OPENAI = "azure-openai"
20
    # IBM_WATSONX = "ibm-watsonx"
21
    # ORACLE_AI = "oracle-ai"
22
    # ALIBABA_PAI = "alibaba-pai"
23
    # TENCENT_HUNYUAN = "tencent-hunyuan"
24
    # YANDEX_YAGPT = "yandex-yagpt"
25
    # REPLICATE = "replicate"
26
    # AI21 = "ai21"
27
    # TOGETHER = "together"
28
    # ANYSCALE = "anyscale"
29
    # DEEPINFRA = "deepinfra"
30
    # PERPLEXITY = "perplexity"
31
    # GROQ = "groq"
32
    # FIREWORKS = "fireworks"
33
    # FOREFRONT = "forefront"
34
    # NVIDIA_NEMO = "nvidia-nemo"
35
    # STABILITY_AI = "stability-ai"
36
    # META_LLAMA = "meta-llama"
37
    # INFLECTION_AI = "inflection-ai"
38
    # DATABRICKS = "databricks"
39
    # WRITER = "writer"
40

41

42
# codependency ref 2E92DAFC-3800-4E36-899B-18E842ADB8E3 https://github.com/scope3data/aiapi
43
# TODO get from openapi
44
# providers are APIs provided by managed service providers; since having multiple APIs for one managed service provider is rare (oh hi Google), we just keep calling it all "managed service providers"
45
class PROVIDERS(Enum):
4✔
46
    GOOGLE_GEMINI = "google-gemini"
4✔
47
    GOOGLE_VERTEX = "google-vertex"
4✔
48

49
    OPENAI = "openai"
4✔
50
    ANTHROPIC = "anthropic"
4✔
51
    COHERE = "cohere"
4✔
52
    HUGGINGFACE_HUB = "huggingface"
4✔
53
    LITELLM = "litellm"  # WARN - special
4✔
54
    MISTRALAI = "mistral"
4✔
55
    RESPONSE = "response"
4✔
56

57

58
# API to Provider are many to many
59
# but we assume they x = x for all the providers/clients in PROVIDER_CLIENTS
60
PROVIDER_TO_CLIENT = {
4✔
61
    PROVIDERS.GOOGLE_GEMINI: [CLIENTS.GOOGLE_GENAI],
62
    PROVIDERS.GOOGLE_VERTEX: [CLIENTS.GOOGLE_GENAI],
63
    PROVIDERS.OPENAI: [CLIENTS.OPENAI],
64
    PROVIDERS.ANTHROPIC: [CLIENTS.ANTHROPIC],
65
    PROVIDERS.COHERE: [CLIENTS.COHERE],
66
    PROVIDERS.HUGGINGFACE_HUB: [CLIENTS.HUGGINGFACE_HUB],
67
    PROVIDERS.LITELLM: [CLIENTS.LITELLM],
68
    PROVIDERS.MISTRALAI: [CLIENTS.MISTRALAI],
69
    PROVIDERS.RESPONSE: [CLIENTS.RESPONSE],
70
}
71

72
CLIENT_TO_PROVIDER = {}
4✔
73
for k, v in PROVIDER_TO_CLIENT.items():
4✔
74
    for client in v:
4✔
75
        if client not in CLIENT_TO_PROVIDER:
4✔
76
            CLIENT_TO_PROVIDER[client] = []
4✔
77
        CLIENT_TO_PROVIDER[client].append(k)
4✔
78

79

80
def try_provider_for_client(client: CLIENTS) -> Optional[PROVIDERS]:
4✔
81
    r = CLIENT_TO_PROVIDER.get(client)
4✔
82
    if r is None:
4✔
83
        # client without provider is a coding error. throw, crash everything
NEW
84
        raise ValueError(f"client {client} has no provider")
×
85
    # not determined or emptiness
86
    if len(r) > 1 or len(r) == 0:
4✔
87
        return None
4✔
88
    return r[0]
4✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc