|
|
import numpy as np
|
|
|
from core.draft_writer import DraftWriter
|
|
|
from core.plot_writer import PlotWriter
|
|
|
from core.outline_writer import OutlineWriter
|
|
|
from core.writer_utils import KeyPointMsg
|
|
|
|
|
|
|
|
|
|
|
|
def summary_draft(model, sub_model, chapter_title, chapter_text):
|
|
|
xy_pairs = [('', chapter_text)]
|
|
|
|
|
|
dw = DraftWriter(xy_pairs, {}, model=model, sub_model=sub_model, x_chunk_length=500, y_chunk_length=1000)
|
|
|
dw.max_thread_num = 1
|
|
|
|
|
|
generator = dw.summary(pair_span=(0, len(xy_pairs)))
|
|
|
|
|
|
kp_msg_title = ''
|
|
|
for kp_msg in generator:
|
|
|
if isinstance(kp_msg, KeyPointMsg):
|
|
|
|
|
|
kp_msg_title = kp_msg.prompt_name
|
|
|
continue
|
|
|
else:
|
|
|
chunk_list = kp_msg
|
|
|
|
|
|
current_cost = 0
|
|
|
currency_symbol = ''
|
|
|
finished_chunk_num = 0
|
|
|
chars_num = 0
|
|
|
model = None
|
|
|
for e in chunk_list:
|
|
|
if e is None: continue
|
|
|
finished_chunk_num += 1
|
|
|
output, chunk = e
|
|
|
if output is None: continue
|
|
|
current_cost += output['response_msgs'].cost
|
|
|
currency_symbol = output['response_msgs'].currency_symbol
|
|
|
chars_num += len(output['response_msgs'].response)
|
|
|
model = output['response_msgs'].model
|
|
|
|
|
|
yield dict(
|
|
|
progress_msg=f"[{chapter_title}] 提炼章节剧情 {kp_msg_title} 进度:{finished_chunk_num}/{len(chunk_list)} 已创作字符:{chars_num} 已花费:{current_cost:.4f}{currency_symbol}",
|
|
|
chars_num=chars_num,
|
|
|
current_cost=current_cost,
|
|
|
currency_symbol=currency_symbol,
|
|
|
model=model
|
|
|
)
|
|
|
|
|
|
return dw
|
|
|
|
|
|
|
|
|
def summary_plot(model, sub_model, chapter_title, chapter_plot):
|
|
|
xy_pairs = [('', chapter_plot)]
|
|
|
|
|
|
pw = PlotWriter(xy_pairs, {}, model=model, sub_model=sub_model, x_chunk_length=500, y_chunk_length=1000)
|
|
|
|
|
|
generator = pw.summary()
|
|
|
|
|
|
for output in generator:
|
|
|
current_cost = output['response_msgs'].cost
|
|
|
currency_symbol = output['response_msgs'].currency_symbol
|
|
|
chars_num = len(output['response_msgs'].response)
|
|
|
yield dict(
|
|
|
progress_msg=f"[{chapter_title}] 提炼章节大纲 已创作字符:{chars_num} 已花费:{current_cost:.4f}{currency_symbol}",
|
|
|
chars_num=chars_num,
|
|
|
current_cost=current_cost,
|
|
|
currency_symbol=currency_symbol,
|
|
|
model=output['response_msgs'].model
|
|
|
)
|
|
|
|
|
|
return pw
|
|
|
|
|
|
def summary_chapters(model, sub_model, title, chapter_titles, chapter_content):
|
|
|
ow = OutlineWriter([('', '')], {}, model=model, sub_model=sub_model, x_chunk_length=500, y_chunk_length=1000)
|
|
|
ow.xy_pairs = ow.construct_xy_pairs(chapter_titles, chapter_content)
|
|
|
|
|
|
generator = ow.summary()
|
|
|
|
|
|
for output in generator:
|
|
|
current_cost = output['response_msgs'].cost
|
|
|
currency_symbol = output['response_msgs'].currency_symbol
|
|
|
chars_num = len(output['response_msgs'].response)
|
|
|
yield dict(
|
|
|
progress_msg=f"[{title}] 提炼全书大纲 已创作字符:{chars_num} 已花费:{current_cost:.4f}{currency_symbol}",
|
|
|
chars_num=chars_num,
|
|
|
current_cost=current_cost,
|
|
|
currency_symbol=currency_symbol,
|
|
|
model=output['response_msgs'].model
|
|
|
)
|
|
|
|
|
|
return ow
|
|
|
|
|
|
|
|
|
|