Files
2026-07-13 13:08:41 +08:00

355 lines
8.8 KiB
Python

from models.ollama_model_metadata import OllamaModelMetadata
from models.ollama_model_status import OllamaModelStatus
SUPPORTED_LLAMA_MODELS = {
"llama3:8b": OllamaModelMetadata(
label="Llama 3:8b",
value="llama3:8b",
size="4.7GB",
),
"llama3:70b": OllamaModelMetadata(
label="Llama 3:70b",
value="llama3:70b",
size="40GB",
),
"llama3.1:8b": OllamaModelMetadata(
label="Llama 3.1:8b",
value="llama3.1:8b",
size="4.9GB",
),
"llama3.1:70b": OllamaModelMetadata(
label="Llama 3.1:70b",
value="llama3.1:70b",
size="43GB",
),
"llama3.1:405b": OllamaModelMetadata(
label="Llama 3.1:405b",
value="llama3.1:405b",
size="243GB",
),
"llama3.2:1b": OllamaModelMetadata(
label="Llama 3.2:1b",
value="llama3.2:1b",
size="1.3GB",
),
"llama3.2:3b": OllamaModelMetadata(
label="Llama 3.2:3b",
value="llama3.2:3b",
size="2GB",
),
"llama3.3:70b": OllamaModelMetadata(
label="Llama 3.3:70b",
value="llama3.3:70b",
size="43GB",
),
"llama4:16x17b": OllamaModelMetadata(
label="Llama 4:16x17b",
value="llama4:16x17b",
size="67GB",
),
"llama4:128x17b": OllamaModelMetadata(
label="Llama 4:128x17b",
value="llama4:128x17b",
size="245GB",
),
}
SUPPORTED_GEMMA_MODELS = {
"gemma3:1b": OllamaModelMetadata(
label="Gemma 3:1b",
value="gemma3:1b",
size="815MB",
),
"gemma3:4b": OllamaModelMetadata(
label="Gemma 3:4b",
value="gemma3:4b",
size="3.3GB",
),
"gemma3:12b": OllamaModelMetadata(
label="Gemma 3:12b",
value="gemma3:12b",
size="8.1GB",
),
"gemma3:27b": OllamaModelMetadata(
label="Gemma 3:27b",
value="gemma3:27b",
size="17GB",
),
}
SUPPORTED_DEEPSEEK_MODELS = {
"deepseek-r1:1.5b": OllamaModelMetadata(
label="DeepSeek R1:1.5b",
value="deepseek-r1:1.5b",
size="1.1GB",
),
"deepseek-r1:7b": OllamaModelMetadata(
label="DeepSeek R1:7b",
value="deepseek-r1:7b",
size="4.7GB",
),
"deepseek-r1:8b": OllamaModelMetadata(
label="DeepSeek R1:8b",
value="deepseek-r1:8b",
size="5.2GB",
),
"deepseek-r1:14b": OllamaModelMetadata(
label="DeepSeek R1:14b",
value="deepseek-r1:14b",
size="9GB",
),
"deepseek-r1:32b": OllamaModelMetadata(
label="DeepSeek R1:32b",
value="deepseek-r1:32b",
size="20GB",
),
"deepseek-r1:70b": OllamaModelMetadata(
label="DeepSeek R1:70b",
value="deepseek-r1:70b",
size="43GB",
),
"deepseek-r1:671b": OllamaModelMetadata(
label="DeepSeek R1:671b",
value="deepseek-r1:671b",
size="404GB",
),
}
SUPPORTED_QWEN_MODELS = {
"qwen3:0.6b": OllamaModelMetadata(
label="Qwen 3:0.6b",
value="qwen3:0.6b",
size="523MB",
),
"qwen3:1.7b": OllamaModelMetadata(
label="Qwen 3:1.7b",
value="qwen3:1.7b",
size="1.4GB",
),
"qwen3:4b": OllamaModelMetadata(
label="Qwen 3:4b",
value="qwen3:4b",
size="2.6GB",
),
"qwen3:8b": OllamaModelMetadata(
label="Qwen 3:8b",
value="qwen3:8b",
size="5.2GB",
),
"qwen3:14b": OllamaModelMetadata(
label="Qwen 3:14b",
value="qwen3:14b",
size="9.3GB",
),
"qwen3:30b": OllamaModelMetadata(
label="Qwen 3:30b",
value="qwen3:30b",
size="19GB",
),
"qwen3:32b": OllamaModelMetadata(
label="Qwen 3:32b",
value="qwen3:32b",
size="20GB",
),
"qwen3:235b": OllamaModelMetadata(
label="Qwen 3:235b",
value="qwen3:235b",
size="142GB",
),
}
SUPPORTED_GPT_OSS_MODELS = {
"gpt-oss:20b": OllamaModelMetadata(
label="GPT-OSS 20b",
value="gpt-oss:20b",
size="14GB",
),
"gpt-oss:120b": OllamaModelMetadata(
label="GPT-OSS 120b",
value="gpt-oss:120b",
size="65GB",
),
}
SUPPORTED_GEMMA4_MODELS = {
"gemma4:latest": OllamaModelMetadata(
label="Gemma 4:latest",
value="gemma4:latest",
size="9.6GB",
),
"gemma4:e2b": OllamaModelMetadata(
label="Gemma 4:e2b",
value="gemma4:e2b",
size="7.2GB",
),
"gemma4:e4b": OllamaModelMetadata(
label="Gemma 4:e4b",
value="gemma4:e4b",
size="9.6GB",
),
"gemma4:26b": OllamaModelMetadata(
label="Gemma 4:26b",
value="gemma4:26b",
size="18GB",
),
"gemma4:31b": OllamaModelMetadata(
label="Gemma 4:31b",
value="gemma4:31b",
size="20GB",
),
# e2b variants
"gemma4:e2b-it-q4_K_M": OllamaModelMetadata(
label="Gemma 4:e2b-it-q4_K_M",
value="gemma4:e2b-it-q4_K_M",
size="7.2GB",
),
"gemma4:e2b-it-q8_0": OllamaModelMetadata(
label="Gemma 4:e2b-it-q8_0",
value="gemma4:e2b-it-q8_0",
size="8.1GB",
),
"gemma4:e2b-it-bf16": OllamaModelMetadata(
label="Gemma 4:e2b-it-bf16",
value="gemma4:e2b-it-bf16",
size="10GB",
),
# e4b variants
"gemma4:e4b-it-q4_K_M": OllamaModelMetadata(
label="Gemma 4:e4b-it-q4_K_M",
value="gemma4:e4b-it-q4_K_M",
size="9.6GB",
),
"gemma4:e4b-it-q8_0": OllamaModelMetadata(
label="Gemma 4:e4b-it-q8_0",
value="gemma4:e4b-it-q8_0",
size="12GB",
),
"gemma4:e4b-it-bf16": OllamaModelMetadata(
label="Gemma 4:e4b-it-bf16",
value="gemma4:e4b-it-bf16",
size="16GB",
),
# 26b variants
"gemma4:26b-a4b-it-q4_K_M": OllamaModelMetadata(
label="Gemma 4:26b-a4b-it-q4_K_M",
value="gemma4:26b-a4b-it-q4_K_M",
size="18GB",
),
"gemma4:26b-a4b-it-q8_0": OllamaModelMetadata(
label="Gemma 4:26b-a4b-it-q8_0",
value="gemma4:26b-a4b-it-q8_0",
size="28GB",
),
# 31b variants
"gemma4:31b-it-q4_K_M": OllamaModelMetadata(
label="Gemma 4:31b-it-q4_K_M",
value="gemma4:31b-it-q4_K_M",
size="20GB",
),
"gemma4:31b-it-q8_0": OllamaModelMetadata(
label="Gemma 4:31b-it-q8_0",
value="gemma4:31b-it-q8_0",
size="34GB",
),
"gemma4:31b-it-bf16": OllamaModelMetadata(
label="Gemma 4:31b-it-bf16",
value="gemma4:31b-it-bf16",
size="63GB",
)
}
SUPPORTED_QWEN35_MODELS = {
"qwen3.5:latest": OllamaModelMetadata(
label="Qwen 3.5:latest",
value="qwen3.5:latest",
size="6.6GB",
),
"qwen3.5:2b": OllamaModelMetadata(
label="Qwen 3.5:2b",
value="qwen3.5:2b",
size="2.7GB",
),
"qwen3.5:4b": OllamaModelMetadata(
label="Qwen 3.5:4b",
value="qwen3.5:4b",
size="3.4GB",
),
"qwen3.5:9b": OllamaModelMetadata(
label="Qwen 3.5:9b",
value="qwen3.5:9b",
size="6.6GB",
),
"qwen3.5:27b": OllamaModelMetadata(
label="Qwen 3.5:27b",
value="qwen3.5:27b",
size="17GB",
),
"qwen3.5:35b": OllamaModelMetadata(
label="Qwen 3.5:35b",
value="qwen3.5:35b",
size="24GB",
),
"qwen3.5:122b": OllamaModelMetadata(
label="Qwen 3.5:122b",
value="qwen3.5:122b",
size="81GB",
)
}
TESTED_OLLAMA_MODELS = {
**SUPPORTED_LLAMA_MODELS,
**SUPPORTED_GEMMA_MODELS,
**SUPPORTED_DEEPSEEK_MODELS,
**SUPPORTED_QWEN_MODELS,
**SUPPORTED_GPT_OSS_MODELS,
**SUPPORTED_GEMMA4_MODELS,
**SUPPORTED_QWEN35_MODELS,
}
SUPPORTED_OLLAMA_MODELS = TESTED_OLLAMA_MODELS
def format_ollama_model_size(size_bytes: int | None) -> str:
if size_bytes is None:
return "Unknown size"
units = ("B", "KB", "MB", "GB", "TB")
size = float(size_bytes)
unit_index = 0
while size >= 1024 and unit_index < len(units) - 1:
size /= 1024
unit_index += 1
if unit_index == 0:
return f"{int(size)}{units[unit_index]}"
return f"{size:.1f}{units[unit_index]}"
def get_supported_ollama_models(
pulled_models: list[OllamaModelStatus] | None = None,
) -> list[OllamaModelMetadata]:
models = list(TESTED_OLLAMA_MODELS.values())
seen_model_values = set(TESTED_OLLAMA_MODELS)
for pulled_model in pulled_models or []:
if not pulled_model.name or pulled_model.name in seen_model_values:
continue
models.append(
OllamaModelMetadata(
label=pulled_model.name,
value=pulled_model.name,
size=format_ollama_model_size(pulled_model.size),
tested=False,
)
)
seen_model_values.add(pulled_model.name)
return models