import unittest from modules import util class TestUtils(unittest.TestCase): def test_can_parse_tokens_with_lora(self): test_cases = [ { "input": ("some prompt, very cool, , cool ", [], 5), "output": [("hey-lora.safetensors", 0.4), ("you-lora.safetensors", 0.2)], }, # Test can not exceed limit { "input": ("some prompt, very cool, , cool ", [], 1), "output": [("hey-lora.safetensors", 0.4)], }, # test Loras from UI take precedence over prompt { "input": ( "some prompt, very cool, , , , , , ", [("hey-lora.safetensors", 0.4)], 5, ), "output": [ ("hey-lora.safetensors", 0.4), ("l1.safetensors", 0.4), ("l2.safetensors", -0.2), ("l3.safetensors", 0.3), ("l4.safetensors", 0.5), ], }, # Test lora specification not separated by comma are ignored, only latest specified is used { "input": ("some prompt, very cool, ", [], 3), "output": [("you-lora.safetensors", 0.2)], }, { "input": (", , and ", [], 6), "output": [] } ] for test in test_cases: prompt, loras, loras_limit = test["input"] expected = test["output"] actual = util.parse_lora_references_from_prompt(prompt, loras, loras_limit) self.assertEqual(expected, actual)