File size: 2,204 Bytes
b22f922
 
 
 
 
 
e82f42a
 
02fdb50
 
c10c2de
b22f922
 
02fdb50
b22f922
 
 
 
 
 
 
 
 
 
 
 
9087846
b22f922
 
 
 
 
 
 
 
 
 
 
c10c2de
b22f922
73906d6
 
e82f42a
 
b22f922
 
9087846
aef6b86
 
9087846
73906d6
9087846
 
b22f922
c10c2de
b22f922
02fdb50
c10c2de
02fdb50
c10c2de
 
02fdb50
 
 
 
c10c2de
02fdb50
c10c2de
02fdb50
 
 
 
 
 
 
c10c2de
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import tiktoken

from urllib.parse import urlparse
import requests
import logging

from icecream import ic

from typing import Generator


def mylogger(name, format, level=logging.INFO):
    # Create a custom logger
    logger = logging.getLogger(name)
    logger.setLevel(level)
    # Configure the custom logger with the desired settings
    formatter = logging.Formatter(format)
    c_handler = logging.StreamHandler()
    c_handler.setFormatter(formatter)
    # file_handler = logging.FileHandler('custom_logs.log')
    # file_handler.setFormatter(formatter)
    logger.addHandler(c_handler)

    return logger


def count_token(text, encoding="cl100k_base") -> int:
    return len(tiktoken.get_encoding(encoding).encode(text))


def is_valid_url(url: str) -> bool:
    try:
        result = urlparse(url)
        return all([result.scheme, result.netloc])
    except ValueError:
        return False


def is_valid_openai_api_key(api_base: str, api_key: str) -> bool:
    headers = {"Authorization": f"Bearer {api_key}"}
    test_url = f"{api_base}/models"
    response = requests.get(test_url, headers=headers)
    if response.status_code != 200:
        ic(response.json())
    return response.status_code == 200


def checkAPI(api_base: str, api_key: str):
    if not is_valid_openai_api_key(api_base, api_key):
        raise ValueError(
            "API not available. Maybe it's OpenAI's (or AI provider's) fault, or you setup your AI APIs icorrectly. If you don't have any API key, try get one from https://beta.openai.com/account/api-keys"
        )


def zip_api(api_base: str, api_key: str, model: str) -> dict[str, str]:
    return {"base": api_base, "key": api_key, "model": model}


def stream_together(*gens: Generator):
    ln = len(gens)
    result = [""] * ln  # Mind type here
    while 1:
        stop: bool = True
        for i in range(ln):
            try:
                n = next(gens[i])
                if "delta" in dir(n):
                    n = n.delta
                result[i] += n
                stop = False
            except StopIteration:
                # info(f"gen[{i}] exhausted")
                pass
        yield result
        if stop:
            break