import os import pandas as pd def split_weighted_subprompts(text): """ grabs all text up to the first occurrence of ':' uses the grabbed text as a sub-prompt, and takes the value following ':' as weight if ':' has no value defined, defaults to 1.0 repeats until no text remaining """ remaining = len(text) prompts = [] weights = [] while remaining > 0: if ":" in text: idx = text.index(":") # first occurrence from start # grab up to index as sub-prompt prompt = text[:idx] remaining -= idx # remove from main text text = text[idx + 1 :] # find value for weight if " " in text: idx = text.index(" ") # first occurence else: # no space, read to end idx = len(text) if idx != 0: try: weight = float(text[:idx]) except: # couldn't treat as float print( f"Warning: '{text[:idx]}' is not a value, are you missing a space?" ) weight = 1.0 else: # no value found weight = 1.0 # remove from main text remaining -= idx text = text[idx + 1 :] # append the sub-prompt and its weight prompts.append(prompt) weights.append(weight) else: # no : found if len(text) > 0: # there is still text though # take remainder as weight 1 prompts.append(text) weights.append(1.0) remaining = 0 return prompts, weights def logger(params, log_csv): os.makedirs("logs", exist_ok=True) cols = [arg for arg, _ in params.items()] if not os.path.exists(log_csv): df = pd.DataFrame(columns=cols) df.to_csv(log_csv, index=False) df = pd.read_csv(log_csv) for arg in cols: if arg not in df.columns: df[arg] = "" df.to_csv(log_csv, index=False) li = {} cols = [col for col in df.columns] data = {arg: value for arg, value in params.items()} for col in cols: if col in data: li[col] = data[col] else: li[col] = "" df = pd.DataFrame(li, index=[0]) df.to_csv(log_csv, index=False, mode="a", header=False)