File size: 2,962 Bytes
c09dbef
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
78
import requests
import re

url = "https://api.siliconflow.cn/v1/models"

visual_model_list = [
    "Qwen/Qwen2-VL-72B-Instruct",
    "OpenGVLab/InternVL2-26B",
    "TeleAI/TeleMM",
    "Pro/Qwen/Qwen2-VL-7B-Instruct",
    "Pro/OpenGVLab/InternVL2-8B"
]

reasoning_model_list = [
    "Qwen/QwQ-32B-Preview",
    "Qwen/QVQ-72B-Preview",
    "AIDC-AI/Marco-o1"
]

excluded_models = [
    "deepseek-ai/deepseek-vl2",
    "01-ai/Yi-1.5-6B-Chat"
]

image_model_list = [
    "black-forest-labs/FLUX.1-dev",
    "stabilityai/stable-diffusion-3-5-large"
]

qwen_pattern = re.compile(r'^Qwen/')
meta_llama_pattern = re.compile(r'^meta-llama/')
deepseek_ai_pattern = re.compile(r'^deepseek-ai/')
pro_lora_pattern = re.compile(r'^(Pro|LoRA)/')

def extract_version_and_params(model):
    version_match = re.search(r'(\d+(\.\d+)+)', model)
    version = float(version_match.group(1)) if version_match else 0.0
    
    params_match = re.search(r'(\d+(\.\d+)?)(B|b)', model)
    params = float(params_match.group(1)) if params_match else 0.0
    
    return version, params

def sort_models(model_list):
    return sorted(model_list, key=lambda x: extract_version_and_params(x), reverse=True)

def text_model(api_key: str) -> list:
    model_list = []

    querystring = {"type":"text","sub_type":"chat"}
    headers = {"Authorization": f"Bearer {api_key}"}
    response = requests.request("GET", url, params=querystring, headers=headers)

    if response.status_code == 200:
        response_object = response.json()
        response_data = response_object["data"]
        for i in response_data:
            if i["id"] not in visual_model_list and i["id"] not in reasoning_model_list and i["id"] not in excluded_models:
                model_list.append(i["id"])
    
    qwen_models = [model for model in model_list if qwen_pattern.search(model) and not pro_lora_pattern.search(model)]
    meta_llama_models = [model for model in model_list if meta_llama_pattern.search(model) and not pro_lora_pattern.search(model)]
    deepseek_ai_models = [model for model in model_list if deepseek_ai_pattern.search(model) and not pro_lora_pattern.search(model)]
    other_models = [model for model in model_list if not qwen_pattern.search(model) and not meta_llama_pattern.search(model) and not deepseek_ai_pattern.search(model) and not pro_lora_pattern.search(model)]
    pro_lora_models = [model for model in model_list if pro_lora_pattern.search(model)]

    qwen_models_sorted = sort_models(qwen_models)
    meta_llama_models_sorted = sort_models(meta_llama_models)
    deepseek_ai_models_sorted = sort_models(deepseek_ai_models)
    other_models_sorted = sort_models(other_models)
    pro_lora_models_sorted = sort_models(pro_lora_models)

    model_list = qwen_models_sorted + meta_llama_models_sorted + deepseek_ai_models_sorted + other_models_sorted + pro_lora_models_sorted

    return model_list