|
@@ -17,6 +17,7 @@ use OSS\OssClient;
|
|
|
use Smalot\PdfParser\Parser as PdfParser;
|
|
use Smalot\PdfParser\Parser as PdfParser;
|
|
|
use TCPDF;
|
|
use TCPDF;
|
|
|
use PhpOffice\PhpWord\IOFactory as WordIOFactory;
|
|
use PhpOffice\PhpWord\IOFactory as WordIOFactory;
|
|
|
|
|
+use Predis\Command\Traits\Get\Get;
|
|
|
|
|
|
|
|
class DeepSeekService
|
|
class DeepSeekService
|
|
|
{
|
|
{
|
|
@@ -1788,6 +1789,7 @@ class DeepSeekService
|
|
|
$prompt = getProp($data, 'prompt', '帮我根据给出的内容生成短剧大纲');
|
|
$prompt = getProp($data, 'prompt', '帮我根据给出的内容生成短剧大纲');
|
|
|
$model = getProp($data, 'model', 'v3');
|
|
$model = getProp($data, 'model', 'v3');
|
|
|
$model = $model == 'r1' ? 'deepseek-reasoner' : 'deepseek-chat';
|
|
$model = $model == 'r1' ? 'deepseek-reasoner' : 'deepseek-chat';
|
|
|
|
|
+ $is_multi = getProp($data, 'is_multi', 1);
|
|
|
|
|
|
|
|
if (!$file && !$content && !$bid) {
|
|
if (!$file && !$content && !$bid) {
|
|
|
Utils::throwError('20003:请上传文件或选择书籍或输入内容');
|
|
Utils::throwError('20003:请上传文件或选择书籍或输入内容');
|
|
@@ -2029,6 +2031,7 @@ class DeepSeekService
|
|
|
// 'start_episode_sequence' => 1,
|
|
// 'start_episode_sequence' => 1,
|
|
|
// 'end_episode_sequence' => count($script_arr['episodes']),
|
|
// 'end_episode_sequence' => count($script_arr['episodes']),
|
|
|
// 'episode_num' => count($script_arr['episodes']),
|
|
// 'episode_num' => count($script_arr['episodes']),
|
|
|
|
|
+ 'is_multi' => $is_multi,
|
|
|
'generate_status' => '待执行',
|
|
'generate_status' => '待执行',
|
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
|
'updated_at' => date('Y-m-d H:i:s')
|
|
'updated_at' => date('Y-m-d H:i:s')
|
|
@@ -2186,6 +2189,16 @@ class DeepSeekService
|
|
|
|
|
|
|
|
// 如果提示词$prompt有类似于改成N集或调整成N集这类的文字信息,则提取出N这个集数
|
|
// 如果提示词$prompt有类似于改成N集或调整成N集这类的文字信息,则提取出N这个集数
|
|
|
$episode_count = $this->extractEpisodeNumber($prompt);
|
|
$episode_count = $this->extractEpisodeNumber($prompt);
|
|
|
|
|
+ if ((int)getProp($anime, 'is_multi') !== 1) {
|
|
|
|
|
+ yield [
|
|
|
|
|
+ 'type' => 'done',
|
|
|
|
|
+ 'answer' => '当前剧本是单剧集,不支持修改剧集数',
|
|
|
|
|
+ 'reasoning' => '',
|
|
|
|
|
+ 'usage' => []
|
|
|
|
|
+ ];
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if ($episode_count) {
|
|
if ($episode_count) {
|
|
|
$question = "请根据实例格式完成{$episode_count}集剧本大纲";
|
|
$question = "请根据实例格式完成{$episode_count}集剧本大纲";
|
|
|
$system_message = [
|
|
$system_message = [
|
|
@@ -2508,8 +2521,9 @@ class DeepSeekService
|
|
|
$bid = getProp($data, 'bid', 0);
|
|
$bid = getProp($data, 'bid', 0);
|
|
|
$episode_number = getProp($data, 'episode_number', 1);
|
|
$episode_number = getProp($data, 'episode_number', 1);
|
|
|
$prompt = trim((string)getProp($data, 'prompt', '确认分镜大纲'));
|
|
$prompt = trim((string)getProp($data, 'prompt', '确认分镜大纲'));
|
|
|
- $anime = DB::table('mp_animes')->where('id', $anime_id)->select('content', 'roles', 'scenes')->first();
|
|
|
|
|
|
|
+ $anime = DB::table('mp_animes')->where('id', $anime_id)->first();
|
|
|
if (!$anime) Utils::throwError('20003:该对话不存在!');
|
|
if (!$anime) Utils::throwError('20003:该对话不存在!');
|
|
|
|
|
+ if ((int)getProp($anime, 'is_multi') !== 1 && (int)$episode_number !== 1) Utils::throwError('20003:单剧集不支持其他剧集序号');
|
|
|
$current_episode = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->where('is_default', 1)->first();
|
|
$current_episode = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->where('is_default', 1)->first();
|
|
|
$base_episode = $current_episode ?: DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->orderByDesc('id')->first();
|
|
$base_episode = $current_episode ?: DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->orderByDesc('id')->first();
|
|
|
$roles = $base_episode ? json_decode((string)getProp($base_episode, 'roles'), true) : json_decode((string)getProp($anime, 'roles'), true);
|
|
$roles = $base_episode ? json_decode((string)getProp($base_episode, 'roles'), true) : json_decode((string)getProp($anime, 'roles'), true);
|
|
@@ -2648,6 +2662,7 @@ class DeepSeekService
|
|
|
|
|
|
|
|
if ($prompt == '确认分镜大纲') {
|
|
if ($prompt == '确认分镜大纲') {
|
|
|
$content = $uploaded_content ?: $chapter_content;
|
|
$content = $uploaded_content ?: $chapter_content;
|
|
|
|
|
+ if ((int)getProp($anime, 'is_multi') !== 1) $content = $full_content; // 单剧集使用全文
|
|
|
if (!$content) {
|
|
if (!$content) {
|
|
|
Utils::throwError('20003:章节内容无法获取,请确认');
|
|
Utils::throwError('20003:章节内容无法获取,请确认');
|
|
|
}
|
|
}
|