xsigus24's picture
Upload folder using huggingface_hub
1d777c4
import importlib
import logging
try:
from extensions.telegram_bot.source.generators.abstract_generator import AbstractGenerator
except ImportError:
from source.generators.abstract_generator import AbstractGenerator
generator: AbstractGenerator
# ====================================================================================
# GENERATOR
def init(script="generator_llama_cpp.py", model_path="", n_ctx=4096, n_gpu_layers=0):
"""Initiate generator type
generator - is a class Generator from package generators/script
Generator class should contain method:
__init__() - method to initiate model
get_answer() - method get answer
tokens_count(str) - method to get str length in tokens
If Generator.model_change_allowed = True - also method:
get_model_list() - get list of available models
load_model(str) - load new model
Args:
script: script type, one of generators/*.py files
model_path: path to model file, if generator needs
n_ctx: context length, if generator needs
n_gpu_layers: n_gpu_layers for llama
"""
logging.info(f"### text_process INIT generator: {script}, model: {model_path} ###")
try:
generator_class = getattr(importlib.import_module("source.generators." + script), "Generator")
except ImportError:
generator_class = getattr(
importlib.import_module("extensions.telegram_bot.source.generators." + script), "Generator"
)
global generator
generator = generator_class(model_path, n_ctx=n_ctx, n_gpu_layers=n_gpu_layers)
logging.info(f"### text_process INIT generator: {script}, model: {model_path} DONE ###")
def generate_answer(
prompt, generation_params, eos_token, stopping_strings, default_answer: str, turn_template=""
) -> str:
"""Generate and return answer string.
Args:
prompt: user prompt
generation_params: dict with various generator params
eos_token: list with end of string tokens
stopping_strings: list with strings stopping generating
default_answer: if generating fails, default_answer will be returned
turn_template: turn template if generator needs it
Returns:
generation result string
"""
# Preparing, add stopping_strings
answer = default_answer
generation_params.update({"turn_template": turn_template})
try:
answer = generator.generate_answer(
prompt,
generation_params,
eos_token,
stopping_strings,
default_answer,
turn_template,
)
except Exception as exception:
print("generation error:", str(exception) + str(exception.args))
return answer
def get_tokens_count(text: str):
"""Return string length in tokens
Args:
text: text to be counted
Returns:
text token length (int)
"""
return generator.tokens_count(text)
def get_model_list():
"""Return list of available models
Returns:
list of available models
"""
return generator.get_model_list()
def load_model(model_file: str):
"""Change current llm model to model_file
Args:
model_file: model file to be loaded
Returns:
True if loading successful, otherwise False
"""
return generator.load_model(model_file)