diff --git a/code/ai/demo.py b/code/ai/demo.py
deleted file mode 100644
index f8940362..00000000
--- a/code/ai/demo.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Please install OpenAI SDK first: `pip3 install openai`
-import os
-from openai import OpenAI
-
-client = OpenAI(
- api_key=os.environ.get('DEEPSEEK_API_KEY'),
- base_url="https://api.deepseek.com")
-
-response = client.chat.completions.create(
- model="deepseek-v4-pro",
- messages=[
- {"role": "system", "content": "You are a helpful assistant"},
- {"role": "user", "content": "Hello"},
- ],
- stream=False,
- reasoning_effort="high",
- extra_body={"thinking": {"type": "enabled"}}
-)
-
-print(response.choices[0].message.content)
\ No newline at end of file
diff --git a/code/ai/test/.gitignore b/code/ai/test/.gitignore
deleted file mode 100644
index 480bdf52..00000000
--- a/code/ai/test/.gitignore
+++ /dev/null
@@ -1,39 +0,0 @@
-target/
-!.mvn/wrapper/maven-wrapper.jar
-!**/src/main/**/target/
-!**/src/test/**/target/
-.kotlin
-
-### IntelliJ IDEA ###
-.idea/modules.xml
-.idea/jarRepositories.xml
-.idea/compiler.xml
-.idea/libraries/
-*.iws
-*.iml
-*.ipr
-
-### Eclipse ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-
-### NetBeans ###
-/nbproject/private/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/
-build/
-!**/src/main/**/build/
-!**/src/test/**/build/
-
-### VS Code ###
-.vscode/
-
-### Mac OS ###
-.DS_Store
\ No newline at end of file
diff --git a/code/ai/test/.idea/.gitignore b/code/ai/test/.idea/.gitignore
deleted file mode 100644
index 30cf57ed..00000000
--- a/code/ai/test/.idea/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Ignored default folder with query files
-/queries/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/code/ai/test/.idea/encodings.xml b/code/ai/test/.idea/encodings.xml
deleted file mode 100644
index aa00ffab..00000000
--- a/code/ai/test/.idea/encodings.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/code/ai/test/.idea/misc.xml b/code/ai/test/.idea/misc.xml
deleted file mode 100644
index 7ace0970..00000000
--- a/code/ai/test/.idea/misc.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/code/ai/test/.idea/vcs.xml b/code/ai/test/.idea/vcs.xml
deleted file mode 100644
index c2365ab1..00000000
--- a/code/ai/test/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/code/ai/test/.m2/repository/org/springframework/boot/spring-boot-starter-parent/4.0.6/spring-boot-starter-parent-4.0.6.pom.lastUpdated b/code/ai/test/.m2/repository/org/springframework/boot/spring-boot-starter-parent/4.0.6/spring-boot-starter-parent-4.0.6.pom.lastUpdated
deleted file mode 100644
index 614545f9..00000000
--- a/code/ai/test/.m2/repository/org/springframework/boot/spring-boot-starter-parent/4.0.6/spring-boot-starter-parent-4.0.6.pom.lastUpdated
+++ /dev/null
@@ -1,4 +0,0 @@
-#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
-#Sun Jun 07 19:41:40 CST 2026
-@default-aliyunmaven-https\://maven.aliyun.com/repository/central/.lastUpdated=1780832500060
-https\://maven.aliyun.com/repository/central/.error=Could not transfer artifact org.springframework.boot\:spring-boot-starter-parent\:pom\:4.0.6 from/to aliyunmaven (https\://maven.aliyun.com/repository/central)\: Permission denied\: getsockopt
diff --git a/code/ai/test/pom.xml b/code/ai/test/pom.xml
deleted file mode 100644
index 64760a5e..00000000
--- a/code/ai/test/pom.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
- 4.0.0
-
-
- org.springframework.boot
- spring-boot-starter-parent
- 4.0.6
-
-
-
- org.example
- springboot4-api
- 0.0.1-SNAPSHOT
- springboot4-api
- Spring Boot 4 REST API project
-
-
- 21
- UTF-8
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-starter-webmvc
-
-
-
-
- org.springframework.boot
- spring-boot-starter-validation
-
-
-
-
- com.squareup.okhttp3
- okhttp
- 5.1.0
-
-
-
-
- com.fasterxml.jackson.core
- jackson-databind
-
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
- -Xshare:off -javaagent:${settings.localRepository}/org/mockito/mockito-core/${mockito.version}/mockito-core-${mockito.version}.jar
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
-
-
diff --git a/code/ai/test/src/main/java/org/example/Main.java b/code/ai/test/src/main/java/org/example/Main.java
deleted file mode 100644
index 6a4bd6d1..00000000
--- a/code/ai/test/src/main/java/org/example/Main.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package org.example;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.springframework.http.*;
-import org.springframework.web.client.RestTemplate;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.nio.file.Files;
-import java.util.Base64;
-
-public class Main {
-
- public static void main(String[] args) throws Exception {
-
- String apiUrl = "http://localhost:8866/layout-parsing";
- String pdfPath = "D:/workspace/bgd/bgd-01.pdf";
-
- // 读取PDF
- File file = new File(pdfPath);
- byte[] bytes = Files.readAllBytes(file.toPath());
-
- // Base64编码
- String base64 = Base64.getEncoder().encodeToString(bytes);
-
- // JSON请求体
- ObjectMapper mapper = new ObjectMapper();
-
- ObjectNode payload = mapper.createObjectNode();
- payload.put("file", base64);
- payload.put("fileType", 0);
-
- // 打印请求大小
- System.out.println("Base64 Length: " + base64.length());
-
- RestTemplate restTemplate = new RestTemplate();
-
- HttpHeaders headers = new HttpHeaders();
- headers.setContentType(MediaType.APPLICATION_JSON);
-
- HttpEntity request =
- new HttpEntity<>(payload.toString(), headers);
-
- ResponseEntity response =
- restTemplate.exchange(
- apiUrl,
- HttpMethod.POST,
- request,
- String.class
- );
-
- System.out.println("HTTP Status: "
- + response.getStatusCode());
-
- String responseBody = response.getBody();
-
- System.out.println("Response:");
- System.out.println(responseBody);
-
- // 解析返回结果
- JsonNode root = mapper.readTree(responseBody);
-
- JsonNode result = root.path("result");
-
- JsonNode layoutParsingResults =
- result.path("layoutParsingResults");
-
- for (int i = 0; i < layoutParsingResults.size(); i++) {
-
- JsonNode item = layoutParsingResults.get(i);
-
- System.out.println(
- "\n========== Page " + i + " =========="
- );
-
- JsonNode prunedResult =
- item.path("prunedResult");
-
- System.out.println(
- mapper.writerWithDefaultPrettyPrinter()
- .writeValueAsString(prunedResult)
- );
-
- JsonNode outputImages =
- item.path("outputImages");
-
- outputImages.fieldNames()
- .forEachRemaining(imgName -> {
-
- try {
-
- String imgBase64 =
- outputImages.get(imgName)
- .asText();
-
- byte[] imgBytes =
- Base64.getDecoder()
- .decode(imgBase64);
-
- String imgPath =
- imgName + "_" + i + ".jpg";
-
- try (FileOutputStream fos =
- new FileOutputStream(imgPath)) {
-
- fos.write(imgBytes);
- }
-
- System.out.println(
- "Saved image: " + imgPath
- );
-
- } catch (Exception e) {
-
- System.err.println(
- "Save image failed: "
- + e.getMessage()
- );
- }
- });
- }
- }
-}
\ No newline at end of file
diff --git a/code/ai/test/src/main/java/org/example/Springboot4ApiApplication.java b/code/ai/test/src/main/java/org/example/Springboot4ApiApplication.java
deleted file mode 100644
index a81e0669..00000000
--- a/code/ai/test/src/main/java/org/example/Springboot4ApiApplication.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.example;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class Springboot4ApiApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(Springboot4ApiApplication.class, args);
- }
-}
diff --git a/code/ai/test/src/main/java/org/example/api/HealthController.java b/code/ai/test/src/main/java/org/example/api/HealthController.java
deleted file mode 100644
index c3e821e2..00000000
--- a/code/ai/test/src/main/java/org/example/api/HealthController.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.example.api;
-
-import java.time.Instant;
-
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/api")
-public class HealthController {
-
- @GetMapping("/health")
- public HealthResponse health() {
- return new HealthResponse("UP", Instant.now());
- }
-
- public record HealthResponse(String status, Instant timestamp) {
- }
-}
diff --git a/code/ai/test/src/main/java/org/example/api/layout/LayoutParsingController.java b/code/ai/test/src/main/java/org/example/api/layout/LayoutParsingController.java
deleted file mode 100644
index 35909649..00000000
--- a/code/ai/test/src/main/java/org/example/api/layout/LayoutParsingController.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.example.api.layout;
-
-import jakarta.validation.Valid;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/api/layout-parsing")
-public class LayoutParsingController {
-
- private final LayoutParsingUseCase layoutParsingUseCase;
- private final String defaultFilePath;
-
- public LayoutParsingController(
- LayoutParsingUseCase layoutParsingUseCase,
- @Value("${layout.parsing.default-file-path}") String defaultFilePath
- ) {
- this.layoutParsingUseCase = layoutParsingUseCase;
- this.defaultFilePath = defaultFilePath;
- }
-
- @GetMapping
- public LayoutParsingResponse parseDefault() {
- LayoutParsingRequest request = LayoutParsingRequest.pdf(defaultFilePath);
- return layoutParsingUseCase.parse(request);
- }
-
- @PostMapping
- public LayoutParsingResponse parse(@Valid @RequestBody LayoutParsingRequest request) {
- return layoutParsingUseCase.parse(request);
- }
-}
diff --git a/code/ai/test/src/main/java/org/example/api/layout/LayoutParsingRequest.java b/code/ai/test/src/main/java/org/example/api/layout/LayoutParsingRequest.java
deleted file mode 100644
index f3a9354c..00000000
--- a/code/ai/test/src/main/java/org/example/api/layout/LayoutParsingRequest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.example.api.layout;
-
-import java.nio.file.Path;
-import java.util.List;
-
-public record LayoutParsingRequest(
- String filePath,
- String imagePath,
- Integer fileType,
- String outputDirectory,
- Boolean useDocOrientationClassify,
- Boolean useDocUnwarping,
- Boolean useTextlineOrientation,
- Boolean useSealRecognition,
- Boolean useTableRecognition,
- Boolean useFormulaRecognition,
- Boolean useChartRecognition,
- Boolean useRegionDetection,
- Boolean formatBlockContent,
- Boolean returnMarkdownImages,
- Boolean visualize,
- List outputFormats
-) {
-
- public static LayoutParsingRequest pdf(String filePath) {
- return new LayoutParsingRequest(
- filePath,
- null,
- 0,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- true,
- false,
- false,
- null
- );
- }
-
- public String resolvedFilePath() {
- if (hasText(filePath)) {
- return filePath;
- }
- if (hasText(imagePath)) {
- return imagePath;
- }
- throw new IllegalArgumentException("filePath is required");
- }
-
- public int resolvedFileType() {
- if (fileType != null) {
- return fileType;
- }
-
- String fileName = Path.of(resolvedFilePath()).getFileName().toString().toLowerCase();
- return fileName.endsWith(".pdf") ? 0 : 1;
- }
-
- private boolean hasText(String value) {
- return value != null && !value.isBlank();
- }
-}
diff --git a/code/ai/test/src/main/java/org/example/api/layout/LayoutParsingResponse.java b/code/ai/test/src/main/java/org/example/api/layout/LayoutParsingResponse.java
deleted file mode 100644
index 9ddb752f..00000000
--- a/code/ai/test/src/main/java/org/example/api/layout/LayoutParsingResponse.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.example.api.layout;
-
-import java.util.List;
-
-import tools.jackson.databind.JsonNode;
-
-public record LayoutParsingResponse(
- String filePath,
- int fileType,
- List- items
-) {
-
- public record Item(
- JsonNode prunedResult,
- String recognizedText,
- String markdownText,
- String savedPrunedResult,
- String savedMarkdown,
- String savedText,
- List savedImages
- ) {
- }
-}
diff --git a/code/ai/test/src/main/java/org/example/api/layout/LayoutParsingService.java b/code/ai/test/src/main/java/org/example/api/layout/LayoutParsingService.java
deleted file mode 100644
index 9b65c6c7..00000000
--- a/code/ai/test/src/main/java/org/example/api/layout/LayoutParsingService.java
+++ /dev/null
@@ -1,216 +0,0 @@
-package org.example.api.layout;
-
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Base64;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map.Entry;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.MediaType;
-import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
-import org.springframework.web.client.RestClient;
-import tools.jackson.databind.JsonNode;
-import tools.jackson.databind.ObjectMapper;
-import tools.jackson.databind.node.ObjectNode;
-
-@Service
-public class LayoutParsingService implements LayoutParsingUseCase {
-
- private final RestClient restClient;
- private final ObjectMapper objectMapper;
- private final String apiUrl;
- private final Path defaultOutputDirectory;
-
- public LayoutParsingService(
- ObjectMapper objectMapper,
- @Value("${layout.parsing.api-url}") String apiUrl,
- @Value("${layout.parsing.output-directory:output}") String defaultOutputDirectory
- ) {
- this.restClient = RestClient.create();
- this.objectMapper = objectMapper;
- this.apiUrl = apiUrl;
- this.defaultOutputDirectory = Path.of(defaultOutputDirectory);
- }
-
- @Override
- public LayoutParsingResponse parse(LayoutParsingRequest request) {
- Path filePath = Path.of(request.resolvedFilePath()).toAbsolutePath().normalize();
- if (!Files.isRegularFile(filePath)) {
- throw new IllegalArgumentException("File does not exist: " + filePath);
- }
-
- JsonNode root = callLayoutParsingApi(filePath, request);
- JsonNode layoutParsingResults = root.path("result").path("layoutParsingResults");
- if (!layoutParsingResults.isArray()) {
- throw new IllegalStateException("Invalid layout parsing response: result.layoutParsingResults is missing");
- }
-
- Path outputDirectory = resolveOutputDirectory(request.outputDirectory());
- List items = new ArrayList<>();
- System.out.println("Layout parsing file: " + filePath);
- System.out.println("Layout parsing result count: " + layoutParsingResults.size());
- for (int i = 0; i < layoutParsingResults.size(); i++) {
- JsonNode item = layoutParsingResults.get(i);
- JsonNode prunedResult = item.path("prunedResult");
- String markdownText = item.path("markdown").path("text").asText();
- String recognizedText = extractRecognizedText(prunedResult);
- String savedPrunedResult = savePrunedResult(prunedResult, outputDirectory, i);
- String savedMarkdown = saveTextFile(markdownText, outputDirectory, "markdown_" + i + ".md");
- String savedText = saveTextFile(recognizedText, outputDirectory, "recognized_text_" + i + ".txt");
- List savedImages = saveOutputImages(item.path("outputImages"), outputDirectory, i);
- System.out.println("Pruned Result [" + i + "]: " + prunedResult);
- System.out.println("Recognized Text [" + i + "]:");
- System.out.println(recognizedText);
- System.out.println("Markdown Text [" + i + "]:");
- System.out.println(markdownText);
- System.out.println("Saved pruned result: " + savedPrunedResult);
- System.out.println("Saved markdown: " + savedMarkdown);
- System.out.println("Saved text: " + savedText);
- savedImages.forEach(savedImage -> System.out.println("Saved image: " + savedImage));
- items.add(new LayoutParsingResponse.Item(
- prunedResult,
- recognizedText,
- markdownText,
- savedPrunedResult,
- savedMarkdown,
- savedText,
- savedImages
- ));
- }
-
- return new LayoutParsingResponse(filePath.toString(), request.resolvedFileType(), items);
- }
-
- private JsonNode callLayoutParsingApi(Path filePath, LayoutParsingRequest request) {
- try {
- String base64File = Base64.getEncoder().encodeToString(Files.readAllBytes(filePath));
-
- ObjectNode payload = objectMapper.createObjectNode();
- payload.put("file", base64File);
- payload.put("fileType", request.resolvedFileType());
- putIfNotNull(payload, "useDocOrientationClassify", request.useDocOrientationClassify());
- putIfNotNull(payload, "useDocUnwarping", request.useDocUnwarping());
- putIfNotNull(payload, "useTextlineOrientation", request.useTextlineOrientation());
- putIfNotNull(payload, "useSealRecognition", request.useSealRecognition());
- putIfNotNull(payload, "useTableRecognition", request.useTableRecognition());
- putIfNotNull(payload, "useFormulaRecognition", request.useFormulaRecognition());
- putIfNotNull(payload, "useChartRecognition", request.useChartRecognition());
- putIfNotNull(payload, "useRegionDetection", request.useRegionDetection());
- putIfNotNull(payload, "formatBlockContent", request.formatBlockContent());
- putIfNotNull(payload, "returnMarkdownImages", request.returnMarkdownImages());
- putIfNotNull(payload, "visualize", request.visualize());
- if (request.outputFormats() != null && !request.outputFormats().isEmpty()) {
- payload.set("outputFormats", objectMapper.valueToTree(request.outputFormats()));
- }
-
- return restClient.post()
- .uri(apiUrl)
- .contentType(MediaType.APPLICATION_JSON)
- .body(payload)
- .retrieve()
- .body(JsonNode.class);
- } catch (IOException e) {
- throw new IllegalStateException("Failed to read file: " + filePath, e);
- }
- }
-
- private void putIfNotNull(ObjectNode payload, String name, Boolean value) {
- if (value != null) {
- payload.put(name, value);
- }
- }
-
- private Path resolveOutputDirectory(String outputDirectory) {
- Path directory = StringUtils.hasText(outputDirectory)
- ? Path.of(outputDirectory)
- : defaultOutputDirectory;
- try {
- Files.createDirectories(directory);
- return directory.toAbsolutePath().normalize();
- } catch (IOException e) {
- throw new IllegalStateException("Failed to create output directory: " + directory, e);
- }
- }
-
- private List saveOutputImages(JsonNode outputImages, Path outputDirectory, int resultIndex) {
- List savedImages = new ArrayList<>();
- if (!outputImages.isObject()) {
- return savedImages;
- }
-
- Iterator> fields = outputImages.properties().iterator();
- while (fields.hasNext()) {
- Entry field = fields.next();
- String imageName = sanitizeFileName(field.getKey());
- Path outputPath = outputDirectory.resolve(imageName + "_" + resultIndex + ".jpg");
- try {
- byte[] imageBytes = Base64.getDecoder().decode(field.getValue().asText());
- Files.write(outputPath, imageBytes);
- savedImages.add(outputPath.toString());
- } catch (IllegalArgumentException | IOException e) {
- throw new IllegalStateException("Failed to save output image: " + outputPath, e);
- }
- }
- return savedImages;
- }
-
- private String savePrunedResult(JsonNode prunedResult, Path outputDirectory, int resultIndex) {
- Path outputPath = outputDirectory.resolve("pruned_result_" + resultIndex + ".json");
- try {
- Files.writeString(outputPath, prunedResult.toString());
- return outputPath.toString();
- } catch (IOException e) {
- throw new IllegalStateException("Failed to save pruned result: " + outputPath, e);
- }
- }
-
- private String saveTextFile(String content, Path outputDirectory, String fileName) {
- if (!StringUtils.hasText(content)) {
- return null;
- }
-
- Path outputPath = outputDirectory.resolve(fileName);
- try {
- Files.writeString(outputPath, content);
- return outputPath.toString();
- } catch (IOException e) {
- throw new IllegalStateException("Failed to save text file: " + outputPath, e);
- }
- }
-
- private String extractRecognizedText(JsonNode prunedResult) {
- List lines = new ArrayList<>();
-
- JsonNode parsingResults = prunedResult.path("parsing_res_list");
- if (parsingResults.isArray()) {
- for (JsonNode block : parsingResults) {
- String blockContent = block.path("block_content").asText();
- if (StringUtils.hasText(blockContent)) {
- lines.add(blockContent);
- }
- }
- }
-
- JsonNode recognizedTexts = prunedResult.path("overall_ocr_res").path("rec_texts");
- if (lines.isEmpty() && recognizedTexts.isArray()) {
- for (JsonNode text : recognizedTexts) {
- String value = text.asText();
- if (StringUtils.hasText(value)) {
- lines.add(value);
- }
- }
- }
-
- return String.join(System.lineSeparator(), lines);
- }
-
- private String sanitizeFileName(String value) {
- String sanitized = value.replaceAll("[^a-zA-Z0-9._-]", "_");
- return StringUtils.hasText(sanitized) ? sanitized : "image";
- }
-}
diff --git a/code/ai/test/src/main/java/org/example/api/layout/LayoutParsingUseCase.java b/code/ai/test/src/main/java/org/example/api/layout/LayoutParsingUseCase.java
deleted file mode 100644
index d96482b9..00000000
--- a/code/ai/test/src/main/java/org/example/api/layout/LayoutParsingUseCase.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.example.api.layout;
-
-public interface LayoutParsingUseCase {
-
- LayoutParsingResponse parse(LayoutParsingRequest request);
-}
diff --git a/code/ai/test/src/main/java/org/example/test.http b/code/ai/test/src/main/java/org/example/test.http
deleted file mode 100644
index b3d873ee..00000000
--- a/code/ai/test/src/main/java/org/example/test.http
+++ /dev/null
@@ -1,9 +0,0 @@
-### Send POST request with json body
-POST http://localhost:8866/layout-parsing
-Content-Type: application/json
-
-{
- "file": "D:\\workspace\\bgd\\bgd-01.pdf",
- "fileType": 0
-}
-
diff --git a/code/ai/test/src/main/resources/application.yml b/code/ai/test/src/main/resources/application.yml
deleted file mode 100644
index da73f664..00000000
--- a/code/ai/test/src/main/resources/application.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-spring:
- application:
- name: springboot4-api
-
-server:
- port: 8080
-
-layout:
- parsing:
- api-url: http://localhost:8866/layout-parsing
- default-file-path: D:/workspace/bgd/bgd-01.pdf
- output-directory: output
diff --git a/code/ai/test/src/test/java/org/example/Springboot4ApiApplicationTests.java b/code/ai/test/src/test/java/org/example/Springboot4ApiApplicationTests.java
deleted file mode 100644
index 14ea63b8..00000000
--- a/code/ai/test/src/test/java/org/example/Springboot4ApiApplicationTests.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.example;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class Springboot4ApiApplicationTests {
-
- @Test
- void contextLoads() {
- }
-}
diff --git a/code/ai/test/src/test/java/org/example/api/HealthControllerTests.java b/code/ai/test/src/test/java/org/example/api/HealthControllerTests.java
deleted file mode 100644
index 75d3d078..00000000
--- a/code/ai/test/src/test/java/org/example/api/HealthControllerTests.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.example.api;
-
-import static org.hamcrest.Matchers.is;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.webmvc.test.autoconfigure.WebMvcTest;
-import org.springframework.test.web.servlet.MockMvc;
-
-@WebMvcTest(HealthController.class)
-class HealthControllerTests {
-
- @Autowired
- private MockMvc mockMvc;
-
- @Test
- void healthReturnsUp() throws Exception {
- mockMvc.perform(get("/api/health"))
- .andExpect(status().isOk())
- .andExpect(jsonPath("$.status", is("UP")));
- }
-}
diff --git a/code/ai/test/src/test/java/org/example/api/layout/LayoutParsingControllerTests.java b/code/ai/test/src/test/java/org/example/api/layout/LayoutParsingControllerTests.java
deleted file mode 100644
index 348e87a7..00000000
--- a/code/ai/test/src/test/java/org/example/api/layout/LayoutParsingControllerTests.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.example.api.layout;
-
-import static org.hamcrest.Matchers.is;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
-import java.util.List;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.TestConfiguration;
-import org.springframework.boot.webmvc.test.autoconfigure.WebMvcTest;
-import org.springframework.context.annotation.Bean;
-import org.springframework.http.MediaType;
-import org.springframework.test.web.servlet.MockMvc;
-import tools.jackson.databind.ObjectMapper;
-
-@WebMvcTest(LayoutParsingController.class)
-class LayoutParsingControllerTests {
-
- @Autowired
- private MockMvc mockMvc;
-
- @Autowired
- private ObjectMapper objectMapper;
-
- @Test
- void parseAcceptsLocalPdfPath() throws Exception {
- String request = """
- {
- "filePath": "D:/workspace/bgd/bgd-01.pdf",
- "outputDirectory": "output",
- "returnMarkdownImages": false,
- "visualize": false
- }
- """;
-
- mockMvc.perform(post("/api/layout-parsing")
- .contentType(MediaType.APPLICATION_JSON)
- .content(request))
- .andExpect(status().isOk())
- .andExpect(jsonPath("$.filePath", is("D:/workspace/bgd/bgd-01.pdf")))
- .andExpect(jsonPath("$.fileType", is(0)))
- .andExpect(jsonPath("$.items[0].recognizedText", is("demo text")))
- .andExpect(jsonPath("$.items[0].markdownText", is("# demo")))
- .andExpect(jsonPath("$.items[0].savedPrunedResult", is("output/pruned_result_0.json")))
- .andExpect(jsonPath("$.items[0].savedMarkdown", is("output/markdown_0.md")))
- .andExpect(jsonPath("$.items[0].savedText", is("output/recognized_text_0.txt")))
- .andExpect(jsonPath("$.items[0].savedImages[0]", is("output/table_0.jpg")));
- }
-
- @TestConfiguration
- static class TestConfig {
-
- @Bean
- LayoutParsingUseCase layoutParsingUseCase(ObjectMapper objectMapper) {
- return request -> new LayoutParsingResponse(
- request.resolvedFilePath(),
- request.resolvedFileType(),
- List.of(new LayoutParsingResponse.Item(
- objectMapper.createObjectNode().put("text", "demo"),
- "demo text",
- "# demo",
- "output/pruned_result_0.json",
- "output/markdown_0.md",
- "output/recognized_text_0.txt",
- List.of("output/table_0.jpg")
- ))
- );
- }
- }
-}