import gradio as gr from pingpong import PingPong from interfaces import utils from modules.llms import get_llm_factory def rollback_last_ui(history): return history[:-1] def add_side_character(enable, name, age, personality, job, llm_type='PaLM'): prompts = get_llm_factory(llm_type).create_prompt_manager().prompts cur_side_chars = 1 prompt = "" for idx in range(len(enable)): if enable[idx]: prompt += prompts['chat_gen']['add_side_character'].format( cur_side_chars=cur_side_chars, name=name[idx], job=job[idx], age=age[idx], personality=personality[idx] ) cur_side_chars += 1 return "\n" + prompt if prompt else "" def add_chapter_title_ctx(chapter_title, chapter_plot, llm_type='PaLM'): prompts = get_llm_factory(llm_type).create_prompt_manager().prompts title_idx = 1 prompt = "" for idx in range(len(chapter_title)): if chapter_title[idx] : prompt += prompts['chat_gen']['chapter_title_ctx'].format( title_idx=title_idx, chapter_title=chapter_title[idx], chapter_plot=chapter_plot[idx], ) title_idx += 1 return "\n" + prompt if prompt else "" async def chat( user_input, chat_mode, chat_state, genre, place, mood, main_char_name, main_char_age, main_char_personality, main_char_job, side_char_name1, side_char_age1, side_char_personality1, side_char_job1, side_char_name2, side_char_age2, side_char_personality2, side_char_job2, side_char_name3, side_char_age3, side_char_personality3, side_char_job3, chapter1_title, chapter2_title, chapter3_title, chapter4_title, chapter1_plot, chapter2_plot, chapter3_plot, chapter4_plot, side_char_enable1, side_char_enable2, side_char_enable3, llm_type='PaLM', ): prompts = get_llm_factory(llm_type).create_prompt_manager().prompts chapter_title_ctx = add_chapter_title_ctx( [chapter1_title, chapter2_title, chapter3_title, chapter4_title], [chapter1_plot, chapter2_plot, chapter3_plot, chapter4_plot], ) side_char_prompt = add_side_character( [side_char_enable1, side_char_enable2, side_char_enable3], [side_char_name1, side_char_name2, side_char_name3], [side_char_job1, side_char_job2, side_char_job3], [side_char_age1, side_char_age2, side_char_age3], [side_char_personality1, side_char_personality2, side_char_personality3], ) prompt = prompts['chat_gen']['chat_context'].format( genre=genre, place=place, mood=mood, main_char_name=main_char_name, main_char_job=main_char_job, main_char_age=main_char_age, main_char_personality=main_char_personality, side_char_placeholder=side_char_prompt, chapter_title_placeholder=chapter_title_ctx, ) ppm = chat_state[chat_mode] ppm.ctx = ctx ppm.add_pingpong( PingPong(user_input, '') ) prompt = utils.build_prompts(ppm) response_txt = await utils.get_chat_response(prompt, ctx=ctx) ppm.replace_last_pong(response_txt) chat_state[chat_mode] = ppm return ( "", chat_state, ppm.build_uis(), gr.update(interactive=True) ) async def chat_regen(chat_mode, chat_state): ppm = chat_state[chat_mode] user_input = ppm.pingpongs[-1].ping ppm.pingpongs = ppm.pingpongs[:-1] ppm.add_pingpong( PingPong(user_input, '') ) prompt = utils.build_prompts(ppm) response_txt = await utils.get_chat_response(prompt, ctx=ppm.ctx) ppm.replace_last_pong(response_txt) chat_state[chat_mode] = ppm return ( chat_state, ppm.build_uis() ) def chat_reset(chat_mode, chat_state, llm_type='PaLM'): factory = get_llm_factory(llm_type) chat_state[chat_mode] = factory.create_ui_pp_manager() return ( "", chat_state, [], gr.update(interactive=False) )