mirror of
https://github.com/Mintplex-Labs/langchain-python.git
synced 2026-07-18 18:34:27 -04:00
3474f39e21
make it so everything goes through generate, which removes the need for two types of caches
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
"""Base interface for loading large language models apis."""
|
|
import json
|
|
from pathlib import Path
|
|
from typing import Union
|
|
|
|
import yaml
|
|
|
|
from langchain.llms import type_to_cls_dict
|
|
from langchain.llms.base import BaseLLM
|
|
|
|
|
|
def load_llm_from_config(config: dict) -> BaseLLM:
|
|
"""Load LLM from Config Dict."""
|
|
if "_type" not in config:
|
|
raise ValueError("Must specify an LLM Type in config")
|
|
config_type = config.pop("_type")
|
|
|
|
if config_type not in type_to_cls_dict:
|
|
raise ValueError(f"Loading {config_type} LLM not supported")
|
|
|
|
llm_cls = type_to_cls_dict[config_type]
|
|
return llm_cls(**config)
|
|
|
|
|
|
def load_llm(file: Union[str, Path]) -> BaseLLM:
|
|
"""Load LLM from file."""
|
|
# Convert file to Path object.
|
|
if isinstance(file, str):
|
|
file_path = Path(file)
|
|
else:
|
|
file_path = file
|
|
# Load from either json or yaml.
|
|
if file_path.suffix == ".json":
|
|
with open(file_path) as f:
|
|
config = json.load(f)
|
|
elif file_path.suffix == ".yaml":
|
|
with open(file_path, "r") as f:
|
|
config = yaml.safe_load(f)
|
|
else:
|
|
raise ValueError("File type must be json or yaml")
|
|
# Load the LLM from the config now.
|
|
return load_llm_from_config(config)
|