YAML Metadata Warning: empty or missing yaml metadata in repo card (https://huggingface.co/docs/hub/model-cards#model-card-metadata)

🤭 Please refer to https://github.com/svjack/Genshin-Impact-Character-Chat to get more info

Install

pip install peft transformers bitsandbytes ipykernel rapidfuzz

Run by transformers

from transformers import TextStreamer, AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
from rapidfuzz import fuzz
from IPython.display import clear_output

tokenizer = AutoTokenizer.from_pretrained("svjack/DPO_Genshin_Impact_Qwen_1_5_Plot_Engine_Step_Json_Short_merged",)
qw_model = AutoModelForCausalLM.from_pretrained("svjack/DPO_Genshin_Impact_Qwen_1_5_Plot_Engine_Step_Json_Short_merged", load_in_4bit = True)
qw_model = qw_model.eval()

streamer = TextStreamer(tokenizer)

def qwen_hf_predict(messages, qw_model = qw_model,
    tokenizer = tokenizer, streamer = streamer,
    do_sample = True,
    top_p = 0.95,
    top_k = 40,
    max_new_tokens = 2070,
    max_input_length = 3500,
    temperature = 0.9,
    repetition_penalty = 1.0,
    device = "cuda"):

    encodeds = tokenizer.apply_chat_template(messages, return_tensors="pt",
        add_generation_prompt=True
    )
    model_inputs = encodeds.to(device)

    generated_ids = qw_model.generate(model_inputs, max_new_tokens=max_new_tokens,
                                do_sample=do_sample,
                                  streamer = streamer,
                                  top_p = top_p,
                                  top_k = top_k,
                                  temperature = temperature,
                                  repetition_penalty = repetition_penalty,
                                  )
    out = tokenizer.batch_decode(generated_ids)[0].split("<|im_start|>assistant")[-1].replace("<|im_end|>", "").strip()
    return out

def run_step_infer_times(x, times = 5, temperature = 0.01,
                        repetition_penalty = 1.0,
                        sim_val = 70
                        ):
    req = []
    for _ in range(times):
        clear_output(wait = True)
        out = qwen_hf_predict([
                {
                    "role": "system",
                    "content": ""
                },
                {
                    "role": "user",
                    "content": x
                },
            ],
            repetition_penalty = repetition_penalty,
            temperature = temperature,
            max_new_tokens = 2070,
            max_input_length = 6000,
        )
        if req:
            val = max(map(lambda x: fuzz.ratio(x, out), req))
            #print(val)
            #print(req)
            if val < sim_val:
                req.append(out.strip())
            x = x.strip() + "\n" + out.strip()
        else:
            req.append(out.strip())
            x = x.strip() + "\n" + out.strip()
    return req

out_l = run_step_infer_times(
'''
故事标题:为了没有眼泪的明天
故事背景:旅行者与琴、派蒙在蒙德城中经历了一系列事件,从元素流动回归、处理外交问题到对抗魔龙和寻找解决之道。他们偶遇吟游诗人温迪,后者提供了关于风神与巨龙的关键信息,并提出了借琴解救蒙德的计划。
参与角色:派蒙、旅行者、琴、丽莎、温迪、歌特琳德
''',
    temperature=0.1,
    repetition_penalty = 1.0,
    times = 10
)
clear_output(wait = True)

print("\n".join(out_l))

Output

{'参与者1': '派蒙', '参与者2': '旅行者', '当前故事背景': '旅行者与派蒙在蒙德城中,派蒙注意到元素流动异常,随后琴出现并解释了元素流动的规律。他们一起前往骑士团总部,琴要求旅行者协助处理外交问题,包括与丽莎的会面和与风神的对话。'}
{'参与者1': '琴', '参与者2': '派蒙', '当前故事背景': '琴通知派蒙和旅行者有紧急任务,需要处理与丽莎的会面,随后琴解释了蒙德城的元素流动情况,并提出借琴的请求,希望旅行者能帮助她。'}
{'参与者1': '丽莎', '参与者2': '派蒙', '当前故事背景': '丽莎是骑士团的秘书官,负责接待旅行者和琴,她对蒙德的外交问题感到困扰,需要旅行者和琴的帮助。'}
{'参与者1': '温迪', '参与者2': '派蒙', '当前故事背景': '温迪偶然出现,自称是吟游诗人,他提供关于风神与巨龙的信息,并提出用风元素力对抗魔龙的计划。'}
{'参与者1': '派蒙', '参与者2': '温迪', '当前故事背景': '派蒙对温迪的出现感到惊讶,温迪解释了自己是吟游诗人,对蒙德的事件有所了解。'}
{'参与者1': '琴', '参与者2': '派蒙', '当前故事背景': '琴请求旅行者帮助她,因为蒙德的元素流动异常,她需要借助他的力量。'}
{'参与者1': '派蒙', '参与者2': '旅行者', '当前故事背景': '旅行者和派蒙在蒙德城中讨论了琴的请求,准备应对可能的挑战。'}
out_l = run_step_infer_times(
'''
故事标题:归乡
故事背景:在须弥城门口,派蒙与纳西妲偶遇并帮助一只昏迷的元素生命找寻家园。过程中揭示了这只生物并非普通的蕈兽,而是元素生物,并且它们曾受到过‘末日’的影响,家园被侵蚀。纳西妲回忆起晶体里的力量可能与一个预言有关,为了拯救它们的家园,她必须解决‘禁忌知识’问题,但这个过程对她自身也会产生干扰。
参与角色:派蒙、纳西妲、浮游水蕈兽、旅行者
''',
    temperature=0.1,
    repetition_penalty = 1.0,
    times = 10
)
clear_output(wait = True)

print("\n".join(out_l))

Output

{'参与者1': '派蒙', '参与者2': '纳西妲', '当前故事背景': '两人在须弥城门口交谈,纳西妲提到她正在寻找一只元素生物,并且派蒙之前帮助过她。纳西妲确认了这只生物是她要找的,随后与纳西妲一起前往元素节点。'}
{'参与者1': '派蒙', '参与者2': '浮游水蕈兽', '当前故事背景': '派蒙和纳西妲发现并唤醒了昏迷的元素生物,纳西妲确认它就是她要找的。纳西妲解释了元素生物的家园被侵蚀的背景,以及她对‘禁忌知识’的了解。'}
{'参与者1': '纳西妲', '参与者2': '浮游水蕈兽', '当前故事背景': '纳西妲确认了浮游水蕈兽的身份,并解释了它为何会出现在这里,以及它对家园的渴望。纳西妲提出要帮助它,但同时也提到自己的任务可能与‘禁忌知识’有关。'}
{'参与者1': '派蒙', '参与者2': '纳西妲', '当前故事背景': '纳西妲回忆起晶体中的力量和一个与末日有关的预言,这与她寻找的元素生物有关。她决定解决‘禁忌知识’问题,尽管这可能对她自身产生影响。'}
{'参与者1': '纳西妲', '参与者2': '派蒙', '当前故事背景': '纳西妲请求派蒙的帮助,因为她需要力量来对抗‘禁忌知识’,同时她也意识到这个过程对她个人的影响。'}
{'参与者1': '派蒙', '参与者2': '纳西妲', '当前故事背景': '在对抗‘禁忌知识’时,纳西妲请求派蒙保持清醒,因为她的意识可能会模糊。'}
{'参与者1': '纳西妲', '参与者2': '浮游水蕈兽', '当前故事背景': '纳西妲确认了浮游水蕈兽的家园被侵蚀的后果,以及她对如何恢复家园的思考。'}
{'参与者1': '派蒙', '参与者2': '纳西妲', '当前故事背景': '纳西妲提到她个人的任务与‘禁忌知识’相关,这可能是她寻找浮游水蕈兽的原因之一。'}
{'参与者1': '纳西妲', '参与者2': '派蒙', '当前故事背景': '在对抗后,纳西妲对‘禁忌知识’的影响有所感悟,决定继续她的旅程。'}
{'参与者1': '派蒙', '参与者2': '纳西妲', '当前故事背景': '派蒙询问纳西妲接下来的计划,纳西妲表示她会继续旅程,但可能需要休息。'}
Downloads last month
1
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support