From 4931daee970dfbfc9621c4e31e34841f12ab752b Mon Sep 17 00:00:00 2001 From: Raja Kolli Date: Thu, 28 Mar 2024 10:48:11 +0000 Subject: [PATCH] feat : using tika document reader --- rag-springai-openai-llm/pom.xml | 2 +- .../llmragwithspringai/config/AppConfig.java | 16 ++++++---------- .../main/resources/Rohit_Gurunath_Sharma.docx | Bin 0 -> 8773 bytes .../main/resources/Rohit_Gurunath_Sharma.pdf | Bin 56577 -> 0 bytes .../LlmRagWithSpringAiApplicationIntTest.java | 17 +++++++++++++---- 5 files changed, 20 insertions(+), 15 deletions(-) create mode 100644 rag-springai-openai-llm/src/main/resources/Rohit_Gurunath_Sharma.docx delete mode 100644 rag-springai-openai-llm/src/main/resources/Rohit_Gurunath_Sharma.pdf diff --git a/rag-springai-openai-llm/pom.xml b/rag-springai-openai-llm/pom.xml index 4f04292..87c257d 100644 --- a/rag-springai-openai-llm/pom.xml +++ b/rag-springai-openai-llm/pom.xml @@ -43,7 +43,7 @@ org.springframework.ai - spring-ai-pdf-document-reader + spring-ai-tika-document-reader org.springframework.retry diff --git a/rag-springai-openai-llm/src/main/java/com/learning/ai/llmragwithspringai/config/AppConfig.java b/rag-springai-openai-llm/src/main/java/com/learning/ai/llmragwithspringai/config/AppConfig.java index 4d459fb..6ea1760 100644 --- a/rag-springai-openai-llm/src/main/java/com/learning/ai/llmragwithspringai/config/AppConfig.java +++ b/rag-springai-openai-llm/src/main/java/com/learning/ai/llmragwithspringai/config/AppConfig.java @@ -3,8 +3,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ai.reader.ExtractedTextFormatter; -import org.springframework.ai.reader.pdf.PagePdfDocumentReader; -import org.springframework.ai.reader.pdf.config.PdfDocumentReaderConfig; +import org.springframework.ai.reader.tika.TikaDocumentReader; import org.springframework.ai.transformer.splitter.TokenTextSplitter; import org.springframework.ai.vectorstore.VectorStore; import org.springframework.beans.factory.annotation.Value; @@ -18,7 +17,7 @@ public class AppConfig { private static final Logger log = LoggerFactory.getLogger(AppConfig.class); - @Value("classpath:Rohit_Gurunath_Sharma.pdf") + @Value("classpath:Rohit_Gurunath_Sharma.docx") private Resource resource; @Bean @@ -30,14 +29,11 @@ TokenTextSplitter tokenTextSplitter() { ApplicationRunner runner(VectorStore vectorStore, JdbcTemplate template, TokenTextSplitter tokenTextSplitter) { return args -> { log.info("Loading file(s) as Documents"); - PdfDocumentReaderConfig config = PdfDocumentReaderConfig.builder() - .withPageExtractedTextFormatter(new ExtractedTextFormatter.Builder() - .withNumberOfBottomTextLinesToDelete(3) - .withNumberOfTopPagesToSkipBeforeDelete(1) - .build()) - .withPagesPerDocument(1) + ExtractedTextFormatter textFormatter = ExtractedTextFormatter.builder() + .withNumberOfBottomTextLinesToDelete(3) + .withNumberOfTopPagesToSkipBeforeDelete(1) .build(); - PagePdfDocumentReader pagePdfDocumentReader = new PagePdfDocumentReader(resource, config); + TikaDocumentReader pagePdfDocumentReader = new TikaDocumentReader(resource, textFormatter); template.update("delete from vector_store"); vectorStore.accept(tokenTextSplitter.apply(pagePdfDocumentReader.get())); log.info("Loaded document to database."); diff --git a/rag-springai-openai-llm/src/main/resources/Rohit_Gurunath_Sharma.docx b/rag-springai-openai-llm/src/main/resources/Rohit_Gurunath_Sharma.docx new file mode 100644 index 0000000000000000000000000000000000000000..4bdba1a8c693ff7ab909424369bdfb412623b8bc GIT binary patch literal 8773 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 Lw9I`;&i|eB-}k%cK4WZEja^l1 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 E0Jx$S{{R30 diff --git a/rag-springai-openai-llm/src/test/java/com/learning/ai/llmragwithspringai/LlmRagWithSpringAiApplicationIntTest.java b/rag-springai-openai-llm/src/test/java/com/learning/ai/llmragwithspringai/LlmRagWithSpringAiApplicationIntTest.java index 16b62ae..55d1977 100644 --- a/rag-springai-openai-llm/src/test/java/com/learning/ai/llmragwithspringai/LlmRagWithSpringAiApplicationIntTest.java +++ b/rag-springai-openai-llm/src/test/java/com/learning/ai/llmragwithspringai/LlmRagWithSpringAiApplicationIntTest.java @@ -1,9 +1,7 @@ package com.learning.ai.llmragwithspringai; import static io.restassured.RestAssured.given; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.*; import com.learning.ai.llmragwithspringai.config.AbstractIntegrationTest; import io.restassured.RestAssured; @@ -30,7 +28,18 @@ void testRag() { .get("/api/ai/chat") .then() .statusCode(200) - .body("response", containsString("2007 T20 World Cup and the 2013 ICC Champions Trophy")); + .body("response", containsString("2007 T20 World Cup")) + .body("response", containsString("2013 ICC Champions Trophy")); + } + + @Test + void testRag2() { + given().param("question", "Who is successful IPL captain") + .when() + .get("/api/ai/chat") + .then() + .statusCode(200) + .body("response", containsString("Rohit Sharma")); } @Test