mirror of
https://github.com/xtekky/gpt4free.git
synced 2025-12-06 02:30:41 -08:00
It will create a models directory in current folder if it can't find the directory due to previous way where it tries to return models directory where its not present which in turns returns None causing os.path to fail Fix #2030
53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
import requests
|
|
import json
|
|
|
|
from ..requests.raise_for_status import raise_for_status
|
|
|
|
def load_models():
|
|
response = requests.get("https://gpt4all.io/models/models3.json")
|
|
raise_for_status(response)
|
|
return format_models(response.json())
|
|
|
|
def get_model_name(filename: str) -> str:
|
|
name = filename.split(".", 1)[0]
|
|
for replace in ["-v1_5", "-v1", "-q4_0", "_v01", "-v0", "-f16", "-gguf2", "-newbpe"]:
|
|
name = name.replace(replace, "")
|
|
return name
|
|
|
|
def format_models(models: list) -> dict:
|
|
return {get_model_name(model["filename"]): {
|
|
"path": model["filename"],
|
|
"ram": model["ramrequired"],
|
|
"prompt": model["promptTemplate"] if "promptTemplate" in model else None,
|
|
"system": model["systemPrompt"] if "systemPrompt" in model else None,
|
|
} for model in models}
|
|
|
|
def read_models(file_path: str):
|
|
with open(file_path, "rb") as f:
|
|
return json.load(f)
|
|
|
|
def save_models(file_path: str, data):
|
|
with open(file_path, 'w') as f:
|
|
json.dump(data, f, indent=4)
|
|
|
|
def get_model_dir() -> str:
|
|
local_dir = os.path.dirname(os.path.abspath(__file__))
|
|
project_dir = os.path.dirname(os.path.dirname(local_dir))
|
|
model_dir = os.path.join(project_dir, "models")
|
|
if not os.path.exists(model_dir):
|
|
os.mkdir(model_dir)
|
|
return model_dir
|
|
|
|
|
|
def get_models() -> dict[str, dict]:
|
|
model_dir = get_model_dir()
|
|
file_path = os.path.join(model_dir, "models.json")
|
|
if os.path.isfile(file_path):
|
|
return read_models(file_path)
|
|
else:
|
|
models = load_models()
|
|
save_models(file_path, models)
|
|
return models
|