Compare commits

..

No commits in common. "e7ccd3638cacf9264a9a5e022fc6bcceb82937d1" and "15f5a20f7ccb6314ba600be9642ece989adf5a6f" have entirely different histories.

2 changed files with 9 additions and 79 deletions

View File

@ -268,32 +268,20 @@ public class PortalVideoController extends BaseController {
public AjaxResult imageReference(@RequestBody PortalVideoGenRequest request) { public AjaxResult imageReference(@RequestBody PortalVideoGenRequest request) {
List<ContentItem> contentList; List<ContentItem> contentList;
if (request.getContent() != null && !request.getContent().isEmpty()) { if (request.getContent() != null && !request.getContent().isEmpty()) {
contentList = new ArrayList<>(request.getContent()); contentList = request.getContent();
ContentItem head = contentList.get(0); ContentItem head = contentList.get(0);
if (head == null || !"text".equals(head.getType()) || StringUtils.isEmpty(head.getText())) { if (head == null || !"text".equals(head.getType()) || StringUtils.isEmpty(head.getText())) {
return AjaxResult.error("请输入视频描述文本(首条须为 type=text可含 [图片n]/[视频n]/[音频n] 占位)"); return AjaxResult.error("请输入视频描述文本(首条须为 type=text可含 [图n] 占位)");
} }
// 保留 text + 合法 reference_*//视频允许只有 text 没有参考素材
List<ContentItem> filtered = new ArrayList<>();
filtered.add(head);
for (int i = 1; i < contentList.size(); i++) {
ContentItem it = contentList.get(i);
if (isReferenceImageContentItem(it)
|| isReferenceAudioContentItem(it)
|| isReferenceVideoContentItem(it)) {
filtered.add(it);
}
}
contentList = filtered;
String firstRef = contentList.stream() String firstRef = contentList.stream()
.skip(1) .filter(PortalVideoController::isReferenceImageContentItem)
.map(PortalVideoController::firstReferenceUrlFromItem) .map(it -> it.getImageUrl().getUrl())
.filter(StringUtils::isNotEmpty)
.findFirst() .findFirst()
.orElse(null); .orElse(null);
// 无参考图也允许 text 提示词 if (StringUtils.isEmpty(firstRef)) {
if (StringUtils.isNotEmpty(firstRef) && StringUtils.isEmpty(request.getReferenceUrl())) { return AjaxResult.error("请上传参考图content 中须含 image_url + role=reference_image");
}
if (StringUtils.isEmpty(request.getReferenceUrl())) {
request.setReferenceUrl(firstRef); request.setReferenceUrl(firstRef);
} }
} else { } else {
@ -322,27 +310,6 @@ public class PortalVideoController extends BaseController {
return submitOrderAndCreate(request, "image-reference", body); return submitOrderAndCreate(request, "image-reference", body);
} }
private static String firstReferenceUrlFromItem(ContentItem item) {
if (isReferenceImageContentItem(item)) {
return item.getImageUrl().getUrl();
}
if (isReferenceVideoContentItem(item)) {
return item.getVideoUrl().getUrl();
}
if (isReferenceAudioContentItem(item)) {
return item.getAudioUrl().getUrl();
}
return null;
}
private static boolean isValidReferenceAssetOrHttpUrl(String raw) {
if (StringUtils.isEmpty(raw)) {
return false;
}
String url = raw.trim().toLowerCase();
return url.startsWith("http://") || url.startsWith("https://") || url.startsWith("asset://");
}
private static boolean isReferenceImageContentItem(ContentItem item) { private static boolean isReferenceImageContentItem(ContentItem item) {
if (item == null || !"image_url".equals(item.getType())) { if (item == null || !"image_url".equals(item.getType())) {
return false; return false;
@ -351,38 +318,7 @@ public class PortalVideoController extends BaseController {
return false; return false;
} }
ImageUrl iu = item.getImageUrl(); ImageUrl iu = item.getImageUrl();
if (iu == null || StringUtils.isEmpty(iu.getUrl())) { return iu != null && StringUtils.isNotEmpty(iu.getUrl());
return false;
}
return isValidReferenceAssetOrHttpUrl(iu.getUrl());
}
private static boolean isReferenceVideoContentItem(ContentItem item) {
if (item == null || !"video_url".equals(item.getType())) {
return false;
}
if (!"reference_video".equals(item.getRole())) {
return false;
}
ImageUrl vu = item.getVideoUrl();
if (vu == null || StringUtils.isEmpty(vu.getUrl())) {
return false;
}
return isValidReferenceAssetOrHttpUrl(vu.getUrl());
}
private static boolean isReferenceAudioContentItem(ContentItem item) {
if (item == null || !"audio_url".equals(item.getType())) {
return false;
}
if (!"reference_audio".equals(item.getRole())) {
return false;
}
ImageUrl au = item.getAudioUrl();
if (au == null || StringUtils.isEmpty(au.getUrl())) {
return false;
}
return isValidReferenceAssetOrHttpUrl(au.getUrl());
} }
private List<ContentItem> buildTextAndFirstFrame(String text, String firstUrl) { private List<ContentItem> buildTextAndFirstFrame(String text, String firstUrl) {

View File

@ -15,12 +15,6 @@ public class ContentItem {
@JsonProperty("image_url") @JsonProperty("image_url")
private ImageUrl imageUrl; private ImageUrl imageUrl;
@JsonProperty("video_url")
private ImageUrl videoUrl;
@JsonProperty("audio_url")
private ImageUrl audioUrl;
@JsonProperty("role") @JsonProperty("role")
private String role; private String role;
} }