From 1cb87b0294eedee074ae96c69e0ce5418e653f87 Mon Sep 17 00:00:00 2001 From: Adam Kucera <120064571+bitgama5@users.noreply.github.com> Date: Tue, 11 Jul 2023 12:09:48 -0700 Subject: [PATCH] Add PDFDocument.java --- .../functional/xef/java/auto/PDFDocument.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 examples/java/src/main/java/com/xebia/functional/xef/java/auto/PDFDocument.java diff --git a/examples/java/src/main/java/com/xebia/functional/xef/java/auto/PDFDocument.java b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/PDFDocument.java new file mode 100644 index 000000000..beed96909 --- /dev/null +++ b/examples/java/src/main/java/com/xebia/functional/xef/java/auto/PDFDocument.java @@ -0,0 +1,53 @@ +package com.xebia.functional.xef.java.auto; + +import com.xebia.functional.tokenizer.ModelType; +import com.xebia.functional.xef.textsplitters.TextSplitter; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +import static com.xebia.functional.xef.textsplitters.TokenTextSplitterKt.TokenTextSplitter; + +public class PDFDocument { + + public static class AIResponse { + public String answer; + public String source; + } + + private static final String pdfUrl = "https://people.cs.ksu.edu/~schmidt/705a/Scala/Programming-in-Scala.pdf"; + private static final BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in)); + + private static CompletableFuture askQuestion(AIScope scope) { + System.out.println("Enter your question: "); + + String line = readLine(); + if (line == null) { + return CompletableFuture.completedFuture(null); + } else { + scope.prompt(line, AIResponse.class) + .thenAccept((aiRes) -> System.out.println(aiRes.answer + "\n---\n" + + aiRes.source + "\n---\n")); + + return askQuestion(scope); + } + } + + public static void main(String[] args) throws ExecutionException, InterruptedException { + TextSplitter textSplitter = TokenTextSplitter(ModelType.getDEFAULT_SPLITTER_MODEL(), 100, 50); + try (AIScope scope = new AIScope()) { + scope.contextScope(scope.pdf(pdfUrl, textSplitter).get(), PDFDocument::askQuestion).get(); + } + } + + private static String readLine() { + try { + return sysin.readLine(); + } catch (IOException e) { + return null; + } + } +}