enhance illustration being taken into account in the response
This commit is contained in:
@@ -29,7 +29,7 @@ public class ChatService {
|
||||
- Use clear structure: headings, bullet points, or numbered steps where appropriate to maximize clarity
|
||||
- Only say you cannot answer if the context is entirely unrelated to the question
|
||||
- Cite sources for each major claim using the reference labels from the context (e.g. [S1], [F2]). Prefer these labels over inventing page numbers, but you may also describe the source naturally if needed.
|
||||
- When referencing diagrams or figures, prefer their label from the context (e.g. [F1])
|
||||
- Figures (labeled [F1], [F2], etc.) are actual images and drawings from the textbook — they will be rendered as inline illustrations in your response. Use them actively to support your explanations: reference a figure when it visually demonstrates anatomy, a surgical step, or a clinical concept you are describing.
|
||||
- Maintain continuity with the conversation history
|
||||
- Never fabricate clinical information not present in the context
|
||||
""";
|
||||
|
||||
@@ -14,9 +14,15 @@ public record TopicSummaryResponse(
|
||||
Instant generatedAt
|
||||
) {
|
||||
public record SourceReference(
|
||||
String type,
|
||||
String refLabel,
|
||||
String bookId,
|
||||
String bookTitle,
|
||||
Integer page
|
||||
Integer page,
|
||||
String figureId,
|
||||
String label,
|
||||
String caption,
|
||||
String imageUrl
|
||||
) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ public class TopicSummaryService {
|
||||
- Structure your response clearly with key points
|
||||
- Cite claims using ONLY the reference labels provided in the context (e.g. [S1], [F2]).
|
||||
Do not invent page numbers, section titles, or labels not present in the CONTEXT block.
|
||||
- Figures (labeled [F1], [F2], etc.) are actual images and drawings from the textbook — they will be rendered as inline illustrations in your response. Use them actively to support your explanations: reference a figure when it visually demonstrates anatomy, a surgical step, or a clinical concept you are describing.
|
||||
- If the retrieved context does not contain sufficient information on the topic,
|
||||
explicitly state: "The uploaded books do not contain sufficient information on this topic."
|
||||
- Never hallucinate or fabricate clinical information
|
||||
@@ -135,7 +136,7 @@ public class TopicSummaryService {
|
||||
return String.format(
|
||||
"Provide a comprehensive educational summary of the following neurosurgery topic: " +
|
||||
"%s. Topic description: %s. " +
|
||||
"Include key concepts, clinical considerations, and important details that a neurosurgeon should know.",
|
||||
"Include key concepts, diagrams, illustations and clinical considerations, and important details that a neurosurgeon should know.",
|
||||
topic.getName(), topic.getDescription()
|
||||
);
|
||||
}
|
||||
@@ -165,7 +166,7 @@ public class TopicSummaryService {
|
||||
.append(f.getCaption() != null ? f.getCaption() : "")
|
||||
.append("\n");
|
||||
}
|
||||
sb.append("\n");
|
||||
sb.append("\nWhen referencing diagrams, use their label from the context (e.g. [F1]).\n\n");
|
||||
}
|
||||
|
||||
sb.append("QUESTION:\n").append(question);
|
||||
@@ -177,27 +178,35 @@ public class TopicSummaryService {
|
||||
List<Book> readyBooks) {
|
||||
List<TopicSummaryResponse.SourceReference> sources = new ArrayList<>();
|
||||
|
||||
for (SectionEntity s : sections) {
|
||||
for (int i = 0; i < sections.size(); i++) {
|
||||
SectionEntity s = sections.get(i);
|
||||
Book book = readyBooks.stream()
|
||||
.filter(b -> b.getId().equals(s.getBookId()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
String title = book != null ? book.getTitle() : "Book";
|
||||
String bookId = book != null ? book.getId().toString() : null;
|
||||
sources.add(new TopicSummaryResponse.SourceReference(bookId, title, s.getPageStart()));
|
||||
sources.add(new TopicSummaryResponse.SourceReference(
|
||||
"TEXT", "S" + (i + 1), bookId, title, s.getPageStart(),
|
||||
null, null, null, null));
|
||||
}
|
||||
|
||||
for (FigureEntity f : figures) {
|
||||
for (int i = 0; i < figures.size(); i++) {
|
||||
FigureEntity f = figures.get(i);
|
||||
Book book = readyBooks.stream()
|
||||
.filter(b -> b.getId().equals(f.getBookId()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
String title = book != null ? book.getTitle() : "Book";
|
||||
String bookId = book != null ? book.getId().toString() : null;
|
||||
sources.add(new TopicSummaryResponse.SourceReference(bookId, title, f.getPage()));
|
||||
String filename = f.getImagePath().substring(f.getImagePath().lastIndexOf('/') + 1);
|
||||
String imageUrl = "/api/v1/figures/" + f.getBookId() + "/" + filename;
|
||||
sources.add(new TopicSummaryResponse.SourceReference(
|
||||
"FIGURE", "F" + (i + 1), bookId, title, f.getPage(),
|
||||
f.getId(), f.getLabel(), f.getCaption(), imageUrl));
|
||||
}
|
||||
|
||||
return sources.stream().distinct().toList();
|
||||
return sources;
|
||||
}
|
||||
|
||||
private String serializeSources(List<TopicSummaryResponse.SourceReference> sources) {
|
||||
|
||||
Reference in New Issue
Block a user