import sys import os parent_dir = os.path.abspath(os.path.join(__file__, "..", "..")) sys.path.append(parent_dir) import koboldcpp def extract_loras_from_prompt(*args, **kwargs): """ >>> prompt = "no it could look like it" >>> clean, data = extract_loras_from_prompt(prompt) >>> clean 'no it could look like it' >>> data [] >>> prompt = "even after a tag, an unending >> clean, data = extract_loras_from_prompt(prompt) >>> clean 'even after a tag, an unending >> data [{'name': 'valid', 'multiplier': 1.0}] >>> prompt = "A portrait with soft lighting" >>> clean, data = extract_loras_from_prompt(prompt) >>> clean 'A portrait with soft lighting' >>> data [{'name': 'models/face', 'multiplier': 0.8}] >>> prompt = " start end" >>> clean, data = extract_loras_from_prompt(prompt) >>> clean ' start end' >>> data [{'name': 'foo', 'multiplier': 1.0}, {'name': 'bar', 'multiplier': 0.5, 'is_high_noise': True}] >>> prompt = "bad good " >>> clean, data = extract_loras_from_prompt(prompt) >>> clean 'bad good ' >>> data [{'name': 'good', 'multiplier': 2.0}] >>> prompt = "xyz" >>> clean, data = extract_loras_from_prompt(prompt) >>> clean 'xyz' >>> data [{'name': 'a', 'multiplier': 0.15}, {'name': 'b', 'multiplier': 0.2}] """ return koboldcpp.extract_loras_from_prompt(*args, **kwargs) def mk_lora_info(*args, **kwargs): """ >>> mk_lora_info(['/x/lora1.safetensors', '/y/lora2.gguf'], []) [('/x/lora1.safetensors', 'lora1', 'lora1.safetensors', 1.0), ('/y/lora2.gguf', 'lora2', 'lora2.gguf', 1.0)] >>> mk_lora_info(['/x/lora1.safetensors', '/y/lora1.safetensors'], [0.3]) [('/x/lora1.safetensors', 'lora1', 'lora1.safetensors', 0.3), ('/y/lora1.safetensors', 'lora1_2', 'lora1_2.safetensors', 0.3)] >>> mk_lora_info(['./lora1.gguf', '/y/lora2.gguf', 'lora3.gguf'], [0, 0.3]) [('./lora1.gguf', 'lora1', 'lora1.gguf', 0), ('/y/lora2.gguf', 'lora2', 'lora2.gguf', 0.3), ('lora3.gguf', 'lora3', 'lora3.gguf', 0)] """ return koboldcpp.mk_lora_info(*args, **kwargs) def sanitize_lora_multipliers(*args, **kwargs): """ >>> sanitize_lora_multipliers(None) [1.0] >>> sanitize_lora_multipliers(0.75) [0.75] >>> sanitize_lora_multipliers("2") [2.0] >>> sanitize_lora_multipliers([0.5, "1.2", 3]) [0.5, 1.2, 3.0] >>> sanitize_lora_multipliers([]) [] >>> sanitize_lora_multipliers(["bad", None, ""]) [0.0, 0.0, 0.0] """ return koboldcpp.sanitize_lora_multipliers(*args, **kwargs) def gendefaults_parse_meta_field(*args, **kwargs): ''' >>> [gendefaults_parse_meta_field(x) for x in [{}, None, '', "invalid json", ' ', 4]] Warning: gendefaults field - not a JSON object. Warning: couldn't parse gendefaults field. Warning: gendefaults field - not a JSON object. [{}, {}, {}, {}, {}, {}] >>> [gendefaults_parse_meta_field(x) for x in ['["valid", "json"]', 'but', '1']] Warning: gendefaults field - not a JSON object. Warning: couldn't parse gendefaults field. Warning: gendefaults field - not a JSON object. [{}, {}, {}] >>> gendefaults_parse_meta_field({"key": "value"}) {'key': 'value'} >>> gendefaults_parse_meta_field(' "scheduler": "default", "steps": 10 ') {'scheduler': 'default', 'steps': 10} >>> gendefaults_parse_meta_field('{"cfg-scale": 0.5, "cfg_scale": 0.7}') {'cfg-scale': 0.5, 'cfg_scale': 0.7} >>> gendefaults_parse_meta_field('{"guidance": 1.2, "sampler": "ddim"}') {'distilled_guidance': 1.2, 'sampler_name': 'ddim', 'guidance': 1.2, 'sampler': 'ddim'} ''' return koboldcpp.gendefaults_parse_meta_field(*args, **kwargs) if __name__ == '__main__': import doctest failures, _ = doctest.testmod() if failures: raise SystemExit(f"{failures} doctest{'s' if failures != 1 else ''} failed")