Skip to content

Commit 3c53068

Browse files
committed
add summary from text, add interaction to database for all scenarios, improve code and bump versions
1 parent f176949 commit 3c53068

File tree

15 files changed

+304
-83
lines changed

15 files changed

+304
-83
lines changed

backend/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ plugins {
55
}
66

77
group = 'dev.victormartin.oci.genai.backend'
8-
version = '0.0.5'
8+
version = '0.0.6'
99

1010
java {
1111
sourceCompatibility = '17'

backend/src/main/java/dev/victormartin/oci/genai/backend/backend/controller/PDFConvertorController.java

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33

44
import com.oracle.bmc.model.BmcException;
55
import dev.victormartin.oci.genai.backend.backend.dao.Answer;
6+
import dev.victormartin.oci.genai.backend.backend.data.Interaction;
7+
import dev.victormartin.oci.genai.backend.backend.data.InteractionRepository;
8+
import dev.victormartin.oci.genai.backend.backend.data.InteractionType;
69
import dev.victormartin.oci.genai.backend.backend.service.OCIGenAIService;
710
import dev.victormartin.oci.genai.backend.backend.service.PDFConvertorService;
811
import org.slf4j.Logger;
@@ -11,12 +14,15 @@
1114
import org.springframework.beans.factory.annotation.Value;
1215
import org.springframework.util.StringUtils;
1316
import org.springframework.web.bind.annotation.PostMapping;
17+
import org.springframework.web.bind.annotation.RequestHeader;
1418
import org.springframework.web.bind.annotation.RequestParam;
1519
import org.springframework.web.bind.annotation.RestController;
1620
import org.springframework.web.multipart.MaxUploadSizeExceededException;
1721
import org.springframework.web.multipart.MultipartFile;
22+
import org.springframework.web.util.HtmlUtils;
1823

1924
import java.io.File;
25+
import java.util.Date;
2026

2127
@RestController
2228
public class PDFConvertorController {
@@ -34,8 +40,13 @@ public class PDFConvertorController {
3440
@Autowired
3541
PDFConvertorService pdfConvertorService;
3642

43+
@Autowired
44+
private InteractionRepository interactionRepository;
45+
3746
@PostMapping("/api/upload")
38-
public Answer fileUploading(@RequestParam("file") MultipartFile multipartFile) {
47+
public Answer fileUploading(@RequestParam("file") MultipartFile multipartFile,
48+
@RequestHeader("conversationID") String conversationId,
49+
@RequestHeader("modelId") String modelId) {
3950
String filename = StringUtils.cleanPath(multipartFile.getOriginalFilename());
4051
log.info("File uploaded {} {} bytes ({})", filename, multipartFile.getSize(), multipartFile.getContentType());
4152
try {
@@ -50,19 +61,26 @@ public Answer fileUploading(@RequestParam("file") MultipartFile multipartFile) {
5061
multipartFile.transferTo(file);
5162
log.info("File destination path: {}", file.getAbsolutePath());
5263
String convertedText = pdfConvertorService.convert(file.getAbsolutePath());
53-
String summaryText = ociGenAIService.summaryText(convertedText, summarizationModelId);
64+
String textEscaped = HtmlUtils.htmlEscape(convertedText);
65+
Interaction interaction = new Interaction();
66+
interaction.setType(InteractionType.SUMMARY_FILE);
67+
interaction.setConversationId(conversationId);
68+
interaction.setDatetimeRequest(new Date());
69+
interaction.setModelId(summarizationModelId);
70+
interaction.setRequest(textEscaped);
71+
Interaction saved = interactionRepository.save(interaction);
72+
String summaryText = ociGenAIService.summaryText(textEscaped, summarizationModelId);
73+
saved.setDatetimeResponse(new Date());
74+
saved.setResponse(summaryText);
75+
interactionRepository.save(saved);
5476
log.info("Summary text: {}(...)", summaryText.substring(0, 40));
5577
Answer answer = new Answer(summaryText, "");
5678
return answer;
5779
} catch (MaxUploadSizeExceededException maxUploadSizeExceededException) {
5880
log.error(maxUploadSizeExceededException.getMessage());
5981
throw new RuntimeException(maxUploadSizeExceededException);
6082
} catch (BmcException exception) {
61-
log.error("Message: {}", exception.getMessage());
62-
log.error("Original Message: {}", exception.getOriginalMessage());
6383
log.error("Unmodified Message: {}", exception.getUnmodifiedMessage());
64-
log.error("Service Details: {}", exception.getServiceDetails());
65-
log.error("Status Code: {}", exception.getStatusCode());
6684
String unmodifiedMessage = exception.getUnmodifiedMessage();
6785
int statusCode = exception.getStatusCode();
6886
String errorMessage = statusCode + " " + unmodifiedMessage;

backend/src/main/java/dev/victormartin/oci/genai/backend/backend/controller/PromptController.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.oracle.bmc.model.BmcException;
44
import dev.victormartin.oci.genai.backend.backend.InvalidPromptRequest;
5+
import dev.victormartin.oci.genai.backend.backend.data.InteractionType;
56
import dev.victormartin.oci.genai.backend.backend.service.OCIGenAIService;
67
import dev.victormartin.oci.genai.backend.backend.dao.Answer;
78
import dev.victormartin.oci.genai.backend.backend.dao.Prompt;
@@ -44,6 +45,7 @@ public Answer handlePrompt(Prompt prompt) {
4445
logger.info("Prompt " + promptEscaped + " received, on model " + prompt.modelId() + " but using hardcoded one" +
4546
" " + hardcodedChatModelId);
4647
Interaction interaction = new Interaction();
48+
interaction.setType(InteractionType.CHAT);
4749
interaction.setConversationId(prompt.conversationId());
4850
interaction.setDatetimeRequest(new Date());
4951
interaction.setModelId(hardcodedChatModelId);
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package dev.victormartin.oci.genai.backend.backend.controller;
2+
3+
import com.oracle.bmc.model.BmcException;
4+
import dev.victormartin.oci.genai.backend.backend.dao.Answer;
5+
import dev.victormartin.oci.genai.backend.backend.dao.SummaryRequest;
6+
import dev.victormartin.oci.genai.backend.backend.data.Interaction;
7+
import dev.victormartin.oci.genai.backend.backend.data.InteractionRepository;
8+
import dev.victormartin.oci.genai.backend.backend.data.InteractionType;
9+
import dev.victormartin.oci.genai.backend.backend.service.OCIGenAIService;
10+
import org.slf4j.Logger;
11+
import org.slf4j.LoggerFactory;
12+
import org.springframework.beans.factory.annotation.Autowired;
13+
import org.springframework.beans.factory.annotation.Value;
14+
import org.springframework.web.bind.annotation.PostMapping;
15+
import org.springframework.web.bind.annotation.RequestBody;
16+
import org.springframework.web.bind.annotation.RequestHeader;
17+
import org.springframework.web.bind.annotation.RestController;
18+
import org.springframework.web.util.HtmlUtils;
19+
20+
import java.util.Date;
21+
22+
@RestController
23+
public class SummaryController {
24+
Logger logger = LoggerFactory.getLogger(SummaryController.class);
25+
26+
@Value("${genai.summarization_model_id}")
27+
String summarizationModelId;
28+
29+
@Autowired
30+
OCIGenAIService ociGenAIService;
31+
32+
@Autowired
33+
private InteractionRepository interactionRepository;
34+
35+
@PostMapping("/api/genai/summary")
36+
public Answer postSummaryText(@RequestBody SummaryRequest summaryRequest,
37+
@RequestHeader("conversationID") String conversationId,
38+
@RequestHeader("modelId") String modelId) {
39+
logger.info("postSummaryText()");
40+
String contentEscaped = HtmlUtils.htmlEscape(summaryRequest.content());
41+
logger.info("contentEscaped: {}...", contentEscaped.substring(0, 50));
42+
Interaction interaction = new Interaction();
43+
interaction.setType(InteractionType.SUMMARY_TEXT);
44+
interaction.setConversationId(conversationId);
45+
interaction.setDatetimeRequest(new Date());
46+
interaction.setModelId(summarizationModelId);
47+
interaction.setRequest(contentEscaped);
48+
Interaction saved = interactionRepository.save(interaction);
49+
try {
50+
String summaryText = ociGenAIService.summaryText(contentEscaped, summarizationModelId);
51+
saved.setDatetimeResponse(new Date());
52+
saved.setResponse(summaryText);
53+
interactionRepository.save(saved);
54+
logger.info("summaryText: {}...", summaryText.substring(0, 50));
55+
Answer answer = new Answer();
56+
answer.setContent(summaryText);
57+
answer.setErrorMessage("");
58+
return answer;
59+
} catch (BmcException e) {
60+
String unmodifiedMessage = e.getUnmodifiedMessage();
61+
int statusCode = e.getStatusCode();
62+
String errorMessage = statusCode + " " + unmodifiedMessage;
63+
logger.error(errorMessage);
64+
saved.setErrorMessage(errorMessage);
65+
interactionRepository.save(saved);
66+
Answer answer = new Answer("", errorMessage);
67+
return answer;
68+
} catch (Exception e) {
69+
String errorMessage = e.getLocalizedMessage();
70+
logger.error(errorMessage);
71+
saved.setErrorMessage(errorMessage);
72+
interactionRepository.save(saved);
73+
Answer answer = new Answer("", errorMessage);
74+
return answer;
75+
}
76+
}
77+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package dev.victormartin.oci.genai.backend.backend.dao;
2+
3+
public record SummaryRequest(String content) {
4+
}

backend/src/main/java/dev/victormartin/oci/genai/backend/backend/data/Interaction.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ public class Interaction {
1313

1414
String conversationId;
1515

16+
@Enumerated(EnumType.STRING)
17+
InteractionType type;
18+
1619
@Temporal(TemporalType.DATE)
1720
Date datetimeRequest;
1821

@@ -41,12 +44,12 @@ public boolean equals(Object o) {
4144
if (this == o) return true;
4245
if (o == null || getClass() != o.getClass()) return false;
4346
Interaction that = (Interaction) o;
44-
return Objects.equals(id, that.id) && Objects.equals(conversationId, that.conversationId) && Objects.equals(datetimeRequest, that.datetimeRequest) && Objects.equals(modelId, that.modelId) && Objects.equals(request, that.request) && Objects.equals(datetimeResponse, that.datetimeResponse) && Objects.equals(response, that.response) && Objects.equals(errorMessage, that.errorMessage);
47+
return Objects.equals(id, that.id) && Objects.equals(conversationId, that.conversationId) && type == that.type && Objects.equals(datetimeRequest, that.datetimeRequest) && Objects.equals(modelId, that.modelId) && Objects.equals(request, that.request) && Objects.equals(datetimeResponse, that.datetimeResponse) && Objects.equals(response, that.response) && Objects.equals(errorMessage, that.errorMessage);
4548
}
4649

4750
@Override
4851
public int hashCode() {
49-
return Objects.hash(id, conversationId, datetimeRequest, modelId, request, datetimeResponse, response, errorMessage);
52+
return Objects.hash(id, conversationId, type, datetimeRequest, modelId, request, datetimeResponse, response, errorMessage);
5053
}
5154

5255
public Long getId() {
@@ -61,6 +64,14 @@ public void setConversationId(String conversationId) {
6164
this.conversationId = conversationId;
6265
}
6366

67+
public InteractionType getType() {
68+
return type;
69+
}
70+
71+
public void setType(InteractionType type) {
72+
this.type = type;
73+
}
74+
6475
public Date getDatetimeRequest() {
6576
return datetimeRequest;
6677
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package dev.victormartin.oci.genai.backend.backend.data;
2+
3+
public enum InteractionType {
4+
CHAT, SUMMARY_FILE, SUMMARY_TEXT
5+
}

deploy/terraform/.terraform.lock.hcl

Lines changed: 55 additions & 55 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

web/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "web",
33
"private": true,
4-
"version": "0.0.3",
4+
"version": "0.0.4",
55
"type": "module",
66
"scripts": {
77
"dev": "vite",
@@ -33,4 +33,4 @@
3333
"eslint-plugin-react-refresh": "^0.4.5",
3434
"vite": "^5.0.13"
3535
}
36-
}
36+
}

0 commit comments

Comments
 (0)