|
from .generator import generate_chain |
|
from .utils import load_yaml, load_txt, save_json |
|
from .prompt import create_custom_world_prompt, create_scenario_prompt, create_storyline_prompt |
|
import ast |
|
from langchain_core.output_parsers import StrOutputParser |
|
|
|
|
|
def create_custom_world(topic, world_story, save=False): |
|
prompt=create_custom_world_prompt |
|
|
|
''' |
|
config: prompt.yaml |
|
prompt = config['create_custom_world_prompt'] |
|
|
|
User๊ฐ ์ง์ topic์ ์ ํ๊ณ , world_story๋ฅผ ์
๋ ฅํฉ๋๋ค. ๊ฒ์์ ์ ๋ฐ์ ์ธ ์ธ๊ณ๊ด๊ณผ ๊ฒ์์ ๋ฃฐ์ ์ ํฉ๋๋ค. |
|
|
|
ex) |
|
topic: ํด๋ฆฌ ํฌํฐ |
|
world_story: ํด๋ฆฌ ํฌํฐ ์ธ๊ณ๋ ๋ง๋ฒ์ฌ๋ค์ ์ธ๊ณ์
๋๋ค. |
|
๋น์๋ฃจ๋ฅผ ํ๊ณ ๋ ์๋ค๋๋ฉฐ, ์ ๊ธฐํ ๋ง๋ฒ ์๋ฌผ ๊ทธ๋ฆฌํ, ํผ๋์ค ๋ฑ์ด ์์ต๋๋ค. |
|
์ด๋ ์ ์ธ๋ ฅ๊ณผ ๋ง์ ์ธ์ฐ์ธ์. |
|
''' |
|
prompt_variable = {'topic':topic, |
|
'context':world_story, |
|
'language': "ํ๊ตญ์ด",} |
|
|
|
world_summary = generate_chain(prompt, prompt_variable) |
|
|
|
if save == True: |
|
save_json(topic + '_world.json', {'topic':topic, 'world_summary':world_summary}) |
|
|
|
return topic, world_summary |
|
|
|
|
|
def create_scenario(topic, context, output_count=5, save=False): |
|
prompt=create_scenario_prompt |
|
|
|
''' |
|
config: prompt.yaml |
|
prompt = config['create_scenario_prompt'] |
|
|
|
์ฃผ์ด์ง world_summary๋ฅผ ๋ฐํ์ผ๋ก {output_count} ๊ฐ์ scenario๋ฅผ ์์ฑํฉ๋๋ค. |
|
''' |
|
prompt_variable = {'topic':topic, |
|
'output_count':output_count, |
|
'context':context, |
|
'language': 'ํ๊ตญ์ด',} |
|
|
|
scenario = generate_chain(prompt, |
|
prompt_variable) |
|
|
|
while(True): |
|
try: |
|
storyline = generate_chain(prompt, |
|
prompt_variable, |
|
parser=StrOutputParser()) |
|
scenario = ast.literal_eval(storyline) |
|
|
|
if save == True: |
|
prompt_variable['scenario'] = scenario |
|
save_json(str(topic) + '_scenario.json', prompt_variable) |
|
|
|
return scenario |
|
except: |
|
continue |
|
|
|
|
|
def create_storyline(topic, context, output_count=5, save=False): |
|
''' |
|
config: prompt.yaml |
|
prompt = config['create_storyline_prompt'] |
|
|
|
์ฃผ์ด์ง scenario๋ฅผ ๋ฐํ์ผ๋ก ์ธ๋ถ์ ์ธ ๊ฒ์ storyline์ {output_count} ๊ฐ์ ์์๋ก ๊ฐ์ง๋ ํ์ด์ฌ ๋ฆฌ์คํธ๋ก ์์ฑํฉ๋๋ค. |
|
''' |
|
prompt=create_storyline_prompt |
|
|
|
prompt_variable = {'topic':topic, |
|
'output_count': output_count, |
|
'context':context, |
|
'language': 'ํ๊ตญ์ด',} |
|
|
|
while(True): |
|
try: |
|
storyline = generate_chain(prompt, |
|
prompt_variable, |
|
parser=StrOutputParser()) |
|
storyline_list = ast.literal_eval(storyline) |
|
|
|
if not storyline_list[0].get('title') or not storyline_list[0].get('story'): |
|
raise Exception() |
|
|
|
if save== True: |
|
prompt_variable['scenario'] = context |
|
prompt_variable['story_line'] = storyline_list |
|
save_json(str(topic) + str('story_line') +'.json', prompt_variable) |
|
|
|
return storyline_list |
|
except: |
|
continue |
|
|
|
|