123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- 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
|