gpt4free/g4f/locals/models.py
Zed cb2776a549
Update models.py to create models directory when its not present
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
2024-05-30 19:29:16 +05:30

54 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